Codice:
//Inclusioni
#include <stdio.h>
#include <stdlib.h>
//Definizioni per l'uso dei booleani
typedef unsigned short int Boolean;
#define TRUE 1
#define FALSE 0
struct stack{
int size;
int TOS;
float * buffer;
};
Boolean push(struct stack * ptr, float value);
Boolean pop(struct stack * ptr, float*value_ptr);
void get_value(float *value_ptr);
void print_value(float value);
void notify_push_failure(void);
void notify_pop_failure(void);
int init ( struct stack * ptr, int size);
int get_size(int*size_ptr);
int getchar (void);
int main (void)
{
struct stack stack;
int size;
float value;
Boolean exit;
Boolean result;
get_size (&size);
init(&stack,size);
char selection;
do{
exit=FALSE;
if(selection!='\n'){
printf("\nPremi A se vuoi inserire un valore nello stack, B se vuoi estrarre un valore, X se vuoi uscire:\n");
}
scanf("%c", &selection);
switch(selection)
{
case 'A':
case 'a':
result=TRUE;
while(result==TRUE){
get_value(&value);
result = push(&stack,value);}
notify_push_failure();
break;
case 'B':
case 'b':
result= pop(&stack,&value);
if(result==TRUE)
print_value(value);
else
notify_pop_failure();
break;
case'X':
case'x':
exit=TRUE;
break;
case '\n':
break;
default :
printf ("\nHai digitato un carattere diverso dai caratteri: A,B,X\n");
}
} while(exit==FALSE && selection!=EOF );
system("PAUSE");
}
int get_size(int*size_ptr)
{
printf("\n Dimensione stack:");
scanf("%d", size_ptr);
}
int init ( struct stack * ptr, int size)
{
ptr->size=size;
ptr->TOS=0;
ptr->buffer=(float*)malloc(size*sizeof(float));
}
Boolean push(struct stack * ptr, float value)
// se il buffer non č pieno allora restituisce TRUE
{
if(ptr->TOS<ptr->size)
{
(ptr->buffer)[ptr->TOS]=value;
(ptr->TOS)++;
return TRUE;
}
else
return FALSE;
}
Boolean pop( struct stack * ptr, float*value_ptr)
{
if(ptr->TOS>0)
{
(ptr->TOS)--;
*value_ptr=(ptr->buffer)[ptr->TOS];
return TRUE;
}
else
return FALSE;
}
void get_value(float*value_ptr)
// acquisisce un valore float da tastiera
{
printf("\n Inserisci un valore");
scanf("%f%", value_ptr);
}
void print_value(float value)
{
printf("\n Il valore estratto \x8A:%f", value);
}
void notify_push_failure(void)
{
printf("\n Il buffer \x8A pieno. Impossibile inserire il valore!\n");
}
void notify_pop_failure(void)
{
printf("\n Il buffer \x8A vuoto. Impossibile estrarre il valore!\n");
}