Wstęp do programowania



Podobne dokumenty
Wstęp do programowania

Język programowania PASCAL

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Algorytmy. Programowanie Proceduralne 1

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Algorytmy. Programowanie Proceduralne 1

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Definicje. Algorytm to:

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Algorytmy od problemu do wyniku

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Programowanie komputerów

Wstęp do programowania. Różne różności

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

1 Wprowadzenie do algorytmiki

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Jerzy Nawrocki, Wprowadzenie do informatyki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

Podstawy Informatyki. Algorytmy i ich poprawność

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Programowanie i projektowanie obiektowe

Algorytm. a programowanie -

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Podstawy programowania

Wstęp do Programowania potok funkcyjny

Podstawy programowania w języku C

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Technologie informacyjne - wykład 12 -

ForPascal Interpreter języka Pascal

Jerzy Nawrocki, Wprowadzenie do informatyki

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

Informatyka 1. Przetwarzanie tekstów

Języki i metodyka programowania

ECDL Podstawy programowania Sylabus - wersja 1.0

Programowanie w Turbo Pascal

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Pascal - wprowadzenie

Podstawy i języki programowania

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

KARTA KURSU. Wstęp do programowania

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Wstęp do programowania

Algorytm. Krótka historia algorytmów

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład I Cyfrowa reprezentacja informacji Algorytmy metody prezentacji i zapisu Tablice (wstęp) Rzut okiem na języki programowania

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Algorytm. Definicja i algorytmu METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Zasady Programowania Strukturalnego

TEMAT: Podejmowanie decyzji w programie instrukcja warunkowa (IF).

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Programowanie RAD Delphi

PODSTAWY ALGORYTMIKI

Język ludzki kod maszynowy

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Wstęp do programowania

Szablony funkcji i szablony klas

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

Podstawy programowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Algorytmika i Programowanie VBA 1 - podstawy

Paradygmaty programowania

Języki programowania zasady ich tworzenia

Algorytmy i struktury danych

Praktyka Programowania

PODSTAWY INFORMATYKI wykład 1.

Redis, skrypty w języku Lua

Algorytmika i pseudoprogramowanie

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Podstawy programowania

Podstawy Programowania. Języki programowania

Procedury i funkcje. Przykład programu z procedurą. Definicja. Cechy procedury

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Podstawy programowania.

PRZEWODNIK PO PRZEDMIOCIE

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Poprawność semantyczna

Zapisywanie algorytmów w języku programowania

Algorytm. Krótka historia algorytmów

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

ALGORYTMY I PROGRAMY

Programowanie w języku Pascal

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Podstawy programowania wykład

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Transkrypt:

Wstęp do programowania Marek A. Bednarczyk, www.ipipan.gda.pl Literatura David Harel. Rzecz o istocie informatyki. Algorytmika. Wydawnictwa Naukowo-Techniczne. Wydanie trzecie. Seria: Klasyka informatyki. Warszawa 2000. Niklaus Wirth. Algorytmy + Struktury Danych = Programy. WNT. Seria: Klasyka informatyki. Warszawa 2000. (Istnieje wiele wydań wcześniejszych, pierwsze: WNT, 1980) Wstęp do programowania studia podyplomowe

Programowanie = sztuka czy inżynieria? Czym jest programowanie sztuka czy inżynieria? Specyfikowanie/prezentowanie algorytmów - diagramy blokowe. Poprawność, dokumentowanie i uaktualnienie oprogramowania Spektakularne wpadki, ciche sukcesy - klęska informatyki teoretycznej? Wstęp do programowania studia podyplomowe -2-

Programowanie kontra kodowanie Cykl programistyczny: begin pocz : analiza zjawiska/procesu projekt modelu abstrakcyjnego zjawiska/procesu weryfikacja modelu if błąd go to pocz prog : model programistyczny zjawiska/procesu kodowanie testowanie kodu if błąd go to prog go to pocz end Wstęp do programowania studia podyplomowe -3-

Wykład : model programistyczny + kodowanie prezentacja algorytmu w postaci schematu blokowego specyfikowanie algorytmu poprawność algorytmu poprawność kodowania dokumentowanie bieżąca aktualizacja Wstęp do programowania studia podyplomowe -4-

Cechy dobrego informatyka Idealny programista/projektant/analityk powinien znać język angielski przychodzi samo umieć myśleć analitycznie nieustannie uczyć się nowych rzeczy podpatrywać lepszych programistów Idealny projektant/analityk powinien winien dodatkowo poszerzać wiedzę z informatyzowanej dziedziny Wstęp do programowania studia podyplomowe -5-

Architektura komputerów w 3 minuty binarna reprezentacja liczb: 10110000 01100001 binarna reprezentacja ciągów binarna reprezentacja tablic binarna reprezentacja rekordów binarna reprezentacja programów 10110000 01100001 czyli mov al, 0x61 Wstęp do programowania studia podyplomowe -6-

Konsekwencje binarner reprezentacji PROBLEM skończoności Konflikt między ograniczonością reprezentacji a nieograniczonością świata PROBLEM Binarnej Bariery Rozdzwięk między ludzkim a maszynowym sposobem reprezentacji danych i programów Wstęp do programowania studia podyplomowe -7-

Ewolucja uniwersalne języki programowania Rozwój języków programowania próbą pokonania binarnej bariery języki maszynowe: IA32, AMD64, IA64 asemblery fortran skoki, tablice i pętla for COBOL język dla biznesu Algol60 typy obietów, procedury i funkcje Pascal /Modula2 rekordy, typy definiowalne java programowanie obiektowe, zdarzenia i wyjątki Wstęp do programowania studia podyplomowe -8-

Ewolucja specjalizowane języki programowania Języki przetwarzania symbolicznego (AI,logika) języki manipulowania tekstami (SNOBOL) LISP języki funkcyjne (Schema, ML, Haskell) Prolog programowanie logiczne Języki sterowania systemami czasu rzeczywistego Języki projektowania systemów współbieżnych Wstęp do programowania studia podyplomowe -9-

Skutki ewolucji Mniejszy dystans między opisem a kodem Łatwiejsze poprawianie, konserwacja i aktualizacja Zwiększenie wydajności programowania (reusability) Języki specjalizowane do specyficznych dziedzin zastosowań Wstęp do programowania studia podyplomowe -10-

Składnia a semantyka, czyli przepis kontra funkcja Precyzyjna składnia = łatwo o błędy! Kłopoty z semantyką niejednoznaczność i/lub braki w definicji języka różnice między implementacjami tego samego języka w różnych środowiskach (np.: Linux i win XP) problemy fundamentalnej natury. Semantyka operacyjna kontra semantyka denotacyjna. Problemy z częściowością obliczeń. Wstęp do programowania studia podyplomowe -11-

Kompilacja a interpretacja Jak wykonać program napisany w języku programowania na komputerze? Kompilacja Uruchamiamy na kompilator podając program jako dane. Otrzymujemy program wykonywalny Uruchamiamy program wykonywalny celem wykonania. Iterpretacja Uruchamiamy na interpreter podając program jako dane. Interpreter wykonuje instrukcje programu i kończy działanie Wstęp do programowania studia podyplomowe -12-

Pojęcie algorytmu Specyfikacja Spec Prezentacja prog, np. w postaci schematu blokowego Poprawność czy program prog spełnia specyfikację Spec? Poprawność częściowa Własność stopu Poprawność całkowita całkowita = częściowa + Własność stopu Wstęp do programowania studia podyplomowe -13-

Schemat blokowy START true m <> n false true m > n false m := m n n := n m META Wstęp do programowania studia podyplomowe -14-

Pascal Składnia i semantyka Składnia przedstawiona w postaci reguł gramatycznych. Semantyka operacyjna instrukcji podana w postac schematów blokowych. Wstęp do programowania studia podyplomowe -15-

Składnia najprostszy program w Pascalu program Euklides ; begin end. Wstęp do programowania studia podyplomowe -16-

Instrukcje <Inst> ::= <Inst przyp> <Inst bloku> <Inst if then else> <Inst if then> <Inst while> <Inst repeat> <Inst for> Wstęp do programowania studia podyplomowe -17-

Instrukcja przypisania <Inst przyp> ::= <Lokacja> := <Wyrażenie> Na przykład: pom := pom - 15 tab[i +3] := tab[i] rekord.pole := 3.1459 START Lokacja wyrazenie META Wstęp do programowania studia podyplomowe -18-

Ciąg instrukcji a instrukcja bloku START <Ciąg Inst> ::= <> <Inst> <Inst> ; <Ciąg Inst> Inst_1 Inst_n META Wstęp do programowania studia podyplomowe -19-

Ciąg instrukcji a instrukcja bloku START <Inst bloku> ::= begin <Ciąg Inst> end Inst_1 Inst_n META Wstęp do programowania studia podyplomowe -20-

Instrukcja warunkowa if then else START <Inst if then else> ::= if <Warunek> then true Warunek false <Inst 1> Inst_1 Inst_2 else <Inst 2> META Wstęp do programowania studia podyplomowe -21-

Instrukcja warunkowa if then START <Inst if then> ::= true Warunek false if <Warunek> then <Inst 1> Inst_1 META Wstęp do programowania studia podyplomowe -22-

Instrukcja pętli while do START <Inst while> ::= true Warunek false while <Warunek> do <Inst 1> Inst_1 META Wstęp do programowania studia podyplomowe -23-

Instrukcja pętli repeat until START <Inst repeat> ::= repeat <Ciag Inst> until <Warunek> do Ciag_Inst true Warunek false META Wstęp do programowania studia podyplomowe -24-

Instrukcja pętli for do <Inst for> ::= for <zmienna> := <wyr 1> to <wyr 2> do <Inst> jest równoważne <zmienna> := <wyr 1> 1; while <zmienna> < <wyr 2> do begin <zmienna> := <zmienna> + 1; <Inst> end Wstęp do programowania studia podyplomowe -25-

Algorytm Euklidesa START true m <> n false true m > n false m := m n n := n m META Wstęp do programowania studia podyplomowe -26-

Algorytm Euklidesa START true m <> n false while m <> n do Inst true m > n false <Inst> m := m n n := n m META Wstęp do programowania studia podyplomowe -27-

Algorytm Euklidesa START while m <> n do true m <> n false if m > n then true m > n false <Inst 1> else <Inst 2> Inst_1 m := m n Inst_2 n := n m META Wstęp do programowania studia podyplomowe -28-

Algorytm Euklidesa START while m <> n do true m <> n false if m > n then true m > n false m := m - n else n := n - m m := m n n := n m META Wstęp do programowania studia podyplomowe -29-

Pętla while do a if START START true Warunek false Inst_1 true Warunek false Inst_1 true Warunek false Inst_1 META META Wstęp do programowania studia podyplomowe -30-

Pętla while do a if while <warunek> do <Inst 1> jest równoważne if <warunek> then begin <Inst 1> ; while <warunek> do <Inst 1> end Wstęp do programowania studia podyplomowe -31-

Specyfikowanie programów imperatywnych S, S : Stan wartościowanie zmiennych. Π : program relacja opisująca zmianę stanu. Notacja: S Π S znaczy Π uruchomiony w S skończył w stanie S Φ, Ψ : asercja własność logiczna opisująca stan. Prewarunek własność opisująca stany dla których chcemy by program działał porawnie. Postwarunek własność stanów uzyskanych po zakończeniu działania programu. Wstęp do programowania studia podyplomowe -32-

Specyfikowanie programów imperatywnych (cd) Częściowa poprawność programu Π względem prewarunku Φ i postwarunku Ψ. S = Φ i S Π S implikuje S = Ψ Własność stopu programu Π względem prewarunku Φ. S = Φ implikuje Ψ uruchomiony w S kończy działanie Wstęp do programowania studia podyplomowe -33-

Algorytm Euklidesa specyfikacja Prewarunek M > 0, N > 0 Postwarunek wynik = NW D(M, N) Prosta realizacja wynik:=nwd(m,n) Schemat blokowy Wstęp do programowania studia podyplomowe -34-

Algorytm Euklidesa poprawność Lemat 1 Jeśli p = d > 0 to NW D(p, d) = p = d Lemat 2 Jeśli p > d > 0 to NW D(p, d) = NW D(p d, d) Lemat 3 Jeśli 0 < p < d to NW D(p, d) = NW D(p, d p) Tw 1 Algorytm Euklidesa jest częściowo poprawny względem Φ : M > 0 N > 0, oraz Ψ : wynik = NW D(M, N). Tw 2 Alg. Euklidesa ma własność stopu wzgl. Φ. Wniosek Alg. Euklidesa jest całkowicie poprawny wzgl. Φ i Ψ. Wstęp do programowania studia podyplomowe -35-

Pascal uniwersalny język programowania Dlaczego Free Pascal a nie na przykład java, C czy C++? elegancki prosty koncepcyjnie, w użyciu, w opanowaniu, Free Pascal dostępny za darmo, Dostępny na wiele platform: MacOS, BeOS, FreeBSD, OS/2, Linux (x86 i Motorola 68k), Amiga, Solaris, netbsd, QNX, Win32 (od 95 do NT) Rozwijany wyjątki, obiekty i klasy,... strona domowa: www.freepascal.org dokumentacja on-line: www.freepascal.org/docs.html Wstęp do programowania studia podyplomowe -36-

Algorytm Euklidesa w Pascalu program Euklides ; { wczytuje liczby naturalne m i n. Jesli dodatnie, liczy NWD(m,n). Działa poprawnie dla liczb w dziedzinie typu INTEGER. Np. daje wynik 1 dla m=66666 i n = 66777 gdy NWD(m,n)=3 } var m, pie, n, dru, wynik : integer; begin <ciało programu> end. Uwaga! Dokumentacja (komentarze) i ładna edycja ważne dla programisty! Wstęp do programowania studia podyplomowe -37-

writeln( Podaj dwie liczby naturalne ); readln (m,n); if (m>0) and (n>0) then begin pie := m; dru := n; end while pie <> dru do if pie > dru then pie := pie - dru else dru := dru - pie ; wynik := pie; writeln( NWD(,m,,,n, )=,wynik) else writeln( niewłaściwe dane ) Wstęp do programowania studia podyplomowe -38-

Struktury danych a mechanizmy kontroli działania Wirth: Algorytmy + struktury danych = programy pęlta for tablice rekursja drzewa wyjątki zdarzenia komunikaty/metody obiekty Wstęp do programowania studia podyplomowe -39-

Drukowanie prostokąta znaków * Zadanie: Napisz program, który wczytuje dwie liczby: k i w, a następnie wypisuje w-wierszy, po k-znaków * w każdym wierszu. Zadanie pomocnicze: Napisz program, który wczytuje liczbę: k, a następnie wypisuje k-znaków * w jednym wierszu. Wstęp do programowania studia podyplomowe -40-

Drukowanie wiersza znaków * program druk wiersza ; { Wczytuje liczbę k i drukuje wiersz, złożony z k-znaków * } var k, ind k : integer; begin write( Kolumn: ); readln(k); for ind k := 1 to k do write( * ); writeln end. Wstęp do programowania studia podyplomowe -41-

Drukowanie prostokąta znaków * program druk prostokata ; { Wczytuje liczby k i w, drukuje w-wierszy, po k-znaków * } var k, ind k : integer; w, ind w : integer; begin write( Wierszy: ); readln(w); write( Kolumn: ); readln(k); end. for ind w := 1 to w do begin for ind k := 1 to k do write( * ); writeln end Wstęp do programowania studia podyplomowe -42-

Drukowanie prostokąta znaków * z procedurą program druk prostokata ; { Wczytuje liczby k i w, drukuje w-wierszy, po k-znaków * } var k : integer; w, ind w : integer; begin write( Wierszy: ); readln(w); write( Kolumn: ); readln(k); end. for ind w := 1 to w do druk wiersza(k) Wstęp do programowania studia podyplomowe -43-

Procedura drukowanie wiersza k-znaków * procedure druk wiersza (k : integer); { Drukuje wiersz złożony z k-znaków * } var ind k : integer; begin for ind k := 1 to k do write( * ); writeln end; Wstęp do programowania studia podyplomowe -44-

Procedura drukowanie wiersza k-znaków ch procedure druk wiersza (k : integer, ch : char ); { Drukuje wiersz, złożony z k-znaków ch} var ind k : integer; begin for ind k := 1 to k do write(ch); writeln end; Wstęp do programowania studia podyplomowe -45-

rukowanie prostokąta dowolnych znaków z procedurą program druk prostokata ; { Wczytuje liczby k i w oraz znak z i drukuje w-wierszy po k-znaków z} var k : integer; w, ind w : integer; var z : char; procedure druk wiersza (k:integer, ch:char); begin write( Wierszy: ); readln(w); write( Kolumn: ); readln(k); write( Znak: ); readln(z); end. for ind w := 1 to w do druk wiersza(k, znak) Wstęp do programowania studia podyplomowe -46-

3 wieże przykład trudnego problemu Zadanie algortymiczne poszukiwanie przepisu na osiągnięcie celu Przykład celu: Wieże z Hanoi. Dane są trzy pale: X, Y i Z. Na jeden z nich, np. na X nałożono krążki o różnych średnicach, tak że krążek mniejszy nie leży pod większym. Pale Y i Z są puste. Należy przenieść wszystkie krążki z pala X na Z. Można używać Y jako pomocnicze miejsce przechowywania. Nie można kłaść krążków większych na mniejsze. Wstęp do programowania studia podyplomowe -47-

Wieże z Hanoi Stan wyjściowy oo X oo Y Z ooo X ooo Y Z oooo X oooo Y Z Stan docelowy X Y oo Z oo X Y ooo Z ooo X Y oooo Z oooo Wstęp do programowania studia podyplomowe -48-

Wieże z Hanoi Stan wyjściowy oo X oo Y Z ooo X ooo Y Z oooo X oooo Y Z Pierwszy ruch X Y Z ooo X ooo Y Z oooo X oooo Y oo Z oo Wstęp do programowania studia podyplomowe -49-

Wieże z Hanoi Pierwszy ruch X Y Z ooo X ooo Y Z oooo X oooo Y oo Z oo Drugi ruch X Y Z X Y Z oooo X oooo ooo Y ooo oo Z oo Wstęp do programowania studia podyplomowe -50-

Wieże z Hanoi Drugi ruch X Y Z X Y Z oooo X oooo ooo Y ooo oo Z oo Trzeci ruch X Y Z X oo Y oo Z oooo X oooo ooo Y ooo Z Wstęp do programowania studia podyplomowe -51-

Wieże z Hanoi Trzeci ruch X Y Z X oo Y oo Z oooo X oooo ooo Y ooo Z Czwarty ruch X Y Z X oo Y oo Z X ooo Y ooo oooo Z oooo Wstęp do programowania studia podyplomowe -52-

Wieże z Hanoi Czwarty ruch X Y Z X oo Y oo Z X ooo Y ooo oooo Z oooo Piąty ruch X Y Z X Y Z oo X oo ooo Y ooo oooo Z oooo Wstęp do programowania studia podyplomowe -53-

Wieże z Hanoi Piąty ruch X Y Z X Y Z oo X oo ooo Y ooo oooo Z oooo Szósty ruch X Y Z X Y ooo Z ooo oo X oo Y oooo Z oooo Wstęp do programowania studia podyplomowe -54-

Wieże z Hanoi Szósty ruch X Y Z X Y ooo Z ooo oo X oo Y oooo Z oooo Siódmy ruch stan docelowy X Y oo Z oo X Y ooo Z ooo X Y oooo Z oooo Wstęp do programowania studia podyplomowe -55-

Wieże z Hanoi algorytm rekursywny procedure przenies (ile : integer; var X, Y, Z : kolek ); begin if ile = 1 then przenies 1(X, Z) else begin przenies(ile-1, X, Z, Y); przenies 1(X, Z); przenies(ile-1, Y, X, Z) end Wstęp do programowania studia podyplomowe -56-

end; Wstęp do programowania studia podyplomowe -57-

Wieże z Hanoi algorytm rekursywny procedure przenies (ile : integer; var X, Y, Z : kolek ); begin if ile > 0 then end; begin przenies(ile-1, X, Z, Y); przenies 1(X, Z); przenies(ile-1, Y, X, Z) end Wstęp do programowania studia podyplomowe -58-

Wieże z Hanoi algorytm rekursywny program Hanoi; const n = 9; type zakres = 1..n; type kolek = record stan : array [zakres] of zakres; top : 0..n; name : char end; var X, Y, Z : kolek; Wstęp do programowania studia podyplomowe -59-

procedure druk; { drukuje aktualne rozmieszczenie kregow na kolkach } var i : zakres; procedure druk1(linia: zakres; var k : kolek); { drukuje krag na miejscu linia kolka k } var i : zakres; begin if k.top < linia then begin for i:= 1 to n do write( ); write(,k.name, ); for i:= 1 to n do write( ) end Wstęp do programowania studia podyplomowe -60-

else begin for i:= n downto 1 do if k.stan[linia] < i then write( ) else write( o ); write(,k.name, ); for i := n downto 1 do if k.stan[linia] < n-i+1 then write( ) else write( o ) end end; begin for i:= n downto 1 do begin druk1(i, x); write( ); Wstęp do programowania studia podyplomowe -61-

druk1(i, y); write( ); druk1(i, z); writeln end; writeln end; procedure genpelny(var K : kolek; name : char); var i : zakres; begin k.top := n; for i:= 1 to n do k.stan[i] := n+1-i; k.name:=name end; Wstęp do programowania studia podyplomowe -62-

procedure genpusty(var K:kolek;name:char); begin k.top:=0; k.name:=name end; procedure przenies1(var z, na : kolek); begin na.top := na.top+1; na.stan[na.top] := z.stan[z.top]; z.top:= z.top-1; druk end; Wstęp do programowania studia podyplomowe -63-

procedure przenies (ile:zakres; var z, na, przez:kolek); begin if ile > 0 then begin przenies(ile-1, z,przez,na); przenies1(z,na); przenies(ile-1,przez,na,z); end end; begin writeln; genpelny(x, X ); genpusty(y, Y ); genpusty(z, Z ); druk; przenies(n,x,z,y) end. Wstęp do programowania studia podyplomowe -64-

Wydruk z programu o X o Y Z oo X oo Y Z ooo X ooo Y Z X Y Z oo X oo Y Z ooo X ooo Y o Z o X Y Z X Y Z ooo X ooo oo Y oo o Z o Wstęp do programowania studia podyplomowe -65-

X Y Z X o Y o Z ooo X ooo oo Y oo Z X Y Z X o Y o Z X oo Y oo ooo Z ooo X Y Z X Y Z o X o oo Y oo ooo Z ooo X Y Z X Y oo Z oo Wstęp do programowania studia podyplomowe -66-

o X o Y ooo Z ooo X Y o Z o X Y oo Z oo X Y ooo Z ooo Wstęp do programowania studia podyplomowe -67-

Algorytm Euklidesa rekursja program Euklides ; var m, n : integer; function NWD (m,n : integer) : integer; begin if m <> n then else end; if m > n then NWD := NWD(m - n, n) else NWD := NWD(m, n - m) NWD := m begin <ciało programu> end. Wstęp do programowania studia podyplomowe -68-

Program wywołanie funkcji NWD writeln( Podaj dwie liczby naturalne ); readln (m,n); if (m>0) and (n>0) then else writeln( NWD(,m,,,n, )=,NWD(m, n)) writeln( niewłaściwe dane ) Wstęp do programowania studia podyplomowe -69-

TEX jak produkuje się taki slajd? \begin{slide} \heading{ Program --- wywołanie funkcji \pz{nwd} } \vfil \pz{writeln}(\pciag{ Podaj dwie liczby naturalne })\Km; \pz{readln} (\pz m,\pz n)\km; \\ \pifelse{(\pz m$>$0) and (\pz n$>$0)} {\pz{writeln}(\pciag{ NWD( },\pz m,\pciag {, },\pz n,\pciag{ )= },\pz{nwd}(\pz m, \pz n))}% {\pz{writeln}(\pciag{ niewłaściwe dane })} \vfil \end{slide} Wstęp do programowania studia podyplomowe -70-

TEX składanie tekstów matematycznych } 2 2 22 n n i = n (n 1) (1) i=1 n k n i=1 i 1 x 2 + 1 2 Wstęp do programowania studia podyplomowe -71-