Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    30

    [c++] valutazione espressione postfissa

    Ciao a tutti,
    sto studiando le strutture dati in c++.

    Ho questo pezzo di codice che valuta una espressione postfissa in cui compaiono addizione e moltiplicazione (notazione polacca) basato sull'utilizzo di una pila:

    codice:
    #include <iostream>
    #include <string>
    #include “pila.h”
    int main(
    int argc, char *argv[]
    ){
       char 
    *a = argv[1]
    ; int N = strlen(a);
       pila<int> postf(N); int el;
       for (int i = 0; i < N; i++){
          if (a[i] == '+'){
             el = postf.leggiPila(); postf.fuoriPila();
             postf.inPila( el + postf.leggiPila()); postf.fuoriPila()
          }
          if (a[i] == '*'){
             el = postf.leggiPila(); postf.fuoriPila();
             postf.inPila(el * postf.leggiPila()); postf.fuoriPila()
          }
          if ((a[i] >= '0') && (a[i] <= '9')){
             el = postf.leggiPila(); postf.fuoriPila();
             postf.inPila(10 * el + (a[i++]-'0'));
          }
       }
       cout << postf.fuoriPila() << endl;
    }
    Vorrei capire meglio la logica per utilizzare la pila per il calcolo e cosa significa questa riga:

    postf.inPila(10 * el + (a[i++]-'0'));

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Sei sicuro che quel codice valuti correttamente le espressioni? Mi sembra ci sia più di un errore.

    Ad ogni modo:
    codice:
    postf.inPila(//aggiunge alla pila
      10 * el + (
        a[i] //elemento alla posizione a
        -'0' //sottrae al carattere ('0'..'9') il valore numerico della codifica del carattere '0', in parole semplici converte in intero il carattere
      )
    );
    i++; //incremento di i
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    30
    Ti ringrazio, comunque il codice è copiato da slide universitarie pensa...

    Tutta quella riga serve solo per la conversione?
    Ultima modifica di mark9; 03-07-2015 a 10:47

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da mark9 Visualizza il messaggio
    Ti ringrazio, comunque il codice è copiato da slide universitarie pensa...

    Tutta quella riga serve solo per la conversione?
    Esatto, ma è sbagliato, incrementando i salti un carattere al giro.

    Inoltre questa riga di codice:
    codice:
    postf.inPila( el + postf.leggiPila()); postf.fuoriPila()
    inserisce un elemento e subito lo toglie.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.