Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-04-2010, 16: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, 16: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, 16: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 16:33.
gsa390 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 16: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, 16: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, 16: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, 16: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, 17: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, 17: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, 17: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, 17: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, 19: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, 19: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, 19: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 19:38.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2010, 19: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, 19: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, 19: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, 15: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


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Tegola su Anthropic, gli agenti AI valgo...
E-bike in carbonio con un prezzo assurdo...
Serrature smart SwitchBot Lock Ultra in ...
NVIDIA DGX Spark da 64 GB: arriva il nuo...
Nothing e CMF in offerta Prime: Ear (3) ...
Football Manager 27 sta arrivando: ecco ...
NASA verso l'addio a Dragon dopo il 2030...
Theras porta in Italia Maestro, il robot...
Un iPhone bloccato si riavvia dopo 72 or...
Radeon RX 7000, Sapphire rilascia un nuo...
Dell presenta Pro Rugged 13 Extreme e Pr...
La Luna di Raccolto sull'Etna diventa fo...
Sondaggio Steam: NVIDIA GeForce RTX 5070...
Nuance Audio Plus, EssilorLuxottica pres...
Cloudflare rilascerà certificati ...
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: 14:15.


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