Somma - Massimo - Numero di nodi di una lista

di il
10 risposte

Somma - Massimo - Numero di nodi di una lista

Salve ragazzi, ho un piccolo problema, praticamente vorrei fare a funziona la somma , il numero di nodi, e il massimo di una lista, ma non capisco cosa stia sbagliando.

#include"list.h"
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<windows.h>
#define SUCCESS 0
#define NMAX 10

using namespace std;


void SetColor(unsigned short color){
  HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(hcon,color);
}


int Somma(Tlista *temp)
{
	int somma=0;
		while(*temp!=NULL)
		{
  		somma+=temp->lista;
		*temp=temp->next;
  		}
	return (SUCCESS);
}

int Massimo(Tlista *temp)
{
	int max=INT_MIN;
		while(temp!=NULL)
		{
  		if(temp->lista>max)
		{
		max=temp->lista;
		}
		temp=temp->next;
  		}
	return max;
}

int Numero(Tlista *temp)
{
	int count=0;
		while(temp!=NULL)
		{
  		count++;
		temp=temp->next;
  		}
  		
	return count;
}
main()
{
	Tlista l;
	Tlista temp;

	int n;
	int ele;
	int disp;
	int scelta;
	int somma=0;
	int count=0;
	int max=INT_MIN;
	
	
	Crea_Lista(&l);
	
	do{
		cout<<"  Inserire il numero di elementi: ";
		cin>>n;
		if(n<0||n>NMAX)
		{
		SetColor(12);
		cout<<endl<<"		ERRORE"<<endl<<endl;
		SetColor(15);	
		}
	}while(n<0||n>NMAX);
	cout<<endl;
	for(int i=0;i<n;i++)
	{
		cout<<"	   "<<i+1<<") Elemento: ";
		cin>>ele;
		disp=Insert_Head(&l,ele);
		if(disp==0)
		{
			SetColor(10);cout<<endl<<"    	Inserito correttamente"<<endl<<endl;SetColor(15);
		}
		else 
		{
			SetColor(12);cout<<endl<<"		Errore	"<<endl<<endl;SetColor(15);
		}
	}
	
	temp=l;
	
	SetColor(14);
	cout<<"        I nodi della lista";
	Sleep(750);
	cout<<".";
	Sleep(750);
	cout<<".";
	Sleep(750);
	cout<<"."<<endl;
	SetColor(15);
	
	Sleep(900);
	
		while(temp!=NULL)
		{
  		SetColor(14);cout<<endl<<"		  "<<temp->lista<<endl;
		temp=temp->next;
  		}

  
  		do{
  		SetColor(5);cout<<endl<<"	Scegliere tra..."<<endl;
  		SetColor(11);cout<<"	1) Numero nodi della lista"<<endl;
  		SetColor(9);cout<<"	2) Somma elementi della lista"<<endl;
  		SetColor(1);cout<<"	3) Massimo della lista"<<endl;
  		SetColor(4);cout<<"	0) Exit";
  		SetColor(15);cout<<endl<<"		---> ";
  		cin>>scelta;
  		
  		switch(scelta)
  		{
  			case 1: 
  			SetColor(11);cout<<endl<<"		Numero nodi lista: "<<Numero(&temp)<<endl;
  			break;
  			
  			case 2:	
  			SetColor(9);cout<<endl<<"		Somma lista: "<<Somma(&temp)<<endl;	
  			break;
  			
  			case 3:
  			SetColor(1);cout<<endl<<"		Massimo lista: "<<Massimo(&temp)<<endl;
  			break;
  			
  			case 0:
  			SetColor(4);cout<<endl<<"	Fine del programma...";
  			break;
  			
  			default: cout<<"Scleta non disponibile...";
  			
		  }
	}while(scelta!=0);	
}

10 Risposte

  • Re: Somma - Massimo - Numero di nodi di una lista

    iltony ha scritto:


    Salve ragazzi, ho un piccolo problema, praticamente vorrei fare a funziona la somma , il numero di nodi, e il massimo di una lista, ma non capisco cosa stia sbagliando.
    
    #include"list.h"
    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<windows.h>
    #define SUCCESS 0
    #define NMAX 10
    
    using namespace std;
    
    
    void SetColor(unsigned short color){
      HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
      SetConsoleTextAttribute(hcon,color);
    }
    
    
    int Somma(Tlista *temp)
    {
    	int somma=0;
    		while(*temp!=NULL)
    		{
      		somma+=temp->lista;
    		*temp=temp->next;
      		}
    	return (SUCCESS);
    }
    
    int Massimo(Tlista *temp)
    {
    	int max=INT_MIN;
    		while(temp!=NULL)
    		{
      		if(temp->lista>max)
    		{
    		max=temp->lista;
    		}
    		temp=temp->next;
      		}
    	return max;
    }
    
    int Numero(Tlista *temp)
    {
    	int count=0;
    		while(temp!=NULL)
    		{
      		count++;
    		temp=temp->next;
      		}
      		
    	return count;
    }
    main()
    {
    	Tlista l;
    	Tlista temp;
    
    	int n;
    	int ele;
    	int disp;
    	int scelta;
    	int somma=0;
    	int count=0;
    	int max=INT_MIN;
    	
    	
    	Crea_Lista(&l);
    	
    	do{
    		cout<<"  Inserire il numero di elementi: ";
    		cin>>n;
    		if(n<0||n>NMAX)
    		{
    		SetColor(12);
    		cout<<endl<<"		ERRORE"<<endl<<endl;
    		SetColor(15);	
    		}
    	}while(n<0||n>NMAX);
    	cout<<endl;
    	for(int i=0;i<n;i++)
    	{
    		cout<<"	   "<<i+1<<") Elemento: ";
    		cin>>ele;
    		disp=Insert_Head(&l,ele);
    		if(disp==0)
    		{
    			SetColor(10);cout<<endl<<"    	Inserito correttamente"<<endl<<endl;SetColor(15);
    		}
    		else 
    		{
    			SetColor(12);cout<<endl<<"		Errore	"<<endl<<endl;SetColor(15);
    		}
    	}
    	
    	temp=l;
    	
    	SetColor(14);
    	cout<<"        I nodi della lista";
    	Sleep(750);
    	cout<<".";
    	Sleep(750);
    	cout<<".";
    	Sleep(750);
    	cout<<"."<<endl;
    	SetColor(15);
    	
    	Sleep(900);
    	
    		while(temp!=NULL)
    		{
      		SetColor(14);cout<<endl<<"		  "<<temp->lista<<endl;
    		temp=temp->next;
      		}
    
      
      		do{
      		SetColor(5);cout<<endl<<"	Scegliere tra..."<<endl;
      		SetColor(11);cout<<"	1) Numero nodi della lista"<<endl;
      		SetColor(9);cout<<"	2) Somma elementi della lista"<<endl;
      		SetColor(1);cout<<"	3) Massimo della lista"<<endl;
      		SetColor(4);cout<<"	0) Exit";
      		SetColor(15);cout<<endl<<"		---> ";
      		cin>>scelta;
      		
      		switch(scelta)
      		{
      			case 1: 
      			SetColor(11);cout<<endl<<"		Numero nodi lista: "<<Numero(&temp)<<endl;
      			break;
      			
      			case 2:	
      			SetColor(9);cout<<endl<<"		Somma lista: "<<Somma(&temp)<<endl;	
      			break;
      			
      			case 3:
      			SetColor(1);cout<<endl<<"		Massimo lista: "<<Massimo(&temp)<<endl;
      			break;
      			
      			case 0:
      			SetColor(4);cout<<endl<<"	Fine del programma...";
      			break;
      			
      			default: cout<<"Scleta non disponibile...";
      			
    		  }
    	}while(scelta!=0);	
    }
    

    La libreria list.h è questo:
    #include <stdio.h>     
    #include <stdlib.h> 
    #define SUCCESS 0
    #define ERROR -1
    
    struct nodo
    {
    	int lista;
    	struct nodo *next;
    };
    
    typedef struct nodo Tnodo;
    typedef Tnodo* Tlista;
    
    
    int Crea_Lista(Tlista *l)
    {
    	*l=NULL;
    	return (SUCCESS);
    }
    
    
    int Insert_Head(Tlista *l,int ele)
    {
    	Tnodo * nuovo_nodo;
    	nuovo_nodo=(Tnodo*)malloc(sizeof(Tnodo));
    	
    	if(nuovo_nodo==NULL)
    	{
    		return(ERROR);
    	}
    	else
    	{
    		nuovo_nodo->lista=ele;
    		nuovo_nodo->next=*l;
    		*l=nuovo_nodo;
    		return(SUCCESS);
    	}
    
    }
  • Re: Somma - Massimo - Numero di nodi di una lista

    Ma qual è il problema?
  • Re: Somma - Massimo - Numero di nodi di una lista

    oregon ha scritto:


    Ma qual è il problema?
    Praticamente facendo come riportato sopra , a parte che mi da il problema dei puntatori, ma anche se lo risolvo (come so io) comunque mi stampa 0 per la somma , massimo e numero di nodi.

    Se invece metto tutto dentro a un while , cioè:
    	while(temp!=NULL)
    		{
      		SetColor(14);cout<<endl<<"		  "<<temp->lista<<endl;
      		somma+=temp->lista;
      		count++;
      		if(temp->lista>max)
    		{
    		max=temp->lista;
    		}
    		temp=temp->next;
      		}
    Mi funziona normalmente, vorrei fare le 3 operazioni a chiamata separatamente.
  • Re: Somma - Massimo - Numero di nodi di una lista

    Ma nel codice con le funzioni quando le chiami queste funzioni?

    Cos'è il "problema dei puntatori"?? Spiegati.

    E che senso ha

    return (SUCCESS);

    nella Somma?
  • Re: Somma - Massimo - Numero di nodi di una lista

    oregon ha scritto:


    Ma nel codice con le funzioni quando le chiami queste funzioni?

    Cos'è il "problema dei puntatori"?? Spiegati.

    E che senso ha

    return (SUCCESS);

    nella Somma?
    Le chiamo nello switch se guardi bene.
    case 1: 
      			SetColor(11);cout<<endl<<"		Numero nodi lista: "<<Numero(&temp)<<endl;
      			break;
      			
      			case 2:	
      			SetColor(9);cout<<endl<<"		Somma lista: "<<Somma(&temp)<<endl;	
      			break;
      			
      			case 3:
      			SetColor(1);cout<<endl<<"		Massimo lista: "<<Massimo(&temp)<<endl;
      			break;
    Intendo questo problema:



    per il return (SUCCESS) mi sono dimenticato di modificare, che stavo sperimentando, sarebbe comunque return (somma).
  • Re: Somma - Massimo - Numero di nodi di una lista

    Perché hai usato un doppio puntatore?

    Ad esempio per una delle funzioni
    
    int Somma(Tlista temp)
    {
    	int somma = 0;
    	while (temp != NULL)
    	{
    		somma += temp->val;
    		temp = temp->next;
    	}
    	return (somma);
    }
    
    e la chiami con

    Somma(l)

    quel temp che passi non ha senso
  • Re: Somma - Massimo - Numero di nodi di una lista

    oregon ha scritto:


    Perché hai usato un doppio puntatore?

    Ad esempio per una delle funzioni
    
    int Somma(Tlista temp)
    {
    	int somma = 0;
    	while (temp != NULL)
    	{
    		somma += temp->val;
    		temp = temp->next;
    	}
    	return (somma);
    }
    
    e la chiami con

    Somma(l)

    quel temp che passi non ha senso
    Si hai ragione, usavo temp=l; per stampare i nodi, ma alla fine il tuo suggerimento ha funzionato. Grazie mille

    Metto il codice intero:
    #include"list.h"
    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<windows.h>
    #define NMAX 10
    
    using namespace std;
    
    
    void SetColor(unsigned short color){
      HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
      SetConsoleTextAttribute(hcon,color);
    }
    
    int Numero(Tnodo *t)
    {
    	int count=0;
    	
    		while(t!=NULL)
    		{
      		count++;
    		t=t->next;
      		}
    
    	return (count);
    }
    
    int Somma(Tnodo *t)
    {
    	int somma=0;
    	
    		while(t!=NULL)
    		{
      		somma+=t->lista;
    		t=t->next;
      		}
      		
      	return (somma);
    
    }
    
    int Massimo(Tnodo *t)
    {
    	int max=INT_MIN;
    	
    		while(t!=NULL)
    		{
      		if(t->lista>max)
    		{
    		max=t->lista;
    		}
    		t=t->next;
      		}
      		
      	return (max);
    
    }
    
    main()
    {
    	Tlista l;
    	Tlista temp;
    
    	int n;
    	int ele;
    	int disp;
    	int scelta;
    
    	
    	
    	Crea_Lista(&l);
    	
    	do{
    		cout<<"  Inserire il numero di elementi: ";
    		cin>>n;
    		if(n<0||n>NMAX)
    		{
    		SetColor(12);
    		cout<<endl<<"		ERRORE"<<endl<<endl;
    		SetColor(15);	
    		}
    	}while(n<0||n>NMAX);
    	cout<<endl;
    	for(int i=0;i<n;i++)
    	{
    		cout<<"	   "<<i+1<<") Elemento: ";
    		cin>>ele;
    		disp=Insert_Head(&l,ele);
    		if(disp==0)
    		{
    			SetColor(10);cout<<endl<<"    	Inserito correttamente"<<endl<<endl;SetColor(15);
    		}
    		else 
    		{
    			SetColor(12);cout<<endl<<"		Errore	"<<endl<<endl;SetColor(15);
    		}
    	}
    	
    	temp=l;
    	
    	SetColor(14);
    	cout<<"        I nodi della lista";
    	Sleep(750);
    	cout<<".";
    	Sleep(750);
    	cout<<".";
    	Sleep(750);
    	cout<<"."<<endl;
    	SetColor(15);
    	
    	Sleep(900);
    	
    	while(temp!=NULL)
    		{
      		SetColor(14);cout<<endl<<"		  "<<temp->lista<<endl;
    		temp=temp->next;
      		}
    
      
      		do{
      		SetColor(5);cout<<endl<<"	Scegliere tra..."<<endl;
      		SetColor(11);cout<<"	1) Numero nodi della lista"<<endl;
      		SetColor(9);cout<<"	2) Somma elementi della lista"<<endl;
      		SetColor(1);cout<<"	3) Massimo della lista"<<endl;
      		SetColor(4);cout<<"	0) Exit";
      		SetColor(15);cout<<endl<<"		---> ";
      		cin>>scelta;
      		
      		switch(scelta)
      		{
      			case 1: 
      			SetColor(11);cout<<endl<<"		Numero nodi lista: "<<Numero(l)<<endl;
      			break;
      			
      			case 2:	
      			SetColor(9);cout<<endl<<"		Somma lista: "<<Somma(l)<<endl;	
      			break;
      			
      			case 3:
      			SetColor(1);cout<<endl<<"		Massimo lista: "<<Massimo(l)<<endl;
      			break;
      			
      			case 0:
      			SetColor(4);cout<<endl<<"	Fine del programma...";
      			break;
      			
      			default: cout<<"Scleta non disponibile...";
      			
    		  }
    	}while(scelta!=0);	
    }
  • Re: Somma - Massimo - Numero di nodi di una lista

    E hai capito perché funziona?
  • Re: Somma - Massimo - Numero di nodi di una lista

    oregon ha scritto:


    E hai capito perché funziona?
    Ho solo capito che passando temp non ha senso, dato che la uso come deposito, mentre gli devo passare la lista intera cioè l.
  • Re: Somma - Massimo - Numero di nodi di una lista

    E il fatto che l è già un puntatore alla lista e non devi passare un doppio puntatore ...
Devi accedere o registrarti per scrivere nel forum
10 risposte