PILE AIDE [C] moi svp
Résolu
fabrice
-
fabrice -
fabrice -
Bonjour,
j'ai un programme de pile que je veux faire en chaine de caractere
je connais le principe en entier mais sa ne veut pas se compiler en char
voilà le programme en entier
voilà ce que j'ai essayer
AIDEZ MOI SVP;
j'ai un programme de pile que je veux faire en chaine de caractere
je connais le principe en entier mais sa ne veut pas se compiler en char
voilà le programme en entier
#include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct { int max; int n; /* repere le dernier occupe de Element */ int *element; } pile; void initpile(pile *p,int max){ p->max=max; p->n=-1; p->element=(int*)malloc(max*sizeof(int)); } int pilevide(pile *p){ return p->n==-1; } void empiler(pile *p,int v){ if(p->n < p->max-1) { p->n++; p->element[p->n]=v; } else { printf("Erreur : Pile saturee !!");} } int depiler(pile *p,int *v){ *v=p->element[p->n]; p->n--; } void listerpile(pile *p){ int i; if(pilevide(p)) { printf("Erreur : Pile vide !!\n"); } else { for(i=0;i<=p->n;i++){ printf("%d\t",p->element[i]); } } } void dertruirepile(pile *p){ free(p->element); } int menu() { int cod; printf("\n\n GESTION D'UNE PILE \n\n"); printf("0 - Quitter\n"); printf("1 - Initialisation de la pile\n"); printf("2 - La pile est-elle vide ?\n"); printf("3 - Insertion dans la pile\n"); printf("4 - Retrait de la pile\n"); printf("5 - Listage de la pile\n"); printf("\n"); printf("Votre choix ? : ");scanf("%d",&cod); printf("\n"); return cod; } main() { pile p1; pile *pp1=&p1; int t,v,fini=0; printf("Taille de la pile d'entiers ? :"); scanf("%d",&t); initpile(pp1,t); while(!fini){ switch(menu()){ case 0 : fini=1;exit(0);break; case 1 :dertruirepile(pp1); printf("Taille de la pile d'entiers ? :"); scanf("%d",&t); initpile(pp1,t); break; case 2 :if(pilevide(pp1)) { printf("Pile vide !!\n"); } else {printf("Pile non vide !!\n");}break; case 3 :printf("Valeur empiler ? :"); scanf("%d",&v);empiler(pp1,v);break; case 4 : if(pilevide(pp1)) printf("pile vide "); else depiler(pp1,&v); printf("%d",v); break; case 5 : listerpile(pp1);break; } getch(); } }
voilà ce que j'ai essayer
#include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct { int max; int n; /* repere le dernier occupe de Element */ char *element; } pile; void initpile(pile *p,int max){ p->max=max; p->n=-1; p->element=(char*)malloc(max*sizeof(char)); } int pilevide(pile *p){ return p->n==-1; } void empiler(pile *p,char *v){ if(p->n < p->max-1) { p->n++; p->element=v; } else { printf("Erreur : Pile saturee !!");} } int depiler(pile *p){ p->n--; } void listerpile(pile *p){ int i; if(pilevide(p)) { printf("Erreur : Pile vide !!\n"); } else { for(i=0;i<=p->n;i++){ printf("%d\t",p->element[i]); } } } void dertruirepile(pile *p){ free(p->element); } int menu() { int cod; printf("\n\n GESTION D'UNE PILE \n\n"); printf("0 - Quitter\n"); printf("1 - Initialisation de la pile\n"); printf("2 - La pile est-elle vide ?\n"); printf("3 - Insertion dans la pile\n"); printf("4 - Retrait de la pile\n"); printf("5 - Listage de la pile\n"); printf("\n"); printf("Votre choix ? : ");scanf("%d",&cod); printf("\n"); return cod; } main() { pile p1; pile *pp1=&p1; int t,fini=0; char *v; printf("Taille de la pile d'entiers ? :"); scanf("%d",&t); initpile(pp1,t); while(!fini){ switch(menu()){ case 0 : fini=1;exit(0);break; case 1 :dertruirepile(pp1); printf("Taille de la pile d'entiers ? :"); scanf("%d",&t); initpile(pp1,t); break; case 2 :if(pilevide(pp1)) { printf("Pile vide !!\n"); } else {printf("Pile non vide !!\n");}break; case 3 :printf("Valeur empiler ? :"); scanf("%s",v);empiler(pp1,v);break; case 4 : if(pilevide(pp1)) printf("pile vide "); else depiler(pp1); printf("%d",v); break; case 5 : listerpile(pp1);break; } getch(); } }
AIDEZ MOI SVP;
A voir également:
- PILE AIDE [C] moi svp
- Pile carte mere - Guide
- Pile manette wii ✓ - Forum Wii
- Pile bios empêche démarrage pc ✓ - Forum Matériel & Système
- PIle BIOS ✓ - Forum Carte-mère/mémoire
- Comment changer pile souris contactor ✓ - Forum MacOS
5 réponses
En gros tu veux empiler des chaines de caractères, c'est ça ?
Si oui le problème est là :
char* correspond à une chaine de caractères, donc pour avoir un tableau de chaines de caractères utilise plutôt char*[20] par exemple.
Si non je ne vois pas.
Si oui le problème est là :
char* correspond à une chaine de caractères, donc pour avoir un tableau de chaines de caractères utilise plutôt char*[20] par exemple.
Si non je ne vois pas.
Bonjour
Si comme tu le dis ce sont bien des char que tu veux empiler (et pas des chaînes) :
1-
Ta fonction oid empiler(pile *p,char *v){
if(p->n < p->max-1) {
p->n++;
p->element=v; }
n'est pas cohérente . Le paramètre v passé devrait être un char, pas un char * puis que c'est un caractère que tu empiles et pas une chaîne.
2- Dans listerpile, tu pourrais utiliser %c plutôt que %d pour afficher (essaye pour voir la différence)
3- dans ton case 3 (insertion) tu ne devrais insérer que le premier caractère et pas toute la chaine : empiler (ppl,v[0])
Si comme tu le dis ce sont bien des char que tu veux empiler (et pas des chaînes) :
1-
Ta fonction oid empiler(pile *p,char *v){
if(p->n < p->max-1) {
p->n++;
p->element=v; }
n'est pas cohérente . Le paramètre v passé devrait être un char, pas un char * puis que c'est un caractère que tu empiles et pas une chaîne.
2- Dans listerpile, tu pourrais utiliser %c plutôt que %d pour afficher (essaye pour voir la différence)
3- dans ton case 3 (insertion) tu ne devrais insérer que le premier caractère et pas toute la chaine : empiler (ppl,v[0])
Salut,
Peut être une implémentation par liste chaînée est plus facile;-)
Peut être une implémentation par liste chaînée est plus facile;-)
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Element{ char nom[50]; struct Element *suivant; }Pile; Pile *Initialiser(){ return NULL; } int PileVide(Pile *P){ if(P==NULL) return 1; return 0; } int PilePleine(Pile *P){ return 0; // elle ne peut pas être vide // toutefois la taille de la pile est limité par la mémoire } void Empiler(Pile **P,char *nom){ Pile *nouveau; nouveau = (Pile *) malloc (sizeof(Pile)); strcpy(nouveau->nom,nom); nouveau->suivant = *P; *P = nouveau; } int Depiler(Pile **P, char *nom){ Pile *suppr; if(PileVide(*P)) return 0; strcpy(nom,(*P)->nom); suppr = *P; *P=(*P)->suivant; free(suppr); return 1; } void Detruire(Pile **P){ Pile *suppr; while(*P!=NULL){ suppr=*P; *P=(*P)->suivant; free(suppr); } *P=NULL; } void Affiche(Pile *P){ Pile *courant; for(courant=P;courant!=NULL;courant=courant->suivant) printf("%s ",courant->nom); printf("\n"); } int main() { char mot[50];; Pile *P; P = Initialiser(); printf("Entrez mot : "); scanf("%s",mot); Empiler(&P,mot); Affiche(P); printf("Entrez mot : "); scanf("%s",mot); Empiler(&P,mot); Affiche(P); printf("Entrez mot : "); scanf("%s",mot); Empiler(&P,mot); Affiche(P); if(Depiler(&P,mot)) printf("Dernier Entré / Premier Sorti : %s\n",mot); Affiche(P); Detruire(&P); Affiche(P); return 0; }Resultat
lami20j@debian:~/trash/ccm_c$ gcc ccm48_pile_listechainee.c lami20j@debian:~/trash/ccm_c$ ./a.out Entrez mot : AAA AAA Entrez mot : BBB BBB AAA Entrez mot : CCC CCC BBB AAA Dernier Entré / Premier Sortie : CCC BBB AAA
S'il vous plait pouvez vous modifier tout le programme
sa va pas vous prendre trop de temps
moi j'arrive pas a le faire
svp :(
sa va pas vous prendre trop de temps
moi j'arrive pas a le faire
svp :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question