Astromeri Δημοσ. 28 Οκτωβρίου 2009 Δημοσ. 28 Οκτωβρίου 2009 Καλησπέρα, έχω μία εργασία και πρέπρει να φτιάξω ενα πρόγραμμα στο οποίο θα γεμίζουμε έναν πίνακα χ θέσεων. Μέσω μίας συνάρτησης θα γίνεται η ταξινόμηση του και με μία άλλη συνάρτηση θα γίνεται σειρίακη αναζήτηση κάποιου αριθμού που θα δίνουμε από το πληκτρολόγιο. Το πρόβλημα μου είναι ότι θελω να μετράω τον χρόνο που χρειάζεται ο cpu για να εκτελέση την αναζήτηση. Έχω βρεί 2-3 τρόπους αλλά κανένας δεν δουλεύει. Τώρα και δύο μήνες ασχολούμε με την C για αυτό αν έχω κάνει κανένα λάθος μην με φάτε! Ο κώδικας μου: #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); }
jtsc21 Δημοσ. 28 Οκτωβρίου 2009 Δημοσ. 28 Οκτωβρίου 2009 βασικα αν μπορεις ξαναποσταρε τον κωδικα μεσα στα tags > ωστε να φαινεται η στοιχηση και να ειναι πιο ευαναγνωστο
virxen75 Δημοσ. 28 Οκτωβρίου 2009 Δημοσ. 28 Οκτωβρίου 2009 αυτό το έχεις δοκιμάσει? > #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; }
Astromeri Δημοσ. 28 Οκτωβρίου 2009 Μέλος Δημοσ. 28 Οκτωβρίου 2009 βασικα αν μπορεις ξαναποσταρε τον κωδικα μεσα στα tags > ωστε να φαινεται η στοιχηση και να ειναι πιο ευαναγνωστο[/quote]Πιστεύω να εννοείς αυτό. >#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); }
Evgenios1 Δημοσ. 29 Οκτωβρίου 2009 Δημοσ. 29 Οκτωβρίου 2009 Καπου ειχα δει μια πολυ καλη μεθοδο για να χρονομετρησεις μια "εκτελεση". Απ'οσα θυμαμε σου εγραψα το παρακατω >[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
aghahowa Δημοσ. 29 Οκτωβρίου 2009 Δημοσ. 29 Οκτωβρίου 2009 #include <time.h> time_t t1,t2; //dhlwsh metablhtwn (void)time(&t1); //arxh blablablablabla (void)time(&t2); //telos cout<<t2-t1; //emfanish apotelesmatos
dop Δημοσ. 30 Οκτωβρίου 2009 Δημοσ. 30 Οκτωβρίου 2009 Σε τι περιβάλλον; Σε Windows κάνεις include <Windows.h> και χρησιμοποιείς της GetTickCount(). Σε Unix και Linux υπάρχει η clock_gettime().
TheMagician Δημοσ. 30 Οκτωβρίου 2009 Δημοσ. 30 Οκτωβρίου 2009 δεν σε κανουν οι συναρτησεις χρονου της c γιατι μετρους milliseconds που ειναι πολυ μεγαλα για τα δεδομενα που επεξεργαζεσαι δες την συναρτηση που λεει ο φιλος απο πανω γιατι μετραει σε nanoseconds
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.