Discussione: [C] Help pseudo stack
View Single Post
Old 24-02-2010, 01:29   #28
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Cittā: Figline(FI)
Messaggi: 5847
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");
      
}
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido č offline   Rispondi citando il messaggio o parte di esso