Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania...

28
Wstęp do programowania Dariusz Wardecki, wyk. I

Transcript of Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania...

Page 1: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Wstęp do programowania

Dariusz Wardecki, wyk. I

Page 2: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Kontakt

[email protected]

• http://www.fuw.edu.pl/~dward/wdp

• ul. Hoża 69, pok. 114

• tel. 22 55 32 181

Page 3: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Zasady zaliczenia

• Wykład (2h/tydzień)

• Egzamin pisemny

• Test wyboru 15 pkt.

• Ćwiczenia (2h/tydzień)

• 3 kolokwia po 15 pkt.

• 3 zadania po 5 pkt.

Łącznie można zdobyć max 60 pkt.

Page 4: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Materiał na ćwiczenia• Algorytmy.

• Podstawy programowania w C++

• Funkcja main(), nagłówek i treść funkcji

• Obsługa wej/wyj

• Wyrażenia i zmienne

• Pętle

• Programowanie prostych obliczeń

• Liczby pseudolosowe

• Formatowanie wydruków i drukowanie wzorów

• Tablice i sortowanie liczb

• Wskaźniki i referencje

• Wej/wyj z wykorzystaniem plików

• Złożone typy danych i ich zastosowanie

Page 5: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Plan wykładu• Kod źródłowy w C++ i kompilator g++

• Algorytmy

• Złożoność obliczeniowa algorytmów

• Składnia języka C++, elementy składowe programów

• Proste typy danych

• Operatory i wyrażenia, konwerscje typów danych

• Pętle, instrukcja warunkowa i instrukcje sterujące w C++

• Wskaźniki i tablice, operacje na wskaźnikach, Referencje

• Dynamiczne rezerwowanie pamięci i zwalnianie pamięci

• Tablice wskaźników i argumenty programu

• Złożone typy danych i ich zastosowania

Page 6: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Dlaczego warto uczyć się programowania komputerów

• Żeby zobaczyć na czym to polega

• Jeżeli mamy nietypowe zadanie, to czasem szybciej jest napisać własny program, niż szukać gotowego

• Czasami musimy być pewni, że program działa w ściśle określony sposób

• Może to być interesujące

• Stanowiska pracy związane z programowaniem bywają dobrze płatne

Page 7: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Na czym polega programowanie?

• Określenie problemu (co chcemy osiągnąć).

• Wybranie algorytmu, czyli metody poszukiwania rozwiązania (jak będziemy to robić).

• Tworzenie kodu źródłowego (ang. source code), stanowiącego reprezentację wybranego algorytmu.

• Kompilowanie kodu źródłowego, czyli tworzenie kodu wykonywalnego (ang. executable code) gotowego do wykonania.

• Sprawdzanie i testowanie (ang. debugging) programu. Jeżeli znajdziemy błąd, wracamy do etapu tworzenia kodu źródłowego (lub nawet do etapu wyboru algorytmu)

Page 8: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Trochę historii

• język C - początek lat siedemdziesiątych, Dennis Ritchie

• język C++ - koniec lat osimdziesiątych, Bjarne Stroustrup

Page 9: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Kod źródłowy i kompilator

#include<iostream>using namespace std;

int main(){

cout << ”Hello World!!!” << endl;return 0;

}

g++ -o nazwa nazwa.cc

Kod źródłowy w pliku nazwa.cc Kompilator

./nazwa

Program

Page 10: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Logowanie na Primusa

primus.okwf.fuw.edu.pl

Kompilator: g++Edytor: nano, pico

Domssh

putty

ssh [email protected] [email protected]

Page 11: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Kod źródłowy

#include<iostream>using namespace std;

int main(){cout << ”Hello World!!!” << endl;return 0;

}

Polecenie preprocesora

Przestrzeń nazw

Funkcja main

Instrukcje

Page 12: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytmy Podstawy

Co to jest algorytm

AlgorytmSkoÒczony zbiór dobrze zdefiniowanych instrukcji przeznaczony dowykonania okreúlonego zadania, który przy ustalonym stanie poczπtkowympozwala na uzyskanie odpowiedniego, rozpoznawalnego stanu koÒcowegow skoÒczonym czasie.

W uproszczeniu

Metoda poszukiwania (lub tworzenia) rozwiπzania zadanego problemu.

Nie dla kaødego problemu istnieje skuteczny algorytm pozwalajπcy znaleüÊrozwiπzanie.

Problemy nieobliczalne (algorytm nie istnieje, np. busy beaver).

Problemy, dla których algorytmy sπ zbyt z≥oøone (wykonywanieprogramu trwa≥oby zbyt d≥ugo).

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 7 / 67

Algorytmy Podstawy

Co to jest algorytm

AlgorytmSkoÒczony zbiór dobrze zdefiniowanych instrukcji przeznaczony dowykonania okreúlonego zadania, który przy ustalonym stanie poczπtkowympozwala na uzyskanie odpowiedniego, rozpoznawalnego stanu koÒcowegow skoÒczonym czasie.

W uproszczeniu

Metoda poszukiwania (lub tworzenia) rozwiπzania zadanego problemu.

Nie dla kaødego problemu istnieje skuteczny algorytm pozwalajπcy znaleüÊrozwiπzanie.

Problemy nieobliczalne (algorytm nie istnieje, np. busy beaver).

Problemy, dla których algorytmy sπ zbyt z≥oøone (wykonywanieprogramu trwa≥oby zbyt d≥ugo).

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 7 / 67

Algorytmy Podstawy

Co to jest algorytm

AlgorytmSkoÒczony zbiór dobrze zdefiniowanych instrukcji przeznaczony dowykonania okreúlonego zadania, który przy ustalonym stanie poczπtkowympozwala na uzyskanie odpowiedniego, rozpoznawalnego stanu koÒcowegow skoÒczonym czasie.

W uproszczeniu

Metoda poszukiwania (lub tworzenia) rozwiπzania zadanego problemu.

Nie dla kaødego problemu istnieje skuteczny algorytm pozwalajπcy znaleüÊrozwiπzanie.

Problemy nieobliczalne (algorytm nie istnieje, np. busy beaver).

Problemy, dla których algorytmy sπ zbyt z≥oøone (wykonywanieprogramu trwa≥oby zbyt d≥ugo).

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 7 / 67

Page 13: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytmy Podstawy

PoprawnoúÊ algorytmów

Stan poczπtkowy dla algorytmu

Dane wejúciowe (ang. input data).

Stan koÒcowy dla algorytmu

Wynik (ang. result).

Definicja poprawnoúci algorytmu

Algorytm jest poprawny (ang. correct), gdy dla kaødych dopuszczalnychdanych wejúciowych jednoczeúnie spe≥nione sπ dwa nastÍpujπce warunki:1 Wynik jest otrzymywany w skoÒczonej liczbie kroków — problemzatrzymania (stopu).

2 Wynik stanowi rozwiπzanie problemu, dla którego algorytm zosta≥stworzony.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 8 / 67

Algorytmy Podstawy

PoprawnoúÊ algorytmów

Stan poczπtkowy dla algorytmu

Dane wejúciowe (ang. input data).

Stan koÒcowy dla algorytmu

Wynik (ang. result).

Definicja poprawnoúci algorytmu

Algorytm jest poprawny (ang. correct), gdy dla kaødych dopuszczalnychdanych wejúciowych jednoczeúnie spe≥nione sπ dwa nastÍpujπce warunki:1 Wynik jest otrzymywany w skoÒczonej liczbie kroków — problemzatrzymania (stopu).

2 Wynik stanowi rozwiπzanie problemu, dla którego algorytm zosta≥stworzony.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 8 / 67

Algorytmy Podstawy

PoprawnoúÊ algorytmów

Stan poczπtkowy dla algorytmu

Dane wejúciowe (ang. input data).

Stan koÒcowy dla algorytmu

Wynik (ang. result).

Definicja poprawnoúci algorytmu

Algorytm jest poprawny (ang. correct), gdy dla kaødych dopuszczalnychdanych wejúciowych jednoczeúnie spe≥nione sπ dwa nastÍpujπce warunki:1 Wynik jest otrzymywany w skoÒczonej liczbie kroków — problemzatrzymania (stopu).

2 Wynik stanowi rozwiπzanie problemu, dla którego algorytm zosta≥stworzony.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 8 / 67

Page 14: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

Algorytmy

• Oblicznie reszty z dzielenia (operacja modulo)

• Algorytm Euklidesa

• Sito Eratostenesa

• Dodawanie liczb w systemie dwójkowym

• Uniwersalny algorytm mnożenia (russian peasant algorithm)

• Przeszukiwanie binarne (ang. binary search) lub bisekcja (ang. bisection)

Przykłady:

Page 15: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyObliczanie reszty z dzielenia niech n i m będą liczbami naturalnymi, n > m

1.Niech k = n

2.Jeśli k < m, to k jest resztą z dzielenia, k = n%m

3.Niech k = k - m

4.Przejdź do kroku 2

Page 16: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytm Euklidesa

Niech n i m będą liczbami nauralnymi, n > m. Wyznaczamy największy wspólny dzielnik n i m, czyli NWD(n, m)

ObserwacjaJeśli r jest resztą z dzielenia n przez m, to n = km + r (dla pewnego całkowitego k), więc NWD(n, m) = NWD(m, r)

Page 17: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytm Euklidesa

Niech a, b i r będą miejscami do przechowywania wyników

1.Niech a = n i b = m.2.Niech r = a%b (resztę z dzielenia a/b zapisujemy w r).3.Jeśli r = 0, to NWD(n, m) = b.4.Niech a = b i b = r.5.Przejdź do kroku 2.

Page 18: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmySito Eratostenesa - chcemy ustalić, które z liczb naturalnych nie

większych od zadanego N są liczbami pierwszymi.

1) Niech k = 2

2) Jeśli k² > N, zbiór A zawiera tylko liczby

pierwsze

3) Usuwamy z A wszystkie wielokrotności k,

począwszy od k²

4) W m zapisz najmniejszą liczbę ze zbioru A

większą od k.

5) Niech k = m.

6) Przejdź do kroku 2).

A = {2,3, …, N}, k i m - miejsca do przechowywania pośrednich wyników

Page 19: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyDodawanie liczb w systemie dwójkowym

a b c

0 0 0

1 0 1

0 1 1

1 1 10

1 1 0 11 1 0 1

1 1 1 0

1 1 0 1

1 1 1 0

1

1 1 0 1

1 1 1 0

1 1

1

1 1 0 1

1 1 1 0

0 1 1

1 1

1 1 0 1

1 1 1 0

1 0 1 1

1 1

0 1 1 0 1

0 1 1 1 0

1 1 0 1 1

1 1

0 1 1 0 1

0 1 1 1 0

1 1 0 1 1

Page 20: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyMamy dwie liczby N-cyfrowe w zapisie dwójkowym:

a =N�1X

j=0

aj2j b =

N�1X

j=0

bj2j

a+ b = w =NX

j=0

wj2j

aj bj

aj , bj 2 {0, 1}wj 2 {0, 1}

gdzie są cyframi. Chcemy wyznaczyć współczynniki (cyfry) w rozwinięciu ich sumy.

dla danych oraz .

Page 21: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyDodawanie liczb w systemie dwójkowym

Algorytmy Przyk≥ady algorytmów

Dodawanie liczb w systemie dwójkowym c. d.

Wprowadzamy funkcje:

PAR(x , y , z) = (x + y + z) % 2

MAJ(x , y , z) = (x + y + z)/2

gdzie x , y , z œ {0, 1}, a znak / oznacza dzielenie z pominiÍciem reszty.

Definiujemy ciπg c0 = 0, cj = MAJ(aj≠1, bj≠1, cj≠1) dla j = 1, 2, . . . ,N.

Wtedy cj jest przeniesieniem (ang. carry) z pozycji (j ≠ 1) na pozycjÍ jpodczas dodawania, wiÍc mamy wN = cN oraz wj = PAR(aj , bj , cj) dlaj = 0, 1, . . . ,N ≠ 1.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 14 / 67

Algorytmy Przyk≥ady algorytmów

Dodawanie liczb w systemie dwójkowym c. d.

Wprowadzamy funkcje:

PAR(x , y , z) = (x + y + z) % 2

MAJ(x , y , z) = (x + y + z)/2

gdzie x , y , z œ {0, 1}, a znak / oznacza dzielenie z pominiÍciem reszty.

Definiujemy ciπg c0 = 0, cj = MAJ(aj≠1, bj≠1, cj≠1) dla j = 1, 2, . . . ,N.

Wtedy cj jest przeniesieniem (ang. carry) z pozycji (j ≠ 1) na pozycjÍ jpodczas dodawania, wiÍc mamy wN = cN oraz wj = PAR(aj , bj , cj) dlaj = 0, 1, . . . ,N ≠ 1.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 14 / 67

Algorytmy Przyk≥ady algorytmów

Dodawanie liczb w systemie dwójkowym c. d.

Wprowadzamy funkcje:

PAR(x , y , z) = (x + y + z) % 2

MAJ(x , y , z) = (x + y + z)/2

gdzie x , y , z œ {0, 1}, a znak / oznacza dzielenie z pominiÍciem reszty.

Definiujemy ciπg c0 = 0, cj = MAJ(aj≠1, bj≠1, cj≠1) dla j = 1, 2, . . . ,N.

Wtedy cj jest przeniesieniem (ang. carry) z pozycji (j ≠ 1) na pozycjÍ jpodczas dodawania, wiÍc mamy wN = cN oraz wj = PAR(aj , bj , cj) dlaj = 0, 1, . . . ,N ≠ 1.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 14 / 67

Page 22: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytmy Przyk≥ady algorytmów

Dodawanie liczb w systemie dwójkowym c. d.

Algorytm dodawaniaNiech C bÍdzie miejscem s≥uøπcym do przechowywania poúrednichwartoúci, natomiast k bÍdzie licznikiem.1 Niech C = 0, k = 0.2 Niech wk = PAR(ak , bk ,C ).3 Niech C = MAJ(ak , bk ,C ).4 Niech k = k + 1.5 Jeúli k < N, przejdü do kroku 2.6 Niech wN = C .7 Ciπg cyfr w0,w1,w2, . . . ,wN stanowi wynik.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 15 / 67

Page 23: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytmy Przyk≥ady algorytmów

Uniwersalny algorytm mnoøenia

Russian peasant algorithm

Obliczamy wynik mnoøenia dwóch nieujemnych liczb ca≥kowitych a i b:1 Niech a0 = a, b0 = b i k = 0.2 Niech k = k + 1.3 Niech ak = ak≠1/2 (dzielenie bez reszty) i bk = 2bk≠1.4 Jeúli ak > 1, to przejdü do kroku 2.5 Wynik mnoøenia jest sumπ wszystkich bk (k = 0, 1, 2, . . .), dlaktórych odpowiadajπce im ak sπ nieparzyste.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 16 / 67

Uniwersalny algorytm mnożenia

Page 24: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyUniwersalny algorytm mnożenia

Algorytmy Przyk≥ady algorytmów

Uniwersalny algorytm mnoøenia – przyk≥ad

Obliczamy iloczyn 156◊ 181 Wyznaczamy ciπgi ak i bk :k ak bk

0 156 181 78 362 39 723 19 1444 9 2885 4 5766 2 11527 1 2304

2 156◊ 18 = 2304+ 288+ 144+ 72 = 2808

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 17 / 67

Page 25: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyUniwersalny algorytm mnożenia

Algorytmy Przyk≥ady algorytmów

Uniwersalny algorytm mnoøenia – przyk≥ad c. d.

Obliczamy iloczyn 156◊ 181 Moøna sumowaÊ na bieøπco:k ak bk sk

0 156 18 01 78 36 02 39 72 723 19 144 2164 9 288 5045 4 576 5046 2 1152 5047 1 2304 2808

2 156◊ 18 = s7 = 2808

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 18 / 67

Page 26: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytmy Przyk≥ady algorytmów

Uniwersalny algorytm mnoøenia z sumowaniem na bieøπco

Obliczamy iloczyn dwóch nieujemnych liczb ca≥kowitych a i bNiech A, B i S bÍdπ miejscami s≥uøπcymi do przechowywania poúrednichwyników.1 Niech A = a, B = b i S = 0.2 Jeúli A% 2 = 1 (wartoúÊ w A jest nieparzysta), to S = S + B.3 Jeúli A = 1, przejdü do kroku 6.4 Niech A = A/2 (dzielenie bez reszty) i B = 2B.5 Przejdü do kroku 2.6 Wynik mnoøenia jest zapisany w S .

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 19 / 67

Uniwersalny algorytm mnożenia

Page 27: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyPrzeszukiwanie binarne (bisekcja)

Algorytmy Przyk≥ady algorytmów

Przeszukiwanie binarne (bisekcja)

Poszukiwanie elementu r w skoÒczonym i uporzπdkowanym zbiorze B1 Niech B0 = B i k = 0.2 Jeúli wszystkie elementy zbioru Bk sπ jednakowe lub Bk jest zbiorempustym, przejdü do kroku 6.

3 Niech mk oznacza medianÍ zbioru Bk .4 Jeúli r ˛ mk , to niech Bk+1 = {b œ Bk : b ˛ mk}, a w przeciwnymwypadku niech Bk+1 = {b œ Bk : b > mk}.

5 Niech k = k + 1 i przejdü do kroku 2.6 Jeúli r œ Bk , to r œ B.

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 20 / 67

Page 28: Wstęp do programowania - fuw.edu.pldward/wdp_wyk1.pdf · Dlaczego warto uczyć się programowania komputerów • Żeby zobaczyć na czym to polega • Jeżeli mamy nietypowe zadanie,

AlgorytmyAlgorytmy Przyk≥ady algorytmów

Przeszukiwanie binarne (bisekcja) – przyk≥ad

Weümy B = {3, 7, 21, 48, 56, 122, 141, 218, 225, 248} i r = 225k Bk mk

0 {3, 7, 21, 48, 56, 122, 141, 218, 225, 248} 561 {122, 141, 218, 225, 248} 2182 {225, 248} 2253 {225} 225

Rafa≥ J. Wysocki ([email protected]) WstÍp do programowania, czÍúÊ I 12 paüdziernika 2011 21 / 67

Przeszukiwanie binarne (bisekcja) - przykład