Problème exécution programme PASCAL

zorg -  
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   -
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

zorg
 
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   Statut Modérateur Dernière intervention   934
 
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