Pila in C

di il
6 risposte

Pila in C

Buongiorno a tutti,
sto cominciando a esercitarmi sulle pile, e ho trovato un esercizio parzialmente svolto dal mio professore per convertire un'espressione in notazione postifissa. Ho provato a scrivere un programma completo partendo dal suo, ma non funziona e non capisco dove sia l'errore.

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

struct nodo 
{
  float valore;
  struct nodo * prox;
};
struct nodo * testa = NULL;

void push (float v) 
{
  struct nodo * nuovo;
  nuovo = (struct nodo *) malloc (sizeof(struct nodo));
  
  nuovo->valore = v; 
  nuovo->prox = NULL;
  
  nuovo->prox = testa;
  testa = nuovo;
  
  return;
}

float pop () 
{
  float r = testa->valore;
  testa = testa->prox;

  return r;
}


int main()
{
  int c, op1, op2, r;
  c = getchar();

  while (c != '\n')
  {
     if('0' <= c && c <= '9')
        push(c - '0');

     if(c == '+')
     {
        op2 = pop();
        op1 = pop();
        push (op1 + op2);
     }

     if(c == '-')
     {
        op2 = pop();
        op1 = pop();
        push (op1 - op2);
     }

     if(c == '*')
     {
        op2 = pop();
        op1 = pop();
        push (op1 * op2);
     }

     if(c == '/')
     {
        op2 = pop();
        op1 = pop();
        push (op1 / op2);
     } 
  }

  r = pop();
  printf("%d\n", r);


  exit(EXIT_SUCCESS);
}
Qualcuno può aiutarmi a capire cosa manca? Grazie mille in anticipo!

6 Risposte

  • Re: Pila in C

    Non funziona? Ovvero??
  • Re: Pila in C

    Quando eseguo, mi fa inserire i i valori (io inserisco ad esempio 3+2), e quando premo invio non succede niente, anzi si blocca proprio la macchina virtuale...
  • Re: Pila in C

    Ma la pila è basata sui float e tu usi i char??
  • Re: Pila in C

    Sì la pila è basata sui float, ma quando scrivo
    push(c-'0');
    sto inserendo un int giusto? Quindi non dovrebbe funzionare ?
  • Re: Pila in C

    Ovviamente ti darà una serie di warning per i cast mancanti.

    Comunque, tu accetti un solo carattere fuori dal ciclo e poi non ne accetti più. Se la getchar è fuori dal ciclo, come possono essere esaminati tutti i caratteri che inserisci da tastiera?

    E poi non basta .... controlla anche l'algoritmo che usi ....

    Un suggerimento, leggi bene questa

    https://twiki.di.uniroma1.it/pub/Programmazione2ad/WebHome/aritmPostfissa.pdf
  • Re: Pila in C

    Va bene ora ci provo, grazie mille.
Devi accedere o registrarti per scrivere nel forum
6 risposte