• Nie Znaleziono Wyników

Języki i metody programowania

N/A
N/A
Protected

Academic year: 2021

Share "Języki i metody programowania"

Copied!
1
0
0

Pełen tekst

(1)

Dr inż. Robert Wójcik

E-mail: wojcik@ict.pwr.wroc.pl

Języki i metody programowania

4. Podstawowe instrukcje

4.1. Klasyfikacja instrukcji

4.2. Instrukcja warunkowa z pojedynczym wyborem if then 4.3. Instrukcja warunkowa z wielokrotnym wyborem if then else 4.4. Instrukcja wyboru case of

4. Podstawowe instrukcje

(2)

4.1. Klasyfikacja instrukcji

Program komputerowy określa sposób wykonania pewnych czynności na ustalonym zbiorze danych. Operacje realizowane w programie są opisane za pomocą instrukcji języka programowania.

Instrukcje dzielą się na:

 proste (realizują pojedyncze operacje);

 strukturalne (realizują kilka operacji).

Każda instrukcja kończy się średnikiem. Wyjątek stanowi instrukcja bezpośrednio poprzedzająca end.

Instrukcje proste:

 przypisania ( := ),

 skoku ( goto ),

 pusta ( ; ),

 wywołania procedury,

 inline.

Instrukcje strukturalne:

 złożona ( begin .. end; ),

 warunkowa ( if, if-else ),

 iteracyjna ( for, while, repeat ),

 wiążąca ( with ),

 asemblerowa ( asm ).

Instrukcja przypisania

Realizuje podstawienie postaci:

(3)

nazwa_zmiennej := wyrażenie;

Pod zmienną określoną z lewej strony podstawiana jest wartość wyrażenia znajdującego się z prawej strony.

Np. x:=5; x:=y+4; x:= 2+sin(y)/3;

Zmienna i wyrażenie powinny być zgodnych typów. Jeśli nie są to kompilator stara się dokonać konwersji typu wyrażenia z prawej strony do typu zmiennej znajdującej się z lewej strony. W przypadku, gdy nie jest to możliwe generowany jest błąd kompilacji.

W instrukcji przypisania można dokonać rzutowania typów dla typów całkowitych.

type

tdni = (pon, wt, sr, czw, pt, sob, ndz);

Var dzien: tdni;

k: integer;

z: longint;

begin

k:= 6; dzien:= tdni(k);

dzien:= tdni(6);

{ podstawienie dzien:=tdni(11); błąd zakresu, gdyż ndz = 6 } z:= 60000;

k:= z; { kompilator dokona konwersji z obcięciem } k:= integer(z);

end.

Nie jest możliwa konwersja w przypadku:

Var w: longint;

w:= longint(17.4); { błąd kompilatora }

Instrukcja skoku

label A1, A2;

begin

instrukcje; goto A1;

(4)

instrukcje; goto A2;

A1: writeln(’Wykryto wartość dodatnią’);

A2: writeln(’Wykryto wartość ujemną’);

end.

Instrukcja inline

Umożliwia wstawianie kodu maszynowego do programu.

Procedura wpisująca ile elementów o wartości dana do pamięci o adresie cel.

Procedure Wpisz_dane(var cel; ile: word; dana: word);

Begin

inline(

$C4/$7E/cel/ (* LES DI, cel[BP] *)

$8B/$4E/ile/ (* MOV CX, ile[BP] *)

$8B/$46/dana/ (* MOV AX, dana[BP] *)

$FC/ (* CLD *)

$F3/$AB); (* REP STOSW *)

End;

Instrukcja złożona

Realizuje sekwencyjnie kilka wewnętrznych instrukcji prostych zawartych pomiędzy begin oraz end. Instrukcja złożona tworzy z ciągu instrukcji jedną instrukcję określoną przez nawiasy logiczne begin i end.

begin

b:= 2;

n:= n + 1;

j:= n + b;

end;

4.2. Instrukcja warunkowa z pojedynczym wyborem if then

Umożliwia podjęcie decyzji w przypadku, gdy jest spełniony określony warunek. Jest ona często nazywana instrukcją rozgałęzienia ponieważ

w wyniku jej wykonania program podejmuje decyzję, którą z dwóch ścieżek należy wybrać.

if wyrażenie_logiczne then instrukcja;

(5)

Jeśli wyrażenie_logiczne jest prawdziwe (wartość TRUE), to wykonywana jest instrukcja.

Np. Jeśli x>=0, to zwiększ licznik.

if x>=0 then licznik:= licznik+1;

lub

if (x>=0) then licznik:= licznik+1;

W przypadku, gdy wyrażenie_logiczne składa się z kilku członów połączonych operatorami logicznymi (np. and, or) poszczególne jego elementy należy wziąć w nawiasy.

Np. Jeśli –5 <= x <= 10, to zwiększ licznik.

if (-5 <= x) and (x <= 10) then licznik:= licznik+1;

Wynika to z faktu, że w języku Pascal operatory logiczne (np. and, or) mają wyższy priorytet niż operatory relacji (np. <, <=).

Zamiast pojedynczej instrukcji można wykonać instrukcję złożoną ujętą w nawiasy logiczne begin i end.

if wyrażenie_logiczne then begin

instrukcja_1;

instrukcja_2; {sekwencja instrukcji prostych}

...instrukcja_n;

end;

Jeśli wartość wyrażenia jest prawdą, to zostaną wykonane wszystkie instrukcje zawarte w nawiasach logicznych begin end. Jeśli wyrażenie jest fałszywe, to żadna z instrukcji nie zostanie wykonana.

Np. if (a<>5) then begin

if (b<10) then c:= a - b;

a := 2b;

end;

Przykład 4.1. Wyznaczenie minimum z trzech liczb rzeczywistych x, y, z i zapamiętanie wyniku w zmiennej min. Wykorzystanie if.

Var x, y, z, min : real;

(6)

Begin

write(’Podaj pierwszą liczbę x = ’); readln(x);

write(’Podaj drugą liczbę y = ’); readln(y);

write(’Podaj trzecią liczbę z = ’); readln(z);

min:=x; { wartość początkowa minimum } if y<=min then min:=y;

if z<=min then min:=z;

writeln(’Minimum = ’, min:0:2);

readln;

End.

Przykład 4.2. Wyznaczenie minimum z trzech liczb rzeczywistych x, y, z i zapamiętanie wyniku w zmiennej min. Wykorzystanie if oraz operatora and.

Var x, y, z, min : real;

Begin

write(’Podaj pierwszą liczbę x = ’); readln(x);

write(’Podaj drugą liczbę y = ’); readln(y);

write(’Podaj trzecią liczbę z = ’); readln(z);

if (x<=y) and (x<=z) then min:=x;

if (y<=x) and (y<=z) then min:=y;

if (z<=x) and (z<=y) then min:=z;

writeln(’Minimum = ’, min:0:2);

readln;

End.

4.3. Instrukcja warunkowa z wielokrotnym wyborem if then else

Instrukcja if umożliwia wybór pomiędzy wykonaniem a niewykonaniem instrukcji. Natomiast instrukcja if-else umożliwia wybór pomiędzy dwoma czynnościami w zależności od wartości wyrażenia.

if wyrażenie_logiczne then instrukcja_1 { brak średnika przed else}

else instrukcja_2;

Jeśli wartość wyrażenia_logicznego jest prawdą (TRUE), to wykonana zostanie instrukcja_1. W przeciwnym wypadku instrukcja_1 zostanie opuszczona i wykonana zostanie instrukcja_2.

Np. Var a, b, c: integer;

(7)

Begin

a:=1; b:=2; c:=0;

if (a+b > 3) then a:= a + 1 else c:= a + b;

End;

Ponieważ a+b = 3 wykonana zostanie druga instrukcja, tj. c := a + b.

Za pomocą instrukcji if-then-else można decydować o wykonaniu lub niewykonaniu grupy instrukcji.

if wyrażenie_logiczne then begin

{ grupa_instrukcji_1; } end

else begin

{ grupa_instrukcji_2; } end

Np. if (a = b) then c:= d else c:= b;

if (a < 10) then begin

if (b < 7) then c:= a + b else b:= b + 1;

end

else begin c:= 0; a:= a + b; end;

Instrukcja if-then-else może być wielokrotnie zagnieżdżona.

if (warunek_1) then

begin { instrukcje_1; } end else if (warunek_2) then

begin { instrukcje_2; } end else if (warunek_3) then

begin { instrukcje_3; } end ...

else if (warunek_N) then

begin { instrukcje_N; } end

else begin { instrukcje_N+1; } end;

{ wykonywane jeśli wszystkie warunki if (...) then są fałszywe }

(8)

Jeśli warunek_1 jest spełniony, to wykona się grupa instrukcji_1, a pozostałe sprawdzenia if zostaną opuszczone. W przeciwnym przypadku instrukcje_1 zostaną pominięte i nastąpi sprawdzenie wyrażenia warunek_2. W podobny sposób analizowane są pozostałe warunki.

W rozpatrywanym przypadku są wykonywane tylko instrukcje związane z prawdziwym warunkiem, a pozostałe są pomijane. Jeżeli żaden warunek nie jest prawdziwy, to wykonywane są instrukcje związane z ostatnim else.

Np. if (delta > 0.0) then writeln(’Dwa pierwiastki rzeczywiste’)

else if (delta = 0.0) then writeln(’Dwa identyczne pierwiastki’) else writeln(’Dwa pierwiastki zespolone’);

Jeśli delta >0.0, to wyprowadzona zostanie informacja, że równanie ma dwa pierwiastki, a pozostałe informacje zostaną pominięte.

Var a, b, c: integer;

a:=3; b:=3; c:=0;

if (a+b > 5) then

if (b>=3) then c:= c+1 { wykona się c = c+1; c =1 } else begin b:= a; c:= c -1; end;

c:= c + a + b; { wykona się c = c + a + b; c=1+3+3 = 7 }

Jeśli a+b > 5, to sprawdzany jest warunek b >= 3. Jeśli warunek a+b > 5 nie jest spełniony, to wykonywana jest instrukcja c:= c + a + b;

Warunek else dotyczy najbliższej instrukcji if, która nie posiada else.

Var a, b, c: integer;

a:=2; b:=3; c:=0;

if (a+b > 5) then

if (b>=3) then c:= c + 1

else begin b:= a; c:= c - 1; end else c:= a + b; { wykona się c = 2 + 3 = 5 }

Można również wykorzystać nawiasy logiczne begin end do pokazania związków pomiędzy if oraz else.

a:=2; b:=3; c:=0;

if (a+b > 5) then begin

if (b>=3) then c:= c + 1

else begin b:= a; c:= c + 1; end;

c:= a + b;

(9)

end else

if (c>0) then begin c:= c + a; b:= b + 1; end

else begin b:= b + a; a:= a + 1; end; { b=5; a=3; c=0; }

Przykład 4.3. Wyznaczanie minimum z trzech liczb a, b,c (if-then-else).

Var a, b, c, min: integer;

begin

a:= -20; b:= -50; c:= -10;

if (a<b) then

if (a<c) then min:= a else min:= c else

if (b<c) then min:= b else min:= c;

writeln(’Najmniejsza liczba: ’, min); readln;

end.

4.4. Instrukcja wyboru case of

Jeśli należy dokonać wyboru spośród wielu wariantów, to można wykorzystać instrukcję warunkową if-else. Jednak w większości przypadków wygodniej posłużyć się instrukcją wyboru wielowariantowego, która ma jedną z następujących postaci:

case selektor of

zakres_1_selektora: instrukcja_1;

zakres_2_selektora: instrukcja_2;

...

zakres_M_selektora: instrukcja_M;

end;

gdzie selektor jest zmienną lub wyrażeniem typu porządkowego.

Jeśli wartość selektora będzie należała do jednego z podanych zakresów, to wykonana zostanie instrukcja po dwukropku, natomiast pozostałe przypadki nie będą już rozpatrywane.

Instrukcja odpowiadająca określonemu zakresowi może być instrukcją złożoną ujętą w nawiasy logiczne begin end.

Np. Var i: integer;

(10)

readln(i);

case i of

0..100: begin writeln(’Słabo’); writeln(’Postaraj się lepiej’); end;

101..120: writeln(’Dobrze’);

121..190: writeln(’Bardzo dobrze’);

end;

Przykład selektora będącego wyrażeniem.

Var delta: integer;

delta:= -1;

case (delta>=0) of

false: writeln(’Pierwiastki zespolone’);

true: if (delta = 0) then writeln(’Dwa identyczne pierwiastki’) else writeln(’Dwa różne pierwiastki’);

end;

Istnieje wariant instrukcji wyboru, w którym w przypadku braku przynależności selektora do jakiegokolwiek zakresu realizowany jest blok instrukcji występujący po else.

case selektor of

zakres_1_selektora: instrukcja_1;

zakres_2_selektora: instrukcja_2;

zakres_M_selektora: instrukcja_M; ...

else instrukcja_N;

end;

Np. var i: integer;

readln(i);

case i of

0..100: begin writeln(’Słabo’); writeln(’Postaraj się lepiej’); end;

101..120: writeln(’Dobrze’);

121..190: writeln(’Bardzo dobrze’);

else writeln(’Zły zakres’);

end;

Przykład 4.4. Wyprowadzanie pełnej nazwy koloru.

type

TKolory = ( R, G, B );

var

(11)

kolor: TKolory;

i: integer;

Begin

readln(i);

kolor:= Tkolory(i); { konwersja typu } case kolor of

R: writeln(’Czerwony’);

G: writeln(’Zielony’);

B: writeln(’Niebieski’);

else writeln(’Inny kolor’);

end ; End.

Przykład 4.5. Opracować program realizujący prosty kalkulator (+,-,,/).

uses crt;

Var oper, zn: char;

a, b, wynik: real;

pom: integer;

Begin clrscr;

repeat

writeln('Podaj pierwszy argument : '); readln(a);

writeln('Podaj drugi argument : '); readln(b);

writeln('Wybierz operacje [+, -, /, *]: '); readln(oper);

pom:= 1; { wybrana operacja jest poprawna } case (oper) of

'+': wynik:= a + b;

'-': wynik:= a - b;

'*': wynik:= a * b;

'/': if (b <> 0.0) then wynik:= a/b

else begin writeln('Dzielenie przez zero'); pom:=0; end;

else begin writeln('Wybrano złą operację'); pom:=0; end;

end;

if (pom>0) then { wyświetlenie wyników } begin writeln(' Wynik: ');

writeln(a:8:4, ' ', oper, ' ', b:8:4, ' = ', wynik:8:4);

end;

(12)

repeat

writeln('Czy wykonać kolejne obliczenia (T/N)?');

zn:= upcase(readkey);

writeln;

until ( zn='T') OR (zn='N');

until (zn='N');

End.

Cytaty

Powiązane dokumenty

W piątek Ośrodek Brama Grodzka-Teatr NN otrzyma Europejską Nagrodę Obywa- telską.. To wyróżnienie dla wybitnych Europejczyków, które zostało ustanowione przez

Wszelkie niejasności wyjaśniamy na lekcjach online, która odbywają się się w wtorek o godzinie 11.15 oraz w czwartek o godzinie 11.15 na platformie discord. Jeśli nie

e) Uczestnicy mogą zgłaszać gotowość przekazania elektrośmieci przez cały okres trwania Konkursu, a terminy odbiorów będą podawane

Kompilator – program przetwarzający kod źródłowy na kod wynikowy (kod pośredni w języku maszynowym, który jest zrozumiały dla komputera).. Interpretator –

Typ definiuje zakres lub zbiór dopuszczalnych wartości zmiennych, stałych i funkcji, zbiór dopuszczalnych operacji wykonywanych na tych wartościach

Jeśli jednak nie jest prawdą, że logika jest jedna, to może istnieć logika prawnicza jako odmienny rodzaj logiki.. Zatem albo logika jest jedna, albo nie jest prawdą, że nie

Po zakończeniu III etapu konkursu (90 minut), uczniowie odeślą zadania poprzez platformę Teams. Ostatnie 5 minut konkursu, powinno zostać przeznaczone na

Walka toczy się między przedmio- tami i formami, które są wynikiem translacji tych pierwszych w po- stać – mówiąc językiem Hegla – „uzmysłowioną”, przy