cybernetykpl Temat założony przez niniejszego użytkownika |
C wykonanie dodawania przez kilka sekund » 2017-10-28 18:51:47 Witam, mam następujacy kod, w którym z jest dodawane do siebie (z++). Mam to dodawanie do siebie liczb wykonać przez sekundę i wyświetlić wynik dodawania. W jaki sposób sprawidź aby c++ wykonywało sie tylko określoną ilość sekund? #include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/types.h>
int main( void ) { long int z = 0; alarm( 1 ); while( 1 ) { printf( "Liczba:" ); printf( "%d\n", z ); z++; printf( "pid %d ppid %d\n ", getpid(), getppid() ); } return 0; }
|
|
ParseThisCode |
» 2017-10-29 06:26:02 O ile wiem to to postinkrementacja, a dodawanie liczby samej do siebie wygląda tak: |
|
nanoant20 |
» 2017-10-29 08:53:53 Mozesz dodać bibliotękę time.h lub windows.h #include <time.h> #include <windows.h>
i zdefiniować sobie zmienne clock_t start,stop; double czas = (double)(stop-start) / CLOCKS_PER_SEC; lub skorzystać ze struktury SYSTEMTIME zdefiniowanej w bibliotece windows.h |
|
cybernetykpl Temat założony przez niniejszego użytkownika |
» 2017-10-29 09:36:19 Niestety jak dam z += z; to mam wynik 0. Z to ma być zmienna całkowita typu long. Tiutaj chodzi o zwielokrotnienie liczby z. Czy to z += z; to zwielokrotnienie? Druga sprawa to kompilator pokazuje mi błąd (pod linux): pp.c:11:5: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode for( int i = 0; i < 10; i++ ) ^ pp.c:11:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
|
|
nanoant20 |
» 2017-10-29 09:39:47 oczywiście, że masz wynik 0 bo sam ustawiłeś zmienną z na 0 Wpisałem twój kod pod Code::Blocks na Xubuntu 16.04 i nie ma żadnych błędów. Jezeli je masz to wejdź w ustawienia swojego kompilatora Settings/Compiler i w zakładce Comiler Flags (zaznacz lub odznacz) ustaw flagę/i. Jeżeli używasz standardu C++11 to zaznacz flagę Have g++ follow the C++11 ISO C++ language standard -std=c++11 |
|
cybernetykpl Temat założony przez niniejszego użytkownika |
» 2017-10-29 09:51:41 Mam teraz wynik. 0 + 0 = 0 czas 0.000001 s. 1 + 1 = 2 czas 0.000001 s. 2 + 2 = 4 czas 0.000000 s. 3 + 3 = 6 czas 0.000000 s. 4 + 4 = 8 czas 0.000001 s. 5 + 5 = 10 czas 0.000000 s. 6 + 6 = 12 czas 0.000000 s. 7 + 7 = 14 czas 0.000000 s. 8 + 8 = 16 czas 0.000000 s. 9 + 9 = 18 czas 0.000001 s. a chodzi o to aby to wykonywało się w czsie 1 sekundy. Czy jest dobrze? #include <stdio.h> #include <stdlib.h> #include <time.h>
int main( void ) { int z; clock_t start, stop; double czas; for( int i = 0; i < 10; i++ ) { printf( "%d + %d ", z = i, z = i ); start = clock(); z += z; stop = clock(); czas =( double )( stop - start ) / CLOCKS_PER_SEC; printf( "= %d czas %lf s.\n", z, czas ); } return 0; }
|
|
nanoant20 |
» 2017-10-29 09:59:28 mea culpa mea maxima culpa To jest czas w jakim wykonuję się jedno dodawanie. Trzeba ustawić na sztywno zmienna stop;
tutaj masz linka do http://cpp0x.pl/kursy/Kurs-C++/Biblioteka-time-h/321
|
|
cybernetykpl Temat założony przez niniejszego użytkownika |
» 2017-10-29 10:08:05 #include <stdio.h> #include <stdlib.h> #include <time.h>
int main( void ) { int z; clock_t start, stop; double czas; for( int i = 0; i < 10; i++ ) { printf( "%d + %d ", z = i, z = i ); start = clock(); z += z; stop = clock(); czas =( double )( stop - start ) / CLOCKS_PER_SEC; printf( "= %d czas %lf s.\n", z, czas ); } return 0; } proszę w takim razie popraw mi aby dodawało tak o 1. czyli: 0+1=1, 1+1=2, 2+1=3 otd. |
|
« 1 » 2 3 |