Problème exécution programme PASCAL

Fermé
zorg - 12 août 2006 à 04:08
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 12 août 2006 à 04:59
Bonjour !!

J'aimerais votre aide pour un problème étrange en Pascal. Je débute en pascal et j'ai voulu écrire un programme qui convertit les caractères d'une chaîne en majuscules.

Mon programme ressemble à ceci :

program conversion_minuscules_en_majuscules ;

type lettres_min = 'a'..'z' ;

var
	chaine		: string[50] ;
	i			: integer ;
	minuscules	: set of lettres_min ;
	c	 		: char ;
	x			: integer ;
	
BEGIN


writeln ('Entrez votre phrase !') ;
readln (chaine) ;

for i := 1 to length(chaine) do
	begin
	
	if chaine[i] in minuscules then
		begin
		c	:= chaine[i] ;
		x 	:= (ord(c))-32 ;
		c   := chr(x) ;
		chaine[i] := c ;
		end ;
		
	end ;

writeln ('Voici votre nouvelle phrase !') ;
writeln (chaine) ;


readln
END.


Mon astuce principale consiste à retrancher 32 sur la valeur numérique ASCII d'un caractère minuscule, on obtient le caractere majuscule correspondant.

Seulement ... le programme ne détecte aucune erreur et pourtant il ne fonctionne pas DU TOUT, c'est comme si il passe de l'instruction readln (chaine) à l'instruction writeln (chaine) en fin de programme.

Donc j'aimerais comprendre ce qui va pas : (

Merci
A voir également:

2 réponses

Bon en fait je me réponds à moi même ^^

Voici le bon programme en plus simple :

program conversion_minuscules_en_majuscules ;
var
	chaine		: string[50] ;
	i, x		: integer ;
	c	 		: char ;
	
BEGIN

writeln ('Entrez votre phrase !') ;
readln (chaine) ;

for i := 1 to length(chaine) do
	begin
	if (chaine[i]>='a') and (chaine[i]<='z') then
		begin
		c	:= chaine[i] ;
		x 	:= (ord(c))-32 ;
		c   := chr(x) ;
		chaine[i] := c ;
		end ;
	end ;

writeln ('Voici votre nouvelle phrase !') ;
writeln (chaine) ;

readln
END.


Merci !!
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
12 août 2006 à 04:59
Ceci fonctionne
johand@horus:~/src/pascal$ cat toupper.p
program conversion_minuscules_en_majuscules ;
var
   chaine      : string[50] ;
   i	       : integer ;
   c	       : char ;
   x	       : integer ;
	  
function isUpper(c : char) : boolean;
begin
   isUpper := (chaine[i] >='a') and (chaine[i]<='z');
end; 
BEGIN
writeln ('Entrez votre phrase !') ;
readln (chaine) ;

for i := 1 to length(chaine) do
	begin
	
	if isUpper(chaine[i]) then
	begin
		c := chaine[i] ;
		x := (ord(c))-32 ;
		c := chr(x) ;
		chaine[i] := c ;
		end ;
	end ;

writeln ('Voici votre nouvelle phrase !') ;
writeln (chaine) ;
end.
johand@horus:~/src/pascal$ fpc toupper.p
Free Pascal Compiler version 2.0.0 [2005/09/09] for i386
Copyright (c) 1993-2005 by Florian Klaempfl
Target OS: Linux for i386
Compiling toupper.p
Linking toupper
33 Lines compiled, 0.1 sec
johand@horus:~/src/pascal$ ./toupper
Entrez votre phrase !
Hello World !
Voici votre nouvelle phrase !
HELLO WORLD !

Johan
0