PGCD PPCM - Forum C
PGCD PPCM [Fermé]
damahdi
- Modifié le 25 avril 2018 à 18:21 - Dernière réponse : [Dal]
- 26 avril 2018 à 12:02
je suis actuellement étudiant en licence informatique et j'ai un petit souci.
Alors voilà, on me demande de créer une fonction pgcd_ppcm ayant comme paramètres deux entiers positifs et les adresses de deux variables (la première pour le pgcd et la seconde pour le ppcm) et qui retourne la constante ALLRIGHT (resp.ARGHH) si le calcul a pu s'effectuer (resp. sinon) et modifie les variables pointées en leur affectant respectivement le plus grand commun diviseur et le plus petit commun multiple des deux entiers passés en paramètres. Et donc voici mon programme:
int pgcd_ppcm(unsigned int a,unsigned int b ,int* pgcd,int* ppcm){
while(a != b && a != 0 && b != 0){
a =a;
*pgcd = &a;
int p=a*b;
*ppcm =(p / *pgcd);
int pgcd_ppcm(unsigned int a,unsigned int b,int* pgcd,int* ppcm);
Dans ce cas j'ai plusieurs problèmes, comme comment utiliser le resp. ARGHH pour le message ALLRIGHT et autre, et ma fonction n'est toujours pas correcte du à plusieurs erreur on me signale que certaine partie sont justes mais d'autres non avec ces messages d'erreur: Some possible problems Your function called over 10 and 48 returned 1644987948 as resuting value while 42 was expected , Some possible problems The third parameter of your function should be a pointer to an integer while 'int * pgcd' was found et Some possible problems, Caught segfault - Check if you did not accessed an address that you should have not (e.g. accessing an array out of its bounds). 0x0000000000403273 in pgcd_ppcm (a=10, b=10, pgcd=0x0, ppcm=0x7fffffffebdc) #0 0x0000000000403273 in pgcd_ppcm (a=10, b=10, pgcd=0x0, ppcm=0x7fffffffebdc)
Oui ça fait beaucoup d'erreur désolé mais c'est ma première année de programmation.
Pgcd casio graph 35+ ✓ - Forum - Caisse enregistreuse
Ppcm algorithme - Forum - Programmation
398 25 avril 2018 à 22:05
bonsoir, je pense que tu devrais d'abord faire des exercices beaucoup plus simples.
je te suggère de d'abord calculer la somme de deux nombres.
- 25 avril 2018 à 22:09
Bonsoir, merci du conseil mais je pense avoir dépasser ce stade. Certes je ne suis pas doué mais j'aimerai une réponse concrète.
786 - Modifié le 26 avril 2018 à 11:35
par rapport à ton code, sur le plan du langage C (abstraction faite de l'algorithme mathématique) :
- dans le code que tu postes, tu n'appelles pas valablement ta fonction dans main, tu ne fais que reproduire son prototype, sans passer des valeurs et variables définies dans main correspondantes aux types attendus
- tu n'as pas définit non plus dans main les variables que tu dois passer à ta fonction
- ton prototype
pgcd_ppcm(unsigned int a,unsigned int b,int* pgcd,int* ppcm)
devrait sans doutes être plutôt
pgcd_ppcm(unsigned int a, unsigned int b, unsigned int* pgcd, unsigned int* ppcm)
(même si cela n'a pas d'impact direct sur le bon fonctionnement du code, c'est plus rigoureux)
change la valeur de l'entier pointé par le pointeur pgcd en lui affectant l'adresse mémoire de a, ce n'est sans doutes pas ce que tu veux faire et ton code devrait probablement être
*pgcd = a;
pour changer la valeur de l'entier pointé par le pointeur pgcd en lui affectant le contenu de
... avec ton code, tu te retrouves donc avec une valeur affectée à l'emplacement pointé par
qui n'a rien à voir avec la valeur calculée de
- selon son prototype, ta fonction
pgcd_ppcm()
retourne un
, mais cette fonction ne comporte aucune instruction
retournant quoi que ce soit
Le fait que tu fasses ce type d'erreurs signifie que tu dois revoir les bases du langage C et je suis assez d'accord avec la suggestion de yg_be :-)
Cela dit, avec ces indications, et ton cours de C, tu devrais arriver à corriger ton code sur le plan du langage C.
Ensuite, il faudra que tu t'attaques à l'algorithme mathématique.
786 - Modifié le 26 avril 2018 à 12:05
Voilà un code en C proposant une fonction addition, qui stocke le résultat grâce au passage de pointeur en argument et retourne une valeur indiquant le statut de son exécution :
#define TOUT_VA_BIEN    1
#define RIEN_NE_VA_PLUS 0
* addition() - calculer la somme de deux entiers
* @a: premier entier
* @b: second entier
* @somme: résultat de la somme
* Calcule la somme de deux entiers en stockant le résultat
* à l&apos;adresse pointée par le 3ème paramètre
* Retourne: TOUT_VA_BIEN si le résultat est inférieur à 10
* et RIEN_NE_VA_PLUS sinon
int addition(int a, int b, int * somme) {
*somme = a + b;
if (*somme < 10)
return TOUT_VA_BIEN;
return RIEN_NE_VA_PLUS;
statut = addition(a, b, &somme);
printf("La somme de %d et %d vaut %d\n", a, b, somme);
if (statut == TOUT_VA_BIEN)
printf("Tout va bien :-)\n");
if (statut == RIEN_NE_VA_PLUS)
printf("Alerte : l&apos;addition des deux nombres n&apos;est pas "
"inférieure à 10\n");
cela devrait t'aider à comprendre tout cela :-)