12
Temat 7 program Zapisywanie algorytmów w języku programowania wysokiego poziomu 1. Język programowania 1.1. Klasyfikacja języków programowania 2. Struktura programu w języku Pascal 3. Etapy programowania 3.1. Implementacja algorytmu 3.2. Kompilacja programu 3.3. Uruchomienie i wykonanie programu 3.4. Testowanie programu 4. Problemy z błędami kompilacji i wykonania 5. Zapis algorytmu z warunkami w języku Pascal 5.1. Warunek prosty 5.2. Warunek zagnieżdżony 6. Realizacja algorytmów iteracyjnych w Pascalu 6.1. Pętle proste 6.2. Pętle zagnieżdżone Warto powtórzyć 1. Wyjaśnij pojęcia: język programowania, program komputerowy, instrukcja, słowo kluczowe. 2. Omów ogólne zasady tworzenia programu w pseudojęzyku. 3. Przedstaw na konkretnym przykładzie postać i działanie instrukcji warunkowej i iteracyjnej w pseudojęzyku.

Temat 7 program - migra.pl · 2. Struktura programu w języku Pascal 3. Etapy programowania 3.1. Implementacja algorytmu 3.2. Kompilacja programu 3.3. Uruchomienie i wykonanie programu

  • Upload
    doanthu

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Temat 7

programZapisywanie algorytmów w języku programowania wysokiego poziomu1. Język programowania

1.1. Klasyfikacja języków programowania

2. Struktura programu w języku Pascal3. Etapy programowania

3.1. Implementacja algorytmu

3.2. Kompilacja programu

3.3. Uruchomienie i wykonanie programu

3.4. Testowanie programu

4. Problemy z błędami kompilacji i wykonania 5. Zapis algorytmu z warunkami w języku Pascal

5.1. Warunek prosty

5.2. Warunek zagnieżdżony

6. Realizacja algorytmów iteracyjnych w Pascalu6.1. Pętle proste

6.2. Pętle zagnieżdżone

Warto powtórzyć1. Wyjaśnij pojęcia: język programowania, program komputerowy, instrukcja,

słowo kluczowe.2. Omów ogólne zasady tworzenia programu w pseudojęzyku.3. Przedstaw na konkretnym przykładzie postać i działanie instrukcji warunkowej

i iteracyjnej w pseudojęzyku.

58 Temat 7

1. Język programowaniaDo przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algo-rytm zapisany w postaci programu komputerowego w konkretnym języku programowania może być zrealizowany przez komputer. Każdy język programowania posiada swój zbiór instrukcji, w tym słowa kluczowe. Podobnie jak języki naturalne, którymi posługują się ludzie na całym świecie, języki programowania posiadają odpowiednie zasady składni oraz właściwe słownic-two. Każdy język naturalny dysponuje własnymi słowami, służącymi określaniu czynności i na-zywaniu rzeczy. Podobnie jest też z językami programowania. W każdym działają na podob-nych zasadach instrukcje, które określają takie czynności, jak: wprowadzanie danych, wypro-wadzanie wyników, wykonywanie obliczeń, określanie warunków czy realizacja powtórzeń. Ich postać jest zazwyczaj inna dla różnych języków. Inne są też konkretne zasady składni, ale ogólne zasady działania tych instrukcji są podobne.

Język programowania = zasady składni + instrukcje

Niezależnie od stosowanego języka programowania należy pamiętać, że:

• Język programowania jest językiem formalnym, co oznacza, że podlega jednoznacznym regułom. Cechy takiej nie mają języki naturalne, gdzie czasem sens zdania zależy od kontek-stu, w którym zostało ono użyte, lub od naszej interpretacji.

• Postać instrukcji, w tym słów kluczowych, musi być bardzo precyzyjna – zgodna z zasa-dami składni. W programie nie może zabraknąć ani jednego koniecznego znaku. Tłumacze-nie programu na kod maszynowy połączone jest ze sprawdzaniem poprawności składniowej zapisanych instrukcji. Instrukcje błędnie zapisane nie będą mogły zostać przetłumaczone, a tym samym program nie zostanie wykonany.

• Kolejność zapisywania instrukcji powinna odpowiadać kolejności operacji realizujących dany algorytm (podobnie jak umieszczanie bloków w schemacie blokowym). Program jest bowiem wykonywany zgodnie z zapisem.

1.1. Klasyfikacja języków programowaniaObecnie wciąż powstają na świecie nowe języki programowania oraz zmodyfikowane wersje już istniejących. Mogą one być przeznaczone do realizowania określonego typu zadań bądź też niektóre z zadań lepiej realizować w danym, konkretnym języku. Na przykład w ostatnim czasie pojawiło się wiele nowych języków programowania przeznaczonych do tworzenia stron internetowych.

Niektóre języki można sklasyfikować na kilka sposobów. Język Pascal np. należy do języ-ków wysokiego poziomu, jest także językiem strukturalnym (chociaż funkcjonuje również jego wersja obiektowa), kompilowanym oraz uniwersalnym (szerokie spektrum zastosowania). Na przykładzie tego języka omówimy metody programowania i związane z nimi pojęcia.

Rodzaj podziału Opis Przykład

poziom wykonywania programu

wysokiego poziomu Pascal, C i inne wymienione w tej tabeli poza assemblerami

niskiego poziomu (poziom maszynowy)

assemblery

sposób wykonania

interpretowane Basic, JavaScript, PHP, LOGO

kompilowane Pascal, C, C++, Java

Czy wiesz, że… opublikowano już ponad 2000 języków programo-wania!

59Temat 7

zastosowanie

tworzenie aplikacji internetowych Java, JavaScript, PHP

dostęp do baz danych SQL

obliczenia matematyczne Fortran

dydaktyczne LOGO

inne (uniwersalne) Pascal, C, C++

programowanie wizualne Visual C, Visual Basic, Delphi, Kylix

opis danych PostScript, HTML, XML

tworzenie aplikacji współbieżnych Ada, Occam

przetwarzanie tekstu PERL, REXX, Python

programowanie sztucznej inteligencji LISP, Prolog

programowanie grafiki OpenGL

model programowania

liniowe BASIC, Fortran

strukturalne Pascal, C

zdarzeniowe Visual Basic

obiektowe C++, Object Pascal, Java

Można by wskazać znacznie więcej klasyfikacji języków programowania. Stopniowo będziemy wyjaśniać znaczenie klasyfikacji wymienionych w tabeli.

2. Struktura programu w języku PascalKonstrukcja prostego programu w języku Pascal jest podobna do struktury programu w pseudo-języku (temat 4) i obejmuje:

I. nagłówek programu,

II. blok główny, a w nim część deklaracyjną i część wykonawczą.

W części deklaracyjnej deklarujemy m.in. stosowane w programie zmienne (podajemy ich nazwy i typy). Część wykonawcza programu (inaczej program główny) to zapisany w postaci instrukcji (procedur) algorytm. Rozpoczyna się słowem begin, a kończy – end (koniecznie z kropką!).

Przykład 1Program źródłowy w języku Pascal, realizujący algorytm obliczania średniej arytmetycznej z trzech liczb, ma postać podobną do programu w pseudojęzyku (patrz przykład 1 w temacie 4):

program Srednia;

var a, b, c, S, Sr: real;

beginReadln(a, b, c);S := a + b + c;Sr := S/3;Writeln(’Średnia wynosi:’, Sr);

end.

{nagłówek programu}{część deklaracyjna}{zmienne zadeklarowane jako liczby rzeczywiste (real)} {część wykonawcza}{rozpoczęcie programu}{wprowadzanie danych}{obliczenie sumy}{obliczenie średniej}{wyprowadzanie komunikatów i wyników}{zakończenie programu}

Rys. 1. Przykłady klasyfikacji języków programowania

60 Temat 7

Słowa kluczowe/instrukcje/procedury

Opis Uwagi

program nazwa_programu;słowo kluczowe program, rozpoczynające nagłówek programu

Po słowie program występuje nazwa programu.

beginciąg instrukcji;

end;

lub

beginciąg instrukcji;

end.

instrukcja złożona

Może wystąpić w programie wiele razy. Grupuje ciąg instrukcji, tworząc zamiast nich jedną. Stosuje się ją wówczas, gdy składnia języka wymaga użycia jednej instrukcji, np. w instrukcji pętli.Rozpoczyna i kończy blok główny programu. Za słowem kluczowym begin nie stawia się średnika; natomiast kropką kończy się tylko jedno (ostatnie) end, pozostałe zaś średnikiem.

var lista zmiennych: opis typu;

słowo kluczowe var rozpoczynające deklarację zmiennych

Może wystąpić kilka nazw zmiennych oddzielonych przecinkiem. Opis typu określa zbiór wartości przyjmowanych przez zmienne, np. liczby rzeczywiste, całkowite, naturalne, znaki.

Write(lista argumentów);lubWriteln(lista argumentów);

procedurawyprowadzania wyników na standardowe wyjście, np. na ekran monitora

Argumentem może być tekst, wyrażenie arytmetyczne lub zmienna – oddzielone przecinkami. Wyrażenie najpierw zostanie obliczone, a następnie zostanie wyprowadzona jego wartość. Wpisujemy je w nawiasach.Procedura writeln różni się tym od write, że po wykonaniu procedury writeln następuje przejście do nowego wiersza.

Read(lista zmiennych);lubReadln(lista zmiennych);

procedura wprowadzania (czytania) danych ze standardowego wejścia, np. z klawiatury

Może wystąpić kilka nazw zmiennych oddzielonych przecinkami. Wpisujemy je w nawiasach.

Nazwa_zmiennej := wyrażenie; instrukcja przypisania

Zmiennej po stronie lewej zostanie przypisana wartość wyrażenia obliczona po stronie prawej.Wartość wyrażenia musi być zgodna z typem zmiennej, np. do zmiennej typu całkowitego nie można przypisać wartości rzeczywistej.

If wyrażenie then instrukcja1else instrukcja2;

lub

If wyrażenie then instrukcja1;

instrukcja warunkowa

Wyrażenie powinno przyjmować wartości logiczne True (prawda) lub False (fałsz).Jako instrukcja1 i instrukcja2 mogą wystąpić również instrukcje warunkowe lub instrukcja złożona begin...end.

for zmienna := w1 to w2 do instrukcja;

lubfor zmienna := w1 downto w2

do instrukcja;

instrukcja iteracyjna (pętli) „dla”

Zmienna jest tzw. zmienną sterującą w pętli.Jako instrukcja może wystąpić również instrukcja pętli lub instrukcja złożona begin...end (przykład 6).

Rys. 2. Przykłady podstawowych poleceń

w języku Pascal

61Temat 7

3. Etapy programowaniaProgramowanie można podzielić na cztery etapy:

I. implementację algorytmu,II. kompilację programu,III. uruchomienie i wykonanie programu,IV. testowanie programu.

Narzędziami pomocnymi w ich realizacji mogą być: edytory narzędziowe (do implementa-cji), kompilatory (do kompilacji) lub interpretery (do interpretacji), debuggery (do śledze-nia i testowania). Większość rozbudowanych środowisk programistycznych posiada wszystkie te narzędzia. Przebieg etapów programowania pokażemy na przykładzie kompilatora języka Turbo Pascal.

3.1. Implementacja algorytmuZapisanie algorytmu w postaci ciągu instrukcji języka programowania wysokiego poziomu nazywamy implementacją. Powstaje wówczas tzw. program (kod) źródłowy. Algorytm można zaimplementować w dowolnym edytorze tekstu, ale najwygodniej jest skorzystać z edytora wbudowanego do programu kompilatora danego języka.

Przykład 2Napisz program, który umożliwi zapisanie na ekranie monitora tekstu: „pierwszy program”.

Program w języku Pascal:

program Napis;begin

Writeln(’pierwszy program’);end.

Uwaga: Po każdej instrukcji powinien być umieszczony średnik. Pominąć można jedynie średnik za instruk-cją zapisaną bezpośrednio przed słowem end kończącym program.

Ćwiczenie 1Wpisz powyższy tekst programu w oknie edytora Turbo Pascala. Zapisz program w pliku o nazwie Pierwszy we własnym folderze. W trakcie pisania programu należy pamiętać o jego nazwaniu i zapisaniu w pliku.

Wskazówki:

Po uruchomieniu pakietu Turbo Pascala otwiera się zazwyczaj nowe okno edytora Pascala, w którym wpisuje się tekst programu. Posługiwanie się tym edytorem jest bardzo łatwe, mimo że jest to pro-gram w wersji angielskiej, działający w środowisku MS DOS. Wybór opcji menu jest podobny do me-nu w programach działających w środowisku Windows, np. zapisywanie pliku – File (odpowiednik opcji Plik). W jednym oknie należy wpisać tekst tylko jednego programu.

Rys. 3. Okno edytora w języku Turbo Pascal wraz z wpisanym programem przykładowym

Program (kod) źródłowy – algorytm zapisany za po-mocą instrukcji programo-wania.

Implementacja – zapisanie algorytmu w postaci kodu źródło-wego.

Pakiet Turbo Pascala to zin-tegrowany system oprogra-mowania, w skład które-go wchodzą m.in. kompila-tor, edytor tekstu, narzędzie do śledzenia wykonywania programu (debugger).

62 Temat 7

3.2. Kompilacja programuProgram źródłowy, który utworzyliśmy i zapisaliśmy w pliku (ćwiczenie 1), nie może być wykonywany przez komputer (procesor). Procesor bowiem nie może wykonać dokumentu tekstowego (w takim właśnie formacie zapisany jest program źródłowy). Pisząc program w ję-zyku programowania, przygotowujemy jedynie źródło do utworzenia kodu maszynowego, czyli programu rozumianego przez komputer. Komputer, a dokładniej procesor, wykonuje program w kodzie maszynowym (w języku wewnętrznym procesora). Tworzenie programów w takim języku jest bardzo trudne (patrz przykład na rys. 4), czasem wręcz niemożliwe. Dlatego progra-miści używają języków zrozumiałych dla człowieka.

Program może występować w dwóch postaciach: · jako program źródłowy – postać zrozumiała dla programisty,· jako kod maszynowy (program wykonywalny) – zapisany w języku maszynowym,

zrozumiałym dla komputera.

Program napisany w języku wysokiego poziomu (w naszym przypadku w Pascalu) musi zostać przetłumaczony na język niskiego poziomu (język wewnętrzny komputera). Proces ten nazy-wamy translacją (z ang. translate – tłumaczyć). Może ona przebiegać w formie kompilacji lub interpretacji, a używa się do tego celu specjalnego programu do tłumaczenia programu na kod maszynowy – translatora.

Programy tłumaczące, czyli translatory, dzielą się na:· interpretery – każde polecenie programu jest po jego uruchomieniu na bieżąco zamieniane

na kod maszynowy, · kompilatory – cały program jest przekładany na kod maszynowy.

Przykładem języka interpretowanego (interpretera) jest język LOGO (patrz tabela – rys. 1), który często omawialiśmy na lekcjach informatyki w gimnazjum. W zadaniach rozwiązywa-nych w tym podręczniku będziemy używać m.in. kompilatora języka Turbo Pascal.

Program w kodzie maszynowym (rys. 4) składa się z ciągu wartości binarnych, które oznaczają zarówno instrukcje, jak i dane. Postać kodu maszynowego zależy od procesora, na który dany

Rys. 4. Program w języku wysokiego poziomu

(Pascal) oraz ten sam fragment programu

w kodzie maszynowym i w assemblerze

Język wysokiego poziomu charakteryzuje się przejrzy-stą strukturą; nie zależy od architektury komputera.

Język niskiego poziomu posługuje się instrukcjami, które odpowiadają danym instrukcjom konkretnego procesora.

Kod maszynowy – pro-gram napisany w języku wewnętrznym (maszyno-wym), rozumianym przez procesor.

Interpretacja – tłumacze-nie programu źródłowego na kod maszynowy instruk-cja po instrukcji. Tłumacze-nie następuje przy każdora-zowym uruchomieniu pro-gramu.

Kompilacja – tłumacze-nie programu źródłowego na kod maszynowy. Raz skompilowany program nie wymaga już powtórne-go tłumaczenia.

Aktualnie wykonywana

instrukcja

Program źrółówy

Program wynikowy w assemblerze

63Temat 7

program jest przeznaczony. Język maszynowy jest językiem niskiego poziomu. Elementy tego języka odwzorowują architekturę komputera – instrukcje zależą od tego, jaki mamy kompu-ter – program nie będzie działał na innym sprzęcie. Natomiast język Pascal należy do języków wysokiego poziomu – na każdym komputerze działa tak samo; im bardziej zbliżony jest do ję-zyka naturalnego, tym jego poziom jest wyższy.

Ćwiczenie 2Skompiluj program utworzony w ćwiczeniu 1.

Wskazówki: Aby skompilować program, wybiera-my opcję Compile.

3.3. Uruchomienie i wykonanie programuUruchomiony i wykonywany może być program, który jest skompilowany poprawnie. W trak-cie wykonywania programu procesor rozpoznaje i wykonuje instrukcje swojego wewnętrznego języka. W jednej z części procesora – arytmometrze – są wykonywane operacje arytmetyczne (patrz więcej – temat 16). Po wykonaniu programu wyniki pojawią się na wybranym urządze-niu zewnętrznym. W naszym przypadku – na ekranie monitora, ale mogą być również wyprowa-dzone do pliku (czyli w nim zapisane) lub wydrukowane.

Ćwiczenie 3Uruchom swój pierwszy program.

Wskazówki: Należy wybrać opcję Run – program zostanie uruchomiony i wykonany. Jeśli wcześniej nie wykonasz kompilacji, to wybranie opcji Run spowoduje, że i tak zostanie ona przeprowadzona.

3.4. Testowanie programuProsty program, który tworzyliśmy w pierwszych ćwiczeniach, nie wymaga praktycznie testo-wania. Efektem działania tego programu było wyprowadzenie tekstu na ekran monitora. Program trudniejszy, w którym występuje wiele zmiennych i różne na nich działania, należy przetestować – prześledzić jego działanie dla kilku różnych wartości zmiennych. Podobnie postępowaliśmy w przypadku prezentacji algorytmu w postaci listy kroków czy schematu blokowego.

Ćwiczenie 4Wpisz w oknie edytora Pascala tekst programu z przykładu 1. Skompiluj i uruchom ten program. Sprawdź jego działanie dla różnych wartości zmiennych.

Wskazówki:

1. Możesz skorzystać z pliku tego programu zapisanego na CD. 2. Pamiętaj, że procedura Readln czyta dane z klawiatury, więc w momencie jej realizacji następuje

zatrzymanie wykonywania programu i oczekiwanie na wprowadzenie danych z klawiatury.

Aby prześledzić wykonywanie programu, można skorzystać z gotowego narzędzia – tzw. debuggera – często wbudowywanego do programu kompilatora. Nazywa się go też „odplu-skwiaczem” (z ang. bug – pluskwa).

Rys. 5. Po udanym zakończeniu kompilacji pojawi się informacja w takim oknie

Rys. 6. Na ekranie monitora widoczny jest efekt wykonania programu w postaci zapisu „Pierwszy program”

Uwaga:Aby zobaczyć efekt wyko-nania programu, trzeba na-cisnąć Alt + F5, bo po wy-konaniu programu bardzo szybko następuje powrót do edytora i na ekranie nie wi-dać wyprowadzonych wy-ników.

Nazwa debugger powsta-ła w 1945 roku. Wyniknęła z faktu, że w przekaźnikach używanego wówczas elek-tromechanicznego kompu-tera Mark II zagnieździły się... karaluchy.

64 Temat 7

4. Problemy z błędami kompilacji i wykonania

Ćwiczenie 51. Przepisz dokładnie program w podanej postaci i wykonaj jego kompilację. program Test begin Writeln(’drugi program’) end2. W oknie edytora pojawi się opis błędu (”;” expected – oznacza, że brakuje średnika po nazwie

programu). Popraw program, wstawiając ten średnik. Skompiluj ponownie.3. Program jest sprawdzany od początku, ale kompilator wykrył kolejny błąd – Unexpected end

of file. Jak sądzisz, jaki to błąd?

Można spotkać się z następującymi rodzajami błędów:

Błędy kompilacji – wykrywane w czasie kompilacji, np. błędnie zapisane słowo kluczowe, zła postać instrukcji, źle wstawiony znak interpunkcyjny lub jego brak. Wśród błędów wykrywa-nych podczas kompilacji są też błędy syntaktyczne – np. zastosowanie zbyt wielu wyjść z in-strukcji (warunkowej).

Błędy wykonania – np. dzielenie przez zero, brak wolnej pamięci, brak dostępu do pliku. Błędy te nie są wykrywane podczas kompilacji, a dopiero w trakcie wykonywania programu (są to sytuacje, w których kontynuacja wykonania programu nie jest możliwa).

Błędy logiczne (specyfikacji) – np. zapętlenie programu, nieokreślone wartości zmiennych; przy wprowadzaniu pewnych wartości zmiennych program działa dobrze, przy wprowadzaniu innych – źle. Ogólnie program nie robi tego, czego się od niego oczekuje. Błędy te nie są wykry-wane podczas kompilacji. Niemożliwe jest automatyczne wykrycie takiego błędu, ponieważ komputer nie wie, co tak naprawdę chcemy osiągnąć.

5. Zapis algorytmu z warunkami w języku Pascal

5.1. Warunek prostyPostać instrukcji warunkowej w języku Pascal jest podana w tabeli na rys. 2. Wyrażenie, które występuje po słowie kluczowym if, może być warunkiem logicznym prostym, np. x > 0, a <> 9, liczba <= -5, lub złożonym, np. (x > -5) and (y >= 0). W przypadku warunku złożonego potrzebne są nawiasy.

Stosujemy następujące operatory logiczne: = (równy), > (większy) < (mniejszy), >= (większy lub równy), <= (mniejszy lub równy), <> różny, or (alternatywa), and (koniunkcja), not (negacja).

Podajemy dwie formy instrukcji warunkowej (patrz tabela na rys. 2). W tej, w której brak części zaczynającej się od słowa else, w przypadku niespełnienia warunku jest wykonywana od razu kolejna instrukcja zapisana po instrukcji warunkowej.

Przykład 3Algorytm znajdowania wartości bezwzględnej liczby rzeczywistej.

Uwagi:

1. Aby ekran monitora był wyczyszczony przed każdorazowym uruchomieniem programu, można skorzy-stać ze standardowej procedury bez parametrów ClrScr, którą należy zapisać na początku programu. Procedura ta zdefiniowana jest w standardowym module Crt, dlatego w części deklaracyjnej dodajemy: uses Crt.

65Temat 7

2. W nazwie programu i nazwach zmiennych należy stosować tylko litery i cyfry, gdyż nie mogą występo-wać w nich tzw. znaki specjalne, takie jak spacja, „:”, „%”, „*” ). Spację zastępuje się znakiem podkreśle-nia. W nazwach nie stosujemy polskich znaków diakrytycznych; wielkie i małe litery są nierozróżnialne, np. nazwa suma oznacza to samo, co Suma. Polskie litery można stosować tylko w napisach, np. w pro-cedurze Writeln.

Ćwiczenie 6Przepisz program podany w przykładzie 3, korzystając z kompilatora Pascala. Zapisz program w pli-ku, a następnie porównaj go z zapisem tego samego algorytmu w postaci listy kroków (patrz przy-kład 5 w temacie 1), zwracając uwagę na zapis instrukcji warunkowej. Skompiluj i wykonaj program dla kilku różnych wartości zmiennych.

5.2. Warunek zagnieżdżonyRealizację algorytmów zawierających warunki zagnieżdżone prezentowaliśmy w postaci listy kroków i schematów blokowych (temat 3) oraz w pseudojęzyku (temat 4).

Instrukcje warunkowe „if” również mogą się zagnieżdżać. Należy przestrzegać zasady, że każda część else przyporządkowana jest najbliższej, poprzedzającej ją części then.

Przykład 4Algorytm wyboru najmniejszej z trzech liczb całkowitych.

Uwagi:

1. Zmienne zostały zadeklarowane jako liczby typu całkowitego – integer; do typu integer należą liczby z zakresu od -32768 do 32767.

2. W przypadku instrukcji zagnieżdżonych zaleca się pisać sło-wo kluczowe else bezpośrednio pod odpowiadającym mu słowem then (dla zachowania czytelności).

3. Tylko „zewnętrzna” instrukcja warunkowa powinna kończyć się średnikiem.

4. Umieszczenie pod koniec programu procedury Readln bez parametrów spowoduje, że powrót do okna edytora nastąpi dopiero po naciśnięciu klawisza Enter.

Ćwiczenie 7Przepisz program podany w przykładzie 4, korzystając z kompilatora Pascala. Zapisz program w pli-ku. Zwróć uwagę na zapis zagnieżdżonych instrukcji warunkowych. Skompiluj i uruchom program. Przetestuj go dla następujących wartości zmiennych: (3; -56; 0), (76; 123; -2), (44; 44; 44); (-70; -40; -40), (56; 68; 88), (100; 0; 2).

program Liczba_bezwgledna;uses Crt;var x,w: real;begin

ClrScr; readln(x);if x >= 0 then w := x else w := -x;Writeln(’wartość bezwzględna liczby x =’, w);

end.

program Minimum;uses Crt;var a, b, c, min: integer;begin

ClrScr; Writeln(’podaj trzy liczby’);Readln(a, b, c);if a < b then if a < c then min := a else min := c

else if b < c then min := b else min := c;Writeln(’minimum wynosi =’, min);Readln;

end.

66 Temat 7

6. Realizacja algorytmów iteracyjnych w Pascalu

6.1. Pętle prosteProgramy komputerowe tworzy się dla czynności wielokrotnie powtarzanych, stąd znaczenie instrukcji pętli w programowaniu jest bardzo duże.

Postać instrukcji iteracyjnej for w języku Pascal została podana w tabeli na rys. 2. Instrukcję tę stosujemy, gdy liczba kroków iteracji jest znana. Dokładne jej działanie zostało omówione w temacie 4 na przykładzie odpowiadającej jej instrukcji DLA w pseudojęzyku. Pozostałe dwie instrukcje iteracyjne Pascala, w których nie trzeba z góry określać liczby powtórzeń, zostaną omówione w temacie 10.

Wartość w1 i w2 musi być zgodna w sensie przypisania z typem zmiennej sterującej. Ponadto w postaci ze słowem kluczowym do powinien być spełniony warunek: w1 <= w2, a w postaci ze słowem kluczowym downto – odwrotnie.Instrukcja pętli może mieć postać: for i := 1 to k do Writeln(’x’)lub for i := 1 to n + 1 do Writeln(’x’)lub for i := 20 downto 1 do Writeln(’x’).

program Obliczanie_iloczynu;uses Crt;var i, n, iloczyn: word;begin

ClrScr;iloczyn := 1;Writeln(’podaj liczbę danych’);Readln(n);for i := 1 to n do iloczyn := iloczyn*i;Writeln(’iloczyn = ’, iloczyn);Readln;

end.

Przykład 5

Algorytm obliczania iloczynu n kolejnych liczb naturalnych (począwszy od 1).Uwagi:

1. Zmienne zostały zadeklarowane jako liczby typu całkowitego nieujemnego – word; do typu word należą liczby z zakresu od 0 do 65535.

2. Zmiennej iloczyn na początku programu przypisujemy wartość 1, aby była poprawnie okre-ślona w wykonywanej po raz pierwszy instrukcji przypisania iloczyn := iloczyn•i. Gdybyśmy tego nie zrobili, może zostać jej przypisana przypadkowa wartość, np. zero.

Ćwiczenie 8Na CD w pliku T7-przykład5 zapisany jest program z przykładu 5:

1. Uruchom i przetestuj program dla kilku różnych wartości zmiennych.2. Zmień typ wszystkich zmiennych na typ całkowity byte (są to liczby z zakresu od 0

do 255). Omów skutki tej zmiany, testując program kolejno dla wartości n: 3, 5, 7, 10.

Ćwiczenie 9Napisz program realizujący algorytm sumowania n dowolnych liczb rzeczywi-stych. Odwołaj się do schematu blokowego tego algorytmu i programu zapisanego w pseudojęzyku (przykład 3 i 4 w temacie 5) – porównaj wszystkie sposoby przedsta-wienia iteracji.

6.2. Pętle zagnieżdżoneInstrukcje iteracyjne for mogą się zagnieżdżać, czyli po słowie do może wystąpić kolejna instrukcja iteracyjna, np. for i := 1 to n do for j := 1 to m do instrukcja.

Liczba kroków tej iteracji określona jest przez iloczyn: n·m.

Przykład 6Algorytm, który umożliwi wyprowadzenie na ekran monitora „prostokąta” narysowanego za pomocą znaków „x” o bokach n, m (m – liczba znaków „x” w poziomie, n – liczba znaków „x” w pionie). Wnętrze prostokąta ma być również wypełnione znakami „x”.

Program w języku Pascal i schemat blokowy (patrz ramka i rys. 7 na drugiej stronie).

67Temat 7

Uwaga: Procedura Writeln bez parametrów oznacza przejście kursora do nowego wiersza.

Ćwiczenie 10Na CD w pliku T7-przykład6 zapisany jest program z przykładu 6.

1. Uruchom i przetestuj program dla kilku różnych wartości zmiennych.2. Dlaczego zapis Write(’x’) jest bez końcówki „ln”? Dodaj tę końcówkę i sprawdź działa-

nie programu.

Warto zapamiętać· Aby algorytm był zrozumiały dla komputera, trzeba go zapisać w postaci programu

w konkretnym języku programowania. Języki te klasyfikujemy według różnych kryte-riów.

· Wyróżniliśmy cztery etapy programowania: – implementację, – kompilację (interpretację), – uruchomienie i wykonanie,– testowanie.

Pytania, problemy1. Wymień te cechy języka programowania, które odróżniają go od języka natu ralnego.2. Omów cechy charakteryzujące języki wysokiego i niskiego poziomu. Podaj przykłady

takich języków.3. Na czym polega kompilacja programu?4. Przedstaw i omów na konkretnym przykładzie etapy programowania.5. Omów rodzaje błędów, które występują podczas programowania. Z jakimi błędami naj-

częściej spotyka się niedoświadczony programista?

Zadania 1. Napisz program realizujący algorytm znajdowania większej z dwóch liczb rzeczywistych (bez

sprawdzania warunku, czy liczby są równe). 2. Tak zmodyfikuj program z zadania 1, aby w przypadku liczb równych wyprowadzał napis: „liczby

są równe”.3. Sprawdź następujący fragment programu (powinien realizować algorytm wyboru najmniejszej

z trzech liczb). Program w całości zapisany jest na CD w pliku T7-zadanie3. Skompiluj i uruchom go, a następnie przetestuj dla różnych wartości. Z jakim rodzajem błędu się tu spotkałeś?

if a < b then if a < c then min := a else if b < c then min := b else min := c;

Rys. 7. Schemat blokowy algorytmu z pętlami zagnieżdżonymi

program Prostokat;uses Crt;var i, j, n, m : integer;begin

ClrScr;Writeln(’podaj wymiary prostokąta’);Readln(n, m);for i := 1 to n do begin

for j := 1 to m do Write(’x’);Writeln;

end;Readln;end.

j := 1

KONIEC

Wyprowadź(’x’)

TAK

NIE

Czyj > m?

j := j + 1

i := 1

START

Wprowadź(n, m)

Czyi > n?

i := i + 1

Przejdź do nowego wiersza

TAK

NIE

68 Temat 7

4. Napisz program sprawdzający, czy z odcinków o długościach wprowadzonych przez użytkowni-ka z klawiatury można zbudować trójkąt (warunek istnienia trójkąta). Liczby zadeklaruj jako byte. Program ma sprawdzać dziesięć takich trójek liczb i zależnie od rezultatu wyprowadzać komuni-katy: „można zbudować trójkąt” lub „nie można zbudować trójkąta”.

5. Napisz program sprawdzający, czy wprowadzone trzy liczby naturalne są bokami trójkąta prosto-kątnego. Liczby zadeklaruj jako byte. Program ma sprawdzać dziesięć takich trójek liczb i zależnie od rezultatu wyprowadzać komunikaty „tak” lub „nie”.

6. Na podstawie następujących fragmentów programów napisz, jakie są wyniki ich działania: a. for i := 1 to 20 do Write(’$’); writeln;b. for i := 1 to 20 do Writeln(’$’);

7. Uzupełnij program z przykładu 3 o możliwość wykonywania go dla n danych (n wprowadzane z klawiatury).

8. Zapisz następujące zadania w postaci programów, na podstawie gotowych schematów bloko-wych:a. zadanie 2 w temacie 3,b. zadanie 5 w temacie 3; dodatkowo program ma działać dla n dowolnych liczb rzeczywistych

(n wprowadzane z klawiatury).9. Zapisz zadanie 2 (temat 4) w postaci programu w języku Pascal na podstawie jego zapisu w pseu-

dojęzyku. 10. Napisz w języku Pascal program rozwiązywania równania liniowego na podstawie listy kroków

(przykład 8 w temacie 3). Dodatkowo program ma działać dla n par współczynników (skorzystaj też z zadania 5 w temacie 4 – jeśli je rozwiązałeś).

11. Napisz program realizujący algorytm sumowania n dowolnych liczb rzeczywistych (patrz przy-kład 4 w temacie 5 – gdzie ten sam algorytm został zrealizowany w pseudojęzyku).

Dla zainteresowanych12. Napisz program realizujący algorytm, który umożliwi wyprowadzenie na ekran monitora prosto-

kąta o bokach n x m, składającego się z liter „A” i „B”, występujących co drugi wiersz (m – liczba znaków „A” lub „ B” w poziomie, n – liczba znaków „A” lub „B” w pionie).

13. Napisz program realizujący algorytm, który umożliwi wyprowadzenie na ekran monitora „sza-chownicy” składającej się z zer i jedynek.

14. Napisz program realizujący algorytm rozwiązywania równania kwadratowego (patrz schemat blo-kowy w ELI – ćwiczenie 8 w temacie 3).

15. Omów szczegółowo klasyfikacje języków programowania według kryteriów podanych w tabeli na rys. 1.

16. Zapoznaj się z debuggerem wbudowanym do kompilatora języka Pascal.17. Wyjaśnij, na czym polega konsolidacja (linkowanie). Poszukaj informacji w dodatkowych

źródłach.

Warto jeszcze wiedziećJęzyk Pascal powstał w 1971 roku. Zaprojektował go Niklaus Wirth z politechniki w Zurychu. Później zaczęły powstawać liczne wersje tego języka przeznaczone dla mikrokomputerów, takich jak ZX Spectrum, Commodore, Atari. Wielką popularność zdobyła w 1983 roku jego odmiana Turbo Pascal, zaprojektowana przez firmę Borland i przeznaczona dla mikrokomputerów klasy IBM. Turbo Pascal ma dobrze zintegrowane środowisko: edytor, debugger i projekty, doskonałą pomoc, jak rów-nież możliwość programowania obiektowego.