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;
}