begin process at 2012 02 12 17:53:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

notation polonaise


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

notation polonaise

mardi 13 mai 2008 à 22:24:21 | notation polonaise

cleopatre1988



salut   ,j'aimerai avoir un programme qui donne la notation polonaise d'une expression
en langage c,j'ai fais un programme pour ceci mais il ne fonctionne pas correctement
j'ai cherche dans le site et je l'ai trouve en java.
bon merci.
mercredi 14 mai 2008 à 11:29:32 | Re : notation polonaise

DeAtHCrAsH

Salut,
Peux tu nous donner plus d'explications et nous dire en quoi ton programme ne fonctionne pas.
Un extrait de code peut etre utile.

Shell
mercredi 14 mai 2008 à 23:44:44 | Re : notation polonaise

cleopatre1988

salut bon voila mon programme ;le probleme reside dans la fonction d'affichage
car quand je fais le test sur les elements a affiche il bloque et quand
j'enleve le test il marche.


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct ElementListe
{
  char  *donnee;
  struct ElementListe *suivant;
} Element;

typedef struct ListeRepere
{
  Element *debut;
  int taille;
} Pile;

main ()
{int n,i,p;
char name;
/* initialisation */
void initialisation (Pile *tas);

/* EMPILER*/
int empiler (Pile *tas, char *donnee);


/* DEPILER*/
int depiler (Pile *tas);

/* Affichage de élément en haut de la pile (LastInFirstOut) */
#define pile_donnee(tas)  tas->debut->donnee

/* Affiche la pile */
void affiche (Pile *tas);


  Pile *tas;
  char *nom;
if ((tas = (Pile *) malloc (sizeof (Pile))) == NULL)
    return -1;
if ((nom = (char *) malloc (50 * sizeof (char))) == NULL)
    return -1;
initialisation (tas);


printf ("Entrez un mot : ");
scanf ("%s", nom);
empiler (tas,nom);
printf ("La pile (%d elements): \n",tas->taille);
printf("\n********** Haut de la PILE 1 **********\n");
affiche(tas);
printf("__________ Bas de la PILE 1__________\n\n");
printf("\n********** Haut de la PILE  **********\n");

printf("__________ Bas de la PILE __________\n\n");
printf ("Entrez un mot : ");
scanf ("%s", nom);
empiler (tas,nom);
printf ("La pile (%d éléments): \n",tas->taille);
printf("\n********** Haut de la PILE **********\n");
printf("__________ Bas de la PILE  __________\n\n");
            
printf ("Entrez un mot : ");
scanf ("%s", nom);
empiler (tas,nom);
printf ("La pile (%d éléments): \n",tas->taille);
printf("\n********** Haut de la PILE **********\n");
affiche(tas);
printf("__________ Bas de la PILE __________\n\n");
printf ("\nLe dernier entré (LastInFirstOut)  %s sera supprimé",
                  pile_donnee(tas));
  printf ("\nLe dernier entré est supprime\n");
  depiler (tas);/* suppression de dernier element entre */
  printf ("La pile (%d éléments): \n",tas->taille);
  printf("\n********** Haut de la PILE **********\n");
  affiche(tas);
  printf("__________ Bas de la PILE __________\n\n");
system ("pause");
  return 0;
}
void initialisation (Pile *tas)
{
     tas->debut = NULL;
     tas->taille=0;
}

int empiler (Pile *tas, char *donnee)
{
  Element *nouveau_element;
  if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
    return -1;
//nouveau_element->donnee = (char) malloc (50 * sizeof (char));
  if (nouveau_element->donnee == NULL)
    return -1;
  strcpy (nouveau_element->donnee, donnee);
  nouveau_element->suivant = tas->debut;
  tas->debut = nouveau_element;
  tas->taille++;
}
int empiler2 (Pile *tas2, char *donnee)
{
  Element *nouveau_element;
  if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
    return -1;
//nouveau_element->donnee = (char) malloc (50 * sizeof (char));
  if (nouveau_element->donnee == NULL)
    return -1;
  strcpy (nouveau_element->donnee, donnee);
  nouveau_element->suivant = tas2->debut;
  tas2->debut = nouveau_element;
  tas2->taille++;
}


//depiler
int depiler (Pile *tas)
{
  Element *supp_element;
  if (tas->taille == 0)
    return -1;
  supp_element = tas->debut;
  tas->debut = tas->debut->suivant;
  free (supp_element->donnee);
  free (supp_element);
  tas->taille--;
  return 0;
  
  
}

/* affichage de la pile */
void affiche (Pile * tas)
{
  Element *courant;
  int i;
  courant = tas->debut;
  
do {
  for(i=0;i<tas->taille;++i)
  { printf("\t\t%s\n", courant->donnee);
    courant = courant->suivant;
  }
}
while (courant->donnee!='(' && courant->donnee!=')');
}

jeudi 15 mai 2008 à 01:31:58 | Re : notation polonaise

jfrancois

Bonsoir,

1) courant->donnee est une chaîne de caractères donc pas de comparaison avec un caractère !
Il faut courant->donnee[0] != '(' à condition que le caractère soit bien en première position dans donnee !

2) Dans la fonction empiler() :
//nouveau_element->donnee = (char)malloc(50 * sizeof(char)); 
devient :
nouveau_element->donnee = (char*)malloc((strlen(donnee) + 1) * sizeof(char)); 
 

3) Il faudra ajouter la libération mémoire de toute la pile à la fin.

4) On ne met pas de prototypes de fonctions dans une fonction (au début de main()).

Jean-François



Cette discussion est classée dans : programme, notation, polonaise


Répondre à ce message

Sujets en rapport avec ce message

Besoin d aide Notation polonaise postfixe [ par Sawyer10 ] bonjour les gars vraiment ja i besoin d aide pour programmer une arbre binaire en notaion polonaise postfixe en c++ pour une expression mathematique c Notation Polonaise inversée [ par sky7777 ] Slt, g un pti problème, g a réalisé un programme sur la notation polonaise inverséé et avec d chiffres ca marche nikel, mé je complike la vie pr trouv Debugger de Visual Studio [ par Afon05 ] Bonjour, voila je m'explique je suis en train de faire une application directX et quand je veux debugger avec Visual Studio 2003 ( Menu Debug -> Start configuration de VC++ pour utiliser le JNI [ par cze ] Salut,je suis en train d'essayer de faire fonctionner la machine virtuelle java (JVM) dans un programme C++ en utilisant la JNI (Java Native Interface Compter le nombre de handle [ par chuckboy ] Je fais un petit programme qui tests la stabilité d'un système.Je voudrais savoir comment avoir le nombre de handle utilisé par un programme ou une ta Comment rafraichir une fenetre à intervalle régulier ? [ par KissyFroth ] Mon probleme est simple : j'avai concu un programme avec une interface graphique toute simple dans un projet Win32 Application. Mais tout s'est compli class pour reorganiser un programme en C [ par shadow1779 ] Bonjour,j'ai terminé un programme cependant il est presque incomprehensible du fait de nombreuses lignes et tout le code dans un meme fichier .cpp j'v A l'aide [ par Vie2006 ] Bonjour tous le monde, j'ai besoin de votre aide. En fait, je suis entrain de monter un programme en "C". Dans lequel j'aurais besoin d'appler un logi intégrer une icone a un programme api. [ par poulpixx ] Je voudrais savoir comment, une fois que j'ai mon fichier toto.ico,intégrer ce toto.ico a mon programme une fois compilé(c'est a dire que mon executab


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,810 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales