Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
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


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Fire TV Stick 4K Select a prezzo da urlo...
IBM presenta i nuovi processori quantist...
Amazon Haul esplode di sconti: con l'off...
Dacia Sandriders, incontro con piloti e ...
Quanto costerà la Steam Machine? ...
QNAP TS-h1655XeU-RP: filesystem ZFS e co...
Etica e software libero protagonisti a S...
Il reattore che ricarica le batterie sca...
AMD FSR Redstone: la nuova tecnologia ba...
Meta Quest 3S a un prezzo senza preceden...
Rischio per gli SSD? I driver chipset AM...
Quanto sono 'woke' le intelligenze artif...
Rockstar rilancia Red Dead Redemption su...
Blue Origin centra l'obiettivo: New Glen...
Regali di Natale spendendo poco con il B...
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: 04:15.


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