Προς το περιεχόμενο

Χρόνος εκτέλεση; C++


Astromeri

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

έχω μία εργασία και πρέπρει να φτιάξω ενα πρόγραμμα στο οποίο θα γεμίζουμε έναν πίνακα χ θέσεων. Μέσω μίας συνάρτησης θα γίνεται η ταξινόμηση του και με μία άλλη συνάρτηση θα γίνεται σειρίακη αναζήτηση κάποιου αριθμού που θα δίνουμε από το πληκτρολόγιο. Το πρόβλημα μου είναι ότι θελω να μετράω τον χρόνο που χρειάζεται ο cpu για να εκτελέση την αναζήτηση. Έχω βρεί 2-3 τρόπους αλλά κανένας δεν δουλεύει.

Τώρα και δύο μήνες ασχολούμε με την C για αυτό αν έχω κάνει κανένα λάθος μην με φάτε!:o

 

Ο κώδικας μου:

 

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

#define num 1000 //Apo edw kathorizoume to megethos pou ueloume na exei o pinakas mas

 

void taxinomisi(int[] ,int); //dhlwsh ths sunarthshs taxinomisi

void seiriakh(int[] ,int ,int ); //dhlwsh ths sunarthshs seiriakh

 

int main()

{

 

int array[num],ar,i,wait; //dhlwsh metablhtwn

 

scanf("%d",&ar); //Dinoume ton ari8mo pou 8eloume na psaxoume

 

printf("Arithmos pou psaxnoume: %d\n",ar);

 

srand(GetTickCount());

 

for(i=0; i<num; i++)

array=rand();

 

taxinomisi(array, num); //kaloume thn sunarthsh taxinomish me orismata ton pinaka aray kai thn metablhth num

 

seiriakh(array, num ,ar);

 

printf("");

 

scanf("%d",&wait); //den klinei to para8uro tou run

 

}

 

void taxinomisi(int matrix[] ,int Megethos_Pinaka) //Orismos ths function taxinomisi

{

int i,temp,j;

 

for(i=1; i<=Megethos_Pinaka; i++)

{

 

for (j = Megethos_Pinaka-1; j >= i; j--)

if (matrix[ j ] <matrix[j-1])

{

temp = matrix[ j ];

matrix[ j ] = matrix[j-1];

matrix[j-1] = temp;

}

}

}

 

 

void seiriakh(int matrix[] ,int Megethos_Pinaka ,int x) //Orismos ths function seiriakh

{

int i;

clock_t start = clock();

for(i=0; i<Megethos_Pinaka; i++)

{

// printf("%d\n",matrix);

if(matrix==x){

printf("bre8hke sthn thesh %d tou pinaka\n",i);

printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

return;

}

 

}

printf("Den brethike mesa sto pinaka o arithmos %d pou psaxneis\n\n\n",x);

printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

}

 

 

 

 

Δημοσ.

βασικα αν μπορεις ξαναποσταρε τον κωδικα μεσα στα tags

>

ωστε να φαινεται η στοιχηση και να ειναι πιο ευαναγνωστο;)

Δημοσ.

αυτό το έχεις δοκιμάσει?

 

>
#include <iostream>

int main(){

int clo = clock();
while ((clock() - clo)<10000){//τεχνητή καθυστέρηση 10 sec
     }
printf("\nelapsed time =%d sec",(clock() - clo)/1000);
system("pause");
return 0;
}

Δημοσ.
βασικα αν μπορεις ξαναποσταρε τον κωδικα μεσα στα tags
>
ωστε να φαινεται η στοιχηση και να ειναι πιο ευαναγνωστο;)[/quote]

Πιστεύω να εννοείς αυτό.:-D

>#include <windows.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h>

#define num 100000 //Apo edw kathorizoume to megethos pou ueloume na exei o pinakas mas

void taxinomisi(int[] ,int); //dhlwsh ths sunarthshs taxinomisi
void seiriakh(int[] ,int ,int ); //dhlwsh ths sunarthshs seiriakh

int main()
{

int array[num],ar,i,wait; //dhlwsh metablhtwn


scanf("%d",&ar);  //Dinoume ton ari8mo pou 8eloume na psaxoume



printf("Arithmos pou psaxnoume: %d\n",ar);

for(i=0; i<num; i++)
   array[i]=rand();

srand(GetTickCount());
taxinomisi(array, num); //kaloume thn sunarthsh taxinomish me orismata ton pinaka aray kai thn metablhth num


seiriakh(array, num ,ar);

printf("");

scanf("%d",&wait); //den klinei to para8uro tou run



}



void taxinomisi(int matrix[] ,int Megethos_Pinaka) //Orismos ths function taxinomisi
      {
        int i,temp,j;
          
        for(i=1; i<=Megethos_Pinaka; i++)
           {
          
             for (j = Megethos_Pinaka-1; j >= i; j--)
             if (matrix[ j ] <matrix[j-1])
            {
             temp = matrix[ j ];
            matrix[ j ] = matrix[j-1];
            matrix[j-1] = temp;
             }
           }  
           }





void seiriakh(int matrix[] ,int Megethos_Pinaka ,int x) //Orismos ths function seiriakh
{
    int i;
    clock_t start = clock();
    for(i=0; i<Megethos_Pinaka; i++)
    {
    // printf("%d\n",matrix[i]);
           if(matrix[i]==x){
                  printf("bre8hke sthn thesh %d tou pinaka\n",i);
                  printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
                  return;
                  }   
             
    }
    printf("Den brethike mesa sto pinaka o arithmos %d pou psaxneis\n\n\n",x);
    printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
     }


Δημοσ.

Καπου ειχα δει μια πολυ καλη μεθοδο για να χρονομετρησεις μια "εκτελεση". Απ'οσα θυμαμε σου εγραψα το παρακατω

 

>[color="#0000ff"]#include[/color] [color="#a31515"]"stdafx.h"[/color]
[color="#0000ff"]#define[/color] LA
[color="#0000ff"]#include[/color] <time.h>
[color="#0000ff"]#include[/color] <windows.h>
[color="#0000ff"][b]void[/b][/color] some([color="#0000ff"][b]void[/b][/color]);
[color="#0000ff"]#ifdef[/color] LA
[color="#8000ff"]int[/color] _tmain([color="#8000ff"]int[/color] argc, _TCHAR* argv[])
[color="#0000ff"]#else[/color]
[color="#0000ff"]#include[/color] <stdio.h>
[color="#8000ff"]int[/color] main([color="#0000ff"][b]void[/b][/color])
[color="#0000ff"]#endif[/color]
{

time_t start,fin;
[color="#8000ff"]double[/color] tick;
[color="#0000ff"][b]for[/b][/color]([color="#8000ff"]int[/color] i=[color="#ff8000"]0[/color];i<[color="#ff8000"]2[/color];i++)
{
	tick = [color="#ff8000"]0[/color];
	start=time([color="#ff8000"]0[/color]);
	[color="#0000ff"][b]do[/b][/color]
	{
		some();
		tick+=[color="#ff8000"]1[/color];
		fin=time([color="#ff8000"]0[/color]);
	}[color="#0000ff"][b]while[/b][/color](start==fin);
}
[color="#8000ff"]double[/color] ms=([color="#ff8000"]1.0[/color]/tick)*[color="#ff8000"]1000[/color];
printf([color="#a31515"]"%f ms"[/color],ms);

getchar();

[color="#0000ff"][b]return[/b][/color] [color="#ff8000"]0[/color];
}
[color="#0000ff"][b]void[/b][/color] some()
{
Sleep([color="#ff8000"]55[/color]);
}

 

Δουλευει αρκετα καλα για χρονους κατω απο το ενα δευτερολεπτο. Αν παιξεις με την στατιστικη θα βγαλεις καλο αποτελεσμα.;)

 

υγ σβησε το

#include "stdafx.h"

#define LA

Δημοσ.

Σε τι περιβάλλον; Σε Windows κάνεις include <Windows.h> και χρησιμοποιείς της GetTickCount().

 

Σε Unix και Linux υπάρχει η clock_gettime().

Δημοσ.

δεν σε κανουν οι συναρτησεις χρονου της c γιατι μετρους milliseconds που ειναι πολυ μεγαλα για τα δεδομενα που επεξεργαζεσαι

δες την συναρτηση που λεει ο φιλος απο πανω γιατι μετραει σε nanoseconds

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...