Piles en C
glee89
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
glee89 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
glee89 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
<code>Bonjour,
Ce message s'adresse à tous les seigneurs de la programmation en C, j'ai un très gros problème lorsque je compile mon programme, un problème avec Windows et le compilateur!
Je voudrais, à tous les master de la programmation qui sont connectés actuellement de résoudre ce blême pour moi.
Le programme:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "pile1.h"
char affi_menu() {
printf("/*****************************************************************************\\n") ;
printf("\n * GESTION D'UNE PILE DE PERSONNES *\n") ;
printf("/*****************************************************************************\\n") ;
printf("\n \n") ;
}
int menu () {
printf (" 1 - Insertion dans la pile\n") ;
printf (" 2 - Retrait de la pile\n") ;
printf (" 3 - Listage de la pile\n") ;
printf (" 0 - Fin\n") ;
printf ("\n") ;
printf ("Votre choix ? ") ;
int cod ; scanf ("%d", &cod) ; getchar() ;
printf ("\n") ;
return cod ;
}
void initialisation (Pile*ptr_tas){
ptr_tas->debut = NULL ;
ptr_tas->taille = 0 ;
}
/* empiler (ajouter) un élément dans la pile */
int empiler (Pile * ptr_tas, Etudian*info)
{
Cellule*nouveau_element ;
if ((nouveau_element = (Cellule*) malloc (sizeof (Cellule))) == NULL) return -1 ;
if ((nouveau_element->info = (Etudian*) malloc (50 * sizeof (Etudian)))== NULL) return -1 ;
strcpy (nouveau_element->info->Nom, info->Nom) ;
nouveau_element->info->Matricule = info->Matricule ;
nouveau_element->suiv = ptr_tas->debut ;
ptr_tas->debut = nouveau_element ;
ptr_tas->taille++ ;
}
/* depiler (supprimer un élément de la pile */
int depiler (Pile*ptr_tas){
Cellule*supp_element ;
if (ptr_tas->taille == 0) return -1 ;
supp_element = ptr_tas->debut ;
ptr_tas->debut = ptr_tas->debut->suiv ;
free (supp_element->info) ;
free (supp_element) ;
ptr_tas->taille-- ;
return 0 ;
}
/* affichage de la pile */
void affiche (Pile * ptr_tas){
Cellule*courant ;
int i ;
courant = ptr_tas->debut ;
for(i=0;i<ptr_tas->taille;++i)
{
printf("\t\t%s\n", courant->info) ;
courant = courant->suiv ;
}
}
int main ()
{
int stop = 0 ;
Pile *ptr_tas ;
Etudian *pt_eleve ;
if ((ptr_tas = (Pile *) malloc (sizeof (Pile))) == NULL) return -1 ;
if ((pt_eleve = (Etudian*) malloc (50 * sizeof (Etudian))) == NULL) return -1 ;
initialisation (ptr_tas) ;
while (!stop) { // tantque (nonstop) faire
affi_menu() ;
switch (menu() ) {
case 0 :
system("cls") ;
affi_menu() ;
stop = 1 ;
break ;
case 1:
system("cls") ;
affi_menu() ;
printf ("Entrez le matricule de l'eleve: ") ;
scanf ("%d", pt_eleve->Matricule) ;
printf("Entrer son nom: ") ;
scanf("%s",pt_eleve->Nom) ;
empiler (ptr_tas, pt_eleve) ;
printf ("La pile contient %d elements. \n",ptr_tas->taille) ;
printf("\n +\n") ;
system("pause") ;
system("cls") ;
break ;
case 2:
system("cls") ;
if (ptr_tas->taille==0){
affi_menu() ;
printf("\nRetrait interdit.\n") ;
printf("\nLa pile est vide!\n") ;
}
else{
affi_menu() ;
printf ("\nLe dernier entre (LastInFirstOut) [ %s ] sera supprime",pile_donnee(ptr_tas)) ;
printf ("\nLe dernier entre est supprime\n") ;
depiler (ptr_tas) ; /* suppression de dernier element entre */
printf ("La pile contient %d elements. \n",ptr_tas->taille) ;
}
printf("\n \n") ;
system("pause") ;
system("cls") ;
break ;
case 3:
system("cls") ;
affi_menu() ;
printf("\n****************************** Haut de la PILE *********************************\n") ;
affiche(ptr_tas) ;
printf("______________________________ Bas de la PILE __________________________________\n\n") ;
printf(" \n") ;
printf("\n \n") ;
system("pause") ;
system("cls") ;
break ;
} // fin_switch()
} // fin_tantque
printf(" \n") ;
system("pause") ;
return 0 ;
getch() ;
}
La bibliothèque:
typedef struct Etudiant
{
int*Matricule ;
char*Nom ;
}Etudian ;
typedef struct Pt_sur_Cellule {
Etudian*info ;
struct Pt_sur_Cellule*suiv ;
} Cellule ;
typedef struct ListeRepere{
Cellule*debut ;
int taille ;
} Pile ;
/* initialisation */
void initialisation (Pile*ptr_tas) ;
/* EMPILER*/
int empiler (Pile*ptr_tas, Etudian*info) ;
/* DEPILER*/
int depiler (Pile*ptr_tas) ;
/* Affichage de élément en haut de la pile (LastInFirstOut) */
#define pile_donnee(ptr_tas) ptr_tas->debut->info
/* Affiche la pile */
void affiche (Pile*ptr_tas) ;
Ce message s'adresse à tous les seigneurs de la programmation en C, j'ai un très gros problème lorsque je compile mon programme, un problème avec Windows et le compilateur!
Je voudrais, à tous les master de la programmation qui sont connectés actuellement de résoudre ce blême pour moi.
Le programme:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "pile1.h"
char affi_menu() {
printf("/*****************************************************************************\\n") ;
printf("\n * GESTION D'UNE PILE DE PERSONNES *\n") ;
printf("/*****************************************************************************\\n") ;
printf("\n \n") ;
}
int menu () {
printf (" 1 - Insertion dans la pile\n") ;
printf (" 2 - Retrait de la pile\n") ;
printf (" 3 - Listage de la pile\n") ;
printf (" 0 - Fin\n") ;
printf ("\n") ;
printf ("Votre choix ? ") ;
int cod ; scanf ("%d", &cod) ; getchar() ;
printf ("\n") ;
return cod ;
}
void initialisation (Pile*ptr_tas){
ptr_tas->debut = NULL ;
ptr_tas->taille = 0 ;
}
/* empiler (ajouter) un élément dans la pile */
int empiler (Pile * ptr_tas, Etudian*info)
{
Cellule*nouveau_element ;
if ((nouveau_element = (Cellule*) malloc (sizeof (Cellule))) == NULL) return -1 ;
if ((nouveau_element->info = (Etudian*) malloc (50 * sizeof (Etudian)))== NULL) return -1 ;
strcpy (nouveau_element->info->Nom, info->Nom) ;
nouveau_element->info->Matricule = info->Matricule ;
nouveau_element->suiv = ptr_tas->debut ;
ptr_tas->debut = nouveau_element ;
ptr_tas->taille++ ;
}
/* depiler (supprimer un élément de la pile */
int depiler (Pile*ptr_tas){
Cellule*supp_element ;
if (ptr_tas->taille == 0) return -1 ;
supp_element = ptr_tas->debut ;
ptr_tas->debut = ptr_tas->debut->suiv ;
free (supp_element->info) ;
free (supp_element) ;
ptr_tas->taille-- ;
return 0 ;
}
/* affichage de la pile */
void affiche (Pile * ptr_tas){
Cellule*courant ;
int i ;
courant = ptr_tas->debut ;
for(i=0;i<ptr_tas->taille;++i)
{
printf("\t\t%s\n", courant->info) ;
courant = courant->suiv ;
}
}
int main ()
{
int stop = 0 ;
Pile *ptr_tas ;
Etudian *pt_eleve ;
if ((ptr_tas = (Pile *) malloc (sizeof (Pile))) == NULL) return -1 ;
if ((pt_eleve = (Etudian*) malloc (50 * sizeof (Etudian))) == NULL) return -1 ;
initialisation (ptr_tas) ;
while (!stop) { // tantque (nonstop) faire
affi_menu() ;
switch (menu() ) {
case 0 :
system("cls") ;
affi_menu() ;
stop = 1 ;
break ;
case 1:
system("cls") ;
affi_menu() ;
printf ("Entrez le matricule de l'eleve: ") ;
scanf ("%d", pt_eleve->Matricule) ;
printf("Entrer son nom: ") ;
scanf("%s",pt_eleve->Nom) ;
empiler (ptr_tas, pt_eleve) ;
printf ("La pile contient %d elements. \n",ptr_tas->taille) ;
printf("\n +\n") ;
system("pause") ;
system("cls") ;
break ;
case 2:
system("cls") ;
if (ptr_tas->taille==0){
affi_menu() ;
printf("\nRetrait interdit.\n") ;
printf("\nLa pile est vide!\n") ;
}
else{
affi_menu() ;
printf ("\nLe dernier entre (LastInFirstOut) [ %s ] sera supprime",pile_donnee(ptr_tas)) ;
printf ("\nLe dernier entre est supprime\n") ;
depiler (ptr_tas) ; /* suppression de dernier element entre */
printf ("La pile contient %d elements. \n",ptr_tas->taille) ;
}
printf("\n \n") ;
system("pause") ;
system("cls") ;
break ;
case 3:
system("cls") ;
affi_menu() ;
printf("\n****************************** Haut de la PILE *********************************\n") ;
affiche(ptr_tas) ;
printf("______________________________ Bas de la PILE __________________________________\n\n") ;
printf(" \n") ;
printf("\n \n") ;
system("pause") ;
system("cls") ;
break ;
} // fin_switch()
} // fin_tantque
printf(" \n") ;
system("pause") ;
return 0 ;
getch() ;
}
La bibliothèque:
typedef struct Etudiant
{
int*Matricule ;
char*Nom ;
}Etudian ;
typedef struct Pt_sur_Cellule {
Etudian*info ;
struct Pt_sur_Cellule*suiv ;
} Cellule ;
typedef struct ListeRepere{
Cellule*debut ;
int taille ;
} Pile ;
/* initialisation */
void initialisation (Pile*ptr_tas) ;
/* EMPILER*/
int empiler (Pile*ptr_tas, Etudian*info) ;
/* DEPILER*/
int depiler (Pile*ptr_tas) ;
/* Affichage de élément en haut de la pile (LastInFirstOut) */
#define pile_donnee(ptr_tas) ptr_tas->debut->info
/* Affiche la pile */
void affiche (Pile*ptr_tas) ;
5 réponses
Y'aura pas besoin d'un master en prog pour t'aider sur ce genre de problème ^^.
En revanche, ce qui nous aiderait, ce serait que tu nous précises ton problème. Warning à la compilation ? Erreur ? Quelle ligne ? Etc.
La prochaine fois, n'oublie pas de mettre ton code dans les balises "code" (à droite du bouton "souligné"), sinon ce n'est pas très lisible.
Cdlt,
En revanche, ce qui nous aiderait, ce serait que tu nous précises ton problème. Warning à la compilation ? Erreur ? Quelle ligne ? Etc.
La prochaine fois, n'oublie pas de mettre ton code dans les balises "code" (à droite du bouton "souligné"), sinon ce n'est pas très lisible.
Cdlt,
Ok! pour la balise!
Pour le programme, j'aimerai que chaque personne qui le reçoive le compile!
Il n'y a pas d'érreur, c'est seulement qu'il ne compile pas!
Pour le programme, j'aimerai que chaque personne qui le reçoive le compile!
Il n'y a pas d'érreur, c'est seulement qu'il ne compile pas!
Je travaille avec dev-Cpp!
Voila le message qu'il affiche:
Pile_dynamic.exe a cessé de fonctionner
Un problème a fait que le programme a cessé de fonctionner correctement. Windows va fermer ce programme et vous indiquer si une solution est disponible.
Fermer le programme
Voila le message qu'il affiche:
Pile_dynamic.exe a cessé de fonctionner
Un problème a fait que le programme a cessé de fonctionner correctement. Windows va fermer ce programme et vous indiquer si une solution est disponible.
Fermer le programme
Ah bah voilà, fallait commencer par ça. Ton programme compile très bien, c'est juste qu'il y a des erreurs à l'exécution.
Et effectivement, en regardant ton code, c'est normal.
Tu as alloué "pt_eleve" avec le malloc, mais tu n'as pas alloué le champ nom.
Du coup, ça plante.
Je me suis juste arrêté à la 1ère erreur. J'ai pas lu le reste, il y en a donc peut-être d'autres, qu'on verra au fur et à mesure :-).
Et effectivement, en regardant ton code, c'est normal.
Tu as alloué "pt_eleve" avec le malloc, mais tu n'as pas alloué le champ nom.
Du coup, ça plante.
Je me suis juste arrêté à la 1ère erreur. J'ai pas lu le reste, il y en a donc peut-être d'autres, qu'on verra au fur et à mesure :-).
le programme en faite demande de construire une pile d'éléments dans laquelle on peut faire les operations suivantes:
-empiler un élément;
-depiler simplement un élément;
-depiler et supprimer un élément dans la pile;
-rechercher dans la pile;
-afficher les éléments de la pile.
-empiler un élément;
-depiler simplement un élément;
-depiler et supprimer un élément dans la pile;
-rechercher dans la pile;
-afficher les éléments de la pile.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question