Podstawy Programowania Algorytmy i programowanie Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r.
Algorytm Algorytm w matematyce, informatyce, fizyce, itp. lub innej dziedzinie życia, to skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. Słowo "algorytm" pochodzi od starego angielskiego słowa algorism, oznaczającego wykonywanie działań przy pomocy liczb arabskich, które z kolei wzięło się od nazwiska Muhammed ibn Musa Alchwarizmi - matematyka perskiego z IX wieku. Algorytm w informatyce ma za zadanie przeprowadzić system z pewnego stanu początkowego do stanu końcowego. Badaniem algorytmów zajmuje się algorytmika. 2
Przykłady algorytmów Algorytm (przepis) na ugotowanie bigosu potrzebne są składniki oraz szczegółowy przepis jak przyrządzić bigos. Algorytm (postępowanie) stwierdzający zapalenie płuc u dziecka potrzebny jest wywiad środowiskowy oraz badania wstępne. Algorytm (naprawa/wymiana) pozwalający wymienić klocki hamulcowe w samochodzie potrzebne nowe części oraz sposób naprawy/wymiany klocków. Algorytm (rozwiązanie zadania) znalezienia rozwiązania układu n równań z n niewiadomymi potrzeba obliczenia kilku wyznaczników. Algorytm (algorytm) poszukiwania najkrótszej drogi w grafie zastosowanie jednego ze znanych algorytmów. 3
Ada Programista, zwany też potocznie koderem to osoba, która tworzy programy komputerowe w pewnym języku programowania. Za pierwszą programistkę komputerów uważa się Adę Lovelace, córkę słynnego poety George a Byrona. Ada Augusta Lovelace współpracowała z Charlesem Babbage em w pierwszej połowie XIX w. przy projektowaniu pierwszej programowalnej maszyny liczącej (maszyny tej jednak nie skonstruowano). Tworzone przez Adę opisy rozwiązywania konkretnych zadań obliczeniowych uznaje się za pierwsze programy. Ponad wiek później, w latach 1975-1981, jej imieniem nazwano jeden z języków programowania wysokiego poziomu Ada. Popularne języki programowania, to: C, Java, C++. 4
Problem i jego rozwiązanie Najpierw pojawia się problem, następnie poszukujemy algorytmu rozwiązującego dany problem i na koniec piszemy program wykorzystując jeden z istniejących języków programowania. Problem Algorytm Program Zależność między programem a algorytmem można przedstawić też tak: Komputer wykonuje Program komputerowy wykonuje Algorytm 5
Dane i wynik Zawsze przy rozwiązywaniu problemu zastanawiamy się jakie są dane i jak uzyskać wynik (rozwiązanie) w danym problemie (rozwiązanie danego problemu). Problem 1 Wyznaczyć sumę dwóch liczb Dane: Liczby a i b Wynik: Oblicz a + b i wypisz wynik Problem 2 Sprawdzić czy liczba całkowita jest parzysta czy nieparzysta Dane: Liczba całkowita n Wynik: Zbadaj resztę z dzielenia liczby n przez 2 Problem 3 Wyznaczyć sumę n liczb Dane: Liczby a1, a2, a3,, an Wynik: Oblicz sumę s=a1+a2, następnie sumę s=s+a3 i kontynuuj aż do sumy s=s+an 6
Reprezentacja algorytmu 1. Schemat krokowy (lista kroków) 2. Schemat blokowy 3. Program 7
Schemat krokowy (lista kroków) Krok 1. Zacznij algorytm (start) Krok 2. Wczytaj dane Krok 3. Oblicz wynik Krok 4. Wypisz wynik Krok 5. Zakończ algorytm (koniec) 8
Schemat blokowy (klocki bazowe) klocki graniczne Start Stop klocki wejścia/wyjścia Podaj wartość Wyprowadź wartość klocek wykonawczy Instrukcje do wykonania klocek warunkowy NIE Wyrażenie logiczne TAK 9
Program Każdy program ma swój początek i koniec. Początek w programie musi być tylko jeden. System operacyjny musi wiedzieć od którego momentu zacząć wykonywać program. Koniec programu nie musi być jeden może być wiele wyjść. Komputer jest urządzeniem pracującym w pierwotnym założeniu sekwencyjnie tak również będą przetwarzane pierwsze programy przez nas pisane (linia po linii). Często musimy dokonać pewnego wyboru w programie korzystamy z instrukcji warunkowych. Jeśli pewne fragmenty kodu mają być powtarzane to mówimy inaczej, że iterujemy pewne czynności. Kod programu często dzielimy na mniejsze części podprogramy. Programowanie strukturalno-proceduralne polega na pisaniu kodu z użyciem trzech struktur: sekwencji (;), instrukcji warunkowych (if else) oraz pętli (for, while) oraz dzieleniu kody na mniejsze części tzw. procedury i funkcje. Taki schemat programowania umożliwia np. język C++. 10
Najprostszy program w C++ #include <iostream> int main() { std::cout << "Pierwszy program"; std::cout << "Napisany w C++"; return 0; } Wszystkie wiersze zaczynające się znakiem # nazywamy dyrektywami preprocesora. Każda dyrektywa musi zaczynać się od nowego wiersza. Biblioteka iostream służy do wprowadzania i wyprowadzania informacji z podstawowych urządzeń wejścia/wyjścia. Główna część programu to funkcja int main(). Wszystko co jest zawarte między klamrami {} funkcji int main() będzie wykonywane, do momentu napotkania instrukcji return 0 (0 to kod wyjścia z programu). Polecenie std::cout powoduje skierowanie danych na standardowy strumień wyjścia. Napisy w C++ zapisujemy ujmując je w symbol ". 11
Schemat krokowy algorytmu (Problem 1) Krok 1. Zacznij algorytm (start) Krok 2. Wczytaj wartość liczb a i b Krok 3. Podstaw wynik = a + b Krok 4. Wypisz wynik Krok 5. Zakończ algorytm (koniec) 12
Schemat blokowy algorytmu (Problem1) Start Wczytaj a,b wynik = a + b Wypisz wynik Stop 13
Program w C++ (Problem 1) #include <iostream> int main() { int a,b,wynik; std::cout << "Podaj a="; std::cin >> a; std::cout << "Podaj b="; std::cin >> b; wynik = a + b; std::cout << "Suma liczb a i b wynosi\n"; std::cout << wynik; } return 0; Operator = służy do operacji przypisania zmiennej wartości std::cin to polecenie które powoduje przekierowanie danych ze standardowego wejścia do zmiennej 14
Schemat krokowy algorytmu (Problem 2) Krok 1. Zacznij algorytm Krok 2. Wczytaj wartość liczby całkowitej n Krok 3. Jeśli reszta z dzielenia n przez 2 jest 0 to wynik=0, a w przeciwnym wynik=1 Krok 4. Wypisz wynik Krok 5. Zakończ algorytm 15
Schemat blokowy algorytmu (Problem 2) Start Wczytaj n nie czy n:2=0 tak wynik = 1 wynik = 0 Wypisz wynik Stop 16
Program w C++ (Problem 2) #include <iostream> int main() { int n,wynik; std::cout << "Podaj n="; std::cin >> n; if (n%2==0) wynik=0; else wynik=1; std::cout << wynik; } return 0; 17
Schemat krokowy algorytmu (Problem 3) Krok 1. Zacznij algorytm Krok 2. Wczytaj liczbę n (ilość liczb), wczytaj liczby a[1],a[2],a[3],,a[n] Krok 3. Przypisz licznik=0, wynik=0 Krok 4. Sprawdź, czy licznik <= n. Jeśli TAK przejdź do Krok 5, jeśli nie przejdź do Krok 6 Krok 5. Przypisz wynik = wynik + a[licznik], licznik = licznik +1 oraz przejdź do Krok 4 Krok 6. Wypisz wynik Krok 7. Zakończ algorytm 18
Schemat blokowy algorytmu (Problem 3) Start Wczytaj n Wczytaj liczby a[1],a[2],a[3],,a[n] licznik = 0 wynik = 0 tak czy licznik<=n nie wynik = wynik + a[licznik] liczni k= 1icznik + 1 Wypisz wynik Stop 19
Program w C++ (Problem 3) #include <iostream> int main() { int n,wynik,licznik; std::cout << "Podaj n="; std::cin >> n; int a[n]; for (int i=0; i<n; i++) { std::cout << "a[" << (i+1) << "]="; std::cin >> a[i]; } licznik = 0; wynik = 0; while (licznik<n) { wynik = wynik + a[licznik]; licznik = licznik + 1; } std::cout << "Suma liczb wynosi" << wynik; } return 0; 20
Zadanie Napisz schemat krokowy, blokowy i program dla algorytmu rozwiązywania równania liniowego ax+b=0 w zależności od rzeczywistych współczynników a i b. Wskazówka! Uwzględnij przypadki: a<>0 wówczas dokładnie jedno rozwiązanie x0=-b/a a=0 i b=0 wówczas nieskończenie wiele rozwiązań a=0 i b<>0 wówczas brak rozwiązań 21