4 pièce(s) jointe(s)
Création d'un Header (biblio de Pile)
Bonsoir,
j'ai voulu créer un fichier.h contenant le fonctions manipulant les piles (déclaration, empiler, dépiler, ...) pour simplifier la vie :mrgreen:, mais je rencontre un problème lors de l'exécution du programme et je ne sait justement pas d'où vient le prob (du fichier.h ou du main), c'est pour cela que je m'adresse à l'un de vous pour m'aider à ce sujet, voici mes fichier et code:
Pièce jointe 224701
Pièce jointe 224699
Pièce jointe 224700
pour ceux qui ont la flème de télécharger les fichiers voici leur code:
pile:
Code:
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 56 57 58 59 60 61 62 63
| #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct celle
{
int val;
struct celle *svt;
}pile;
bool pile_vide(pile *p)
{
if(p == NULL) return true;
else return false;
}
pile *init_pile()
{
return NULL;
}
int sommet_pile(pile *tete)
{
return tete->val;
}
void empiler(pile **tete, int x)
{
pile *p;
p = malloc(sizeof(pile));
p->val = x;
p->svt = tete;
tete = p;
}
pile *depiler(pile *tete)
{
pile *p = tete;
if(tete != NULL)
{
tete = tete->svt;
free(p);
p = NULL;
}
return tete;
}
int nbr_elt(pile *p)
{
int i = 0;
pile *k = p;
while(pile_vide(k) == false)
{
k = depiler(k);
i++;
}
return i;
} |
main:
Code:
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
| #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <pile.h>
int main()
{
pile *tete;
tete = init_pile();
int i, val;
for(i=0;i<6;i++)
{
printf("n%d = ",i+1);
scanf("%d",&val);
empiler(tete, val);
}
printf("\n");
i = 1;
while(pile_vide(tete) == false)
{
val = -sommet_pile(tete);
printf("-n%d = %d.", i, val);
i = i+1;
tete = depiler(tete);
}
return 0;
} |
Pièce jointe 224702
merci d'y répondre :D
1 pièce(s) jointe(s)
[Résolue] Petite confusion de pointeur
Bonsoir,
Je souhaiterais tout d'abord à vous remercier d'avoir prêter attention à ma question et vous informer que j'ai pu résoudre mon problème de POINTEUR.
Je ne connaissait pas encore les pointeurs (pas de base), juste une petite idée un peu fausse. Après avoir lu le cours des pointeurs sur OC 8-) je me suis vite rendu compte de mon erreur et donc voila le nouveau code:
pile.h :
Code:
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 56
|
#ifndef DEF_PILE
#define DEF_PILE
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#endif // DEF_PILE
typedef struct cellule
{
int val;
struct cellule *svt;
}pile;
bool pile_vide(pile *p)
{
if(p == NULL) return true;
else return false;
}
pile *init_pile()
{
return NULL;
}
int sommet_pile(pile *tete)
{
return tete->val;
}
void empiler(pile **tete, int x)
{
pile *p;
p = malloc(sizeof(pile));
p->val = x;
p->svt = *tete;
*tete = p;
}
pile *depiler(pile *tete)
{
pile *p = tete;
if(tete != NULL)
{
tete = tete->svt;
free(p);
p = NULL;
}
return tete;
} |
main.c :
Code:
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
|
#ifndef DEF_MAIN
#define DEF_MAIN
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <pile.h>
#endif // DEF_MAIN
int main()
{
pile *tete;
tete = init_pile();
int i, val;
for(i=0;i<6;i++)
{
printf("n%d = ",i+1);
scanf("%d",&val);
empiler(&tete, val);
}
printf("\n");
while(pile_vide(tete) == false)
{
val = sommet_pile(tete);
printf("n%d = %d.\n", i, val);
i = i-1;
tete = depiler(tete);
}
return 0;
} |
Voici le résultat:
Pièce jointe 224920
J'ai supprimé la fonction nbr_elt qui envoie le nombre d'éléments de la pile car j'ai constaté qu'elle modifé notre tête même si j'ai travaillé avec p car p modifie son adresse directement dans la mémoire.
J'ai aussi changé un peu mon algorithme qui à la fin, affiche l'inverse de la pile (de n6 à n1) .... et oui je n'est pas trop voulu me casser la tête sur ça :mrgreen:
Aller sur ça je ferme le sujet et je vous remercie encore une fois ;) .