DOMANDA [C++] Tempo di esecuzione e stampa su carta

  • Autore discussione Autore discussione MPG
  • Data d'inizio Data d'inizio
Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.
Togli il tempoDiSorting dal ciclo di stampa!
E mettilo DOPO il while.

Così???
Codice:
#include <iostream>
#include <ctime>
using namespace std;

int main()
{
const int n = 3;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    cin>>vet[i];
}
cout<<endl;
bool flag =  true;
int stop = n - 1;
time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {
            //swap(vet[i], vet[i + 1]); // std::swap()
            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
double tempoDiSorting = difftime(time(NULL), inizio);
for(int i=0;i<n; i++)

{

    cout<<vet[i]<<endl;

}
}
 
Ultima modifica:
Così???
Codice:
#include <iostream>
#include <ctime>
using namespace std;

int main()
{
const int n = 3;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    cin>>vet[i];
}
cout<<endl;
bool flag =  true;
int stop = n - 1;
time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {
            //swap(vet[i], vet[i + 1]); // std::swap()
            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
for(int i=0;i<n; i++)
double tempoDiSorting = difftime(time(NULL), inizio);
{
    cout<<vet[i]<<endl;

}
}
Cava quella stampa del vettore e stampa il tempo. Ti ricordo che ti interessa vedere il tempo di sorting non dei numeri in ordine
 
Così???
flag = false;
No.
Ok, facciamo un passo indietro, perché mi pare tu non abbia capito.
La funzione "time" ritorna il tempo attuale, con la precisione del secondo.
Quindi, per trovare il tempo che passa tra due punti del programma, lo chiami due volte, assegnando il valore di ritorno a due variabili, dopodiché puoi usare difftime per calcolarne la differenza. Tutto qui, non c’è nulla di magico :)
Ovviamente ne puoi mettere quanti ne vuoi, alla fine puoi trovare il tempo trascorso tra qualunque due punti di interesse.
Per la cronaca, la funzione clock è molto più precisa in quanto ritorna il numero di "tick" del computer, quindi puoi avere una maggiore risoluzione (ma non aspettarti una precisione maggiore del millisecondo)
 
Scusate io non ho mai fatto questa cosa veramente, sarò anche un po' "durello" ma mi parlate di cose ripeto nuove che in pratica dobbiamo capire a casa..
MI fate la cortesia di scrivermi a questo punto con time o clock come si fa il tutto (insomma tutto il codice con quello che ho messo io) , lo provo e in caso di ulteriori dubbi vi ridomando?
Infine come è possibile stampare quello che compare la codifica e il tempo con windows? SI puo' creare un file e come?
per _Achille: dovrei al posto della stampa vettore scrivere "cout<<time_t<<endl;"
 
Scusate io non ho mai fatto questa cosa veramente, sarò anche un po' "durello" ma mi parlate di cose ripeto nuove che in pratica dobbiamo capire a casa..
MI fate la cortesia di scrivermi a questo punto con time o clock come si fa il tutto (insomma tutto il codice con quello che ho messo io) , lo provo e in caso di ulteriori dubbi vi ridomando?
Infine come è possibile stampare quello che compare la codifica e il tempo con windows? SI puo' creare un file e come?
per _Achille: dovrei al posto della stampa vettore scrivere "cout<<time_t<<endl;"
time_t è un tipo e non puoi stamparlo. È come scrivere cout << int. Devi stampare la variabile che ti contiene il tempo di esecuzione (la differenza dei tempi)

Un altro modo molto preciso è questo
C++:
using namespace std;
using namespace chrono;

auto puntoA = high_resolution_clock::now();

// Sorting...

auto puntoB = high_resolution_clock::now();

cout << duration_cast<duration<double>>(puntoB - puntoA).count();

Ovviamente il punto A va appena prima del ciclo e il punto B subito dopo. Poi si stampa da differenza (che è quel duration_cast...)
 
time_t è un tipo e non puoi stamparlo. È come scrivere cout << int. Devi stampare la variabile che ti contiene il tempo di esecuzione (la differenza dei tempi)
)

Achille continuiamo con questo primo suggerimento che mi avevi detto altrimenti fondo, cioeè
...
time_t inizio = time(NULL);
...
double tempoDiSorting = difftime(time(NULL), inizio);

In caso posta anche con l'ultimo esempio che hai messo.


ribadisco che non sono assolutamente a vostro livello e non essendo una cima in informatica comprendetemi.
Achille riposta per favore il mio code e reinserisci le cose giuste per stampare il tempo, ci giro intorno ma non ci arrivo...
 
Achille continuiamo con questo primo suggerimento che mi avevi detto altrimenti fondo, cioeè
...
time_t inizio = time(NULL);
...
double tempoDiSorting = difftime(time(NULL), inizio);


ribadisco che non sono assolutamente a vostro livello e non essendo una cima in informatica comprendetemi.
Achille riposta per favore il mio code e reinserisci le cose giuste per stampare il tempo, ci giro intorno ma non ci arrivo...
Mettili prima e dopo e stampa tempoDiSorting. Non sono da PC, e non sono nemmeno modifiche troppo ardue da capire
 
Ho fatto cosi' ma nulla e non viene a video nemmeno l'ordinamento del vettore se lo tolgo il suo cout (ovviamente) ma anche se lo rimetto..(perchè vengono numeri strampalati..)
Non si puo' stampare l'ordinamento dell'array e il tempo di esecuzione dle bubble sort in contemporanea?


Codice:
#include <iostream>
#include <ctime>
using namespace std;

int main()


{



const int n = 3;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    cin>>vet[i];
}

cout<<endl;
bool flag =  true;
int stop = n - 1;

time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {
            //swap(vet[i], vet[i + 1]); // std::swap()
            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
double tempoDiSorting = difftime(time(NULL), inizio);
for(int i=0;i<n; i++)

{
   // cout<<vet[i]<<endl;
   cout<<tempoDiSorting<<endl;


}
}
 
Ultima modifica:
Codice:
#include <iostream>
#include <ctime>
using namespace std;

int main()


{



const int n = 3;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    cin>>vet[i];
}

cout<<endl;
bool flag =  true;
int stop = n - 1;

time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {
            //swap(vet[i], vet[i + 1]); // std::swap()
            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
double tempoDiSorting = difftime(time(NULL), inizio);
// for(int i=0;i<n; i++)

{
   // cout<<vet[i]<<endl;
   cout<<tempoDiSorting<<endl;


}
}
Fatto ma non cambia nulla... e poi non è possibile la stampa ordinata e la stampa del tempo?
 
Codice:
#include <iostream>
#include <ctime>
using namespace std;

int main()


{



const int n = 3;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    cin>>vet[i];
}

cout<<endl;
bool flag =  true;
int stop = n - 1;

time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {
            //swap(vet[i], vet[i + 1]); // std::swap()
            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
double tempoDiSorting = difftime(time(NULL), inizio);
// for(int i=0;i<n; i++)

{
   // cout<<vet[i]<<endl;
   cout<<tempoDiSorting<<endl;


}
}
Fatto ma non cambia nulla... e poi non è possibile la stampa ordinata e la stampa del tempo?
Non serve a nulla è solo altra confusione. Cava il ciclo di riempimento e inizializza l’array con valori a 0 a 9 (ovviamente in disordine).
Cava tutti i commenti, non ne voglio vedere uno. L’unica cosa che deve rimanere è dichiarazione (con inizializzazione) del vettore e della costante n, dare il valore alla variabile che tiene il tempo di inizio, sort e calcolo e stampa del tempo di esecuzione. Deve e ripeto deve uscire qualcosa (0 al 100%). Altrimenti ci sta qualche problema riguardo il BubbleSort.
 
Fatto cosi utilizzando srand, viene 0 ma quindi?? C'è l'execution time vicino con il valore ma c'era anche prima , ma come si fa a capire se è quello del solo processo bubble o di tutto??
Ma non si puo' mettere un
cout<<"tempo totale in secondi:" e poi a video deve venire il tempo del bubble process??

Inoltre chiedo ancora umilmente ancora una volta, se il prof vuole ordinamento e tempo del bubble èpossibile e come visualizzarli entrambi e come? Infine si puo' stampare il tutto su carta e come?

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>
using namespace std;

int main()


{
    srand(time(NULL));



const int n = 5;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    vet[i]=rand()%9;
}

cout<<endl;
bool flag =  true;
int stop = n - 1;

time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {

            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
double tempoDiSorting = difftime(time(NULL), inizio);


{
      cout<<tempoDiSorting<<endl;


}
}
 
Ultima modifica:
Fatto cosi utilizzando srand, viene 0 ma quindi?? C'è l'execution time vicino con il valore ma c'era anche prima , ma come si fa a capire se è quello del solo processo bubble o di tutto?? Inoltre cheiedo ancora umilmente ancora una volta, se il prof vuole ordinamento e tempo del bubble èpossibile e come visualizzarli entrambi e come? Infine si puo' stampare il tutto su carta e come?

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>
using namespace std;

int main()


{
    srand(time(NULL));



const int n = 5;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
{
    vet[i]=rand()%9;
}

cout<<endl;
bool flag =  true;
int stop = n - 1;

time_t inizio = time(NULL);
while (flag)
{
    flag = false;
    for (int i = 0; i <= stop; i++)
        if (vet[i] > vet[i + 1])
        {

            tmp=vet[i];
            vet[i]=vet[i+1];
            vet[i+1]=tmp;
            flag = true;
        }

    stop = stop - 1;
}
double tempoDiSorting = difftime(time(NULL), inizio);


{
      cout<<tempoDiSorting<<endl;


}
}
Si puoi ma non è di interesse ora.
Il tempo è di sorting per ipotesi... se hai messo la conta prima e dopo il ciclo di sort che pensi riguardi?
0 non è nulla, come dichiarato da te. 0 è proprio quello che deve venire. Il processore è notevolmente veloce e ordinare 10 elementi è davvero facile. Metti la dimensione a 1 milione e il tempo dovrebbe ora stare sui 10 secondi.
Poi introduciamo il tempo pure per i millisecondi.

Non pensare alla stampa, ma proprio nemmeno.
 
Ho messo 200000 e il programma va in tilt.......
Dimmi pure gli altri passi. Comuqne io prima mettevo manualmente i valori dell'array, prima anche se mettevo in maniera esatta la conta del tempo prima e dopo il sort il tutto non cambiava nel senso che l'execution time era sempre in funzione del tempo che ci mettevo nel mettere i valori, per questo mi chiedo ancora il perchè se appunto mettevo la conta del tempo nei punti giusti.. doveva venire anche prima il tempo dell'ordinamento e non quello di tutto il processo: perchè???
Poi comunque quello 0 che appare a cosa di riferisce perchè giustamente vorrei capire.. Ho messo 17500 il valore, mi ha dato 1 oltre all'execution time perchè?
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top