Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
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


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Apple chiude per sempre il suo forum uff...
Gli hard disk ibridi sono tornati, ma c'...
GTA 6 a 30 FPS su console e PSSR su PS5 ...
La scheda video AMD sta consumando il tu...
Sviluppatori contro XBOX Series S? Ecco ...
Adobe Acrobat sbarca su Google Workspace...
Google lancia il nuovo Pixel Tag e rivol...
Google DeepMind presenta AlphaGenome 2: ...
Questa e-bike da 26" su AliExpress costa...
Tre continenti, due oceani, zero scali: ...
Google Pixel 11 crolla a 629€ su Amazon,...
ByteDance prepara la risposta a Meta Mus...
Amazon taglia di circa 100€ il prezzo di...
Un eccellente treppiede in carbonio a ci...
DJI Osmo Action 5 Pro, super prezzo su A...
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: 10:21.


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