pekfos |
» 2015-06-13 00:00:51 Założyłem, że i tak będzie potrzebował czasu nie w milisekundach |
Bo clock() nie zwraca czasu w milisekundach. |
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-13 14:11:00 Nie chodzi nawet o format jakim wypisuję ten czas.
Kiedy sprawdzam to pod debuggerem, to tam te liczby są identyczne. |
|
pekfos |
» 2015-06-13 15:19:51 Jak to sprawdzasz? |
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-13 16:17:23 Używam Visual Studio 2013 - ustawiam breakpointa za drugim pomiarem czasu i przeglądam zmienne. Wartości "czas1" i "czas2" są identyczne, więc kiedy odejmuję czas2-czas1, aby wyliczyć właściwy czas działania, to rezultatem jest 0 |
|
pekfos |
» 2015-06-13 16:35:54 volatile clock_t czas1, czas2; volatile int wynik = 0; |
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-13 16:44:08 Całkiem zapomniałem o tym sposobie. Niestety ale jednak dalej nie działa :( |
|
pekfos |
» 2015-06-13 16:48:22 Podaj kompletny kod, jaki ci nie działa. |
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-13 17:03:00 #include <stdio.h> #include <stdlib.h> #include <time.h>
#pragma warning ( disable : 4996) #pragma comment(linker, "/STACK:100000000")
#define ILOSC 10000000
struct node { int key; node * lewy = NULL; node * prawy = NULL; };
void generujPlik(); int * rezerwujPamiec( int rozmiar );
void wczytaj( int * tab ); void wczytaj( node *& korzen, int * tab, int i ); int szukajTab( int * tab, int n, int x ); int szukaj( node * korzen, int x ); void wypiszDrzewo( node * korzen );
int main() { node * root = NULL; int x = 21000; int * tablica = rezerwujPamiec( ILOSC ); volatile register clock_t czas1, czas2; printf( "Generuje plik..." ); generujPlik(); printf( "OK\n" ); printf( "Wczytuje tablice..." ); wczytaj( tablica ); printf( "OK\n" ); printf( "Wczytuje drzewo..." ); int i; for( i = 0; i < ILOSC; i++ ) wczytaj( root, tablica, i ); printf( "OK\n" ); printf( "\nZaczynam szukac\n\n" ); volatile int wynik = 0; czas1 = clock() / CLOCKS_PER_SEC; wynik = szukajTab( tablica, ILOSC, x ); czas2 = clock() / CLOCKS_PER_SEC; printf( "Poszukiwanie x w tablicy: %d\n", wynik ); printf( "Czas: %lf\n\n", czas2 - czas1 ); wynik = 0; wynik = szukaj( root, x ); czas1 = clock() / CLOCKS_PER_SEC; printf( "Poszukiwanie x w drzewie: %d\n", wynik ); czas2 = clock() / CLOCKS_PER_SEC; printf( "Czas: %lf\n", czas2 - czas1 ); printf( "\nNacisnij ENTER..." ); getchar(); return 0; }
void generujPlik() { FILE * plik = NULL; plik = fopen( "Liczby.txt", "w" ); if( !plik ) { printf( "Nie moge utworzyc pliku\nNacisnij ENTER..." ); getchar(); exit( 1 ); } srand( time( NULL ) ); int i; int liczba; for( i = 0; i < ILOSC; i++ ) { liczba = rand() % 20001 - 10000; fprintf( plik, "%d\n", liczba ); } fclose( plik ); }
int * rezerwujPamiec( int rozmiar ) { int * tab; tab =( int * ) malloc( rozmiar * sizeof( int ) ); return tab; }
void wczytaj( int * tab ) { FILE * plik = NULL; plik = fopen( "Liczby.txt", "r" ); if( !plik ) { printf( "Nie moge otworzyc pliku\nNacisnij ENTER..." ); getchar(); exit( 1 ); } int i; for( i = 0; i < ILOSC; i++ ) fscanf( plik, "%d", & tab[ i ] ); fclose( plik ); }
void wczytaj2( node *& korzen ) { FILE * plik = NULL; plik = fopen( "Liczby.txt", "r" ); if( !plik ) { printf( "Nie moge otworzyc pliku\nNacisnij ENTER..." ); getchar(); exit( 1 ); } int i, liczba; node * ptr = NULL; korzen =( node * ) malloc( sizeof( node ) ); fscanf( plik, "%d", & liczba ); korzen->key = liczba; korzen->lewy = NULL; korzen->prawy = NULL; ptr = korzen; for( i = 1; i < ILOSC; i++ ) { fscanf( plik, "%d", & liczba ); ptr = korzen; while( 1 ) { if( liczba < ptr->key ) { if( ptr->lewy == NULL ) { ptr->lewy =( node * ) malloc( sizeof( node ) ); ptr->lewy->key = liczba; ptr->lewy->lewy = NULL; ptr->lewy->prawy = NULL; ptr = NULL; break; } ptr = ptr->lewy; } else { if( ptr->prawy == NULL ) { ptr->prawy =( node * ) malloc( sizeof( node ) ); ptr->prawy->key = liczba; ptr->prawy->lewy = NULL; ptr->prawy->prawy = NULL; ptr = NULL; break; } ptr = ptr->prawy; } } } fclose( plik ); }
void wczytaj3( node *& korzen, int * tab ) { int i, liczba; node * ptr = NULL; korzen =( node * ) malloc( sizeof( node ) ); liczba = tab[ 0 ]; korzen->key = liczba; korzen->lewy = NULL; korzen->prawy = NULL; ptr = korzen; for( i = 1; i < ILOSC; i++ ) { liczba = tab[ i ]; ptr = korzen; while( 1 ) { if( liczba < ptr->key ) { if( ptr->lewy == NULL ) { ptr->lewy =( node * ) malloc( sizeof( node ) ); ptr->lewy->key = liczba; ptr->lewy->lewy = NULL; ptr->lewy->prawy = NULL; ptr = NULL; break; } ptr = ptr->lewy; } else { if( ptr->prawy == NULL ) { ptr->prawy =( node * ) malloc( sizeof( node ) ); ptr->prawy->key = liczba; ptr->prawy->lewy = NULL; ptr->prawy->prawy = NULL; ptr = NULL; break; } ptr = ptr->prawy; } } } }
void wczytaj( node *& korzen, int * tab, int i ) { if( korzen == NULL ) { korzen =( node * ) malloc( sizeof( node ) ); korzen->key = tab[ i ]; korzen->lewy = NULL; korzen->prawy = NULL; return; } else { if( tab[ i ] >= korzen->key ) return wczytaj( korzen->prawy, tab, i ); else return wczytaj( korzen->lewy, tab, i ); } }
int szukajTab( int * tab, int n, int x ) { int i; for( i = 0; i < n; i++ ) if( tab[ i ] == x ) return 1; return 0; }
int szukaj( node * korzen, int x ) { node * ptr = korzen; while( ptr != NULL ) { if( x == ptr->key ) return 1; if( x > ptr->key ) ptr = ptr->prawy; else ptr = ptr->lewy; } return 0; }
void wypiszDrzewo( node * korzen ) { node * ptr = korzen; if( ptr->lewy != NULL ) wypiszDrzewo( ptr->lewy ); if( ptr->prawy != NULL ) wypiszDrzewo( ptr->prawy ); printf( "%d ", ptr->key ); }
|
|
1 « 2 » 3 4 |