Problème exécution programme PASCAL

zorg -  
jisisv Messages postés 3678 Statut Modérateur -
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. 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
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    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