On m'affiche erreur au niveau d'1e instructio

Fermé
laylana - 12 sept. 2012 à 15:55
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 12 sept. 2012 à 18:25
Bonjour,



J'ai fais une programme il s'agit d'un un tableau T de n réels positifs, avec n est un entier entre 5 et 20. Faire l'analyse et déduire l'algorithme d'un programme permettant de calculer l'écart entre le plus grand réel et le plus petit réel se trouvant dans T.
Exemple : n= 6 et T contient 15 - 28.3 - 60.45 - 10 - 2.15 - 58
L'écart = 60.45 - 2.15 = 58.30
Voilà mon travail:
Program Ecart;
Uses WinCrt;
Type TAB = Array [5..20] of integer;
Var i,j,n,V_max,V_min:integer; T:TAB;
Procedure lire (Var x:integer);
Begin
Repeat
Writeln ('Donnez la taille du tableau'); Readln (x);
Until (x in [5..20]);
End;
Procedure remplir (Var V:TAB;y:integer);
Var i:integer;
Begin
For i:= 1 To y Do
Begin
Writeln ('Donnez la valeur de l"éléments N° ',i);
Readln (V[i]);
End;

Function max (Var V: TAB; x,y: integer):integer;
Var i, Vmax :integer;
Begin
Vmax := V[x];
For i:= x + 1 To y Do
If Vmax < V[i] Then Vmax := V[i];
max := Vmax;
End;
Function min (Var V:TAB;x,y:integer):integer;
Var i,Vmin:integer;
Begin
Vmin := V[x];
For i:= x + 1 To y Do
If Vmin > V[i] Then Vmin := V[i];
min := Vmin;
End;
Begin
lire (n);
remplir (T,n);

V_max := max (T,i,j);
V_min := min (T,i,j);
Writeln ('La valeur maximal dans cet intervalle = ',V_max);
Writeln ('La valeur minimal dans cet intervalle = ',V_min);
End;
Var R: integer;
Begin
R:= V_max - V_min;
Write ('L''écart = ', R );
Readln (R);
End.
Je sais pas pk on m'affiche erreur au niveau de "Function max (Var V: TAB; x,y: integer):integer;" pouvez vous m'aider? merci
A voir également:

1 réponse

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 12/09/2012 à 16:32
Le problème c'est que tu déclares function max, avant d'avoir terminé procedure remplir.

En indentant correctement, tu verrais tout de suite que procedure remplir a deux Begin, mais un seul End. Le compilateur ne comprend donc pas pourquoi tu déclares ta function max à l'intérieur de la procedure remplir.

Et avant que tu poses la question, tu as une autre erreur une fois celle-ci corrigée. En effet tu as deux blocs principaux begin end. Le premier qui commence par lire (n); et le deuxième qui commence par R:= V_max - V_min;
Or il ne t'en faut qu'un seul par programme...
La confiance n'exclut pas le contrôle
0
Merci bcp :)
0
Pourquoi la valeur minimale est toujours 0 ?
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
12 sept. 2012 à 17:07
C'est une très mauvaise habitude à prendre que déclarer des variables globales :
Var i,j,n,V_max,V_min:integer; T:TAB;
En effet ces variables sont à nouveau déclaré par les fonctions et procédures, ou utilisés comme paramètre.
Function min (Var V:TAB;x,y:integer):integer;
Var i,Vmin:integer; 

Il y a donc coexistence de plusieurs variables de même nom ! Sais-tu laquelle des deux est utilisée au final ? Par exemple, dans le programme principal quand tu fais max(T,i,j); sais-tu que valent i et j ?
0
Donc je dois pas pas déclarer des variables que j'ai ensuite déclaré de nouveau par les fonctios et les procédures ..
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
12 sept. 2012 à 18:25
Tu dois éviter la déclaration de variables globales tout en haut du code, comme celle-ci :
Var i,j,n,V_max,V_min:integer; T:TAB;
Si tu as besoin de variables dans le programme principale, déclares les juste avant le begin end.

VAR
    i,j,n,v_max,v_min:integer;
    t:Tab;
BEGIN
    lire(n);
    remplir(t,n);
    v_max := max(t,i,j);
    v_min := min(t,i,j);
    writeln('La valeur maximal dans cet intervalle = ',v_max);
    writeln('La valeur minimal dans cet intervalle = ',v_min);
    readln;
END.

Mais il ne faut pas oublier d'initialiser toutes les variables avant de les utiliser sinon elles n'ont aucun sens, par exemple ici tu utilises i et j mais qui n'ont pas de valeur !
0