Nastepujący program kopiuje wejście na wyjście blokami
#include <unistd.h>
int
main(void)
{
char bufor[1024];
int dlugosc;
while((dlugosc = read(0,bufor,1024)) > 0) {
write(1, bufor, dlugosc);
}
return 0;
}
Napisać wersję wykonującą kopiowanie znak po znaku
(przy użyciu 'getchar' i 'putchar'). Zmierzyć czas wykonania
przy pomocy polecenia 'time' do obu wersji i kilku wielkości
pliku (np. 1MB, 10MB, 100MB). Każdy pomiar powtarzać kilkakrotnie.
Powtórzyć pomiary kompilując programy przy pomocy opcji '-O0', '-O',
'-O2' i '-O3' (spróbować na kilku _różnych_ komputerach).
Przedyskutować wyniki.
Poniższa funkcja oblicza sumę sinusów liczb od 1 do n:
#include <math.h>
double
sumuj_sinusy(int n)
{
int i;
double suma = 0;
for(i=1; i <= n; i++) {
suma += sin(i);
}
return suma;
}
Napisać program główny który wywoła tą funkcję w pętli 100000 (chodzi
o to by sztucznie wydłużyć czas wykonania tak, by było go łatwo
zmierzyć) z argumentem 1000. Następnie zrobić wersję która oblicza
sinusy kolejnych kątów przy pomocy wzorów na sinus i kosinus sumy kątów
korzystając ze wstępnie obliczonych (przy pomocy funkcji bibliotecznej)
wartości 'sin(1)' i 'cos(1)'. Porównać czasy wykonania (dla różnych
opcji kompilatora) i przedyskutować wyniki.
W następnych zadaniach zakładamy że listy są zadane (reprezentowane
poprzez wskaźnik do pierwszego elementu, zaś ostatni element
ma zerowy wskaźnik do następnego). Listy są jednokierunkowe,
chyba że napisano inaczej.
Zadanie 3
Zadeklarować strukturę, odpowiednią jako typ węzła
dla:
Napisać funkcję, która mając daną listę liczb całkowitych znajdzie maksymalny element (albo obliczy sumę elementów).