Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Anche gli Stati Uniti puntano il dito co...
È cinese la prima (enorme) pala e...
A Pechino è record di giorni con ...
Lenovo al CES 2026: Qira, IA ambientale ...
Le sette startup italiane che ridefinisc...
Philips Hue SpatialAware: la configurazi...
Sport & Lifestyle: performance, dati...
Le novità HP al CES 2026 tra AI P...
Gigabyte propone OLED per tutti con lumi...
Musk contro OpenAI, la guerra arriva in ...
Nuovi desktop e laptop ASUS: la sicurezz...
Il robot aspirapolvere più potente e com...
Catalizzatori nelle fuel cell: un gruppo...
La macchina che piega spazio e tempo: la...
Nuova ondata di licenziamenti in arrivo ...
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: 18:44.


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