Petite aide C
Résolu/Fermé
CpTn_lAw
-
5 févr. 2010 à 16:24
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 7 févr. 2010 à 19:59
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 7 févr. 2010 à 19:59
A voir également:
- Petite aide C
- Petite amie virtuelle en français - Accueil - Intelligence artificielle
- Firefox s'ouvre en petite fenetre ✓ - Forum Mozilla Firefox
- Comment dévisser une petite visse sans tournevis - Forum Réseaux sociaux
- Petite vague clavier - Forum Clavier
- La fenetre actuelle est trop petite pour afficher correctement cette feuille - Forum Google Docs
15 réponses
Voila trouvé! merci a tous!!
#include <stdio.h> #include <stdlib.h> int taille; int maxmin(int t[], int taille, int min, int max); // Declaration de la fonction maxmin int main(void){ int i,j,t[taille]; int max=0,min=1000000; printf("\n Combien de nombres souhaitez-vous comparer? \n"); scanf("%d",&taille); for(i=0;i<taille;i++){ printf("Nombre %d: ", i+1); scanf("%d",&t[i]); } maxmin(t,taille,min,max); /* tant que la taille n'est pas atteinte, on incrémente, en demandant d'entrer le nombre Puis on appelle la fonction maxmin qui trie les valeurs entrées. */ return EXIT_SUCCESS; } int maxmin (int t[], int taille, int min, int max){ int i,j; for (i = 0; i < taille; ++i){ if (t[i] > max){ max = t[i]; } } for(j=0;j<taille;++j){ if (t[j] < min){ min = t[j]; } } printf ("min = %d et max = %d\n", min, max); }
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
5 févr. 2010 à 16:30
5 févr. 2010 à 16:30
quand tu postes du code, n'oublies pas d'utiliser la conservationde la mise en forme. c'est plus simple à lire pour nous
ta variable taille n'est pas initialisée.
tu devrais mettre un
taille=DIM ;
j'ai pas lu tout le reste car je suis au boulot, et que sans indentation du code, c'est trop long à lire
ta variable taille n'est pas initialisée.
tu devrais mettre un
taille=DIM ;
j'ai pas lu tout le reste car je suis au boulot, et que sans indentation du code, c'est trop long à lire
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 16:32
5 févr. 2010 à 16:32
Salut,
Quelques petites remarques :
1) utilise les balises < code > pour poster ton code dans le forum (bouton à droite de italique gras souligné), ceci conservera les espace de début de ligne
2) Tu dis avoir des erreurs à la compilation, copie-les ici, par exemple moi je n'ai pas de compilateur sous la main au moment où je t'écris, mais j'aurai pu t'expliquer vite fait les erreurs. ( et là je ne les vois pas d'un coup à cause entre autres de la mise en page)
3)scanf("%c",&r);
attention à ça. utiliser scanf pour saisir un caractère n'est pas conseillé. voir par exemple https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#CONS_lire_sans_entree
Quelques petites remarques :
1) utilise les balises < code > pour poster ton code dans le forum (bouton à droite de italique gras souligné), ceci conservera les espace de début de ligne
2) Tu dis avoir des erreurs à la compilation, copie-les ici, par exemple moi je n'ai pas de compilateur sous la main au moment où je t'écris, mais j'aurai pu t'expliquer vite fait les erreurs. ( et là je ne les vois pas d'un coup à cause entre autres de la mise en page)
3)scanf("%c",&r);
attention à ça. utiliser scanf pour saisir un caractère n'est pas conseillé. voir par exemple https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#CONS_lire_sans_entree
Merci de vos deux rpéonses très rapide, je ne savais pas pour les balises de code, alors j'ai deja corrigé des erreurs au niveau des singletons de blocs...
voici une version un peu corrigée qui ne fonctionne toujours pas cela dit ^^
Les erreurs de compilations sont exo8.c: In function ‘main’:
exo8.c:12: error: case label does not reduce to an integer constant
exo8.c:38: error: ‘min’ undeclared (first use in this function)
exo8.c:38: error: (Each undeclared identifier is reported only once
exo8.c:38: error: for each function it appears in.)
exo8.c:39: error: ‘max’ undeclared (first use in this function)
exo8.c:42: error: case label does not reduce to an integer constant
voici une version un peu corrigée qui ne fonctionne toujours pas cela dit ^^
#include <stdio.h> #include <stdlib.h> #define DIM 10 int main(void){ char r,y,n; int taille,i,nombre,tab[DIM]; printf("\n Voulez-vous entrer un nombre?(y/n) \n"); scanf("%c",&r); switch(r){ case y : printf("\n rentrez votre nombre. \n"); scanf("%d",&nombre); if(nombre>=0){ int min=tab[0]; for(i=1;i<taille;++i){ if (tab[i]<min){ min=tab[i]; } } printf("\n Le minimum est: %d", min); int max=tab[0]; for(i=1;i<taille;++i){ if (tab[i]>max){ max=tab[i]; } } printf("\n Le maximum est: %d", max); } else{ printf("\n Le minimum est: %d", min); printf("\n Le maximum est: %d", max); printf("%d",tab[i]); } case n : printf("\n Le minimum est: %d", min); printf("\n Le maximum est: %d", max); printf("%d",tab[i]); } }
Les erreurs de compilations sont exo8.c: In function ‘main’:
exo8.c:12: error: case label does not reduce to an integer constant
exo8.c:38: error: ‘min’ undeclared (first use in this function)
exo8.c:38: error: (Each undeclared identifier is reported only once
exo8.c:38: error: for each function it appears in.)
exo8.c:39: error: ‘max’ undeclared (first use in this function)
exo8.c:42: error: case label does not reduce to an integer constant
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 16:37
5 févr. 2010 à 16:37
ah oui pour le switch c'est pas possible d'utiliser des variables.
Par contre tu voulais dire "le caractère y", alors c'est 'y', c'est tout. Pas besoin de le déclarer. Ce n'est pas une variable. (Comme tu n'as pas besoin de dire int 10 opur déclarer 10.)
Par contre tu voulais dire "le caractère y", alors c'est 'y', c'est tout. Pas besoin de le déclarer. Ce n'est pas une variable. (Comme tu n'as pas besoin de dire int 10 opur déclarer 10.)
Alors cette fois c'est bon j'ai compilation, sans erreur, mais il va faloir que je fasse une boucle parce qu'a l'entrée du premier nombre, le programme se termine. le voici corrigé :
#include <stdio.h> #include <stdlib.h> #define taille 10 int main(void){ int r,y,n,min,max; int i,nombre,tab[taille]; printf("\n Voulez-vous entrer un nombre?(1=oui/2=non) \n"); scanf("%d",&r); switch(r){ case 1 : printf("\n rentrez votre nombre. \n"); scanf("%d",&nombre); if(nombre>=0){ int min=tab[0]; for(i=1;i<taille;++i){ if (tab[i]<min){ min=tab[i]; } } printf("\n Le minimum est: %d", min); int max=tab[0]; for(i=1;i<taille;++i){ if (tab[i]>max){ max=tab[i]; } } printf("\n Le maximum est: %d", max); } else{ printf("\n Le minimum est: %d", min); printf("\n Le maximum est: %d", max); printf("%d",tab[i]); } case 2 : printf("\n Le minimum est: %d", min); printf("\n Le maximum est: %d", max); printf("%d",tab[i]); } }
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 16:40
5 févr. 2010 à 16:40
ensuite, à un moment tu déclares ta variable "min" (et pareil pour max) dans un bloc {}. Ceci est mauvais, car lorsque le bloc où la variable est déclaré se termine, alors la variable est détruite. (elle est locale au bloc où elle est déclarée). Déclare-là simplement au début de ton programme.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 16:41
5 févr. 2010 à 16:41
attention, tu as corrigé en mettant une déclaration de min et max au début, mais tu as laissé "int min" dans le bloc. Ce qui signifie qu'il y a une autre variable min, locale au bloc, qui "cache" celle de départ : donc à la fin ça n'affiche pas la valeur que tu souhaitais.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 16:43
5 févr. 2010 à 16:43
PS : ton indentation est un peu hasardeuse :
devrait être
(je chipote mais ça aide à éviter d'autres erreurs)
for(i=1;i<taille;++i){ if (tab[i]<min){ min=tab[i]; } } printf("\n Le minimum est: %d", ...
devrait être
for(i=1;i<taille;++i) { if (tab[i]<min) { min=tab[i]; } } printf("\n Le minimum est: %d",...
(je chipote mais ça aide à éviter d'autres erreurs)
Ok donc j'ai déclarer mes "min" et "max" en haut avant le bloc main. Je fais quand meme toujours n'importe quoi, il faudrait que j'implémente un boucle while quelque part pour me proposer apres l'affichage si je veux re-rentrer un nombre...Je ne sais pas trop comment faire, Je ne sais pas comment vous codez, personnelement j'ai une feuille a coté ou je dessine le programme de manière très visuelle pour avoir une meilleure représentation, mais malheureusement, ma mauvaise maitrise du langage et mon peu d'expérience font que...le dessin ne représente pas le code, et vice-versa XD
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 16:56
5 févr. 2010 à 16:56
lol
oui bien sûr pas de problème.
le mieux, pour éviter de t'empêtrer dans ton propre code, est de séparer ton programme en modules.
Par exemple, tu peux créer une petite fonction "int min(int t[], int taille) { ... } qui fait le travail de chercher le minimum. Idem pour le maximum. Ainsi ton main() sera épuré, et si tu souhaites juste modifier la présentation et l'ordre des choses qui se passent, tu y verras plus clair.
(je ne sais pas si tu te souviens comment créer et utiliser des fonctions)
oui bien sûr pas de problème.
le mieux, pour éviter de t'empêtrer dans ton propre code, est de séparer ton programme en modules.
Par exemple, tu peux créer une petite fonction "int min(int t[], int taille) { ... } qui fait le travail de chercher le minimum. Idem pour le maximum. Ainsi ton main() sera épuré, et si tu souhaites juste modifier la présentation et l'ordre des choses qui se passent, tu y verras plus clair.
(je ne sais pas si tu te souviens comment créer et utiliser des fonctions)
Ces fonctions min et max, par exemple, je les creer avant le main? Comme ca je n'ai qu'a les appeler dans la fonction main? Je ne me rappelle plus bien, mais google est mon ami. J'essai et je vous tiens au courant. Merci beaucoup de votre aide rapide!
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 févr. 2010 à 17:00
5 févr. 2010 à 17:00
voilà c'est ça.
Ou pour plus de clarté, tu les déclares (prototype) avant le main, et tu les codes après.
Ou pour plus de clarté, tu les déclares (prototype) avant le main, et tu les codes après.
int f(int, char); int main (void) { int A; A = f(25, 's'); return EXIT_SUCCESS; // normalement à rajouter la fin de ton main aussi ... } int f(int premierParametre, char deuxiemeParametre) { instruction; instruction; return unInt; }
Bon alors j'ai repris de zéro., j'ai fait l'economie de 30% de lignes de code, et l'exécution est plus propre, celà dit il reste un soucis, quelles que soient les valeurs rentrées, le min reste toujours "0". Le max fonctionne. J'ai repris la fonction maxmin(long *t, long n, long min, long max) d'un post précédent, mais j'ai changé le pointeur en tableau, et les "long" en "int" . Une idée pour le minimum resté zero?
#include <stdio.h> #include <stdlib.h> int taille,min,max; int maxmin(int t[], int taille, int min, int max); int main(void){ int i,j,nombre,t[taille]; printf("\n Combien de nombres souhaitez-vous comparer? \n"); scanf("%d",&taille); for(i=0;i<taille;i++){ printf("Nombre %d: ", i+1); scanf("%d",&t[i]); } maxmin(t, taille,min,max); return EXIT_SUCCESS; } int maxmin (int t[], int taille, int min, int max){ int i; for (i = 0; i < taille; ++i){ if (t[i] > max) max = t[i]; if (t[i] < min) min = t[i]; } printf ("min = %ld et max = %ld\n", min, max); }
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
7 févr. 2010 à 19:59
7 févr. 2010 à 19:59
La prochiane fois, n'oublies pas de passer ton sujet en résolu
@+
@+