background image

Wstęp 

do programowania

Wykład 3

instrukcje  

background image

Instrukcja warunkowa 

if - then - else 

Występuje w trzech wersjach: 

jeśli

warunek

to

instrukcja1

w_przeciwnym_wypadku 

instrukcja2

if 

warunek

then

instrukcja1

else

i

nstrukcja2;

warunek

instrukcja1

FAŁSZ

PRAWDA

warunek

instrukcja1

False

True

instrukcja2

instrukcja2

background image

Instrukcja warunkowa (wyboru)

if - then - else 

warunek

- Wyrażenie logiczne przyjmujące wartość prawdy lub fałszu (przyjmuje 

typ logiczny 

BOOLEAN)

Przykłady 

if  a>5  then b:=a-5 

if  (a>0) and (a<=10)  then x:=5 

else

b:=a+5

else

z:=15

if (dzielnik<>0) then wynik:=dzielna/dzielnik

else writeln(' nie można dzielić przez zero !!!');

if (dzielnik<>0) then

begin

wynik:=dzielna/dzielnik;

writeln(' dzielenie wykonano');

end

else writeln(' nie można dzieli przez zero !');

background image

Instrukcja warunkowa (wyboru)

program prog01;

{$APPTYPE CONSOLE}

uses  SysUtils;

var    liczba : byte;

//-------------------------------

begin

write('Proszę  liczbę całkowitą : ');

readln(liczba);

if   liczba > 100 then

writeln('Liczba jest większa niż 100')

else

writeln('Liczba jest mniejsza lub równa 100');

Readln;

background image

Instrukcja warunkowa

if - then

jeśli

warunek

to

instrukcja

if 

warunek

then  

instrukcja

Np.. 

if 

zn in [’1’..’9’]

then 

writeln(’zn jest cyfrą’);

if 

not x in [’1’..’9’]

then 

writeln(’x nie jest cyfrą’);

if 

a=b

then  begin 

writeln(’a i b są takie same’ );

obwod:=4*a;
end;

warunek

instrukcja

FAŁSZ

PRAWDA

warunek

instrukcja

False

True

background image

instrukcja warunkowa daje 

zazwyczaj możliwość wyboru 

wariantów 

program instr_if1;

{$APPTYPE CONSOLE}

Uses   SysUtils;

var a,b,c,max : Single;

begin

write('Podaj a ');   readln(a);

write('Podaj b ');   readln(b);

write('Podaj c ');   readln(c);

if a>=b then if a>=c then max:=a

else max:=c

else if b>=c then max:=b

else max:=c;

write('Mmax(a,b,c) = ',max:4:1); Readln;

end.

background image

Program progr3;
{$APPTYPE CONSOLE}
uses   SysUtils;

var

ocena: byte;

begin

write(' Podaj ocenę ');
readln(ocena);

if ocena=6 then writeln('celujący')

else if ocena=5 then writeln('bardzo dobry')

else if ocena=4 then writeln('dobry')

else if ocena=3 then writeln('dostateczny')

else if ocena=2 then writeln('mierny')

else if ocena=1 then writeln('niedostateczny')

else writeln('Błędne dane');

readln;

End.

background image

Instrukcja wyboru 

case - of

Występujące w tej instrukcji wyrażenie nazywane jest 

selektorem. 

Jego wartość musi być typu porządkowego. 
Sekwencja instrukcji wyboru zbudowana jest z ciągu 

instrukcji.

Każda z nich jest poprzedzona jedną lub kilkoma stałymi 

wyboru oddzielanymi przecinkami po których występuje 
dwukropek. Stałe wyboru przyjmują jedną z dwóch 
postaci. 

background image

Instrukcja wyboru 

case - of

case

of

wybór: ciąg instrukcji

else

wyrażenie 

ciąg instrukcji

end

case 

wyrażenie 

of 

wybór: ciąg inst

rukcji

end;

case 

wyrażenie 

of 

wybór: ciąg inst

rukcji

else  

instrukcja  

end

background image

Instrukcja wyboru case - of

program instr_case1;
{$APPTYPE CONSOLE}

uses   SysUtils;
var znak : char;
begin
write('Proszę wpisać dowolny znak : ');

readln(znak);
case znak of

'0' .. '9'  : writeln('wpisano cyfrę !');
'A' .. 'Z' :  writeln('napisano dużą literę !');
'a' .. 'z'   : writeln('napisano małą literę !');

'='    : writeln('napisano znak równości!');
'-'   : writeln('napisano znak minus');

else

write('napisano inny znak ')

end;
readln

end.

background image

Instrukcja wyboru case - of

program instr_case2;

{ program wczytuje ocenę jako cyfrę i podaje jej słowną interpretację}

{$APPTYPE CONSOLE}

uses sysUtils;
var ocena:byte;
begin

write(' Podaj ocene ');
readln(ocena);
case ocena of

6: writeln('celujący');
5: writeln('bardzo dobry');
4: writeln('dobry');
3: writeln('dostateczny');
2: writeln('mierny');
1: writeln('niedostateczny')

End;
readln
end.

background image

Program Kalkulator;
{ program na uzycie instr CASE i operatorów arytmet}
{$APPTYPE CONSOLE}
uses sysUtils;
var

Liczba1, Liczba2, Wynik : Double;
Dzialanie : char;

BEGIN

Write('Podaj pierwsza liczbe: ');
Readln(Liczba1);                        //czytanie liczb z klawiatury }
Write('Podaj druga liczbe: ');
Readln(Liczba2);
Write('Rodzaj dzialania (+ - * /): ');
Readln(Dzialanie);               

{czytanie znak dzialania }

Case Dzialanie OF                

{ jakie dzialanie ? }

'+' : Wynik:=Liczba1+Liczba2;    { dodawanie }
'-' :  Wynik:=Liczba1-Liczba2;     { odejmowanie }
'*' :  Wynik:=Liczba1*Liczba2;     { mnozenie }
'/' :  Wynik:=Liczba1/Liczba2;

ELSE   Writeln('Bledny symbol dzialania');

END; { Case }
Writeln('wynik=',wynik:4:1);
readln;

END.

background image

Instrukcje pętli

Pętla - inaczej instrukcja cykliczna powodująca, że pewna 
sekwencja działań będzie wielokrotnie powtarzana
Pętle służą do iteracyjnego wykonywania pewnych 

kroków
Zazwyczaj mamy dostępne dwa rodzaje pętli:

pętle wykonujące się określoną liczbę razy

pętle wykonujące się do momentu spełnienia 

pewnego warunku

background image

Pętle wykonujące się określoną liczbę razy

for - to - do  (instrukcja „dla”)

Musimy z góry znać liczbę powtórzeń pętli
W pętli funkcjonuje pewna zmienna, zwana licznikiem pętli, 

„pamiętająca” ile razy pętla została wykonana

for

licznik_petli := początek 

to

koniec  

do

zawartość_pętli; 

for

licznik_petli := koniec  

downto

początek  

do

zawartość_pętli; 

licznik pętli należy wcześniej zadeklarować (zmienna typu 

porządkowego, np. integer)

przy pętlach „do tyłu” pierwszą podajemy wartość 

większą 

jeśli zawartość pętli to kilka instrukcji, to grupujemy je za 

pomocą 

begin ... end

background image

Pętla  for - to - do 

for

to

downto

Licznik_pętli := wyrażenie1

instrukcja

wyrażenie2

do

background image

Pętla  for - to - do 

-

Wartość początkowa = Wartości końcowej

Instrukcja „dla” zostanie wykonana tylko jeden raz,    po czym przerywa swoją pracę.

-

Wartość początkowa < Wartości końcowej

-

Instrukcja „dla” zostanie wykonywana tak długo, aż

wartość  początkowa osiągnie 

-

wartość  równą    wartości końcowej.

-

Wartość początkowa > Wartości końcowej

-

Instrukcja „dla” nie zostaje wykonana ani razu.

background image

Pętla  for - to - do 

program prog6;
{$APPTYPE CONSOLE}

var 

liczba : integer;
silnia, licznik : longint;

begin

write(' Podaj liczbę całkowitą aby obliczyć wartość silni ?  ');
readln(liczba);

silnia:=1;
for licznik:=1 to liczba do silnia:=silnia*licznik;

writeln(' Wartość silni dla ',liczba : 6,' wynosi ', silnia)

end.

-

background image

Pętle których wykonanie zależy od warunku

Pętla wykonuje się: 

„dopóki” zachodzi pewien warunek

lub 

„aż do momentu” zajścia pewnego warunku

background image

W pętlach wykonujących się dopóki zachodzi 

pewien warunek:

warunek sprawdzamy przed pierwszym 

wykonaniem instrukcji wewnątrz pętli, a więc pętla 

może nie być wykonana ani razu

W pętlach wykonujących się aż do momentu 

zajścia pewnego warunku

warunek sprawdzamy PO pierwszym wykonaniu 

instrukcji wewnątrz pętli, a więc pętla będzie 

wykonana przynajmniej 1 raz

background image

Pętla  ”dopóki” –

„dopóki zachodzi warunek wykonuj instrukcje..”

instrukcja

warunek

Fałsz

Prawda

while

do

instrukcja

wyrażenie logiczne

Instrukcja „dopóki”

Schemat pętli „dopóki”

while

warunek 

do  

instrukcje;

background image

Pętal „

while

jeśli zawartość pętli „

while

” to kilka instrukcji, 

to grupujemy je za pomocą 

begin ... End

Cechy pętli  

while

służy do organizacji obliczeń, które będą wykonywane 

tak długo jak wyrażenie znajdujące się po słowie „

while

” jest prawdą. 

1) warunek logiczny pętli sprawdzany jest na początku
2) instrukcja jest wykonywana tak długo dopóki warunek

logiczny przyjmuje wartość True

3) jeśli warunek jest fałszem przy pierwszym sprawdzeniu

to instrukcja nie będzie wykonana ani razu

4) każdorazowe wykonanie instrukcji nazywa się iteracją
5) Jeżeli  warunek  logiczny nigdy 

nie przyjmuje

wartość True

to pętla będzie wykonywana w nieskończoność!!! ( 

błąd

)

background image

Pętla while 

Przykłady 

Wypisz dziesięć liczb począwszy od 0

program prog7;
{$APPTYPE CONSOLE}

uses   SysUtils;
var 

x : integer;

begin

x:=0;

while  x<10  do

begin

writeln(x);

x:=x+1;

end;

readln
end.

background image

Pętla while 

Przykłady 

Oblicz ile trzeba dodać kolejnych liczb naturalnych aby ich suma była 

większa od podanej liczby 

program prog8;
program Project1;

{$APPTYPE CONSOLE}

var  n,licznik,suma : SmallInt;

begin

write(' Podaj liczbę całkowitą ?  ');

readln(n);

licznik:=0;

suma:=0;

while suma<=n  do

begin

licznik:=licznik+1;
suma:=suma+licznik;

end;

writeln(' liczba kolejnych liczb  ', licznik);

background image

Pętla while 

Przykłady  Algorytm Euklides

Oblicz NWD –największy wspólny dzielnik

program prog1_NWD;
{$APPTYPE CONSOLE}

var  n,m: SmallInt;

begin

write(' Podaj liczbę całkowitą n: ');

readln(n);

write(' Podaj liczbę całkowitą m:  ');

readln(m);

while m <> n do

if m > n then   m:= m-n

else    n:=n-m;

writeln(' NWD wynosi:  ', n);

readln;

end.

n,m

start

stop

background image

Pętla while 

Przykłady  Algorytm Euklides

Oblicz NWD –największy wspólny dzielnik

program prog92_NWD;

{$APPTYPE CONSOLE}

var n,m,k : integer;
begin
readln(n,m);
k:=m;
while (n mod k<>0) or (m mod 

k<>0) do k:=k-1;

writeln(k);
reaDLN;
end.

start

k=k-1

n mod k <>0

Lub m mod k <>0

N

T

n,m

k=m

NWD=k

stop

background image

Pętla „powtarzaj 

powtarzaj ... do czasu zajścia warunku”

Repeat

instrukcje 

until

warunek

instrukcja

warunek

Fałsz

Prawda

repeat

until

instrukcja

wyrażenie logiczne

Schemat pętli „powtarzaj aż do”

background image

Pętla „powtarzaj 

powtarzaj ... do czasu zajścia warunku”

Repeat

instrukcje 

until

warunek

1) warunek logiczny pętli sprawdzany jest na końcu
2) ciąg instrukcji jest wykonywany tak długo aż warunek logiczny 

przyjmuje wartość False

3) ciąg instrukcji będzie zawsze wykonany przynajmniej raz
4) Wyjście z instrukcji jest następuje aż warunek logiczny przyjmuje 

wartość True

5) Aby zapewnić wyjście z pętli

trzeba zadbać aby warunek choć raz 

osiągnął  wartość True

background image

Repeat until

program prog10;
{$APPTYPE CONSOLE}
var

i, k : integer;
n, x  :Double;

begin

write(' Podaj podstawę n: ');

readln(n);

write(' Podaj wykładnik k:  ');

readln(k);

x:=1;

i:=1;

repeat

x:= x*n;

i:= i+1;

until  i>k;

writeln(' k-

ta potęga liczby n 

wynosi: ', x);

Readln;

end.

background image

Repeat until

Program Sumuje wyrazy szeregu 1/k z zadaną 

dokładnością  eps

program prog11;
const eps=0.0001; 
Var

n     :word
suma, x,  :Double;

begin

suma:=0;

n:=1 

repeat

x:= 1/n;

suma:=suma+x; 
n:=n+1

unitl  x < eps;

writelm(

'

k-

ta potęga liczby n wynosi: 

'

, suma);

Readln;

end.

background image

Repeat until

Program czyta znaki 

klawiatury i podaje  ich 
kod

Oraz czyta tylko liczby 

Program prog12a;
{$APPTYPE CONSOLE}
var  zn: char;

begin

repeat

readln(zn);

writeln(zn,' ',byte(zn));

until  zn =#13;

writeln('był Enter' );

readln;

end.

//Program nie czyta liczb 

Program prog12b;
{$APPTYPE CONSOLE}

var  zn: char;

begin

repeat

readln(zn);

writeln(zn,' 

',byte(zn));

until  (zn>='0')and(zn<='9');

writeln('była liczba' );

readln;

end.

background image

Repeat until

Złe użycie petli

Program prog13;
var  zn
:  char;

k, x: byte;

begin

k:=5;

repeat

writeln(k);

k:=k-1;

until 

k > 5; 

//warunek nigdy nie spełniony

k:=5; x:=0;

repeat

writeln(k);

x:=x+1/k;

until 

k < 0; 

//warunek nigdy nie 

spełniony

readln;
end.

Program czyta tylko liczby 

Program czytja_cyfry   ;
{$APPTYPE CONSOLE}

var  zn: char;

begin

repeat

readln(zn);

writeln(zn,' ',byte(zn));

until  not 

((zn>='0')and(zn<='9'));

writeln(‘ nie była liczba' );

readln;

end.

background image

Repeat until

NWD: kolejna wersja 

–szybka 

Program prog14_NWD;
{$APPTYPE CONSOLE}
var n,m,k : integer;
begin

Write('n=');readln(n);
Write('m=');Readln(m);
If n<m then

begin

k:=m; m:=n; n:=k

end;

repeat

k:= n mod m;
n:=m;

m:=k

until k=0;
write('NWD=',n);

Readln;
end.

start

stop

background image

Którą pętlę użyć

program p17;
const  n=7;
var     s
licznik: Longint;

begin

s:=1;
licznik:=1;
repeat

s := s*licznik;
licznik := licznik+1;

until licznik>n;
write(

'

silnia= 

'

s);

end.

program p16;
const  n=7;
var  s
,licznik:longint;

begin

:= 1;
for 
licznik:=2 to do 

s:=s*licznik;

write(

'

silnia= 

'

s);

end.

program p18;
const  n=7;
var s
,licznik:longint;

begin

s:=1;
licznik:=2;
while licznik<=n do

begin

s := s*licznik;
licznik := licznik+1

end;

write(

'

silnia= 

'

s);

end.

• Jeśli instrukcja ma być wykonana określoną liczbę razy wybierz for

• Jeśli warunkiem przerwania pętli jest wyrażenie logiczne i instrukcja ma być 
wykonana  przynajmniej raz wybierz repeat

• Jeśli warunkiem przerwania pętli jest wyrażenie logiczne i nic nie wiadomo o 
pierwszym  wykonaniu wybierz while

• Jeśli masz  wątpliwości wybierz while

background image

while

wyrażenie

do

begin

Instr1;
if

warunek

then

continue

;

Instr2;
Instr3;

end;

while 

wyrażenie

do

begin

Instr1;
if

warunek

then

break

;

Instr2;
Instr3

end;

Instr4;

W jaki  zmienić realizację pętli  
- procedury standardowe Continue i Break

- jeżeli wartość wyrażenia 

warunek

będzie prawdą

to wszystkie instrukcje w danej iteracji  występujące

po wywołaniu procedury 

continue

zostaną pominięte; 

następnie rozpoczyna się kolejny  krok instrukcji pętli

.

-jeżeli wartość wyrażenia 

warunek

będzie 

prawdą  to nastąpi natychmiastowe 

przerwanie  procesu  iteracji;

następną wykonaną instrukcją będzie 

pierwsza    instrukcja poza pętlą Instr4.

Procedury 

continue break

mogą być wywoływane tylko wewnątrz pętli. 

Mogą być użyte wewnątrz każdej instrukcji złożonej występującej 
w pętlach forrepeat oraz while
Użycie tych procedur poza instrukcjami pętli spowoduje błąd kompilacji.