Création de pile avec INTERFACE [Résolu]

rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention - 5 déc. 2009 à 16:34 - Dernière réponse : rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention
- 6 déc. 2009 à 15:33

slt tous le monde
je suis debutante en C;et je veux savoir comment créer une pile on utilisant un tableau(pointeur) avec interface qui contient un menu(empiler,depiler,quitter),merci c tres urgent
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
lural 132 Messages postés samedi 6 janvier 2007Date d'inscription 4 janvier 2011 Dernière intervention - 5 déc. 2009 à 17:07
3
Merci
Salut
Je suppose que tu dois créer un programme simulant une pile (sans t'appuyer sur une quelconque librairie). Donc il va falloir que tu créer une fonction main pour lancer ton programme avec l'affichage d'un menu (pour tes 3 fonctionnalités) qui lira l'entrée de l'utilisateur.
Pour sa réponse, tu devra faire un switch/case qui appelera suivant le choix, la fonctionnalité demandé. Et il ne te restera donc qu'a coder tes fonctions empiler/dépiler/quitter qui utiliseront un tableau pour stocker les informations.
Le principe d'une pile, c'est que tu n'as accès qu'à la dernière infos que tu viens d'y mettre, donc dans le principe c'est un tableau vide, et une variable qui indiquera le nombre d'élément.
Lorsque tu veux empiler tu rajoutes la variables donné par l'utilisateur dans ton tableau à l'indice de ta variable donnant le nombre d'élement, puis tu rajoutes 1 à cette dernière.
Pour dépiler, tu affiche l'élément de ton tableau à l'indice de ta variable, et tu décrémente celle-çi.
Pour ne pas avoir d'erreur, tu dois vérifier toutes les entrées de l'utilisateur, et surtout vérifier qu'on ne peut dépiler une pile que si elle contient au moins un élément. Après suivant ton niveau, tu devras gérer l'allocation de ton tableau de façon statique ou dynamique...
Pour quitter un <<return 0;>> devrait suffir.

Bon courage
Bye

Merci lural 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de lural
Meilleure réponse
cs_Chouchou182 252 Messages postés vendredi 13 juin 2003Date d'inscription 25 avril 2011 Dernière intervention - 6 déc. 2009 à 14:44
3
Merci
Salut,

Ton interface peut être, par exemple (pile.h):
#ifndef PILE_H
#define PILE_H 1

struct pile ;

struct pile* nouvelle();
void detruire(struct pile*);
int est_vide(struct pile*);
int empiler(struct pile*, int);
int depiler(struct pile*);
void afficher(struct pile*);


#endif // ! PILE_H


Ce qui permettrait de faire un joli programme (main.c):
#include<stdio.h>
#include"pile.h"

struct pile* la_pile;

int
main(int argc, char** argv)
{
  int encore = 1;
  la_pile = nouvelle();
  if (la_pile == NULL)
    return 1;
  do
  {
    int ch = getchar();
    int val;
    switch(ch)
    {
      case 'q':
encore = 0;
break;
      case 'a':
afficher(la_pile);
break;
      case 'e':
if (
    scanf("%d", &val) != 1
 ||	
    empiler(la_pile, val)
   )
  fputs("Ne peut empiler", stderr);
break;
      case 'd':
val = depiler(la_pile);
printf("-> %d\n", val);
break;
      case 'v':
if (est_vide(la_pile))
  puts("vide");
else
  puts("non-vide");
break;
      default:
fprintf(stderr, "Commande inconnue: %c\n", ch);
    }
  } while (encore);

  detruire(la_pile);
  return 0;
}


Ensuite, il ne resterait plus qu'à écrire les fonctions de manipulation des piles, ce qui pourrait se faire avec des listes chaînées (pile_l.c):
#include<stdio.h>
#include<stdlib.h>
#include"pile.h"

struct __pile {
  int val;
  struct __pile* next;
};

struct pile {
  struct __pile *p;
};

struct pile*
nouvelle()
{
  struct pile* p;
  p = malloc(sizeof(*p));
  if (p == NULL)
    return NULL;
  p->p = NULL;
  return p;
}

void
__detruire(struct __pile* p)
{
  while (p != NULL)
  {
    struct __pile* aux = p->next;
    free(p);
    p = aux;
  }
}

void
detruire(struct pile* p)
{
  __detruire(p->p);
  free(p);
}

int
est_vide(struct pile* p)
{
  return (p->p == NULL);
}

int
empiler(struct pile* p, int val)
{
  struct __pile* n;
  n = malloc(sizeof(*n));
  if (n == NULL)
    return 1;
  n->val = val;
  n->next = p->p;
  p->p = n;
  
  return 0;
}

int
depiler(struct pile* p)
{
  struct __pile* n = p->p;
  int val = n->val;
  p->p = n->next;
  free(n);
  return val;
}

void
afficher(struct pile* p)
{
  struct __pile* n;
  printf("<");
  for (n = p->p; n != NULL; n = n->next)
  {
    printf("%d; ", n->val);
  }
  printf(">\n");
}


ou encore avec des tableaux (pile_t.c):
#include"pile.h"
#include<stdlib.h>
#include<stdio.h>

#define TAILLE 4

struct pile {
  int data[TAILLE];
  int* top;
};

struct pile*
nouvelle()
{
  struct pile* p;
  p = malloc(sizeof(*p));
  if (p == NULL)
    return NULL;
  p->top = p->data;
  return p;
}

void
detruire(struct pile* p)
{
  free(p);
}

int
est_vide(struct pile* p)
{
  return (p->top == p->data);
}

int
empiler(struct pile* p, int val)
{
  if (p->top - p->data >= TAILLE)
    return 1;
  *(p->top) = val;
  ++(p->top);
  return 0;
}

int
depiler(struct pile* p)
{
  --(p->top);
  return *(p->top);
}

void
afficher(struct pile* p)
{
  int *i = p->top;
  printf("<");
  while (i != p->data)
  {
    --i;
    printf("%d; ", *i);
  }
  printf(">\n");
}


Bonne prog,

Merci cs_Chouchou182 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Chouchou182
rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention - 6 déc. 2009 à 11:18
0
Merci

merci lural,c'est un peu prés le meme principe que j ai analyser,mais le probleme est le code?et ca doit tounré en turbo C avec l'interface???
merci
Commenter la réponse de rosettesouna
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 6 déc. 2009 à 12:59
0
Merci
Lural t'a expliqué le principe, à toi et à toi seul d'en faire le code. Si tu bloques sur un point précis, nous t'aiderons en corrigeant le code existant, ou en t'aident à le concrétiser.
Mais aucune ligne de code ne te sera donnée.
Commenter la réponse de cptpingu
rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention - 6 déc. 2009 à 14:13
0
Merci
oui ca c'est sur,c'est a moi d'ecrir le code,juste j ai jamais fait un exercice en turbo C ou il ya interface ???
merci



Commenter la réponse de rosettesouna
rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention - 6 déc. 2009 à 14:50
0
Merci

merci beaucoup chouchou
je vais comparer maintenant et je vais l'essayer,et je vais voir
Commenter la réponse de rosettesouna
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 6 déc. 2009 à 14:52
0
Merci
C'est très mal exprimée, mais je pense que par "interface", rosettesouna voulait parler de "menu" utilisateur.

En revanche, lui cracher comme cela, la solution, sans lui laisser chercher, sans aucune réflection de sa part, c'est particulièrement anti-pédagogique !
Commenter la réponse de cptpingu
rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention - 6 déc. 2009 à 15:10
0
Merci

mais j ai chercher et j ai ecris le code de la pile,mais comment avoir l interface que j ai jamais entendu parlé c pourquoi!!!
Commenter la réponse de rosettesouna
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 6 déc. 2009 à 15:15
0
Merci
mais j ai chercher et j ai ecris le code de la pile,mais comment avoir l interface que j ai jamais entendu parlé c pourquoi!!!

Surveille ton orthographe et relis toi, s'il te plaît.

Il était attendu de toi, que tu postes ton code, notamment la partie qui te faisait défaut. Le processus normal étant que l'on t'aide à parvenir, par toi même, à trouver la solution. Cette démarche à malheureusement été court-circuité...
Commenter la réponse de cptpingu
rosettesouna 12 Messages postés jeudi 12 novembre 2009Date d'inscription 1 juin 2010 Dernière intervention - 6 déc. 2009 à 15:33
0
Merci

d'accord je le ferais la prochaine fois
merci en tous cas.
Commenter la réponse de rosettesouna

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.