• Nie Znaleziono Wyników

Programowanie proceduralne

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie proceduralne"

Copied!
57
0
0

Pełen tekst

(1)

Programowanie proceduralne

INP001210WL

rok akademicki 2018/19 semestr letni

Wykład 3

Karol Tarnowski

karol.tarnowski@pwr.edu.pl A-1 p. 411B

(2)

• 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

(3)

• Podział kodu źródłowego

Plan prezentacji (2)

(4)

• 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?

(5)

• 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

(6)

Przykład algorytmu

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

(7)

Przykład algorytmu

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

(8)

Przykład algorytmu

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

(9)

• 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

(10)

• Program to lista szczegółowych instrukcji przekazywanych komputerowi do realizacji określonych zadań

Co to jest program?

(11)

Składniki

Przepis

Kucharz i kuchnia Danie

Gotowanie

Dane

Program

Komputer

Wynik

Informatyka

Program i przepis a algorytm

(12)

• Algorytm może być zapisywany na różne sposoby: językiem naturalnym,

pseudokodem, schematem blokowym, językiem programowania

Zapis algorytmów

(13)

• Dane wejściowe:

– n-elementowa tablica liczb

• Dane wyjściowe:

– wartość największej liczby w tablicy

Znajdowanie elementu

maksymalnego w tablicy

(14)

• 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

(15)

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

(16)

Znajdowanie elementu maksymalnego w tablicy

start

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

(17)

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

(18)

• 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

(19)

• 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

(20)

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

(21)

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

(22)

• 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

(23)

• 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

(24)

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

(25)

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

(26)

• 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

(27)

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 scalanie

Scalanie

(28)

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

(29)

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

(30)

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

(31)

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

(32)

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

(33)

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

(34)

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

(35)

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

(36)

Algorytmy sortowania

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 7 8

(37)

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 scalanie

Scalanie

(38)

• 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

(39)

Algorytmy sortowania

Sortowanie 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

(40)

Algorytmy sortowania

Sortowanie 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

(41)

Algorytmy sortowania

Sortowanie 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

(42)

Algorytmy sortowania

Sortowanie 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

(43)

Algorytmy sortowania

Sortowanie 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

(44)

Algorytmy sortowania

Sortowanie 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

(45)

Algorytmy sortowania

Sortowanie 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

(46)

Algorytmy sortowania

Sortowanie 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

(47)

Algorytmy sortowania

Sortowanie 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

(48)

Algorytmy sortowania

Sortowanie 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

(49)

Algorytmy sortowania

Sortowanie 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

(50)

Algorytmy sortowania

Sortowanie 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

(51)

Algorytmy sortowania

Sortowanie 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

(52)

• W złożonych programach istnieje

konieczność rozdzielenia kodu źródłowego na kilka plików

Pliki nagłówkowe

(53)

Pliki nagłówkowe

deklaracje funkcji funkcja główna

kod źródłowy funkcji

(54)

Pliki nagłówkowe

main.c

(55)

Pliki nagłówkowe

sort.h

(56)

Pliki nagłówkowe

max.c

(57)

• Przed napisaniem programu przeanalizuj działanie algorytmu

• Złożony program rozdziel na kilka plików źródłowych

Absolutne minimum

Cytaty

Powiązane dokumenty

• Podczas obsługi wyjątku można opcjonalnie przypisać obiekt wyjątku.

• Operator in (not in) można wykorzystać do sprawdzenia, czy wskazany ciąg zawiera się (nie zawiera się) w innym. ciag_tekstowy1

rok akademicki 2019/20 semestr letni..

• Funkcje wywołuje się pisząc jej nazwę oraz nawiasy klamrowe z argumentami przekazywanymi do funkcji.

• Podstawowym sposobem przekazywania zmiennych do funkcji jest przekazywanie przez wartość – funkcja nie zmieni.

• Dostęp do struktur wskazywanych przez wskaźnik uzyskuje się operatorem -&gt;.

Napisz funkcję selectsort, która sortuje n-elementową tablicę liczb rzeczywistych, wykorzystując algorytm sortowania przez wybieranie.. Zademonstruj działanie funkcji

rok akademicki 2018/19 semestr letni.