Algorytmy szyfrujące - math.uni.lodz.plmath.uni.lodz.pl/~kowalcr/PodstawyProg/Wyklad1.pdf(maszyny...

21
Łódź, 3 października 2013 r. Katedra Analizy Nieliniowej, WMiI Podstawy Programowania Algorytmy i programowanie

Transcript of Algorytmy szyfrujące - math.uni.lodz.plmath.uni.lodz.pl/~kowalcr/PodstawyProg/Wyklad1.pdf(maszyny...

Łó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ń