57
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni Wykład 3 Karol Tarnowski [email protected] A-1 p. 411B

rok akademicki 2017/18 semestr letni - if.pwr.edu.pltarnowski/201718l/pp_w03.pdf · Muhammad ibn Musa al-Chuwarizmi żył na przełomie VIII i IX wieku, jest uznawany za prekursora

Embed Size (px)

Citation preview

Programowanie proceduralneINP001210WLrok akademicki 2017/18

semestr letni

Wykład 3

Karol Tarnowski

[email protected]

A-1 p. 411B

• Co to jest algorytm?

• Zapis algorytmów

• Algorytmy sortowania:

– Sortowanie przez wybór (selectsort)

– Sortowanie bąbelkowe (bubblesort)

– Sortowanie przez scalanie (mergesort)

– Sortowanie szybkie (quicksort)

Plan prezentacji (1)

M. M. Sysło, Algorytmy, WSiP, 2002

• Podział kodu źródłowego

Plan prezentacji (2)

• Algorytm jest przepisem opisującym krok po

kroku rozwiązanie problemu lub osiągnięcie

jakiegoś celu

• Algorytmika to dziedzina zajmująca się

algorytmami i ich właściwościami

Co to jest algorytm?

• Słowo algorytm wywodzi się

od nazwiska arabskiego

matematyka i astronoma.

Muhammad ibn Musa al-

Chuwarizmi żył na przełomie

VIII i IX wieku, jest uznawany

za prekursora metod

obliczeniowych

w matematyce

Algorytm

https://pl.wikipedia.org/wiki/

Muhammad_ibn_Musa_al-

Chuwarizmi

Przykład algorytmu

https://www.kwestiasmaku.com/przepis/kakaowe-ciasto-bez-pieczenia

Przykład algorytmu

https://www.kwestiasmaku.com/przepis/kakaowe-ciasto-bez-pieczenia

Przykład algorytmu

https://www.kwestiasmaku.com/przepis/kakaowe-ciasto-bez-pieczenia

• Algorytm wyznaczania największego

wspólnego dzielnika dwóch dodatnich liczb

całkowitych został sformułowany

w IV w. p.n.e. przez Euklidesa

Algorytm Euklidesa

• Program to lista szczegółowych instrukcji

przekazywanych komputerowi do realizacji

określonych zadań

Co to jest program?

Składniki

Przepis

Kucharz i kuchnia

Danie

Gotowanie

Dane

Program

Komputer

Wynik

Informatyka

Program i przepis a algorytm

• Algorytm może być zapisywany na różne

sposoby: językiem naturalnym,

pseudokodem, schematem blokowym,

językiem programowania

Zapis algorytmów

• Dane wejściowe:

– n-elementowa tablica liczb

• Dane wyjściowe:

– wartość największej liczby w tablicy

Znajdowanie elementu

maksymalnego w tablicy

• Przypisz maksimum wartość początkowego

elementu tablicy

• Dla kolejnych elementów tablicy:

– Jeśli dany element jest większy od maksimum

•Przypisz maksimum wartość danego

elementu

Znajdowanie elementu

maksymalnego w tablicy

1. Przypisz maksimum wartość początkowego

elementu tablicy.

2. Przypisz zmiennej indeks wartość 1.

3. Jeśli indeks jest większy/równy n idź do 6.

4. Jeśli element wskazywany przez indeks jest

większy od maksimum, to przypisz maksimum

wartość elementu wskazywanego przez indeks

5. Zwiększ indeks o 1 i idź do 3.

6. Koniec (element największy jest w zmiennej

maksimum).

Znajdowanie elementu

maksymalnego w tablicy

Znajdowanie elementu

maksymalnego w tablicystart

dane: tablica t i jej rozmiar n

m = t[0]

jeśli i < n

i = 1

jeśli t[i] > m

m = t[i]

i = i + 1 koniec

TAK NIE

TAK NIE

float max(float t[], int n){

float m = t[0];

int i;

for( i=1; i<n; i++){

if( t[i] > m )

m = t[i];

}

return m;

}

Znajdowanie elementu

maksymalnego w tablicy

• Przypisz maksimum_indeks wartość 0

• Dla kolejnych elementów tablicy:

– Jeśli dany element jest większy od

wskazywanego przez maksimum_indeks

•Przypisz maksimum_indeks wartość indeksu

danego elementu

Znajdowanie pozycji elementu

maksymalnego w tablicy

• Jeżeli ciąg nie jest uporządkowany, to

istnieją dwa sąsiednie elementy, które są

w złej kolejności

Sortowanie bąbelkowe

Sortowanie bąbelkowe

3 5 1 2 8 4 7 6

3 1 5 2 8 4 7 6

3 1 2 5 8 4 7 6

3 1 2 5 4 8 7 6

3 1 2 5 4 7 8 6

3 1 2 5 4 7 6 8

Sortowanie bąbelkowe

3 1 2 5 4 7 6 8

1 3 2 5 4 7 6 8

1 2 3 5 4 7 6 8

1 2 3 4 5 7 6 8

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

• Wykonaj n-1 przebiegów przez tablicę

– Wykonaj n-i porównań sąsiednich

elementów (gdzie i to numer iteracji)

•Jeśli elementy są nie po kolei to

zamień je miejscami

Sortowanie bąbelkowe

• Wyszukujemy pozycję najmniejszego

elementu i przestawiamy go na właściwą

pozycję

• Następnie kontynuujemy dla pozostałej części

tablicy

Sortowanie przez wybór

Sortowanie przez wybór

3 5 1 2 8 4 7 6

1 5 3 2 8 4 7 6

1 2 3 5 8 4 7 6

1 2 3 5 8 4 7 6

1 2 3 4 8 5 7 6

1 2 3 4 5 8 7 6

Sortowanie przez wybór

1 2 3 4 5 8 7 6

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

• Podziel tablicę na dwie równe części

• Zastosuj sortowanie przez scalanie do

każdej z nich oddzielnie

• Połącz posortowane podciągi w jeden ciąg

posortowany

Sortowanie przez scalanie

Procedura scalania dwóch ciągów a[0..n-1] i b[0..m-1] do

ciągu c[0..n+m-1]

1. Ustaw indeksy na początek ciągów: i=0, j=0

2. Jeśli w ciągu a nie pozostało już nic do przetworzenia

(i>=n), to dołącz pozostałe elementy z b co c i zakończ

3. Jeśli w ciągu b nie pozostało już nic do przetworzenia

(j>=m), to dołącz pozostałe elementy z a co c i zakończ

4. Jeśli a[i] <= b[j] to dołącz a[i] do c i zwiększ i o 1, w

p.p. dołącz b[j] do c i zwiększ j o 1.

5. Powtarzaj od 2.

Sortowanie przez scalanieScalanie

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1 2

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1 2 3

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1 2 3 4

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1 2 3 4 5

Sortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1 2 3 4 5 6

Algorytmy sortowaniaSortowanie przez scalanie

5 7 8 4 6 1 3 2

5 7 8 4 6 1 3 2

4 5 7 8 1 2 3 6

1 2 3 4 5 6 7 8

Procedura scalania dwóch ciągów a[0..n-1] i b[0..m-1] do

ciągu c[0..n+m-1]

1. Ustaw indeksy na początek ciągów: i=0, j=0

2. Jeśli w ciągu a nie pozostało już nic do przetworzenia

(i>=n), to dołącz pozostałe elementy z b co c i zakończ

3. Jeśli w ciągu b nie pozostało już nic do przetworzenia

(j>=m), to dołącz pozostałe elementy z a co c i zakończ

4. Jeśli a[i] <= b[j] to dołącz a[i] do c i zwiększ i o 1, w

p.p. dołącz b[j] do c i zwiększ j o 1.

5. Powtarzaj od 2.

Sortowanie przez scalanieScalanie

• Podziel tablicę na dwie części: mniejsze

i większe od wybranego elementu

• Zastosuj sortowanie szybkie do każdej

z nich oddzielnie

• Połącz posortowane podciągi w jeden ciąg

posortowany

Sortowanie szybkie

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 7 8 4 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 7 8 4 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 7 8 4 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 7 8 4 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 8 7 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 8 7 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 8 7 6 1 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 1 7 6 8 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 1 7 6 8 3 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 1 3 6 8 7 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 1 3 6 8 7 5

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 1 3 5 8 7 6

Algorytmy sortowaniaSortowanie szybkie

5 7 8 4 6 1 3 2

2 7 8 4 6 1 3 5

2 4 1 3 5 8 7 6

1 2 3 4 5 8 7 6

1 2 3 4 5 8 7 6

1 2 3 4 5 8 7 6

1 2 3 4 5 6 7 8

• W złożonych programach istnieje

konieczność rozdzielenia kodu źródłowego

na kilka plików

Pliki nagłówkowe

Pliki nagłówkowe

deklaracje funkcji

funkcja główna

kod źródłowy

funkcji

Pliki nagłówkowe

main.c

Pliki nagłówkowe

sort.h

Pliki nagłówkowe

max.c

• Przed napisaniem programu przeanalizuj

działanie algorytmu

• Złożony program rozdziel na kilka plików

źródłowych

Absolutne minimum