Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C]Simulazione dello stack attraverso le liste

    Salve a tutti ragazzi ho avuto questo compito a scuola la simulazione dello stack di un microprocessore utilizzando le liste ho creato il programma riscontrando i seguenti errori:
    codice:
    In function `InserisciNodo': 
     [Warning] assignment from incompatible pointer type 
    In function `EstraiNodo': 
     [Warning] assignment from incompatible pointer type
    in più mi ritrovo che quando stampo la lista un loop del messaggio che ho dato per la stampa
    riuscite a darmi una mano ?
    un ringraziamento in anticipo

    Codice programma:
    codice:
    /***********************************************************************************
    Autore: Capuano Nicola
    Data:05/05/2011
    Titolo: Simulazione dello STACK
    Descrizione:Questo programma simulera uno stack attraverso le liste
                Ogni Nodo sarà l'elemento dello stack, verrà inserito 
                ogni volta in testa alla lista seguendo l'ordine LIFO (Last in Firt Out)
                cioè quando noi inseriamo un elemento l'elemento sarà sempre in cima alla
                pila e sarà l'ultimo elemento che andremmo ad estrarre.
    ------------------------------------------------------------------------------------*/
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <windows.h>     /* API di windows */
    /***************************************************************************************
    La struttura e composta da un solo campo d'informazione e un puntatore che punta al 
    nodo successivo.
    --------------------------------------------------------------------------------------*/
    typedef struct Nodo
    {
     		  char Numero[200];
     		  struct nodo* Successivo;
    }NODO;
    /*-----------------------------------------------------------------------------------*/
    
    #define ESC 27
    
    void    Clrscr    (void);
    void    Gotoxy    (int x, int y);
    void    TextColor (unsigned short Colore);
    void    Maschera  (char *Titolo);
    void    LeggiStringa(char Buf[],int Max);
    NODO* InserisciNodo (NODO* Testa);
    NODO* EstraiNodo(NODO* Testa);
    void StampaStack(NODO* Head);
    
    
    /************************************************************************************
    Il main e composto unicamente dal menu formato da uno swtich che chiamerà delle 
    subroutine che inseriranno e estrarrano i nodi dalla lista 
    --------------------------------------------------------------------------------------*/
    main()
    {
        /***************************
        Dichiriamo il nodo di testa
        che indica la posizione del
        primo elemento nella lista
        --------------------------*/
    	 NODO* Testa;
        /*******************************
        La variabile "Tasto" verrà
        utilizzata per interagire
        nel menu utilizzando la
        funzione _getch() che legge 
        il tasto battuto sulla tastiera
        ------------------------------*/
        int Tasto;
        
        do
        {
    	    Maschera("Simulazione Dello Stack");
    		 /**********************************************
    	     Il menu e composto da 3 casi dello switch
    	     Inserisci , Estrai, Stampa 
    	     per utilizzare questi tre casi 
    	     lo switch analizzera la variabile tasto
    	     in cui attraverso _getch() abbiamo inserito 
    	     il valore ascii del tasto battuto sulla tastiera
    	     I=Inserisci
    	     S=Stampa
    	     E=Estrai
    	     per guanto riguarda la grafica del menu, e gestita
    	     da una subroutine.
    	    -------------------------------------------------*/
    		 Tasto=_getch();
    		 switch(Tasto)
    		 {	
    		  	case 'i': Testa=InserisciNodo(Testa);
    		  	          break;
             case 's': StampaStack(Testa); 
                       break;
             case 'e': Testa=EstraiNodo(Testa);
                       break;
    		 }
    	 }while(Tasto!=ESC);
    	 /************************************************
    	 alla fine liberiamo i nodi che magari non 
    	 sono stati estratti durante l'uso del programma
    	 ----------------------------------------------*/
    	 
    }
    /***************************************************************************************
    FUNZIONI: INSERISCI,STAMPA,ESTRAI UN ELEMENTO DALLA LISTA
    ----------------------------------------------------------------------------------------*/
    
    /*****************************************************************************************
    INSERISCI:
    			 Input: Puntatore di testa
    			 Output: Nuovo puntatore di testa e nodo inserito nella lista
    			 Descrizione: Il nodo verra inserito in testa alla lista per simulare 
    			              il modo in cui vengono inserite le informazioni nello stack
    ---------------------------------------------------------------------------------------*/
    NODO* InserisciNodo (NODO* Testa)
    { 
      		char Rigo[200],NuovoNumero;
      		NODO* NuovoNodo;/*Nuovo Nodo*/
          NuovoNodo=(NODO*)malloc(sizeof(NODO));/*Allochiamo Memoria nella heap*/
          printf("\n Inserisci L'elemento nello Stack: ");
    		LeggiStringa(Rigo,200);
          strcpy(NuovoNodo->Numero,Rigo);
          NuovoNodo->Successivo=Testa;
          Testa=NuovoNodo;
        return Testa;
    }
    /***************************************************************************************
    STAMPASTACK:
    				input: Puntatore di testa
    				Output: Stampa sul video della lista
    				Descrizione: La subroutine stampera semplicemente sul video gli elementi
    				             della lista.
    -----------------------------------------------------------------------------------------*/
    void StampaStack(NODO* Testa)
    {
     	  NODO* NuovoNodo;
     	  NuovoNodo=Testa;
    	  while(NuovoNodo != NULL)
    	  {
    	  	  printf("\nElemento in lista: ",NuovoNodo->Numero);
    			NuovoNodo->Successivo;
         }
    }
    /******************************************************************************************
    ESTRAINODO:
    			  Input: Puntatore di testa
    			  output: Lista vuota
    			  Descrizione: Questa subroutine ha il compito di estrarre dall'ultimo nodo in poi
    			                gli elementi della lista simulando l'estrazione da uno stack
    								 cioè l'ultimo elemento inserito sarà il primo eliminato.
    ------------------------------------------------------------------------------------------*/
    NODO* EstraiNodo(NODO* Testa)
    {
     		NODO* NuovoNodo;
    		NuovoNodo=Testa;
    		Testa=NuovoNodo->Successivo; 
    		free(NuovoNodo);
      return Testa;
    }  
    /***************************************************************************************
    FUNZIONI DI INPUT E OUTPUT
    ***************************************************************************************/
    
    
    /**************************************************************************************
    LEGGI STRINGA
    ***************************************************************************************/
    void LeggiStringa (char Buf[], int Max)
    {
       int i;
    
       fgets(Buf, Max, stdin);
       fflush(stdin);
       for (i=0; Buf[i]<0 || Buf[i]>31; i++);
       Buf[i] = 0;
    }
    
    
    /*************************************************************************************
      Crea una maschera standard per il software:
      Il titolo e' centrato in un rigo di 80 caratteri.
    **************************************************************************************/
    void Maschera
    (	char *Titolo
    )
    {	char Rigo[96];                                  // multiplo anche di 16
        int  d, i, n;
    
    	if ( (n=strlen(Titolo)) > 78) n = 78;           // tronca il titolo lungo
    	sprintf (Rigo,  "%80s", " ");
    	for (d=(80-n)/2, i=0; i<n ; Rigo[d++]=Titolo[i++]);
    
    	Clrscr(); Gotoxy(0, 0); TextColor (0xC0); printf(Rigo);
    	sprintf (Rigo, "%60s%s", " ", "Capuano Nicola       ");
    	Gotoxy(0,24); TextColor (0xC0); printf(Rigo);
    	Gotoxy(0, 0); TextColor (7);
    }
    
    
    /*****************************************************************************
      Cancella lo schermo.
    ******************************************************************************/
    void Clrscr (void)
    {
    	COORD coord;
    	DWORD written;
    	CONSOLE_SCREEN_BUFFER_INFO info;
    
    	coord.X = 0;
    	coord.Y = 0;
    	GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
    	FillConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE), ' ',
    					  info.dwSize.X * info.dwSize.Y, coord, &written);
    	Gotoxy (1, 1);
    }
    
    
    /*****************************************************************************
      Posiziona il cursore di console alle coordinate x,y.
    ******************************************************************************/
    void Gotoxy
    (   int x,         // indice di colonna
    	int y          // indice di riga
    )
    {	COORD Cur = {x, y};
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Cur);
    }
    
    
    
    
    /*****************************************************************************
     Utilizzando la funzione SetConsoleTextAttribute(HANDLE,WORD)
     cambia il colore del testo da stampare in console.
    ******************************************************************************/
    void TextColor
    (	unsigned short Colore    // codice numerico del colore
    )
    {	HANDLE h = GetStdHandle ( STD_OUTPUT_HANDLE );
    	SetConsoleTextAttribute ( h, Colore );
    }
    /*****************************************************************************
    MENU
    ******************************************************************************/

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Nella dichiarazione della struttura hai scritto nodo una volta con la N maiuscola e un'altra con la n minuscola, inoltre nella funzione di stampa l'istruzione NuovoNodo->Successivo, pur essendo sintatticamente corretta, non produce alcun risultato. Ovviamente lì ci va NuovoNodo = NuovoNodo->Succesivo in maniera tale da aggiornare il puntatore.
    every day above ground is a good one

  3. #3
    ho sistemato i due errori riscontrati i warning sn spariti ma per quanto riguarda la stampa e l'estrazione vanni in loop e in crash :S non riesco a capire il problema sto andando al manicomio

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.