Problème exécution programme PASCAL

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

2 réponses

  1. 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 !!
    1. Modérateur
      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