03 Pętle i warunki


Wstęp
do programowania
Wykład 3
instrukcje
Instrukcja warunkowa
if - then - else
Występuje w trzech wersjach:
jeśli warunek to instrukcja1
w_przeciwnym_wypadku instrukcja2
if warunek then instrukcja1
else instrukcja2;
False
warunek
FAASZ
PRAWDA True
warunek
instrukcja2
instrukcja1
instrukcja1 instrukcja2
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 !');
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;
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;
False
end;
warunek
FAASZ True
PRAWDA
warunek
instrukcja
instrukcja
instrukcja warunkowa daje
program instr_if1;
zazwyczaj możliwość wyboru
{$APPTYPE CONSOLE}
wariantów
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.
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.
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.
Instrukcja wyboru
case - of
wyrażenie
case of
wybór: ciąg instrukcji
case wyrażenie of
wybór: ciąg instrukcji
end;
else
case wyrażenie of
ciÄ…g instrukcji
wybór: ciąg instrukcji
else
instrukcja
end
end
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.
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.
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.
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
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;
wðlicznik pÄ™tli należy wczeÅ›niej zadeklarować (zmienna typu
porzÄ…dkowego, np. integer)
wðprzy pÄ™tlach  do tyÅ‚u pierwszÄ… podajemy wartość
większą
wðjeÅ›li zawartość pÄ™tli to kilka instrukcji, to grupujemy je za
pomocÄ… begin ... end
Pętla for - to - do
Licznik_pętli := wyrażenie1
for
to
wyrażenie2 instrukcja
do
downto
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.
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.
-
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
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
Pętla  dopóki 
 dopóki zachodzi warunek wykonuj instrukcje..
while warunek do instrukcje;
Schemat pętli  dopóki Instrukcja  dopóki
while
wyrażenie logiczne
Fałsz
warunek
do
Prawda
instrukcja
instrukcja
Pętal  while
wð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)
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.
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;
Pętla while
start
Przykłady Algorytm Euklides
Oblicz NWD  największy wspólny dzielnik
n,m
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.
stop
Pętla while
start
Przykłady Algorytm Euklides
Oblicz NWD  największy wspólny dzielnik
n,m
program prog92_NWD;
k=m
{$APPTYPE CONSOLE}
var n,m,k : integer;
N
begin
n mod k <>0
readln(n,m);
Lub m mod k <>0
k:=m;
while (n mod k<>0) or (m mod
NWD=k
T
k<>0) do k:=k-1;
k=k-1
writeln(k);
reaDLN;
stop
end.
Pętla  powtarzaj
wðpowtarzaj ... do czasu zajÅ›cia warunku
Repeat instrukcje until warunek;
Schemat pętli  powtarzaj aż do
repeat
instrukcja
instrukcja
wyrażenie logiczne
Prawda
until
warunek
Fałsz
Pętla  powtarzaj
wð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
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.
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.
Repeat until
//Program nie czyta liczb
Program czyta znaki
klawiatury i podaje ich
Program prog12b;
kod {$APPTYPE CONSOLE}
Oraz czyta tylko liczby
var zn: char;
Program prog12a;
begin
{$APPTYPE CONSOLE}
repeat
var zn: char;
readln(zn);
begin
writeln(zn,'
repeat
',byte(zn));
readln(zn);
until (zn>='0')and(zn<='9');
writeln(zn,' ',byte(zn));
until zn =#13;
writeln('była liczba' );
writeln('był Enter' );
readln;
readln;
end.
end.
Repeat until
Złe użycie petli
Program czyta tylko liczby
Program czytja_cyfry ;
Program prog13;
{$APPTYPE CONSOLE}
var zn: char;
k, x: byte;
begin
var zn: char;
k:=5;
repeat
begin
writeln(k);
repeat
k:=k-1;
readln(zn);
until k > 5;
writeln(zn,' ',byte(zn));
//warunek nigdy nie spełniony
until not
k:=5; x:=0;
repeat
((zn>='0')and(zn<='9'));
writeln(k);
writeln( nie była liczba' );
x:=x+1/k;
readln;
until k < 0;
end.
//warunek nigdy nie
spełniony
readln;
end.
Repeat until
start
NWD: kolejna wersja  szybka
Program prog14_NWD;
{$APPTYPE CONSOLE}
var n,m,k : integer;
begin
Write('n=');readln(n);
Write('m=');Readln(m);
If nbegin
k:=m; m:=n; n:=k
end;
repeat
k:= n mod m;
n:=m;
m:=k
until k=0;
write('NWD=',n);
Readln;
end.
stop
Którą pętlę użyć
" 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
program p18;
program p16; program p17;
const n=7;
const n=7; const n=7;
var s,licznik:longint;
var s,licznik:longint; var s, licznik: Longint;
begin
begin begin
s:=1;
s := 1; s:=1;
licznik:=2;
for licznik:=2 to x do licznik:=1;
while licznik<=n do
s:=s*licznik; repeat
begin
s := s*licznik;
write(' silnia= ', s);
s := s*licznik;
licznik := licznik+1;
end.
licznik := licznik+1
until licznik>n;
end;
write(' silnia= ', s);
write(' silnia= ', s);
end.
end.
W jaki zmienić realizację pętli
- procedury standardowe Continue i Break
while wyrażenie do
begin
while wyrażenie do
Instr1;
begin
if warunek then break;
Instr1;
Instr2;
if warunek then continue;
Instr3
Instr2;
end;
Instr3;
Instr4;
end;
-jeżeli wartość wyrażenia warunek będzie
- jeżeli wartość wyrażenia warunek będzie prawdą
prawdÄ… to nastÄ…pi natychmiastowe
to wszystkie instrukcje w danej iteracji występujące
przerwanie procesu iteracji;
po wywołaniu procedury continue zostaną pominięte;
następną wykonaną instrukcją będzie
następnie rozpoczyna się kolejny krok instrukcji pętli.
pierwsza instrukcja poza pętlą Instr4.
Procedury continue i 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 for, repeat oraz while.
Użycie tych procedur poza instrukcjami pętli spowoduje błąd kompilacji.


Wyszukiwarka

Podobne podstrony:
Bilet odcinkowy imienny warunki od 2013 03 06
98 03 W Wayt Gibbs (Nauka w skrajnych warunkach)
Kurs JavaScript instrukcje warunkowe i pętle
03 Międzynarodowe kartele warunkujące rozwój III Rzeszy
Warunki techniczne zmiana 2011 03 21 Dz U 2010 239 1597
03 Warunki organizacyjne, kadrowe
863 03
ALL L130310?lass101
Mode 03 Chaos Mode
42 30 Marzec 2000 Dialog na warunkach
2009 03 Our 100Th Issue

więcej podobnych podstron