Bonjour,

J’espère avoir poster dans la bonne section. Je suis étudiant en cours du soir en dut informatique.
J'ai un problème sur un TD ; je vois mon prof vendredi prochain je souhaiterai pouvoir avancer d'ici la !

En gros mon TAD doit afficher les entiers sous cette forme : le peano 3 = ***! ; ou le peano 6 = ******! etc ...

J'ai ensuite plusieurs fonctions pour manipuler le TAD (voir commentaire dans code peano.c).

J'ai une fonction inf qui vérifie que p < q et qui dois me renvoyer un booléen, sup qui vérifie que p > q et qui renvoie aussi 0 pour faux et 1 pour vrai.

Jusque la, tout va bien. Lors du lancement de l'exe via la console, j'ai bien les bons résultats. Mais lorsque j'intègre la fonction égal (p == q) les résultats des fonctions inf et sup passe à 33 (lorsque p = ***! et q = ***!).

J'ai donc rechangé et maintenant je me retrouve avec mes 3 fonctions (inf, sup et egal) à 0 (qui signifie dans mon code qu'il trouve autre chose que vrai(ce qui peut être juste dans certains cas mais pas fiable)).

Je vous poste en dessous les différents code ( le client, déclaration et les corps), j’espère avoir donné assez d'informations n'hésitez pas à me demander si besoin. PS : Lors du passage en balise des décalages d'indentations ce sont produites, désolé pour la lecture.

Je débute donc désolé si je comprend pas tout du premier coup !

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//clientPeano.c
 
#include <stdio.h>
#include <stdlib.h>
#include "peano.h"
 
int main(void)
{
    peano p ;
    peano n ;
    peano q ;
    peano m ;
    int k ;
    int a ;
    int e;
    p = zero() ;
    q = zero() ;
    n = zero();
    m = zero();
 
    p = succ(succ(p));
    q = succ(succ(succ(q)));
    n = add(p,q);
    m = mult(p,q);
 
    //affiche le successeur du successeur du peano p
    printf("Le successeur du successeur du peano p est : ");
    affiche(p);
   //affiche le successeur du peano q
    printf("Le successeur du peano q est : ");
    affiche(q);
    //affiche l'addition de p et q
    printf("Le résultat de l'addition du peano p et q est : ");
    affiche(n);
    //affiche la mutliplication de p et q
    printf("Le résultat de la mutliplication du peano p et q est : ");
	affiche(m);
    //affiche le resultat du booleen pour savoir si p < q 
    printf ("Resulat fonction inférieur (p<q |Faux : 0, Vrai : 1): %d\n", k = inf(p,q));
    // p > q
    printf("Resultat fonction supérieur (p>q |Faux : 0 , Vrai : 1) : %d\n", a = sup(p,q));
    //verifie p == q 
    printf("Resultat fonction egal (p=q |Faux : 0 , Vrai : 1) : %d\n", e = egal(p,q));
}

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//peano.c // fonction problematique // 
 
//affiche le resultat du booleen pour savoir si p < q 
int inf( peano p, peano q)
{
	int i= 0 ;
	while ((p.p[i] != '!') || (q.p[i] != '!'))
	{
		if ((p.p[i] == '!') && (q.p[i] == '*'))
		{
			return 1;
		}
		else
        {
            return 0;
        }
       i++ ;
	}
}
 
// p > q
int sup (peano p, peano q)
{
	int i = 0 ;
	while ((p.p[i] != '!') || (q.p[i] != '!'))
	{
		if ((p.p[i] == '*') && (q.p[i] == '!'))
		{
            return 1 ;
		}
		else 
        {
            return 0 ;
        }
    i++;
	}
}
 
//verifie p == q 
int egal (peano p, peano q)
{
	int i = 0 ;
	while ((p.p[i] != '!') || (q.p[i] != '!'))
	{
		if ((p.p[i] == '!') && (q.p[i] == '!'))
		{
			return 1 ;
		}
		else
        {
            return 0 ;
        }
    i++;
	}
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//peano.h 
#define max_p 99
 
typedef struct peano
{
	char p[max_p+1];
}
peano ;
 
peano const zero();
 
peano succ( peano p);
 
peano add( peano p , peano q);
 
peano mult( peano p, peano q);
 
int inf( peano p, peano q);
 
int sup( peano p, peano q);
 
int egal( peano p, peano q);
 
void affiche( peano p );
Avec ce code j'obtiens ceci lors dans la console :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Le successeur du successeur du peano p est : **!
Le successeur du peano q est : ***!
Le résultat de l'addition du peano p et q est : *****!
Le résultat de la mutliplication du peano p et q est : ******!
Resulat fonction inférieur (p<q |Faux : 0, Vrai : 1): 0
Resultat fonction supérieur (p>q |Faux : 0 , Vrai : 1) : 0
Resultat fonction egal (p=q |Faux : 0 , Vrai : 1) : 0
Des idées pour m'aider ?

Merci d'avance !