à l'aide, j'ai un problème dans un programme
Fermé
Gwenalizee
-
Modifié par Gwenalizee le 11/08/2010 à 11:48
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 - 19 août 2010 à 14:31
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 - 19 août 2010 à 14:31
A voir également:
- à l'aide, j'ai un problème dans un programme
- Programme demarrage windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Desinstaller un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Mettre en veille un programme - Guide
18 réponses
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
11 août 2010 à 12:12
11 août 2010 à 12:12
int A;
Comparaison (X, Y);
Il manque quelque chose ;)
Bonne réflexion.
Comparaison (X, Y);
Il manque quelque chose ;)
Bonne réflexion.
scaravenger
Messages postés
2685
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
30 janvier 2015
617
11 août 2010 à 14:14
11 août 2010 à 14:14
Revois ta variable locale A. Ya comme un problème de transmission de valeur.
scaravenger
Messages postés
2685
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
30 janvier 2015
617
11 août 2010 à 14:35
11 août 2010 à 14:35
Pour simplifier ce n'est pas le "même A".
Conserve une seule variable LOCALE A et renomme la deuxième variable LOCALE différemment (B par exemple).
Ton erreur te sera peut etre plus flagrante.
Conserve une seule variable LOCALE A et renomme la deuxième variable LOCALE différemment (B par exemple).
Ton erreur te sera peut etre plus flagrante.
scaravenger
Messages postés
2685
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
30 janvier 2015
617
11 août 2010 à 14:55
11 août 2010 à 14:55
Bon j'ai pitié pour toi
corrige tes ligne erronées par:
A=X; (et non X=A;)
A=Y;
A=Comparaison (X, Y);
Ca devrait marcher.
corrige tes ligne erronées par:
A=X; (et non X=A;)
A=Y;
A=Comparaison (X, Y);
Ca devrait marcher.
Sorry, j'ai un autre problème: en fait je dois transformer un caractère qui est en majuscule en minuscule et inversement. Je n'ai que le mode minuscule à majuscule
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void minuscule(char s[])
{
int mot;
/* la chaîne est parcourue par index */
for (mot= 0; s[mot] != '\0'; mot++)
/* si le caractère à la position index est majuscule*/
if (s[mot] >= 'A' && s[mot] <= 'Z')
/* le remplacer par son équivalent en minuscule */
s[mot]= s[mot] - 'A' + 'a';
}
int main ()
{
int salut;
minuscule(salut);
return 0;
}
Il ne veut pas marcher. Il y a quoi comme erreur?
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void minuscule(char s[])
{
int mot;
/* la chaîne est parcourue par index */
for (mot= 0; s[mot] != '\0'; mot++)
/* si le caractère à la position index est majuscule*/
if (s[mot] >= 'A' && s[mot] <= 'Z')
/* le remplacer par son équivalent en minuscule */
s[mot]= s[mot] - 'A' + 'a';
}
int main ()
{
int salut;
minuscule(salut);
return 0;
}
Il ne veut pas marcher. Il y a quoi comme erreur?
scaravenger
Messages postés
2685
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
30 janvier 2015
617
11 août 2010 à 15:40
11 août 2010 à 15:40
C'est une question académique ou estudiantine?
Etant un peu fainéant j'aurais essayé "strlwr" et "strupr"
qui font tout par simple appel de fonction.
Etant un peu fainéant j'aurais essayé "strlwr" et "strupr"
qui font tout par simple appel de fonction.
RTFM !
Tape "man strlwr" et "man strupr" sur Google ;p
Autre question, je vois que tu fais tout a la main.. A la mode Epitech.. Tu t'autorises a utiliser les fonctions systemes ou tu fait tout toute seule ?
Un moyen simple de convertir "a la main" une chaine en majuscule/minuscule et inversement, c'est de passer par la table ASCII (man ascii sur google ;D)
Tape "man strlwr" et "man strupr" sur Google ;p
Autre question, je vois que tu fais tout a la main.. A la mode Epitech.. Tu t'autorises a utiliser les fonctions systemes ou tu fait tout toute seule ?
Un moyen simple de convertir "a la main" une chaine en majuscule/minuscule et inversement, c'est de passer par la table ASCII (man ascii sur google ;D)
C'est normal regarde ton code :
int main ()
{
int salut;
minuscule(salut);
return 0;
}
Et le prototype de ta fonction :
void minuscule(char s[]);
Ta fonction indique qu'elle attend un tableau de char comme argument (donc une chaine de caractère..)
Or, dans ton main, tu déclares une variable qui s'appelle salut (que tu n'initialises jamais déjà) mais qui est surtout du type int...
Tu envoies donc a ta fonction un entier au lieu d'une chaine de caractère..
Comprends-tu ton erreur et comment y remédier ?
int main ()
{
int salut;
minuscule(salut);
return 0;
}
Et le prototype de ta fonction :
void minuscule(char s[]);
Ta fonction indique qu'elle attend un tableau de char comme argument (donc une chaine de caractère..)
Or, dans ton main, tu déclares une variable qui s'appelle salut (que tu n'initialises jamais déjà) mais qui est surtout du type int...
Tu envoies donc a ta fonction un entier au lieu d'une chaine de caractère..
Comprends-tu ton erreur et comment y remédier ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Donc je remets après plusieurs modifs
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string>
void minuscule(char s[])
{
int mot;
/* la chaîne est parcourue par index */
for (mot= 0; s[mot] != '\0'; mot++)
/* si le caractère à la position index est majuscule*/
if (s[mot] >= 'A' && s[mot] <= 'Z')
/* le remplacer par son équivalent en minuscule */
s[mot]= s[mot] - 'A' + 'a';
printf ("%s", s);
}
int main ()
{
char SALUT;
char tab["SALUT"];
minuscule(tab["SALUT"]);
return 0;
}
c'est bon? Ou j'ai pas encore compris dans la fonction main?
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string>
void minuscule(char s[])
{
int mot;
/* la chaîne est parcourue par index */
for (mot= 0; s[mot] != '\0'; mot++)
/* si le caractère à la position index est majuscule*/
if (s[mot] >= 'A' && s[mot] <= 'Z')
/* le remplacer par son équivalent en minuscule */
s[mot]= s[mot] - 'A' + 'a';
printf ("%s", s);
}
int main ()
{
char SALUT;
char tab["SALUT"];
minuscule(tab["SALUT"]);
return 0;
}
c'est bon? Ou j'ai pas encore compris dans la fonction main?
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
Modifié par Gaunts le 12/08/2010 à 15:41
Modifié par Gaunts le 12/08/2010 à 15:41
Non reprend ce que tu avais avant, et regarde bien uniquement la première ligne de ton main.
char A=SALUT.
Chico a dit un peu plus haut qu'un tableau devait être entourée de guillemets.
Il a aussi précisé que tu ne déclares qu'un char, qui ne représente qu'un caractère alors qu'il te faut un tableau.
Suis les deux conseils qu'il t'a donné, et essaye de changer cette ligne pour qu'elle soit fonctionnelle.
char A=SALUT.
Chico a dit un peu plus haut qu'un tableau devait être entourée de guillemets.
Il a aussi précisé que tu ne déclares qu'un char, qui ne représente qu'un caractère alors qu'il te faut un tableau.
Suis les deux conseils qu'il t'a donné, et essaye de changer cette ligne pour qu'elle soit fonctionnelle.
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
12 août 2010 à 15:39
12 août 2010 à 15:39
Nooooooooooooon :(
On est revenu au même point qu'hier...
Gwenalizee.. Prends le temps de lire calmement ce que je (on maintenant ?) t'ecris(/t) .. Et prends le temps de réfléchir sans vouloir tout essayer..
Reprends ton dernier code :
Relis ce que Gaunts et moi t'avons écris, et reposte la bonne réponse :p
On est revenu au même point qu'hier...
Gwenalizee.. Prends le temps de lire calmement ce que je (on maintenant ?) t'ecris(/t) .. Et prends le temps de réfléchir sans vouloir tout essayer..
Reprends ton dernier code :
int main () { char A=SALUT; minuscule(A); return 0; }
Relis ce que Gaunts et moi t'avons écris, et reposte la bonne réponse :p
Je suis vraiment pas douée (sorry), bon alors
int main ()
{
char A=SALUT;
char tab["A"];
minuscule(tab["A"]);
return 0;
}
c'est bon?
int main ()
{
char A=SALUT;
char tab["A"];
minuscule(tab["A"]);
return 0;
}
c'est bon?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
12 août 2010 à 15:47
12 août 2010 à 15:47
Comme l'a dit Gaunts sous ton message, tu n'as que la ligne
qui est fausse dans ce code :
Pour rappel, encore une fois, tu n'as besoin de rajouter AUCUNE ligne, nous attendons juste la déclaration un tableau de chaine de caractère a la place de celle d'un caractère que tu appelleras toujours A.. Et pour affecter une chaine, a un tableau de caractère tu dois entourer sa valeur par des guillemets..
Courage courage !
char A=SALUT;
qui est fausse dans ce code :
int main () { char A=SALUT; minuscule(A); return 0; }
Pour rappel, encore une fois, tu n'as besoin de rajouter AUCUNE ligne, nous attendons juste la déclaration un tableau de chaine de caractère a la place de celle d'un caractère que tu appelleras toujours A.. Et pour affecter une chaine, a un tableau de caractère tu dois entourer sa valeur par des guillemets..
Courage courage !
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
12 août 2010 à 15:49
12 août 2010 à 15:49
Quelle aventure
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
12 août 2010 à 15:50
12 août 2010 à 15:50
J'te l'fais pas dire :p
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
12 août 2010 à 15:55
12 août 2010 à 15:55
Presque..
Encore une fois, regarde le prototype :
Il faut que ce soit EXACTEMENT le même type déclaration de ce qu'il y a entre les parenthèses..
Comme dans mon exemple tout a l'heure on avait :
afficherNombre(int nb)
et dans le main : int monChiffre = 5
Des deux cotes on avait "int"
Ici on doit non seulement avoir char a gauche.. mais aussi autre chose a droite, de la même manière qu'entre les parenthèses :)
Et tableau, ne veut pas forcement dire qu'il faut rajouter tab quelque part, cela veut juste dire crochet ici ;)
Encore une fois, regarde le prototype :
void minuscule(char s[])
Il faut que ce soit EXACTEMENT le même type déclaration de ce qu'il y a entre les parenthèses..
Comme dans mon exemple tout a l'heure on avait :
afficherNombre(int nb)
et dans le main : int monChiffre = 5
Des deux cotes on avait "int"
Ici on doit non seulement avoir char a gauche.. mais aussi autre chose a droite, de la même manière qu'entre les parenthèses :)
Et tableau, ne veut pas forcement dire qu'il faut rajouter tab quelque part, cela veut juste dire crochet ici ;)
Yep, ça marche. (et la fonction majuscule, il faut que j'inverse (A=>a, Z=>z, a=>A)
J'en ai un autre de problème (sorry de vous déranger pour ça)
alors voilà je dois faire le PGCD de deux nombres que l'on peut choisir
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int PGCD (int X, int Y)
{
int z;
printf ("Choisir deux nombres entiers X et Y, de telle façon que X>Y.\n");
scanf ("X=%d\n Y=%d\n", &X, &Y);
z=X/Y;
printf("Le PGCD de X=%d et de Y=%d est %d\n", X, Y, z);
return PGCD (X, Y);
}
int main ()
{
int X;
int Y;
PGCD (X, Y);
return 0;
}
je prends X=12346 et Y=22 et on me dit
"Floating point exception"
ça veut dire quoi?
J'en ai un autre de problème (sorry de vous déranger pour ça)
alors voilà je dois faire le PGCD de deux nombres que l'on peut choisir
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int PGCD (int X, int Y)
{
int z;
printf ("Choisir deux nombres entiers X et Y, de telle façon que X>Y.\n");
scanf ("X=%d\n Y=%d\n", &X, &Y);
z=X/Y;
printf("Le PGCD de X=%d et de Y=%d est %d\n", X, Y, z);
return PGCD (X, Y);
}
int main ()
{
int X;
int Y;
PGCD (X, Y);
return 0;
}
je prends X=12346 et Y=22 et on me dit
"Floating point exception"
ça veut dire quoi?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
Modifié par chico200987 le 12/08/2010 à 17:11
Modifié par chico200987 le 12/08/2010 à 17:11
Chez moi ton code m'écris :
Choisir deux nombres entiers X et Y, de telle fan que X>Y.
Le PGCD de X=123456 et de Y=22 est 5611
A l'infini !
Tu sais pourquoi ?
Parceque tu écris dans ton return : return PGCB (X,Y)
Ce qui veut dire que tu rappelles ta fonction infiniment, une fois arrivé au return, tu retournes en haut redemander les valeurs etc.. et donc ca fait une boucle infinie..
Ce phénomène s'appelle la récursivité, tu peux en avoir besoin parfois, mais pas ici !
Quand une fonction fini bien, comme dans le main, tu dois retourner 0 :)
Par contre, tu ne trouves pas le PGCD la.. tu fais une simple division, l'algo n'est pas bon !
Choisir deux nombres entiers X et Y, de telle fan que X>Y.
Le PGCD de X=123456 et de Y=22 est 5611
A l'infini !
Tu sais pourquoi ?
Parceque tu écris dans ton return : return PGCB (X,Y)
Ce qui veut dire que tu rappelles ta fonction infiniment, une fois arrivé au return, tu retournes en haut redemander les valeurs etc.. et donc ca fait une boucle infinie..
Ce phénomène s'appelle la récursivité, tu peux en avoir besoin parfois, mais pas ici !
Quand une fonction fini bien, comme dans le main, tu dois retourner 0 :)
Par contre, tu ne trouves pas le PGCD la.. tu fais une simple division, l'algo n'est pas bon !
Bah en fait qu'en j'utilise que le main, je n'ai pas soucis parce que je met ça:
int main ()
{
int X=12346;
int Y=22;
int z;
z=X/Y;
printf ("Le PGCD de X=%d et de Y=%d est %d.\n", X, Y, z);
return 0;
}
Or le problème je dois utiliser une fonction (autre que le main). Et dans cette fonction on nous demande de choisir deux valeurs.
Et je ne vois pas où est mon problème (à part celui que tu m'as dis, chico200987).
int main ()
{
int X=12346;
int Y=22;
int z;
z=X/Y;
printf ("Le PGCD de X=%d et de Y=%d est %d.\n", X, Y, z);
return 0;
}
Or le problème je dois utiliser une fonction (autre que le main). Et dans cette fonction on nous demande de choisir deux valeurs.
Et je ne vois pas où est mon problème (à part celui que tu m'as dis, chico200987).
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
Modifié par Gaunts le 13/08/2010 à 10:25
Modifié par Gaunts le 13/08/2010 à 10:25
Il y a plusieurs façons de calculer le PGCD de deux nombres..
Pour celle que j'aurais utilisé si je veux faire un programme simple mais pas forcément optimisé, il faut uniquement savoir que le PGCD est le plus grand entier possible pour lequel a%PGCD = 0 et b%PGCD = 0
Pour celle que j'aurais utilisé si je veux faire un programme simple mais pas forcément optimisé, il faut uniquement savoir que le PGCD est le plus grand entier possible pour lequel a%PGCD = 0 et b%PGCD = 0
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
13 août 2010 à 10:21
13 août 2010 à 10:21
Gwenalizee, le code que tu donnes dans ton main seul ne donne pas le PGCD, il fait simplement la division de X par Y..
Tu peux le remarquer toi même tu marques :
La piste de Gaunts est bonne.. Réfléchis a l'algorithme qui va avec ;)
Tu peux le remarquer toi même tu marques :
z=X/Y;
La piste de Gaunts est bonne.. Réfléchis a l'algorithme qui va avec ;)
Arg non, je me suis trompée (la gourde)
Je viens de le modifier:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int PGCD (int X, int Y)
{
int X1;
int Y1;
X=X1;
Y=Y1;
printf ("Choisir deux nombres entiers X et Y, de telle façon que X>Y.\n");
scanf ("X=%d\n Y=%d\n", &X, &Y);
int z;
while (z==0)
{
int r;
z=X/Y;
r=X%Y;
printf("%d=%d*%d+*d\n", X, Y, z, r);
X=z;
Y=r;
}
printf("Le PGCD de X=%d et de Y=%d est %d\n", X1, Y1, z);
return 0;
}
int main ()
{
int X;
int Y;
/*int X=12346;
int Y=22;*/
PGCD (X, Y);
return 0;
}
mais il m'affiche comme warning "too man y arguments for format"
ça veut dire quoi?
Je viens de le modifier:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int PGCD (int X, int Y)
{
int X1;
int Y1;
X=X1;
Y=Y1;
printf ("Choisir deux nombres entiers X et Y, de telle façon que X>Y.\n");
scanf ("X=%d\n Y=%d\n", &X, &Y);
int z;
while (z==0)
{
int r;
z=X/Y;
r=X%Y;
printf("%d=%d*%d+*d\n", X, Y, z, r);
X=z;
Y=r;
}
printf("Le PGCD de X=%d et de Y=%d est %d\n", X1, Y1, z);
return 0;
}
int main ()
{
int X;
int Y;
/*int X=12346;
int Y=22;*/
PGCD (X, Y);
return 0;
}
mais il m'affiche comme warning "too man y arguments for format"
ça veut dire quoi?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
Modifié par chico200987 le 13/08/2010 à 10:42
Modifié par chico200987 le 13/08/2010 à 10:42
Alors deja pour l'erreur ""too man y arguments for format" " ce la veut dire littéralement "Trop d'argument pour le format"
Si tu regardes la ligne du Warning, c'est celle-ci :
C'est juste une petite erreur d'inattention.. trouve l'erreur ;)
Ensuite il y a plusieurs problèmes dans ton algo.. les vois-tu ?
Si tu regardes la ligne du Warning, c'est celle-ci :
printf("%d=%d*%d+*d\n", X, Y, z, r);
C'est juste une petite erreur d'inattention.. trouve l'erreur ;)
Ensuite il y a plusieurs problèmes dans ton algo.. les vois-tu ?
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
13 août 2010 à 14:28
13 août 2010 à 14:28
chico va me tuer, mais bon:
Voici le code que tu devrais avoir, commenter pour que tu comprenne bien toute tes erreurs.
Je me suis inspirer de l'explication de l'algorithme pour le faire et de ton code.
Je n'ai pas de compilateur C donc il peut y avoir des petites erreurs toute bete.
Voici le code que tu devrais avoir, commenter pour que tu comprenne bien toute tes erreurs.
Je me suis inspirer de l'explication de l'algorithme pour le faire et de ton code.
Je n'ai pas de compilateur C donc il peut y avoir des petites erreurs toute bete.
#include <stdio.h> #include <math.h> #include <stdlib.h> int PGCD () { int X1, X; int Y1, Y; printf ("Entrez X et Y.\n"); scanf ("X=%d\n Y=%d\n", &X, &Y); //tu demande les valeur des deux nombres dont on veut calculer le PGCD X1 = X; //tu initialise X1 Y1 = Y; //Tu inialise Y1 int r; // tu declare le reste r do // on execute ce qui suit en boucle { r = X1%Y1; // on divise X1 par Y1 et on met le reste dans r if (r != 0) // si le reste n'est pas nul { X1=Y1; // on met Y1 dans X1 Y1=r; // on met le reste r dans Y1 } }while (r>0); // tant que le reste n'est pas nul printf("Le PGCD de X=%d et de Y=%d est %d\n", X1, Y1, z); return 0; } int main () { PGCD (X, Y); return 0; }
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
13 août 2010 à 14:33
13 août 2010 à 14:33
Tu n'avais pas l'droit varfendell :o
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
Modifié par varfendell le 13/08/2010 à 14:36
Modifié par varfendell le 13/08/2010 à 14:36
Je t'avais poster ça tout a l'heure.
En effet tu as dit ne pas savoir comment initialiser ton reste r (enfin z tout à l'heure).
Et bien l'avantage c'est qu'il va d abord rentrer dans la boucle, et dans cette boucle r sera initialisé.
en gros:
fonctionne alors que
ne marchera pas vu que r est inconnu
edit:
t'en fais pas chico, y a toujours qque erreur (comme dans le scanf)
En effet tu as dit ne pas savoir comment initialiser ton reste r (enfin z tout à l'heure).
Et bien l'avantage c'est qu'il va d abord rentrer dans la boucle, et dans cette boucle r sera initialisé.
en gros:
int r; do { r = 4; } while (r !=4)
fonctionne alors que
int r; while (r !=4) { r = 4; }
ne marchera pas vu que r est inconnu
edit:
t'en fais pas chico, y a toujours qque erreur (comme dans le scanf)
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
13 août 2010 à 14:43
13 août 2010 à 14:43
Le code de varfendell effectivement comporte effectivement quelques erreurs mais il marche dans l'ensemble.
Par contre celui de Gaunts ne fonctionne pas :p
Par contre celui de Gaunts ne fonctionne pas :p
Non, je suis paumée.
On peut me ré-expliquer pourquoi Gaunts? fait diminué r.
On peut me ré-expliquer pourquoi Gaunts? fait diminué r.
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
13 août 2010 à 15:16
13 août 2010 à 15:16
Pas étonnant que vous l'ayez paumé en donnant le code complet alors qu'elle galère avec les affectations !
Donner la réponse a ce stade la ne peut que l'embrouiller et la pousser a apprendre le code par coeur sans comprendre une ligne.
Gwen, sais-tu ce qu'est exactement le PGCD ?
Donner la réponse a ce stade la ne peut que l'embrouiller et la pousser a apprendre le code par coeur sans comprendre une ligne.
Gwen, sais-tu ce qu'est exactement le PGCD ?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
13 août 2010 à 15:20
13 août 2010 à 15:20
Pour savoir comment tu procèderais A LA MAIN pour le calculer (sur des petits nombres)
Ensuite, une fois que tu établis les règles qui te permettent de trouver le PGCD de ces deux nombres, il ne te reste plus qu'a essayer de l'adapter en code.
Ensuite, une fois que tu établis les règles qui te permettent de trouver le PGCD de ces deux nombres, il ne te reste plus qu'a essayer de l'adapter en code.
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
13 août 2010 à 15:17
13 août 2010 à 15:17
Non oublie mon code et mon r, c'était une autre technique et ce r était différent de celui que tu utilises. Garde le code complet de Varfendell, et essaye de bien décortiquer chaque étape, essaye de le faire marcher, et si tu as des questions pose les nous :).
Si tu veux une fois que tu auras compris celui la, je reposterai ma méthode pour te l'expliquer.
Si tu veux une fois que tu auras compris celui la, je reposterai ma méthode pour te l'expliquer.
J'ai compiler le code de Varfendell et ça me donne que des erreurs (sorry pour Varfendell) et ça me donne ça:
In function `PGCD':
c:24: error: `z' undeclared (first use in this function)
c:24: error: (Each undeclared identifier is reported only once
c:24: error: for each function it appears in.)
In function `main':
c:31: error: `X' undeclared (first use in this function)
c:31: error: `Y' undeclared (first use in this function)
Je crois qu'il a oublié d'utilisé 'z' et il a oublié d'enlever dans le main X et Y.
Mais je ne vois pas pourquoi il n'utilise pas 'z'.
In function `PGCD':
c:24: error: `z' undeclared (first use in this function)
c:24: error: (Each undeclared identifier is reported only once
c:24: error: for each function it appears in.)
In function `main':
c:31: error: `X' undeclared (first use in this function)
c:31: error: `Y' undeclared (first use in this function)
Je crois qu'il a oublié d'utilisé 'z' et il a oublié d'enlever dans le main X et Y.
Mais je ne vois pas pourquoi il n'utilise pas 'z'.
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
Modifié par Gaunts le 13/08/2010 à 15:42
Modifié par Gaunts le 13/08/2010 à 15:42
C'est normal, son code n'était pas complet, il ne t'a montré que l'algo, et il y a quelques trucs à changer (il a codé sans pouvoir tester, c'est pas simple).
Comme chico a dit, reprend le code que tu avais avant, et essaye de voir comment tu trouves un PGCD à la main. Quand on aura bien avancé comme ça, et que tu auras bien compri le fonctionnement du programme, on essaiera d'utiliser le code de Varfendell ainsi que le mien, pour te donner de nouveaux exemples à comprendre :), et on corrigera les erreurs que tu as obtenues avec son code.
Mais pour l'instant garde ce que tu avais, et pense à l'algo que tu vas utiliser.
Regarde la site que Varfendell t'avait donné, c'est assez bien expliqué
Comme chico a dit, reprend le code que tu avais avant, et essaye de voir comment tu trouves un PGCD à la main. Quand on aura bien avancé comme ça, et que tu auras bien compri le fonctionnement du programme, on essaiera d'utiliser le code de Varfendell ainsi que le mien, pour te donner de nouveaux exemples à comprendre :), et on corrigera les erreurs que tu as obtenues avec son code.
Mais pour l'instant garde ce que tu avais, et pense à l'algo que tu vas utiliser.
Regarde la site que Varfendell t'avait donné, c'est assez bien expliqué
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
13 août 2010 à 15:42
13 août 2010 à 15:42
J'ai supprime la correction !
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
Modifié par varfendell le 13/08/2010 à 15:46
Modifié par varfendell le 13/08/2010 à 15:46
Pour ces deux erreurs, enleve ce qui est dans les parenthese de PGCD et remplace z par r:
ligne 24
printf("Le PGCD de X=%d et de Y=%d est %d\n", X1, Y1, r);
ligne 31
PGCD (X, Y);
Si tu n'as pas été capable de comprendre ces deux erreur, je te vois mal coder ne serait ce qu'un programme :s
ligne 24
printf("Le PGCD de X=%d et de Y=%d est %d\n", X1, Y1, r);
ligne 31
PGCD (X, Y);
Si tu n'as pas été capable de comprendre ces deux erreur, je te vois mal coder ne serait ce qu'un programme :s
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
Modifié par Gaunts le 16/08/2010 à 11:09
Modifié par Gaunts le 16/08/2010 à 11:09
Tu as toujours deux problêmes dont on avait déja parlé avant de partir sur l'algo:
Quelque chose ne va pas sur cette ligne, chico t'en avait parlé.
Ensuite :
Il faut soit lui en donner une avant le while, soit utiliser un do..while comme avait dit varfendell, que tu peux apprendre à utiliser sur le site que l'on t'a donné.
scanf ("%d %d\n", &X, &Y);
Quelque chose ne va pas sur cette ligne, chico t'en avait parlé.
Ensuite :
int z; int r; while (z>0)Ici toujours pareil, tu compares z à 0 alors qu'il n'a pas de valeur.
Il faut soit lui en donner une avant le while, soit utiliser un do..while comme avait dit varfendell, que tu peux apprendre à utiliser sur le site que l'on t'a donné.
Alors, j'ai mis une boucle do while et j'ai compiler, ça me fait un truc bizarre:
ça me donne le contenu de chaque calcul mais je n'ai pas mon dernier printf contenant "Le PGCD de X et de Y est ..." et à la fin j'ai floating pion exception (je ne vois toujours pas ce qui pourrait poser problème avec ce float alors que j'en mets pas).
ça me donne le contenu de chaque calcul mais je n'ai pas mon dernier printf contenant "Le PGCD de X et de Y est ..." et à la fin j'ai floating pion exception (je ne vois toujours pas ce qui pourrait poser problème avec ce float alors que j'en mets pas).
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 11:23
16 août 2010 à 11:23
tu divise quelque pars par 0...et il aime pas (ça se comprend, moi non plus j'ai pas diviser par 0)
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
16 août 2010 à 11:31
16 août 2010 à 11:31
Prends de petits nombres pour tester sur papier avec une calculette, et effectue le traitement de ton algorithme..
Tu verras si un moment tu divises par 0 !
Tu verras si un moment tu divises par 0 !
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
Modifié par chico200987 le 16/08/2010 à 11:39
Modifié par chico200987 le 16/08/2010 à 11:39
Et pour te donner quelque chose de plus concret avec ton exemple 123456 et 22
La derniere ligne que tu obtiens est : 6=2*3+0 avant ton exception.
Ce qui veut dire que :
X1 = 6
Y1 = 2
z = 3
r = 0
Ensuite tu fais :
Donc :
X1 = 2
Y1 = 0
Puis tu remontes en haut puisque z > 3 et tu fais :
Soit z = 2 / 0 ...
Et ca.. il aime pas du tout !
Edit : Ah lol Gaunts, je complétais ta réponse :p
La derniere ligne que tu obtiens est : 6=2*3+0 avant ton exception.
Ce qui veut dire que :
X1 = 6
Y1 = 2
z = 3
r = 0
Ensuite tu fais :
X1=Y1; Y1=r;
Donc :
X1 = 2
Y1 = 0
Puis tu remontes en haut puisque z > 3 et tu fais :
z=X1/Y1;
Soit z = 2 / 0 ...
Et ca.. il aime pas du tout !
Edit : Ah lol Gaunts, je complétais ta réponse :p
c'est bon, j'ai trouvé mais ça m'affichait toujours un truc, donc j'ai du mettre un break.
Bon, bah je ne vais pas me reposer sur mes lauriers, j'ai déjà un nouveau code qui me pose problème: je dois faire la fonction factorielle de n.
Il marche mais il ne m'affiche pas les résultats que je veux voir.
J'envoie le code:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/*Écrire un sous-programme en C pour calculer n!. Écrire alors l'appel.*/
int Factorielle (int n)
{
if (n>1)
{
return n*Factorielle (n-1);
}
else
{
return 1;
}
return Factorielle (n);
}
int main ()
{
int n;
printf ("Vous voulez faire factorielle de n=");
scanf ("%d", &n);
printf("\n");
Factorielle (n);
printf("\n");
return 0;
}
Bon, bah je ne vais pas me reposer sur mes lauriers, j'ai déjà un nouveau code qui me pose problème: je dois faire la fonction factorielle de n.
Il marche mais il ne m'affiche pas les résultats que je veux voir.
J'envoie le code:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/*Écrire un sous-programme en C pour calculer n!. Écrire alors l'appel.*/
int Factorielle (int n)
{
if (n>1)
{
return n*Factorielle (n-1);
}
else
{
return 1;
}
return Factorielle (n);
}
int main ()
{
int n;
printf ("Vous voulez faire factorielle de n=");
scanf ("%d", &n);
printf("\n");
Factorielle (n);
printf("\n");
return 0;
}
Gaunts
Messages postés
1125
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
116
16 août 2010 à 12:15
16 août 2010 à 12:15
Avant de continuer, je pense que ton programme serait plus propre si tu initialisais les valeurs dans le main(), que tu fasses le calcul dans ta fonction PGCD puis que tu retournes le résultat pour l'afficher dans le main.
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
16 août 2010 à 12:39
16 août 2010 à 12:39
Je confirme pour la fonction PGCD que tu devrais demander les numeros dans ton main..
Sinon les déclarer avant et les envoyer vide ne sert a rien..
De plus, un break dans une boucle.. Ça existe bel et bien et ca marche, mais c'est super moche !
Sinon les déclarer avant et les envoyer vide ne sert a rien..
De plus, un break dans une boucle.. Ça existe bel et bien et ca marche, mais c'est super moche !
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 12:39
16 août 2010 à 12:39
Tu as plusieur probleme:
tu doit faire une boucle:
tu doit faire une boucle:
int Factorielle (int n) { int resultat = 1 for (i = n; i >1; 1--) { resultat = n*Factorielle (n-1); } return resultat; }
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 14:05
16 août 2010 à 14:05
montre moi ton code qui fait ça.
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 14:30
16 août 2010 à 14:30
Tu as un serieux probleme de logique mon pauvre
essaye comme ça:
essaye comme ça:
#include <stdio.h> #include <math.h> #include <stdlib.h> /*Écrire un sous-programme en C pour calculer n!. Écrire alors l'appel.*/ int Factorielle (int n) { int i; int resultat; for (i=n; i>1; i--) { resultat=n*Factorielle (n-1); } return resultat; } int main () { int n; printf ("Vous voulez faire factorielle de n="); scanf ("%d", &n); printf("\n"); int resultat = Factorielle (n); printf("Le résultat est: %d\n", resultat); return 0; }
scaravenger
Messages postés
2685
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
30 janvier 2015
617
16 août 2010 à 14:54
16 août 2010 à 14:54
Si c'est une fille, qu'elle est blonde et débute en programmation, t'as pas fini de plancher sur ses problèmes.
Au 2ème exo j'ai laissé tomber.
Au 2ème exo j'ai laissé tomber.
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 15:03
16 août 2010 à 15:03
Perso une fille ou un mecs je m'en fiche.
Enfin bref, quand tu dit que tu l'a modifié, tu parle de ton code qui ne marchait pas ou du code que je t'ai posté?
Enfin bref, quand tu dit que tu l'a modifié, tu parle de ton code qui ne marchait pas ou du code que je t'ai posté?
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
Modifié par varfendell le 16/08/2010 à 15:16
Modifié par varfendell le 16/08/2010 à 15:16
tu as mis quoi en entré?
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 15:18
16 août 2010 à 15:18
Autant pour moi, j'avais oublié un petit truc, essaye ceci et calcul le factorielle de 5 (ça devrait te donner 120)
#include <stdio.h> #include <math.h> #include <stdlib.h> /*Écrire un sous-programme en C pour calculer n!. Écrire alors l'appel.*/ int Factorielle (int n) { int i; int resultat = 1; for (i=n; i>1; i--) { resultat = n * Factorielle (n - 1); } return resultat; } int main () { int n; printf ("Vous voulez faire factorielle de n="); scanf ("%d", &n); printf("\n"); int resultat = Factorielle (n); printf("Le résultat est: %d\n", resultat); return 0; }
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
16 août 2010 à 15:20
16 août 2010 à 15:20
Pourquoi se compliquer avec un for ?
Un simple if comme elle avait fait marche très bien... et c'est plus compréhensible pour elle...
Un simple if comme elle avait fait marche très bien... et c'est plus compréhensible pour elle...
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 15:34
16 août 2010 à 15:34
il faut que tu change le type:
Nom du type Nombres stockables char -128 à 127 int -2 147 483 648 à 2 147 483 647 long -2 147 483 648 à 2 147 483 647 float -3.4 x 10 puissance 38 à 3.4 x 10 puissance 38 double -1.7 x 10 puissance 308 à 1.7 x 10 puissance 308
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
16 août 2010 à 15:41
16 août 2010 à 15:41
tu met double tout seul
Merci chico200987, il marche
Alors voici le programme que je dois faire (enfin l'énoncé):
je dois calculer la solution de x=cos (x) par la suite [je mets les indices]
(grande accolade)
X[0]=0
X[i+1]=cos X[i]
avec pour condition d'arrêt telle que valeur absolue de (X[i+1]-X[i]) est plus petit que ?.
Je dois alors écrire l'appel.
En fait là, je n'ai pas d'idée pour l'algo. Je ne vois pas comment démarrer.
Alors voici le programme que je dois faire (enfin l'énoncé):
je dois calculer la solution de x=cos (x) par la suite [je mets les indices]
(grande accolade)
X[0]=0
X[i+1]=cos X[i]
avec pour condition d'arrêt telle que valeur absolue de (X[i+1]-X[i]) est plus petit que ?.
Je dois alors écrire l'appel.
En fait là, je n'ai pas d'idée pour l'algo. Je ne vois pas comment démarrer.
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
16 août 2010 à 16:55
16 août 2010 à 16:55
Là.. Je t'avoue que je ne comprends pas bien l'énoncé..
C'est l'intitule exact ?
C'est l'intitule exact ?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
16 août 2010 à 17:15
16 août 2010 à 17:15
Yes jusque la ca va
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
17 août 2010 à 09:58
17 août 2010 à 09:58
petit epsilon est une notation mathématique pour dire "tres petit", donc declare une variable epsilon que tu initialise a 0.00001 par exemple.
Ensuite tu creer une boucle while ou tu effectue ton algorithme.
Tu peut choisir avec la boucle while:
ou avec un boucle do{}while();
Ensuite tu creer une boucle while ou tu effectue ton algorithme.
Tu peut choisir avec la boucle while:
#include <stdio.h> #include <math.h> #include <stdlib.h> /**/ int CosEgaleX (int n) { float epsilon = 0.0001; float X = 0, temp; while (diff > espilon) { temp = X; X = cos(X); diff = X - temp; } return X; } int main () { float resultat = CosEgaleX (); printf("Le résultat est: %f\n", resultat); return 0; }
ou avec un boucle do{}while();
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
17 août 2010 à 16:35
17 août 2010 à 16:35
Gwen on en est ou ?
Il me reste une heure !
Il me reste une heure !
Salut tout le monde et désolée de n'être pas assez présente ces temps-ci, il y a eu une quantité de boulot que je devais gérer.
Alors j'ai réfléchi à programme et je crois qu'en fait je pense qu'il faut poser le problème doit se poser comme ça:
comme i=0; X=0
i=1; X=cos0=1
i=2; X=cos1
i=3; X=cos(cos1)
...
Est-ce que tu vois comment le problème doit être résolu (et en fait je voulais mettre un i et non un X au départ pour demander à quel niveau on doit avoir le résultat)?
Je refais des modifs et je reposte le programme
Alors j'ai réfléchi à programme et je crois qu'en fait je pense qu'il faut poser le problème doit se poser comme ça:
comme i=0; X=0
i=1; X=cos0=1
i=2; X=cos1
i=3; X=cos(cos1)
...
Est-ce que tu vois comment le problème doit être résolu (et en fait je voulais mettre un i et non un X au départ pour demander à quel niveau on doit avoir le résultat)?
Je refais des modifs et je reposte le programme
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
19 août 2010 à 12:07
19 août 2010 à 12:07
Salut ! D'accord no soucy.
J'attends ton post de ton code ou t'en es, je fais une petite sieste d'une demi-heure et je suis la entre deux lignes de codes (et oui moi aussi je dois taffer :p)
J'attends ton post de ton code ou t'en es, je fais une petite sieste d'une demi-heure et je suis la entre deux lignes de codes (et oui moi aussi je dois taffer :p)
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
19 août 2010 à 12:28
19 août 2010 à 12:28
Ce que tu propose est de planifier le nombre d'itération...dans ce cas remplace le while par un for.
Cependant ce que tu essaye ne sera pas en accord avec le sujet étant donné qu'il ne t'ai pas demandé de planifié le nombre d'itération, mais de planifié la marge d'erreur (epsilon)
Cependant ce que tu essaye ne sera pas en accord avec le sujet étant donné qu'il ne t'ai pas demandé de planifié le nombre d'itération, mais de planifié la marge d'erreur (epsilon)
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
19 août 2010 à 14:31
19 août 2010 à 14:31
Si tu veut faire les deux en meme temps c'est pas dur, il te suffit juste de garder ta boucle while, de rajouter comme condition de sorti iteration < i (i sera definit par toi) et d'initialiser itération à 0 et de l'incrémenter a chaque passage dans la boucle while.
11 août 2010 à 13:58