Maximum d'un tableau en c
Résolu
yumimitsuki
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
je suis debutante en algorithmique.L'exercice que je veux resoudre est assez facile mais une fois executé, je trouve une erreur.
L'exercice est le suivant:Ecrire le programme qui recherche la maximum ainsi que son nombre d'occurences dans un tableau t.
voici le programme que j'ai realisé:
#include<stdio.h>
#include<stdlib.h>
main()
{
int max,i,n,s,tab[50];
max=0;
s=0;
printf("introduisez la taille du tableau");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("tab[%d]=",i);
scanf("%d",&tab[i]);
if(max<tab[i])
max=tab[i];
}
for(i=1;i<=n;i++)
{
if (max==tab[i])
s=s++;
}
printf("le nombre max est %d\n",max);
printf("son nombre d'occurence est:%d\n",s);
system("pause");
}
le probleme se trouve dans le nombre d'occurence, a chaque fois que j'execute, il me donne zero!
aidez moi s'il vous plait et merci d'avance.
je suis debutante en algorithmique.L'exercice que je veux resoudre est assez facile mais une fois executé, je trouve une erreur.
L'exercice est le suivant:Ecrire le programme qui recherche la maximum ainsi que son nombre d'occurences dans un tableau t.
voici le programme que j'ai realisé:
#include<stdio.h>
#include<stdlib.h>
main()
{
int max,i,n,s,tab[50];
max=0;
s=0;
printf("introduisez la taille du tableau");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("tab[%d]=",i);
scanf("%d",&tab[i]);
if(max<tab[i])
max=tab[i];
}
for(i=1;i<=n;i++)
{
if (max==tab[i])
s=s++;
}
printf("le nombre max est %d\n",max);
printf("son nombre d'occurence est:%d\n",s);
system("pause");
}
le probleme se trouve dans le nombre d'occurence, a chaque fois que j'execute, il me donne zero!
aidez moi s'il vous plait et merci d'avance.
A voir également:
- Fonction max en c
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
5 réponses
Moi je n'ai pas de problème, j'ai juste rajouté int au point d'entrée : int main() et le return 0; qui va avec, et dès que je test ça marche :
Quelques remarques malgré tout :
Il serait bon après ton scanf de n, de vérifier que n n'est pas supérieur à 50
Mais plus important, les indices d'un tableau en C commence à 0, donc ta boucle devrait être for (i=0; i<n; i++) et non pas for (i=1; i<=n; i++)
De plus il y a plus efficace que de reparcourir le tableau pour compter le nombre d'occurrence, tu peux faire ça en même temps que la recherche du max...
introduisez la taille du tableau6 tab[1]=5 tab[2]=3 tab[3]=1 tab[4]=5 tab[5]=9 tab[6]=2 le nombre max est 9 son nombre d'occurence est:1 Appuyez sur une touche pour continuer...
Quelques remarques malgré tout :
Il serait bon après ton scanf de n, de vérifier que n n'est pas supérieur à 50
Mais plus important, les indices d'un tableau en C commence à 0, donc ta boucle devrait être for (i=0; i<n; i++) et non pas for (i=1; i<=n; i++)
De plus il y a plus efficace que de reparcourir le tableau pour compter le nombre d'occurrence, tu peux faire ça en même temps que la recherche du max...
bon certes je comprend rien en C, moi c'est plutôt pascal et assembleur, mais de ce que j'y comprends, le programme demande le nombre d'entrées puis les valeurs de chaque entrée, chaque nouvelle entrée étant directement comparée au dernier maxima... On relit ensuite le tableau en comptant le nombre de valeur à Max;
Je suppose que max est correct en sortie,
et donc il reste pour moi une bizarrerie -printf("tab[%d]=",i) - Où je ne comprend pas l'indexation de Tab par %d...
Désolé, je fais avec mes moyens !
Je suppose que max est correct en sortie,
et donc il reste pour moi une bizarrerie -printf("tab[%d]=",i) - Où je ne comprend pas l'indexation de Tab par %d...
Désolé, je fais avec mes moyens !
kx: merci beaucoups pour m'avoir repondue! je n'ai pas bien compris pourquoi vous avez ajouté le return(0), pouvez-vous m'expliquer svp?
nicocorico: ça ne fait rien!merci comme meme XD
nicocorico: ça ne fait rien!merci comme meme XD
Parce que normalement main renvoie une valeur : un int qui vaut 0 si tout se passe bien ou autre chose en cas d'erreur.
Comme mon compilateur est exigeant, il n'a pas aimé d'avoir main() tout seul, j'ai donc rajouté int, et le return 0 à la fin pour dire que tout s'était bien passé...
Le corps de ton programme devrait donc être :
Comme mon compilateur est exigeant, il n'a pas aimé d'avoir main() tout seul, j'ai donc rajouté int, et le return 0 à la fin pour dire que tout s'était bien passé...
Le corps de ton programme devrait donc être :
int main() { //... system("PAUSE"); return 0; }
Si ça t'es arrivé avec d'autres programmes c'est peut-être que tu utilisais main sans le int...
En fait ça peux marcher ça dépend de ton compilateur...
De là à dire que ton programme est juste, pas totalement, il y a quand même deux ou trois points à revoir sur les indices de tableau comme je l'ai indiqué plus haut.
En fait ça peux marcher ça dépend de ton compilateur...
De là à dire que ton programme est juste, pas totalement, il y a quand même deux ou trois points à revoir sur les indices de tableau comme je l'ai indiqué plus haut.
trouvé :p tu remplace s au lieu de l'incrémenter (tu a oublié un +)
edit : j'ai répondu trop vite :/
edit : j'ai répondu trop vite :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question