Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Destiny Rising: quando un gioco mobile supera il gioco originale
Destiny Rising: quando un gioco mobile supera il gioco originale
Tra il declino di Destiny 2 e la crisi di Bungie, il nuovo titolo mobile sviluppato da NetEase sorprende per profondità e varietà. Rising offre ciò che il live service di Bungie non riesce più a garantire, riportando i giocatori in un universo coerente. Un confronto che mette in luce i limiti tecnici e strategici dello studio di Bellevue
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-02-2013, 20:21   #1
sam333
Member
 
Iscritto dal: Jan 2013
Messaggi: 205
[C]Liste non aggiunge al primo elemento

Codice:
#include <stdio.h>
#include <stdlib.h>

struct nodi{

int info;
struct nodi *suc;


};

typedef struct nodi nodo;



nodo *crea_lista(){

 nodo *lista;
system("cls");
lista=NULL;
lista=(nodo*)malloc(sizeof(nodo));
printf("1 Numero:--> ");
scanf("%d",&lista->info);

return lista;

}


nodo *crea_no(nodo* lista,int n){

int i;
for(i=2; i<=n; i++){

    lista->suc=(nodo*)malloc(sizeof(nodo));
    lista=lista->suc;
    printf("%d Numero:--> ",i);
    scanf("%d",&lista->info);


}

lista->suc=NULL;
return lista;

}


void stampa(nodo*lista){

while(lista!=NULL){

    printf("%d   ",lista->info);
    lista=lista->suc;

}
system("Pause");
}



void cerca_nodo(nodo *lista,int ele){



printf("\n\nElemento da trovare:--> ");
scanf("%d",&ele);
while(lista!=NULL && ele!=lista->info ){


    lista=lista->suc;

}

if(lista!=NULL){

    printf("\n\nElemento trovato!");

}
else  printf("\n\nNessun elemento trovato..");
}


nodo *distruggi(nodo *lista){

nodo *tmp;

while(lista!=NULL){

    tmp=lista->suc;
    free(lista);
    lista=tmp;


}

}




void *ordina(nodo*lista){
nodo *tmp,*lista2;

int num;
lista2=lista;
while(lista2->suc!=NULL){

    tmp=lista;
    while(tmp->suc!=NULL){


 if(tmp->info > tmp->suc->info){

    num=tmp->info;
    tmp->info=tmp->suc->info;
    tmp->suc->info=num;
 }
    tmp=tmp->suc;
    }

        lista2=lista2->suc;



}


}



void *aggiungi(nodo *lista){
 nodo *corent,*newnodo=NULL,*prec;
 int elemento;
prec=NULL;
corent=lista;
fflush(stdin);
printf("Elemento da aggiungere:--> ");
scanf("%d",&elemento);

while(corent!=NULL && elemento > corent->info){
 prec=corent;
 corent=corent->suc;
}
if(prec==NULL){
newnodo=(nodo*)malloc(sizeof(nodo));
newnodo->info=corent;
newnodo->suc=lista;
corent=newnodo;

return lista;
}
else{
         newnodo=(nodo*)malloc(sizeof(nodo));
newnodo->info=elemento;
  prec->suc=newnodo;
  newnodo->suc=corent;

}
}





int main(){

int n,ele;
nodo*lista,*lista2;

printf("Quanti elementi vuoi inserire?--> ");
scanf("%d",&n);
lista=crea_lista();
lista2=lista;
lista2=crea_no(lista,n);
stampa(lista);
cerca_nodo(lista,ele);
distruggi(lista);
ordina(lista);
printf("\n\n");
aggiungi(lista);
stampa(lista);
}


ciao a tutti come potete vedere sto cercando di gestire le liste ma non capisco come mai non mi aggiunge il primo elemento...mi spiego....

io inserisco :10-4-3-6
mi riordina :3-4-6-10
poi se inserisco 1 o due non me lo inserisce se invece è un numero che si va a collocare in mezzo o a fine lista allora va tutto bene cosa sbaglio?
sam333 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2013, 20:35   #2
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
ho bovinamente copiato e incollato il codice e l'ho compilato e dice che c'è un errore di assegnazione nella aggiungi, dove fai newnodo->info=corent; quindi a colpo d'occhio ti sei semplicemente confuso ad assegnare a info il puntatore al nodo seguente anzichè un intero, che suppongo debba essere elemento.
ora provo a correggerlo

edit: inoltre mi risultava che per usare system("cls") e altri system(arg) in windows servisse includere windows.h (suppongo che tu stia usando windows perchè "cls" non è un comando bash di unix), ma non posso controllare perchè non uso windows per programmare

edit2: ho messo elemento in quella linea e ora compila, ma facendolo andare, dopo che mi chiede che numero aggiungere entra in un loop

edit3: (edito mano a mano che trovo cose questionabili) nella aggiungi fai un return ma aggiungi è di tipo void quindi non dovresti ritornare niente. più specificatamente la tua aggiungi è di tipo puntatore a void, quindi si può anche togliere il * da aggiungi. tant'è che ritorni lista ma non fai alcun assegnamento del return della funzione aggiungi

edit4: ok te l'ho aggiustato. hai fatto un po' di confusione, confronta cosa ho cambiato rispetto al tuo (a parte le chiamate system commentate perchè non uso windows), se non capisci cosa hai sbagliato e perchè, chiedi

Codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct nodi
{
	int info;
	struct nodi *suc;
} nodo;

nodo *crea_lista()
{
	nodo *lista;
	//system("cls");
	lista=NULL;
	lista=(nodo*)malloc(sizeof(nodo));
	printf("1 Numero:--> ");
	scanf("%d",&lista->info);
	return lista;
}

nodo *crea_no(nodo* lista,int n)
{
	int i;
	nodo *newnodo, *testa=lista;
	for(i=2; i<=n; i++)
	{
		newnodo=(nodo*)malloc(sizeof(nodo));
		lista->suc=newnodo;
		lista=lista->suc;
		printf("%d Numero:--> ",i);
		scanf("%d",&lista->info);
	}
	lista->suc=NULL;
	return testa;
}


void stampa(nodo*lista)
{
	while(lista!=NULL)
	{
		printf("%d   ",lista->info);
		lista=lista->suc;
	}
	//system("Pause");
}

void cerca_nodo(nodo *lista,int ele)
{
	printf("\n\nElemento da trovare:--> ");
	scanf("%d",&ele);
	while(lista!=NULL && ele!=lista->info )
	{
		lista=lista->suc;
	}
	if(lista!=NULL)
	{
		printf("\n\nElemento trovato!");
	}
	else  printf("\n\nNessun elemento trovato..");
}

nodo *distruggi(nodo *lista)
{
	nodo *tmp;
	while(lista!=NULL)
	{
		tmp=lista->suc;
		free(lista);
		lista=tmp;
	}
}

void ordina(nodo*lista)
{
	nodo *tmp,*lista2;
	int num;
	lista2=lista;
	while(lista2->suc!=NULL)
	{
		tmp=lista;
		while(tmp->suc!=NULL)
		{
			if(tmp->info > tmp->suc->info)
			{
				num=tmp->info;
				tmp->info=tmp->suc->info;
				tmp->suc->info=num;
			}
			tmp=tmp->suc;
		}
		lista2=lista2->suc;
	}
}



nodo *aggiungi(nodo *lista)
{
	nodo *corent,*newnodo=NULL,*prec;
	int elemento;
	prec=NULL;
	corent=lista;
	fflush(stdin);
	printf("Elemento da aggiungere:--> ");
	scanf("%d",&elemento);

	while(corent!=NULL && elemento > corent->info)
	{
		prec=corent;
		corent=corent->suc;
	}
	if(prec==NULL)
	{
		newnodo=(nodo*)malloc(sizeof(nodo));
		newnodo->info=elemento;
		newnodo->suc=lista;
		lista=newnodo;
	}
	else
	{
		newnodo=(nodo*)malloc(sizeof(nodo));
		newnodo->info=elemento;
		prec->suc=newnodo;
		newnodo->suc=corent;
	}
	return (lista);
}


int main()
{
	int n,ele;
	nodo*lista,*lista2;
	printf("Quanti elementi vuoi inserire?--> ");
	scanf("%d",&n);
	lista=crea_lista();
	//lista2=lista;
	lista=crea_no(lista,n);
	stampa(lista);
	cerca_nodo(lista,ele);
	//distruggi(lista);
	ordina(lista);
	printf("\n\n");
	lista=aggiungi(lista);
	stampa(lista);
}
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100

Ultima modifica di M@Rk0 : 07-02-2013 alle 21:17.
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 08-02-2013, 13:34   #3
sam333
Member
 
Iscritto dal: Jan 2013
Messaggi: 205
Quote:
Originariamente inviato da M@Rk0 Guarda i messaggi
ho bovinamente copiato e incollato il codice e l'ho compilato e dice che c'è un errore di assegnazione nella aggiungi, dove fai newnodo->info=corent; quindi a colpo d'occhio ti sei semplicemente confuso ad assegnare a info il puntatore al nodo seguente anzichè un intero, che suppongo debba essere elemento.
ora provo a correggerlo

edit: inoltre mi risultava che per usare system("cls") e altri system(arg) in windows servisse includere windows.h (suppongo che tu stia usando windows perchè "cls" non è un comando bash di unix), ma non posso controllare perchè non uso windows per programmare

edit2: ho messo elemento in quella linea e ora compila, ma facendolo andare, dopo che mi chiede che numero aggiungere entra in un loop

edit3: (edito mano a mano che trovo cose questionabili) nella aggiungi fai un return ma aggiungi è di tipo void quindi non dovresti ritornare niente. più specificatamente la tua aggiungi è di tipo puntatore a void, quindi si può anche togliere il * da aggiungi. tant'è che ritorni lista ma non fai alcun assegnamento del return della funzione aggiungi

edit4: ok te l'ho aggiustato. hai fatto un po' di confusione, confronta cosa ho cambiato rispetto al tuo (a parte le chiamate system commentate perchè non uso windows), se non capisci cosa hai sbagliato e perchè, chiedi

Codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct nodi
{
	int info;
	struct nodi *suc;
} nodo;

nodo *crea_lista()
{
	nodo *lista;
	//system("cls");
	lista=NULL;
	lista=(nodo*)malloc(sizeof(nodo));
	printf("1 Numero:--> ");
	scanf("%d",&lista->info);
	return lista;
}

nodo *crea_no(nodo* lista,int n)
{
	int i;
	nodo *newnodo, *testa=lista;
	for(i=2; i<=n; i++)
	{
		newnodo=(nodo*)malloc(sizeof(nodo));
		lista->suc=newnodo;
		lista=lista->suc;
		printf("%d Numero:--> ",i);
		scanf("%d",&lista->info);
	}
	lista->suc=NULL;
	return testa;
}


void stampa(nodo*lista)
{
	while(lista!=NULL)
	{
		printf("%d   ",lista->info);
		lista=lista->suc;
	}
	//system("Pause");
}

void cerca_nodo(nodo *lista,int ele)
{
	printf("\n\nElemento da trovare:--> ");
	scanf("%d",&ele);
	while(lista!=NULL && ele!=lista->info )
	{
		lista=lista->suc;
	}
	if(lista!=NULL)
	{
		printf("\n\nElemento trovato!");
	}
	else  printf("\n\nNessun elemento trovato..");
}

nodo *distruggi(nodo *lista)
{
	nodo *tmp;
	while(lista!=NULL)
	{
		tmp=lista->suc;
		free(lista);
		lista=tmp;
	}
}

void ordina(nodo*lista)
{
	nodo *tmp,*lista2;
	int num;
	lista2=lista;
	while(lista2->suc!=NULL)
	{
		tmp=lista;
		while(tmp->suc!=NULL)
		{
			if(tmp->info > tmp->suc->info)
			{
				num=tmp->info;
				tmp->info=tmp->suc->info;
				tmp->suc->info=num;
			}
			tmp=tmp->suc;
		}
		lista2=lista2->suc;
	}
}



nodo *aggiungi(nodo *lista)
{
	nodo *corent,*newnodo=NULL,*prec;
	int elemento;
	prec=NULL;
	corent=lista;
	fflush(stdin);
	printf("Elemento da aggiungere:--> ");
	scanf("%d",&elemento);

	while(corent!=NULL && elemento > corent->info)
	{
		prec=corent;
		corent=corent->suc;
	}
	if(prec==NULL)
	{
		newnodo=(nodo*)malloc(sizeof(nodo));
		newnodo->info=elemento;
		newnodo->suc=lista;
		lista=newnodo;
	}
	else
	{
		newnodo=(nodo*)malloc(sizeof(nodo));
		newnodo->info=elemento;
		prec->suc=newnodo;
		newnodo->suc=corent;
	}
	return (lista);
}


int main()
{
	int n,ele;
	nodo*lista,*lista2;
	printf("Quanti elementi vuoi inserire?--> ");
	scanf("%d",&n);
	lista=crea_lista();
	//lista2=lista;
	lista=crea_no(lista,n);
	stampa(lista);
	cerca_nodo(lista,ele);
	//distruggi(lista);
	ordina(lista);
	printf("\n\n");
	lista=aggiungi(lista);
	stampa(lista);
}

Codice:
#include <stdio.h>
#include <stdlib.h>

struct nodi{

int info;
struct nodi *suc;


};

typedef struct nodi nodo;

///CREO LA LISTA
nodo *crea_lista(){

nodo *lista;

lista==NULL;

lista=(nodo*)malloc(sizeof(nodo));
  printf("1 Numero:--> ");
scanf("%d",&lista->info);
return lista;
}

///CREO I NODI SUCCESSIVI
nodo *crea_nod(nodo *lista,int n){

nodo *iniz=lista;
nodo *newnodo;
int i;

   iniz=lista;
for(i=2; i<=n; i++){

   newnodo=(nodo*)malloc(sizeof(nodo));


   lista->suc=newnodo;

   lista=lista->suc;
  printf("%d Numero:--> ",i);
scanf("%d",&lista->info);

}
return iniz;
}


///STAMPO LA LISTA INTERA


void stampa(nodo *lista){


while(lista!=NULL){

    printf("%d   ",lista->info);
    lista=lista->suc;

}


}


///ORDINO LA LISTA


void  ordina(nodo *lista){

nodo *lista2,*tmp;
int num;
lista2=lista;
while(lista2->suc!=NULL){

    tmp=lista;

    while(tmp->suc!=NULL){

        if(tmp->info > tmp->suc->info){

        num=tmp->info;
        tmp->info=tmp->suc->info;
        tmp->suc->info=num;


        }
        tmp=tmp->suc;

}
lista2=lista2->suc;
}
}



void cerca(nodo *lista){

int ele;
printf("Quale elemento vuoi cercare?-->");
scanf("%d",&ele);
while(lista!=NULL && ele!=lista->info){

    lista=lista->suc;


}
if(lista==NULL){

    printf("\n\nElemento non trovato...");

}
else printf("\n\nTrovato!");
}





///AGGIUNGO ELEMENTO


nodo *agg(nodo*lista){


nodo *corent=lista;
nodo *prec=NULL,*newnod=NULL;
int ele;

printf("\n\nInserire elemento da aggiungere:--> ");
scanf("%d",&ele);
while(corent!=NULL && ele > corent->info ){
    prec=corent;
    corent=corent->suc;

}

if(prec==NULL){
    newnod=(nodo*)malloc(sizeof(nodo));
    newnod->info=ele;
    newnod->suc=lista;
    lista=newnod;

}
else{
    newnod=(nodo*)malloc(sizeof(nodo));
newnod->info=ele;
prec->suc=newnod;
newnod->suc=corent;
}
return lista;
}



///CANCELLO ELEMENTO


nodo *canc(nodo *lista){

int ele;
nodo *corent=lista,*prec=NULL;
printf("Quale elemento vuoi eliminare?");
stampa(lista);
printf("\n\nScelta:--> ");
scanf("%d",&ele);
while(corent!=NULL && ele!=corent->info){

    prec=corent;
    corent=corent->suc;
}
if(ele==corent->info){


    if(prec==NULL){

       lista=corent->suc;
    }
    else
    {
        prec->suc=corent->suc;


    }
            free(corent);
}
return lista;
}


///DISTRUGGO LISTA

nodo *distruggi(nodo *lista)
{
	nodo *tmp;
	while(lista!=NULL)
	{
		tmp=lista->suc;
		free(lista);
		lista=tmp;
	}
}
int main()
{
    int num;
    nodo *lista;

    printf("\t\t\t***LISTA***\n\n\n\n\nQuanti elementi vuoi inserire?--> ");
    scanf("%d",&num);
lista=crea_lista();
 lista=crea_nod(lista,num);
 stampa(lista);
 system("pause");
 ordina(lista);
 stampa(lista);
  system("pause");
  cerca(lista);
lista=agg(lista);
 stampa(lista);
  system("pause");
  lista=canc(lista);
  stampa(lista);
  system("pause");
  lista=distruggi(lista);
    return 0;
}

ho riscritto il codice seguendo i tuoi consigli ...ora va bene così?
ma di preciso il loop cosa sarebbe?come lo evito?grazie ancora per l'aiuto
sam333 è offline   Rispondi citando il messaggio o parte di esso
Old 08-02-2013, 16:56   #4
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
si ora funziona, metti solo un po' a posto le stampe perchè di primo impatto sembrava che la lista fosse sbagliata, invece la stampava due volte di fila (ad esempio prima dell'ordinamento e dopo, io pensavo già a dei puntatori andati a caso ).

un loop è quando il programma si mette a fare qualcosa e non ne esce più se non lo interrompe un agente esterno (es: tu). in questo caso c'era qualcosa di sbagliato con i puntatori nella aggiungi e nel main, perchè cercavi di dare a lista2 la lista con un elemento aggiunto a lista, poi le successive funzioni le facevi comunque fare su lista, e lista2 non la usavi mai. non riesco a ricostruire il comportamento che fa diventare la lista un cerchio (l'ultimo nodo punta al primo) ma come output a schermo avevo (se aggiungevo "1"): 1 890852 1 890852 1 890852 1 890852 1 890852 1 890852... (890852 l'ho inventato sul momento, è l'indirizzo di corent (che tu assegnavi a newnodo->info al posto di elemento)).

insomma un casino
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 08-02-2013, 18:32   #5
sam333
Member
 
Iscritto dal: Jan 2013
Messaggi: 205
grazie mille!ottima spiegazione
sam333 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Ancora controlli sulle e-bike, a Civitan...
Annunciato accidentalmente il nuovo gioc...
Spese militari da record: il conto nasco...
Intel e NVIDIA uniscono le forze: cos&ig...
Silent Hill f raccoglie ottimi voti su F...
L'industria farmaceutica americana si af...
Xiaomi YU7 GT avvistato al Nurburgring: ...
Intelligenza artificiale, agenti e strum...
Blocco note porta l'AI gratis sui PC, e ...
Arkheron, il nuovo gioco dell'ex lead de...
HONOR conferma Magic8: avrà AI na...
Auto volanti, il sogno si infrange: il p...
Cantieri in autostrada? Dal 2026 lo Stat...
Tesla non è molto trasparente su ...
Microsoft e NVIDIA guidano maxi-investim...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v