Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : notation polonaise [ Divers / Débutant(e) ] (cleopatre1988)

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é dans : programme, notation, polonaise


Répondre à ce message

Sujets en rapport avec ce message

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 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 InvokeHelper pour video [ par Crepuscule3 ] Bonjour,   je suis étudiant en 2ème année de master orienté électronique et dans le cadre d'un projet je souhaiterais faire un traitement vidéo (détec pause en C [ par Tornadoboy ] Bonjour, durant l'exécution d'un programme en C je voudrai mettre en pause ledit programme en appuyant sur une touche de mon clavier, puis, en appuyan Audio en temps réel [ par Pistol_Pete ] Bonjour,J'aimerai réaliser un programme qui réalise des actions différentes suivant le son du micro en temps réel. J'ai repris le programme http://cpp File source [ par BEAUBRIUS ] BonjourActuellement en IUT d'informatique , dans le cadre d'un projet j'aurais besoin de porter le programme 'file' sur un Nitendo DSMais pour cela , passer d'un programme console a une fenêtre de dlg [ par Sisyph78 ] Hello, je précise que je suis novice en c++ j'ai fait un programme en c++, il vaut ce qu'il vaut, mais il marche dans ma console. Comme je dois avoir >> OVERLAPPED RS232 MFC << [ par talonneur ] Bonsoir,Je viens de récupérer la suite du développement d'un programme en MFC qui pilote un port COM sur un PC (RS232). Le concepteur à créer une clas aide sur le fonctionnement de GetMessage Pb pour sortire de la boucle [ par achatagogo ] salut,je veux réalisé sous DEV C++ un programme qui me permet de tester des clavier. En effet, pour cela j'ai utilisé un HOOK sans DLL qui me permet d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.