Traduction en pascal

Fermé
alonso cherif Messages postés 3 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 26 novembre 2010 - 25 nov. 2010 à 23:18
alonso cherif Messages postés 3 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 26 novembre 2010 - 26 nov. 2010 à 23:26
Bonsoir
j'ai un exercice de programmation en pascal : saisir des réels dans tableau de taille entre [2..20] calculer leur somme , afficher le maximum et le minimum , et faire la normalisation du tableaux . Tous ça avec des procédure et des fonction
j'ai fait un essai je les compiler il est juste sans faute mais il na pas bien fonction. si vous pouvait m'aidé voici mon essai
ET MERCI D'AVANCE :)
program TEST;
uses wincrt;
type
tab=array [2..20] of real;
var
N:byte;
T:tab;
I:byte;
MAX:real;
MIN:real;
procedure lecture ( var n:byte);
begin
repeat
writeln('donner la taille du tableau');
readln (n);
until n in[2..20];
end;
procedure remplir (var t:tab;n:byte);
var i:byte;
begin
for i:=1 to n do
begin
writeln('donner le ',i,'réel');
readln( t[i]);
end;
end;
function somme (t:tab;n:byte):real;
var s:real;
begin
s:=0;
for i:=1 to n do
begin
s:= s+(t[i]);
end;
end;
function minimum(t:tab;n:byte):real;
var mi :real;
i:byte;
begin
mi:=0;
for i:= 2 to n do
begin
if (t[i]<(t[i+1])) then
begin
mi:=(t[i]);
end;
end;
minimum:=mi;
end;
function maximum (t:tab;n:byte):real;
var ma:real;
i:byte;
begin
ma:=0;
for i:= 2 to n do
begin
if (t[i]> t[i+1]) then
begin
ma :=t[i];
end;
end;
maximum := ma;
end;
procedure extrem(t:tab;n:byte; mi:real; ma:real);
begin
mi:= minimum (t,n);
writeln('le minimum est : ',mi);
ma:=maximum(t,n);
writeln('le maximum est : ',ma);
end;
procedure normalisation (t:tab;n:byte;min:real;max:real);
var i :byte;
begin
for i:=1 to n do
begin
t[i]:=((t[i]-min) / (max-min));
end;
end;
begin
lecture (N);
remplir (T,N);
writeln (somme (T,N));
extrem (T,N,MIN,MAX);
normalisation (T,N,MIN,MAX);
end.
A voir également:

2 réponses

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 26/11/2010 à 00:07
Évites d'utiliser des variables globales, c'est très souvent source d'erreur. Dans la mesure du possible remplaces les par des paramètres dans les fonctions comme tu l'as partiellement fait.

Pascal ne fait pas la différence entre majuscules et minuscules donc il n'y a par exemple aucune différence entre N la variable globale et n le paramètre, c'est évidement source d'erreur : laquelle des deux valeurs est utilisée pour le calcul ?
De plus il est usuel d'utiliser des noms de variables avec des minuscules, et de ne réserver l'usage des majuscules qu'aux noms de constantes...

Il n'y pas de résultat retourné par la fonction somme, il te manque somme:=s;
Petite astuce, tu peux utiliser la variable result dans les fonctions, ça t'évite de déclarer des variables locales superflues (s dans ce cas) et de faire l'affectation finale du résultat.

Exemple :

function somme(t:tab;n:byte):real; 
var i:byte; 
begin  
   result:=0; 
   for i:=1 to n do 
   begin 
      result:= result+(t[i]); 
   end; 
end;

Si tu as besoin de variables dans le corps du programme déclares les juste avant le begin, pas en tout début de fichier où elles seraient alors globales.
Et n'oublie pas de les initialiser, ici tu as oublié de faire MIN:=minimum(T,N); et MAX:=maximum(T,N);

Remarque : uses wincrt ne sert à rien !
La confiance n'exclut pas le contrôle
1
alonso cherif Messages postés 3 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 26 novembre 2010 1
26 nov. 2010 à 23:26
merci de ton aide
0