Języki i Paradygmaty Programowania I, laboratorium 04 Wszystkie
Transkrypt
Języki i Paradygmaty Programowania I, laboratorium 04 Wszystkie
Języki i Paradygmaty Programowania I, laboratorium 04 Wszystkie programy powinny być napisane w języku C. Zadanie 1. (na 3.0) Napisz program całkujący funkcję jednej zmiennej. Po uruchomieniu programu użytkownik ma wybrać funkcję oraz metodę całkowania. Funkcje do zrobienia: 1. sin(x) , 1 2. , x 3. − 2 x + 1 . Metody całkowania: 1. Metoda prostokątów, 2. Metoda trapezów. Stwórz funkcję całkującą która przyjmowała będzie wskaźnik na funkcję całkowaną, wskaźnik na funkcję metody całkowania oraz przedział całkowania, np.: float integrate( [wskaźnik na funkcję], [wskaźnik na metodę], float xbegin, float xend, float dx ); Funkcje implementujące metody całkowania powinny liczyć jeden ‘fragment’ całki - powinny przyjmować jako argumenty wartość x, krok dx oraz wskaźnik na całkowaną funkcję, np.: float mtrap( float x, float dx, [wskaźnik na funkcję] ); Aby policzyć jeden ‘fragment’ całki metodą prostokątów, potrzebujemy szerokości prostokąta (dx) oraz wartości funkcji w punkcie x. Metoda trapezów wymaga kroku dx oraz wartości funkcji w dwóch punktach – x oraz x+dx. Aby było uniwersalnie, trzeba przesłać wartość x, krok dx oraz wskaźnik na całkowaną funkcję. Zaprezentuj działanie każdej z metod dla każdej z funkcji: int main(int argc, char **argv) { printf("%f\n", integrate(fx1, mrect, -1.0f, 1.0f, 0.001f)); printf("%f\n", integrate(fx1, mtrap, -1.0f, 1.0f, 0.001f)); printf("%f\n", integrate(fx2, mrect, 1.0f, 1000.0f, 0.001f)); printf("%f\n", integrate(fx2, mtrap, 1.0f, 1000.0f, 0.001f)); printf("%f\n", integrate(fx3, mrect, 0.0f, 1.0f, 0.001f)); printf("%f\n", integrate(fx3, mtrap, 0.0f, 1.0f, 0.001f)); // Powinno wypisać wartości około: 0, 0, 7, 7, 0, 0 return 0; } Metoda trapezów: http://edu.i-lo.tarnow.pl/inf/alg/004_int/0003.php Zadanie 2. (na 4.0) Zrób listę jednokierunkową przechowującą zmienne typu int używając struktur. Każdy z elementów listy powinien przechowywać wskaźnik na poprzedni element listy oraz zmienną typu int. Napisz funkcję dodającą nowy element na początek listy oraz funkcję kasującą całą listę. struct ListElement { [todo] }; Dodaj kilka liczb do listy, wypisz je, a na koniec zwolnij pamięć. Wypisywanie zawartości listy podczas jej wypełniania jest zabronione, konieczne jest zrobienie osobnej pętli/funkcji wypisującej zawartość listy. Lista jednokierunkowa: http://edu.i-lo.tarnow.pl/inf/alg/001_search/0086.php Zadanie 3. (na 5.0) Zrób strukturę przechowującą wskaźnik na ostatni element listy oraz wskaźnik na funkcję dodającą element o nazwie add. struct List { struct ListElement *last; [todo] }; Napisz dwie funkcje: 1. Dodającą na początek listy, 2. Dodającą na koniec listy. Funkcja dodająca powinna przyjmować jako argument wskaźnik na strukturę List oraz dodawaną wartość typu int. Zaprezentuj działanie programu: int main(int argc, char **argv) { struct List list; list.last=NULL; list.add=addBegin; list.add(&list, 2); list.add(&list, 1); list.add=addEnd; list.add(&list, 3); list.add(&list, 4); [wypisanie zawartości listy] // Powinno wypisać 4, 3, 2, 1 (zawartość listy od końca) return 0; }