/* 
 * File:   main.cpp
 * Author: Claudio De Stefano
 *
 * Created on 17 marzo 2010, 17.44
 */

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include "stack.h"

using namespace std;

void f1();
void f2();
void f3();
void f4();

stack_g s;
stack s1;

int main()
{
    f1();
    f2();
    f3();
    f4();
            
    system("pause");
}

void f1()
{
    int x;
    
    cout << "immetti un valore intero" << endl;
    cin >> x;

    if(s1.push(x))
        cout << "la funzione f1 ha immesso il valore intero " << x << " nello stack" << endl;
    s1.num_elem();
}

void f2()
{
    int x;
    
    if (s1.pop(x))
    cout << "la funzione f2 ha estratto il valore intero " << x << " dallo stack_" << endl;
    s1.num_elem();
}


void f3()
{
    int x;
    float y;
    char z;
    
    cout << "immetti un valore intero" << endl;
    cin >> x;
    cout << "immetti un valore reale" << endl;
    cin >> y;
    cout << "immetti un carattere" << endl;
    cin >> z;    
   
    if(s.push(z))
        cout << "la funzione f1 ha immesso il carattere " << z << " nello stack_g" << endl;
    s.num_elem();
    if(s.push(y))
        cout << "la funzione f1 ha immesso il valore reale " << y << " nello stack_g" << endl;
    s.num_elem();
    if(s.push(x))
        cout << "la funzione f1 ha immesso il valore intero " << x << " nello stack_g" << endl;
    s.num_elem();
}

void f4()
{
    int x;
    float y;
    char z;
    
    // I dati devono essere estratti dallo stack in ordine inverso rispetto alla loro immissione
    if (s.pop(x))
    cout << "la funzione f2 ha estratto il valore intero " << x << " dallo stack_g" << endl;
    s.num_elem();
    if (s.pop(y))
    cout << "la funzione f2 ha estratto il valore reale " << y << " dallo stack_g" << endl;
    s.num_elem();
    if (s.pop(z))
    cout << "la funzione f2 ha estratto il carattere " << z << " dallo stack_g" << endl;
    s.num_elem();
    
 
    // Dati estratti in modo ERRATO: usare questa parte del codice solo per verificare che i valori estratti
    // dallo stack sono privi di senso
    /*if (s.pop(z))
    cout << "la funzione f2 ha estratto il carattere " << z << " dallo stack_g" << endl;
    s.num_elem();          
    if (s.pop(y))
    cout << "la funzione f2 ha estratto il valore reale " << y << " dallo stack_g" << endl;
    s.num_elem();
    if (s.pop(x))
    cout << "la funzione f2 ha estratto il valore intero " << x << " dallo stack_g" << endl;
    s.num_elem();  */
    
    
    
    
}

