Corrigez un algorithme en C SVPV
salut, :arf:
Je n’arrive pas à trouver l’erreur dans cette traduction en C, il me dit qu’il y a une erreur dans les deux dernières lignes.
Merci d’avance, je serai reconessant. :D
voici l'enoncé:
Ecrire un algorithme qui demande successivement N nombres à l’utilisateur et qui lui dise ensuite quel était le plus grands nombre différent de 0 et sa position ainsi le plus petit nombre différent de 0 et sa positions.(en utilisant les structures de boucles)
et voici ma traduction: :( :cry:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #include<stdio.h>
#include<math.h>
main()
{
int min,max,posmax,posmin,n,nbr,nbrzero,i,j,reponse;
do
{
printf("donnez un nombre entier\n");
scanf("%d",&nbr);
if(nbr==1)
{
printf("donnez un nombre entier\n");
scanf("%d",&n);
if(n!=0)
{
max=n;
min=n;
posmax=n;
posmin=n;
}
else
nbrzero=1;
}
if(nbr>1)
{
i=0;
nbrzero=0;
printf("donnez un nobre entier\n");
scanf("%d",&n);
if(n==0)
{
nbrzero=nbrzero+1;
}
if(n!=0)
{
max=n;
min=n;
posmax=i;
posmin=i;
}
for(j=i+1;j<=nbr;j++);
{
printf("donnez un nombre entier\n");
scanf("%d",&n);
if(n==0)
{
nbrzero=nbrzero+1;
if(n>=max)
{
max=n;
posmax=j;
}
if(n<=min)
{
min=n;
posmin=j;
}
}
}
printf("le plus grand nombre entré est %d",n);
printf("la position du plus grand nombre entré est %d \n",posmax);
printf("le plus petit nombre entré est %d \n",n);
printf("la position du plus petit nombre entré est %d \n",posmin);
printf("le nombre de zéro entré est %d \n",nbrzero);
if(nbr=0)
printf("le nombre des entiers doit étre superieur à zero \n");
printf("si vous ne voulez pas refaire l'operation tapez 0 \n");
scanf("%d",& reponse);
}
while(reponse=0); :?: :!:
} :?: :!: |
@ + + + + + + + + + + + + +
Re: Corrigez un algorithme en C SVPV
Citation:
Envoyé par m_c
#include<stdio.h>
Merci de lire les regles du forum... :tagcode:
Code:
1 2 3 4
|
if(nbr=0)
<...>
while(reponse=0); |
Attention. '=' n'est pas '=='.
Il y a un ';' après le 'for'. C'est normal ?
Tu confonds "nombre entier" et "nombre d'entiers". L'utilisateur est perdu, il ne sait pas ce qu'il doit taper...
L'énoncé est assez intéressant... Il faut factoriser ton code. Ecris d'abord un algorithme avant de foncer dans le code en utilisant la méthode 'brute force'.
Nota : Dans l'énoncé, il n'est pas demandé de gérer la répétition... Moi, je retire 2 points pour 'hors-sujet'...
Voilà un début de reflexion. Je te laisse détailler :
Citation:
Enoncé :
Ecrire un algorithme qui demande successivement N nombres à
l’utilisateur et qui lui dise ensuite quel était le plus grands
nombre différent de 0 et sa position ainsi le plus petit nombre
différent de 0 et sa position. (en utilisant les structures de boucles)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
saisir n
FOR i = 1 TO n
saisir entier
IF entier <> 0
determiner le maximum, memoriser la position
determiner le minimum, memoriser la position
ENDIF
NEXT n
afficher les resultats |
On pourrait aussi ne pas saisir le nombre d'entiers et se servir de 0 pour quitter la saisie...
Code:
1 2 3 4 5 6 7 8 9 10 11
|
DO
saisir entier
IF entier <> 0
determiner le maximum, memoriser la position
determiner le minimum, memoriser la position
ENDIF
WHILE entier <> 0
afficher le resultat |
C'est Noël : une solution pour le deuxième algo...:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
int pos_min = 0;
int pos_max = 0;
int val_min = INT_MAX;
int val_max = INT_MIN;
int pos = 0;
int n;
do
{
{
char s[16];
fgets(s, sizeof s, stdin);
n = (int) strtol(s, NULL, 10);
}
if (n != 0)
{
if (val_min > n)
{
val_min = n;
pos_min = pos;
}
if (val_max < n)
{
val_max = n;
pos_max = pos;
}
}
pos++;
}
while (n != 0);
printf ("val min = %d a %d\n"
"val max = %d a %d\n"
, val_min
, pos_min
, val_max
, pos_max
);
return 0;
} |
Code:
1 2 3 4 5 6 7 8 9
|
45
-56
12
568
74
0
val min = -56 a 1
val max = 568 a 3 |