Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-04-2010, 17:02   #1
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
[C]ordinamento lista

salve, dovrei scrivere una funzione che ordini una lista, as esempio in base alla matricola. Vorrei sapere se mi conviene scambiare gli indirizzi(next succesivo) oppure tutti i restanti valori?

typedef struct studente{
int matricola;
char cognome[20];
char nome[20];
next successivo;
}studente;
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 17:23   #2
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
scusa ma ho un dubbio....tu hai fatto una struttura next che è un puntatore a studente ?
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 17:27   #3
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
si esattamente

ho fatto una specie di bubblesort, devo ancora scrivere la funzione swap che scambia matricola, nome, ecc.. ma quella è facile.

Secondo voi va bene questa funzione?

Codice:
void bubblelist (studente *first)
{
studente *tmp, *tmp2;
tmp=tmp2=first->successivo;


while(tmp2!=NULL)
{
 while(tmp!=NULL)
 {
  if(tmp2->matricola>tmp->matricola)
  {
   swap(*tmp2, *tmp);
  }
  tmp=tmp->successivo;
 }
tmp=tmp2=tmp2->successivo;
}
}
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP

Ultima modifica di gsa390 : 24-04-2010 alle 17:33.
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 17:33   #4
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
ma non facevi prima con
Codice:
typedef struct studente{
int matricola;
char cognome[20];
char nome[20];
studente* successivo;
}studente;
visto che hai fatto una typedef ?
comunque, in una lista, non ha senso invertire gli scambiare gli attributi interni di una struttura.

può andar bene fare scambi sui puntatori.

può andare ancora meglio se ti crei un array e ci metti dentro gli indirizzi di memoria della struttura ordinata, così puoi scandire velocemente l'array una volta che hai letto tutta la lista
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 17:42   #5
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
Quote:
Originariamente inviato da lupoxxx87 Guarda i messaggi
ma non facevi prima con
Codice:
typedef struct studente{
int matricola;
char cognome[20];
char nome[20];
studente* successivo;
}studente;
visto che hai fatto una typedef ?
comunque, in una lista, non ha senso invertire gli scambiare gli attributi interni di una struttura.

può andar bene fare scambi sui puntatori.

può andare ancora meglio se ti crei un array e ci metti dentro gli indirizzi di memoria della struttura ordinata, così puoi scandire velocemente l'array una volta che hai letto tutta la lista
non ho fatto studente* successivo perchè il prof dell'uni ha detto che non va bene (o almeno con alcuni compilatori potrebbe dare errori).

cmq ho provato a scambiare i puntatori ma mi incasino, potresti darmi un aiutino? te ne sarei grato
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 17:50   #6
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
penso che il modo migliore per ordinare una lista con singolo link sia il mergesort
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 17:57   #7
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
ci è stato esplicitamente chiesto di svilupparla simile a un bubblesort
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 18:02   #8
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
scusa ma....se sai qual'è l'algoritmo, hai già la struttura, hai già la lista, e non riesci a fare lo scambio in un modo.....

fallo nell'altro e basta
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 18:11   #9
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
voglio provare a farlo come dice il prof... è molto rompiballe e il 5 maggio ho la prova...
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 18:21   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Qual è il problema nello scambiare i puntatori? Non ho capito in che punto trovi difficoltà.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 18:50   #11
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
il bubblesort di per sè è ottimizzato per array...
per farlo funzionare su una lista devi avere nodi con doppio puntatore, altrimenti non penso si possa ordinare la lista stessa.

a meno che tu non abbia una seconda lista che costruisci man mano
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 20:02   #12
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da lupoxxx87 Guarda i messaggi
ma non facevi prima con
Codice:
typedef struct studente{
int matricola;
char cognome[20];
char nome[20];
studente* successivo;
}studente;
visto che hai fatto una typedef ?
In C per dichiarare un tipo strutturato bisogna prefissarlo esplicitamente con la keyword struct (o assegnare un nome alternativo alla struttura con typedef).
Il problema (nel tuo esempio) è che alla linea
Codice:
studente* successivo;
il typedef non è stato ancora "completato", e quindi il compilatore non riesce a identificare il tipo.
Immagino sia questo il problema a cui si riferiva il suo professore, anche se la soluzione è molto semplice:
Codice:
struct studente* successivo;
In C++ invece il tuo codice è corretto, visto che non serve prefissare le dichiarazioni dei tipi strutturati (oltrettuto rendendo il typedef rindondante).
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 20:19   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da lupoxxx87 Guarda i messaggi
il bubblesort di per sè è ottimizzato per array...
per farlo funzionare su una lista devi avere nodi con doppio puntatore, altrimenti non penso si possa ordinare la lista stessa.
Perché no ? Ti puoi sempre mantenere il puntatore all'elemento precedente...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 20:26   #14
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da cionci Guarda i messaggi
Perché no ? Ti puoi sempre mantenere il puntatore all'elemento precedente...
Esattamente...
Se di norma il bubble sort viene una cosa così:
Codice:
algoritmo BubbleSort(array A, lunghezza n)
{
	per i in 1..n {
		per j in 1..(i - 1) {
			se (A[j] > A[i]) {
				scambia A[i] ed A[j]
			}
		}
	}
}
su liste i cui nodi hanno un solo collegamento (ai prossimi nodi e non ai precedenti) si può tener traccia del vecchio iteratore man mano che si avanza, e bisogna solo fare un po' di attenzione ai puntatori quando è necessario scambiare.

La butto là:

Codice:
algoritmo BubbleSort(lista L)
{
	prec_i = nullo	# il nodo che precede i
	i = testa(L)	# iteratore i

	finché (i non è nullo) {
		prec_j = nullo	# il nodo che precede j
		j = testa(L)	# iteratore j

		finché (j non è nullo) e (prossimo(j) non è i) {
			se (chiave(j) > chiave(i) {
				#
				# Aggiorna i puntatori al prossimo nodo sui nodi precedenti i e j.
				#
				se (prec_j non è nullo) {
					prossimo(prec_j) = i
				}

				se (prec_i non è nullo) {
					prossimo(prec_i) = j
				}

				#
				# Aggiorna i puntatori al prossimo nodo su i e j.
				#
				next_j = prossimo(j)
				prossimo(j) = prossimo(i)
				prossimo(i) = next_j

				#
				# Scambia i riferimenti ai nodi i e j e aggiorna il puntatore al nodo precedente i.
				#
				prec_i = i
				i = j
				j = prec_i
			}

			prec_j = j
			j = prossimo(j)
		}

		prec_i = i
		i = prossimo(i)
	}
}
Ovviamente è solo pseudocodice (anche se abbastanza dettagliato, direi), è chiaro che l'implementazione in C sarà compito di gsa390.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 24-04-2010 alle 20:38.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 20:36   #15
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
Quote:
Originariamente inviato da cionci Guarda i messaggi
Perché no ? Ti puoi sempre mantenere il puntatore all'elemento precedente...
beh concettualmente è lo stesso che avere la lista con doppio puntatore...
o cambi i parametri all'interno dell'algoritmo o cambi la struttura
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 20:38   #16
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
Daniele grazie del suggerimento, stasera visto che nn esco proverò a farlo, magari poi vi dico che ne è uscito
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 20:39   #17
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da lupoxxx87 Guarda i messaggi
o cambi i parametri all'interno dell'algoritmo o cambi la struttura
Non proprio: una cosa è l'algoritmo, un'altra è l'implementazione. Se la logica è identica ma l'implementazione è riadattata per una diversa struttura dati, non è che cambi l'algoritmo... Sempre bubble sort rimane.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2010, 16:08   #18
gsa390
Senior Member
 
Iscritto dal: Mar 2007
Città: Perugia
Messaggi: 633
ragazzi un pò in ritardo vi porgo la soluzione del prof

Codice:
void ordina(studente **head)
{
 while(scorri(&head));
}

int scorri(studente ***head)
{
 int scambi;
 studente *act, *prec;
 for (scambi=0, act=prec=**head; act->successivo!=NULL;)
{
if(act->matricola>=act->successivo->matricola)
{
 if(prec==act)//salva la situazione del primo record
   {
    **head=act->successivo;
    act->successivo=act->successivo->successivo;
    (**head)->successivo=act;
    prec=(**head);
    }
 else
    {
       swap(&prec,&act);
       prec=prec->successivo;
    }
scambi++;
}
else
  {
   prec=act;
   act=act->succesivo;
  }
  }
return (scambi);


void swap(studente **prec, studente **act)
{
  (*prec)->successivo=(*act)->successivo;
  (*act)->successivo=(*act)->successivo->successivo;
  (*prec)->succesivo->successivo=(*act);
}
__________________
Case Corsair 3500X ARGB - MB MSI B650 Gaming Plus WiFi - CPU Ryzen 7 7800X3D - RAM LEXAR DDR5 6000 CL30 ARGB - GPU Palit 4070 Super Dual 12GB - SSD1 Crucial P3 1TB M.2 - SSD2 Samsung 980 Pro 1TB M.2 - Monitor LG UWQHD 1440p@160Hz 34GP63AP
gsa390 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Il remake di Assassin's Creed IV: Black ...
Tutti i robot aspirapolvere in offerta s...
Amazon Haul spinge la promo di San Valen...
Offerte hardware Amazon per l'upgrade de...
iPhone 17e dovrà fare i conti con...
Offerte Amazon sugli iPhone di ultima ge...
DJI Mini 5 Pro Combo Fly More scende a 8...
Ubisoft potrebbe licenziare ancora ma se...
Samsung Galaxy S26: un leak anticipa col...
Aetherflux e Lockheed Martin insieme per...
SpaceX sta proseguendo i test della terz...
Axiom Space ha mostrato un nuovo video d...
Realme: la trasformazione in sub-brand d...
PlayStation 6 si farà attendere: ...
BWT Alpine chiude la prima tornata di pr...
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: 16:48.


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