On m'affiche erreur au niveau d'1e instructio
laylana
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
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:
- On m'affiche erreur au niveau d'1e instructio
- Mise a niveau windows 7 vers 10 - Accueil - Mise à jour
- Le clavier de mon telephone ne s'affiche plus - Guide
- Clé mise a niveau windows 7 - Guide
- Erreur 0x80070643 - Accueil - Windows
- Iptv erreur de lecture - Forum TV & Vidéo
1 réponse
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
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
En effet ces variables sont à nouveau déclaré par les fonctions et procédures, ou utilisés comme paramètre.
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 ?
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 !