Torna indietro   Hardware Upgrade Forum > Software > Programmazione

I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers
MSI continua ad investire nel proporre schermi pensati per rispondere alle esigenze dei videogiocatori, utilizzando la quinta generazione di tecnologia QD-OLED sviluppata da Samsung. Il modello MPG 341CQR QD-OLED X36 è lpultima novità al debutto in concomitanza con il CES 2026, uno schermo curvo di ampia risoluzione pensato per i videogiocatori più esigenti
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-12-2008, 22:07   #1
mto89
Senior Member
 
L'Avatar di mto89
 
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
[c] lista dinamica - tempo

ciao, sto sviluppando un programmino e per scopi didattici devo tenere conto del tempo impiegato dall'utente a inserire una frase, il tutto tramite lista dinamica.

Io pensavo di rilevare il tempo prima della battitura della frase e successivamente dopo.
Poi come potrei proseguire per valutare il tempo migliore tramite lista? consigli?

inoltre se ho lista in una funzione, ad esempio
struct cella *head;

e la voglio modificare in un'altra funzione, quindi passandola per indirizzo per esempio alla funzione elabora....come devo scrivere?

elabora (struct cella ** head); (dichiarazione funzione)

elabora(struct cella **head)
{
cella.xxx=10; ( non posso accedere cosi poi vero per far si che i cambiamenti vengano applicati alla lista anche fuori da elabora?)

spero di essermi spiegato! grazie dell'attenzione
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit
mto89 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2008, 22:17   #2
Alex_87_xelA
Senior Member
 
Iscritto dal: Nov 2008
Messaggi: 530
Quote:
Originariamente inviato da mto89 Guarda i messaggi
ciao, sto sviluppando un programmino e per scopi didattici devo tenere conto del tempo impiegato dall'utente a inserire una frase, il tutto tramite lista dinamica.

Io pensavo di rilevare il tempo prima della battitura della frase e successivamente dopo.
Poi come potrei proseguire per valutare il tempo migliore tramite lista? consigli?

inoltre se ho lista in una funzione, ad esempio
struct cella *head;

e la voglio modificare in un'altra funzione, quindi passandola per indirizzo per esempio alla funzione elabora....come devo scrivere?

elabora (struct cella ** head); (dichiarazione funzione)

elabora(struct cella **head)
{
cella.xxx=10; ( non posso accedere cosi poi vero per far si che i cambiamenti vengano applicati alla lista anche fuori da elabora?)

spero di essermi spiegato! grazie dell'attenzione
per la 2a domanda

puoi fare così
typedef struct cella *pCella;

elabora(pCella &pc) //e la usi come un normale puntatore
{
pc->xxx = 10; //oppure (*pc).xxx = 10; //dovrebbe essere così
}

oppure

elabora(pCella *pc)
{
(*pc)->xxx = 10; // oppure (**pc).xxx = 10; // dovrebbe essere così
}

ma è una lista di caratteri ?
puoi spiegarti meglio sul primo passaggio ?

Ultima modifica di Alex_87_xelA : 10-12-2008 alle 22:20.
Alex_87_xelA è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2008, 01:15   #3
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Alex_87_xelA Guarda i messaggi
elabora(pCella &pc) //e la usi come un normale puntatore
{
pc->xxx = 10; //oppure (*pc).xxx = 10; //dovrebbe essere così
}
Attento che con quella e commerciale stai definendo un riferimento, che è un concetto ignoto al linguaggio C; in C esistono solo puntatori, quello è codice C++.

Tornando al problema originale, non ho capito cosa ci sia bisogno di fare: registrare i tempi di ogni inserimento? E trovare il minimo? Be', per farlo puoi anche calcolare il tempo (prendi il tempo attuale, ricevi l'input, prendi il tempo attuale, fai la differenza tra i due tempi) impiegato per ogni inserimento, ed aggiornare il valore minimo ogni volta che questo viene battuto. Altrimenti, se ti vuoi esercitare sulle liste (e se ho capito bene ciò che intendi) puoi accodare ogni volta un nuovo nodo alla lista che conservi il tempo impiegato, ed alla fine scorrere la lista facendo lo stesso che ti ho detto prima.

ciao
__________________

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 11-12-2008, 12:14   #4
Alex_87_xelA
Senior Member
 
Iscritto dal: Nov 2008
Messaggi: 530
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Attento che con quella e commerciale stai definendo un riferimento, che è un concetto ignoto al linguaggio C; in C esistono solo puntatori, quello è codice C++.
hai ragione ... ma non avevo visto il titolo avevo letto C ... ma in testa a me era anche c++
Alex_87_xelA è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2008, 12:16   #5
Alex_87_xelA
Senior Member
 
Iscritto dal: Nov 2008
Messaggi: 530
per quanto riguarda il tempo puoi fare una cosa del genere

Codice:
   clock_t start, finish;
   double  duration;

   start = clock();
   ...
   ...
   ...
   finish = clock();
   duration = (double)(finish - start) / CLOCKS_PER_SEC;
   printf( "%2.1f seconds\n", duration );
poi devi aggiungere il cotnrollo per il minimo
Questo è solo un esempio per capire come si prende il tempo ... ora lo devi adattare tu al tuo programma (se ti serve OVVIAMENTE )
Alex_87_xelA è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2008, 14:13   #6
mto89
Senior Member
 
L'Avatar di mto89
 
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
ok grazie dei consigli...quindi pensavo di procedere cosi:

-prendo tempo
-input dati vari
-riprendo il tempo e faccio differenza.

poi tramite malloc alloco una cella della lista, dove gli inserisco il numero della mossa(in totale sono 8) e il relativo tempo, e metto la cella in cima a una lista...poi ad esempio in una funzione a parte scorro la lista cercando il tempo piu basso e ripeto quest'ultima cosa 5 volte (nel caso mi servano le 5 mosse piu rapide).
Integrando il precedente una cosa così puo andare?

int main(){
struct cella{
int num_mossa;
double tempo;
struct cella *next;
}


clock_t start, finish;
double duration;
struct cella *testa;
struct testa *new;


for ( i=0; i<numero_utenti; i++)
{

start = clock();
...
...
...
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
new = (struct cella *)malloc (sizeof (struct cella) );
new = NULL;
new->mossa = i;
new->tempo = duration;
new->next = testa;
testa = new;

cerca_minimi ( testa );
}

}


cerca_minimi ( testa )
{
int min[5];

while ( testa != NULL )
{
if (testa->tempo



fin qui è ok? poi però non so come andare avanti ...in piu le modifiche che faccio su cerca_minimi si ripercuotono pure sugli elementi della lista del main giusto?
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit
mto89 è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2008, 17:39   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
No, non è corretto: innanzitutto la struct definiscila fuori dalla funzione, poi nella funzione la utilizzi. Considera la possibilità di usare typedef per alleggerire la notazione. Magari fai una funzione per la creazione di nuovi nodi e l'inserimento in coda alla lista (ti semplifichi il codice).

Codice:
struct cella *testa;
Inizializzala a NULL.

Codice:
new = (struct cella *)malloc (sizeof (struct cella) );
new = NULL;
Che senso ha fare ciò che hai appena fatto?

Per il resto, la funzione di ricerca del minimo ha bisogno di una sola variabile di appoggio: la inizializzi al primo elemento della lista, e poi confronti nodo per nodo della lista partendo dal secondo fino alla fine. Ogni volta che trovi un nuovo minimo, lo sostituisci alla vecchia variabile. Alla fine la restituisci.

ciao
__________________

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 11-12-2008, 18:52   #8
mto89
Senior Member
 
L'Avatar di mto89
 
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
si giusto non volevo scrivere new=NUKLL ma testa =NULL
comunque, per trovare il minimo avevo pensato anchio al tuo metodo, il problema è che a me serrvono i 5 valori minimi, non solo il minimo, non cambia la procedura? pensavo magari di fargli memorizzare tutti i tempi anche in un array a partire dalla lista, per lavorarci piu agevolmente, seno come potrei procedere? grazie dell'aiuto
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit
mto89 è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2008, 19:20   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
I 5 minimi? Be' puoi fare un'array di 5 elementi inizializzati a 0, poi per ogni chiave nella lista cerchi l'indice del minimo nell'array e lo sostituisci con la chiave (ovviamente solo se è minore del minimo).
__________________

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 11-12-2008, 20:01   #10
Alex_87_xelA
Senior Member
 
Iscritto dal: Nov 2008
Messaggi: 530
Codice:
struct cella{
         int num_mossa;
         struct cella *next;
}

int main(){

   clock_t start;
   double  duration, min;
  struct cella *testa;
 struct testa *new;

for ( i=0; i<numero_utenti; i++)
{
   start = clock();
   ...
   ...
   ...
   duration = (double)(clock() - start) / CLOCKS_PER_SEC;
   new = (struct cella *)malloc (sizeof (struct cella) );
   new = NULL; NOOOOO !!! così prima crei lo spazio per una nuova cella (con l'istruzione precedente) e poi (con quest'istruzione) lasci quello spazio creato (lasciandolo poi ancora occupato :D) ... poi in questo modo ... le istruzioni successive non funzionerebbero perchè hai un puntatore NULL :D
   new->mossa = i;
   new->next = testa;
   testa = new;

   if(!i || min > duration)
      min = duration;

}
}
Ciao ... sono appena rientrato e solo ora ti posso rispondere ... comunque così dovresti trovare il minimo

NB : ATTENZIONE ho fatto qualche piccola modifica :
- tolta tempo dalla struct
- aggiunta la variabile min nel main
- struct fuori dal main
- ricerca del minimo

comunque si puo ancora migliorare ... ad esempio fuori il ciclo for ... se non hai inserito celle ... dovresti fare un

Codice:
if(!testa)
   printf("non c'è il minimo");
else
  //fai stampare il minimo :D
fammi sapere se trovi errori (anche di raggionamento) nel mio pseudo codice

Ultima modifica di Alex_87_xelA : 11-12-2008 alle 21:06.
Alex_87_xelA è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2008, 20:10   #11
Alex_87_xelA
Senior Member
 
Iscritto dal: Nov 2008
Messaggi: 530
Quote:
Originariamente inviato da mto89 Guarda i messaggi

cerca_minimi ( cella *testa )
{
int min[5];

while ( testa != NULL )
{
if (testa->tempo


in piu le modifiche che faccio su cerca_minimi si ripercuotono pure sugli elementi della lista del main giusto?
se fai modifiche sugli elementi di testa ... SI ... le modifiche si avranno "diciamo" "anche nel main" (anche se non è corretto da dire) ... mentre il puntatore ... "testa" ... anche se gli fai cambiare area puntata ... essendo passato per valore (IL PUNTATORE ... non gli oggetti ... quelli sono passati per indirizzo) ... all'uscita della funzione ... il puntatore sarà ancora quello che si aveva prima dell'ingresso a tale funzione
Alex_87_xelA è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
La Russia prosegue lo sviluppo di reatto...
Roscosmos: da quest'anno ci potrà...
Amazon, tutte le offerte e qualche novit...
Sedie gaming in offerta su Amazon: desig...
Scope elettriche in offerta Amazon: mode...
Ricarica EV fino a 22 kW spendendo poco:...
Costa solo 139€ ma fa tutto: Lefant M330...
Amazon Haul spinge sul risparmio: sconti...
Oral-B iO in offerta su Amazon: maxi sco...
I cosmonauti avrebbero riparato tutte le...
Artemis II: la NASA conferma il lancio d...
Il CEO di Embrak Studios difende l'uso d...
Il Trump Phone è sempre più un mistero: ...
OPPO ha svelato la serie Reno 15 "global...
Poste ID diventa a pagamento: l'identità...
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: 05:17.


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