Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Funkcja clock()

Ostatnio zmodyfikowano 2015-06-16 14:57
Autor Wiadomość
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.
P-133504
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.
P-133507
pekfos
» 2015-06-13 15:19:51
Jak to sprawdzasz?
P-133510
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
P-133516
pekfos
» 2015-06-13 16:35:54
C/C++
volatile clock_t czas1, czas2;
volatile int wynik = 0;
P-133517
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 :(
P-133519
pekfos
» 2015-06-13 16:48:22
Podaj kompletny kod, jaki ci nie działa.
P-133521
Roofy5
Temat założony przez niniejszego użytkownika
» 2015-06-13 17:03:00
C/C++
#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 ); //Przeladowane
void wczytaj( node *& korzen, int * tab, int i ); //Funkcje
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" );
   
    //wypiszDrzewo(root);
    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; //Pomocnik do poruszania sie po drzewie
   
    korzen =( node * ) malloc( sizeof( node ) ); //Tworzy korzen
    fscanf( plik, "%d", & liczba );
    korzen->key = liczba;
    korzen->lewy = NULL;
    korzen->prawy = NULL;
   
    ptr = korzen;
   
    for( i = 1; i < ILOSC; i++ ) //Od jeden, poniewaz pierwsza liczba zostala wczytana do korzenia
    {
        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 //Jezeli liczba jest wieksza LUB rowna to przechodzi w prawo
            {
                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; //Pomocnik do poruszania sie po drzewie
   
    korzen =( node * ) malloc( sizeof( node ) ); //Tworzy korzen
    liczba = tab[ 0 ];
    korzen->key = liczba;
    korzen->lewy = NULL;
    korzen->prawy = NULL;
   
    ptr = korzen;
   
    for( i = 1; i < ILOSC; i++ ) //Od jeden, poniewaz pierwsza liczba zostala wczytana do korzenia
    {
        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 //Jezeli liczba jest wieksza LUB rowna to przechodzi w prawo
            {
                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 ) ); //Tworzy korzen
        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; //Jeden jezeli znajdzie
   
    return 0; //Zero jezeli brak x w tablicy
}

int szukaj( node * korzen, int x )
{
    node * ptr = korzen;
    while( ptr != NULL )
    {
        if( x == ptr->key )
             return 1; //1 jezeli x wystepuje w drzewie
       
        if( x > ptr->key )
             ptr = ptr->prawy; //Skok do prawej galezi, jezeli x jest wiekszy
        else
             ptr = ptr->lewy; //Skok do lewej galezi, jezeli x jest mniejszy
       
    }
    return 0; //Zero jezeli x nie ma w drzewie
}

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 );
}
P-133522
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona