Upload
vocong
View
217
Download
0
Embed Size (px)
Citation preview
Łódź, 3 października 2013 r. Katedra Analizy Nieliniowej, WMiI UŁ
Podstawy Programowania Algorytmy i programowanie
2 dr Robert Kowalczyk, KAN, WMiI UŁ
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.
3 dr Robert Kowalczyk, KAN, WMiI UŁ
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.
4 dr Robert Kowalczyk, KAN, WMiI UŁ
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++.
5 dr Robert Kowalczyk, KAN, WMiI UŁ
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.
Algorytm Program Problem
Zależność między programem a algorytmem można
przedstawić też tak:
Program
komputerowy Algorytm Komputer
wykonuje wykonuje
6 dr Robert Kowalczyk, KAN, WMiI UŁ
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
7 dr Robert Kowalczyk, KAN, WMiI UŁ
Reprezentacja algorytmu
1. Schemat krokowy (lista kroków)
2. Schemat blokowy
3. Program
8 dr Robert Kowalczyk, KAN, WMiI UŁ
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)
9 dr Robert Kowalczyk, KAN, WMiI UŁ
Schemat blokowy (klocki bazowe)
Podaj wartość
Start
Stop
Instrukcje do
wykonania
klocki graniczne
klocki wejścia/wyjścia Wyprowadź wartość
klocek wykonawczy
Wyrażenie
logiczne
TAK NIE
klocek warunkowy
10 dr Robert Kowalczyk, KAN, WMiI UŁ
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++.
11 dr Robert Kowalczyk, KAN, WMiI UŁ
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 ".
12 dr Robert Kowalczyk, KAN, WMiI UŁ
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)
13 dr Robert Kowalczyk, KAN, WMiI UŁ
Schemat blokowy algorytmu (Problem1)
Start
Stop
Wczytaj a,b
wynik = a + b
Wypisz wynik
14 dr Robert Kowalczyk, KAN, WMiI UŁ
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
15 dr Robert Kowalczyk, KAN, WMiI UŁ
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
16 dr Robert Kowalczyk, KAN, WMiI UŁ
Schemat blokowy algorytmu (Problem 2)
Start
Stop
Wczytaj n
czy
n:2=0
wynik = 1 wynik = 0
tak nie
Wypisz wynik
17 dr Robert Kowalczyk, KAN, WMiI UŁ
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;
}
18 dr Robert Kowalczyk, KAN, WMiI UŁ
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
19 dr Robert Kowalczyk, KAN, WMiI UŁ
Schemat blokowy algorytmu (Problem 3)
Start
Stop
Wczytaj n
Wczytaj liczby a[1],a[2],a[3],…,a[n]
czy
licznik<=n
wynik = wynik + a[licznik]
liczni k= 1icznik + 1
nie tak
Wypisz wynik
licznik = 0
wynik = 0
20 dr Robert Kowalczyk, KAN, WMiI UŁ
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;
}
21 dr Robert Kowalczyk, KAN, WMiI UŁ
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ń