Maximum d'un tableau en c
Résolu/Fermé
yumimitsuki
-
18 juin 2011 à 22:00
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 18 juin 2011 à 23:10
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 18 juin 2011 à 23:10
A voir également:
- Fonction max en c
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Trier un tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
5 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
18 juin 2011 à 22:20
18 juin 2011 à 22:20
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
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
18 juin 2011 à 22:37
18 juin 2011 à 22:37
printf("tab[%d]=",i) est équivalent en C à ce qu'on aurait en Pascal avec write('tab[',i,']=');
Ici il ne s'agit pas d'afficher tab[i], qui s'écrirait printf("%d",tab[i]); mais de demander à l'utilisateur d'entrer la valeur de tab[i] grâce au scanf("%d",atab[i]) qui est la ligne juste en dessous...
Ici il ne s'agit pas d'afficher tab[i], qui s'écrirait printf("%d",tab[i]); mais de demander à l'utilisateur d'entrer la valeur de tab[i] grâce au scanf("%d",atab[i]) qui est la ligne juste en dessous...
Llama
Messages postés
75
Date d'inscription
samedi 18 juin 2011
Statut
Membre
Dernière intervention
5 octobre 2011
1
18 juin 2011 à 22:44
18 juin 2011 à 22:44
En fait en c, le %d veut dire "ici on affiche un entier", et cette entier c'est le i, donc en gros c'est juste pour que l'utilisateur sache dans quel case du tableau il rentre une valeur.
On aurait pu mettre : "printf("Valeur pour la case %d : ",i);" par exemple.
On aurait pu mettre : "printf("Valeur pour la case %d : ",i);" par exemple.
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
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
18 juin 2011 à 22:41
18 juin 2011 à 22:41
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; }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
18 juin 2011 à 22:55
18 juin 2011 à 22:55
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.
Llama
Messages postés
75
Date d'inscription
samedi 18 juin 2011
Statut
Membre
Dernière intervention
5 octobre 2011
1
Modifié par Llama le 18/06/2011 à 22:57
Modifié par Llama le 18/06/2011 à 22:57
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 :/
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
18 juin 2011 à 22:45
18 juin 2011 à 22:45
Non ça ne changerait rien, s++ incrémente s d'abord, puis s= lui affecte le résultat.
Ce serait comme avoir : s=s+1; puis s=s;
J'ai testé le code et ça marche, ce n'est pas le problème.
Ce serait comme avoir : s=s+1; puis s=s;
J'ai testé le code et ça marche, ce n'est pas le problème.
Llama
Messages postés
75
Date d'inscription
samedi 18 juin 2011
Statut
Membre
Dernière intervention
5 octobre 2011
1
Modifié par Llama le 18/06/2011 à 22:49
Modifié par Llama le 18/06/2011 à 22:49
euh oui j'ai rien dit, autant pour moi, j'ai répondu trop vite ^^, j'viens de m'en apercevoir, mais ya un truc qui cloche sur cette ligne, j'arrive pas à voir quoi
Llama
Messages postés
75
Date d'inscription
samedi 18 juin 2011
Statut
Membre
Dernière intervention
5 octobre 2011
1
18 juin 2011 à 22:48
18 juin 2011 à 22:48
en fait s++ incrémente pas s d'abbord, merci, c'est la le problème^^
s prend la valeur de s puis s'incrémente, il faut mettre s=++s pour que sa marche, ou mieux, s++
s prend la valeur de s puis s'incrémente, il faut mettre s=++s pour que sa marche, ou mieux, s++
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 18/06/2011 à 22:52
Modifié par KX le 18/06/2011 à 22:52
D'habitude on écrit, s=s+1, s+=1, s++, ou ++s
L'écriture s=s++ est étrange mais elle n'est pas fausse.
Par contre si on avait eu s=++s; on aurait eu l'enchainement s=s; puis ++s; mais ça reste correct.
L'écriture s=s++ est étrange mais elle n'est pas fausse.
Par contre si on avait eu s=++s; on aurait eu l'enchainement s=s; puis ++s; mais ça reste correct.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoups!!la solution etait de remplacer s++ par s+1 ou ++s!^_^ merci beaucoups encore!
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
18 juin 2011 à 23:10
18 juin 2011 à 23:10
Ce n'était pas la peine mais si ça te fait plaisir... par contre ce n'est pas s+1 mais s=s+1