Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie
Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer pozycji na której się znajduje). W pamięci komputera tablica zajmuje ciągły obszar komórek pamięci. Tablica charakteryzuje się bezpośrednim dostępem do elementów. Dostęp ten uzyskuje się poprzez podanie odpowiednich indeksów elementów.
Tablice jednowymiarowe
Tablice w pamięci komputera Numeracja pozycji rozpoczyna się zawsze od zera w języku Java!, tj. indeksem pierwszego elementu jest 0, następnego 1, itd.
Tablice jednowymiarowe Tablice jednowymiarowe Inicjalizacja tablicy: <typ wartości> <nazwa tablicy> [rozmiar] = <elementy tablicy>; Przykład: float wektor [4] = 3.5, 2, 14.4, 34 ; int tab[] = 23, 45, 56, 2, 34, 23 ; int A[50];
Wczytywanie elementów tablicy jednowymiarowej
Wczytywanie elementów tablicy jednowymiarowej #include <iostream> using namespace std; int main() const int n=10; int A[n]; for(int i=0; i<n; i++) cin>>a[i]; #include <iostream> using namespace std; int main() const int n=10; int A[n]; int i=0; while(i<n) cin>>a[i]; i++; return 0; return 0;
Algorytm wyszukiwania największego elementu
Algorytm wyszukiwania największego elementu #include <iostream> //wyszukiwanie maksymalnego elementu using namespace std; int main() const int n=10; int A[n]; int i=0; while(i<n) cin>>a[i]; i++; int max=0; i=1; while(i<n) if(a[i]>a[max]) max=i; i++; cout<<a[max]<<endl; return 0;
Funkcje Deklaracja funkcji: <typ wartości> <nazwa>(<lista parametrów formalnych ze specyfikacją>) <lista deklaracji obiektów lokalnych>; <treść funkcji>; return <wyrażenie>;
Funkcje Wywołanie funkcji: w instrukcji przypisania w instrukcji wyjścia Format: <nazwa funkcji>(<lista parametrów aktualnych>);
Funkcje Przykłady Napisać program w języku Java obliczający wartości funkcji y = ctg x dla dowolnego, dopuszczalnego argumentu x.
Funkcje Przykłąd #include <iostream> #include <cmath> using namespace std; double cotangens(double x); int main() cout << cotangens(25) << endl; return 0; //================================== double cotangens(double x) return cos(x)/sin(x);
#include <iostream> using namespace std; double poleprostokata(double a, double); int main() int bok1, bok2; cin>>bok1>>bok2; cout<<"pole prostokata o podanych bokach = "; cout << poleprostokata(bok1, bok2) << endl; return 0; //================================== double poleprostokata(double a, double b) double pole; pole=a*b; return pole;
Funkcja rekurencyjna Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.
Funkcja rekurencyjna Przykład #include <iostream> using namespace std; long long silnia(double a); int main() int n; cout<<"podaj n: "; cin>>n; cout<<"\nsilnia dla podanego n= "; cout << silnia(n) << endl; return 0; //=================== long long silnia(double a) if(a==0) return 1; else return a*silnia(a-1);
Algorytm Euklidesa rozwiązanie 1 Wyznaczania NWD dwóch liczb a i b Wejście: Wyjście: Krok 1: a,b - liczby naturalne, których NWD oblicza algorytm a lub b - wartość NWD pierwotnych liczb a i b. a,b - liczby naturalne, których NWD oblicza algorytm Wyjście: a lub b - wartość NWD pierwotnych liczb a i b. Krok 2: Krok 3: Czytaj a,b Jeśli a = b, to idź do kro ku 5 Jeśli a > b, to a a - b. Inaczej b b - a Krok 4: Idź do kroku 2 ; wczytujemy dane wejściowe ; jeśli a = b, to NWD jest a lub b ; jeśli a jest różne od b, to od większej liczby odejmujemy mniejszą ; wracamy do sprawdzania warunku w kroku 2 Krok 5: Pisz a ; wypisujemy NWD Krok 6: Zakończ ; koniec algorytmu
Algorytm Euklidesa rozwiązanie 1
Algorytm Euklidesa rozwiązanie 1 wersja iteracyjna #include <iostream> int nwd (int a, int b) using namespace std; int nwd (int a, int b); while(a!= b) if(a > b) a = a- b; int main() else b = b- a; int n1, n2; return a; cout<<"podaj dwie liczby: "; cin>>n1>>n2; cout<<"\nnwd= "; cout << nwd(n1, n2) << endl; return 0; //============================
Algorytm Euklidesa rozwiązanie 1 wersja rekurencyjna int nwd (int a, int b) if(a!=b) if(a>b)return nwd(a-b, b); else return nwd(b-a,a); else return a;
Algorytm Euklidesa rozwiązanie 2 -zoptymalizowana int NWD(int a, int b) int pom; while(b!=0) pom = b; b = a%b; a = pom; return a;
Algorytm Euklidesa rozwiązanie 2 zoptymalizowana rekurencyjna