INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU Instrukcja pętli For to do

Transkrypt

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU Instrukcja pętli For to do
INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU
Instrukcja pętli For to do
Instrukcja ta określa dokładnie ile razy zostanie powtórzony dany ciąg instrukcji.
Postać pętli for w Pascalu:
for zmienna : = początek to koniec do
{ blok instrukcji }
- zliczanie w górę
lub:
for zmienna := początek downto koniec do
{ blok instrukcji }
- zliczanie w dół
WaŜne:
Zmienna, której wartość jest sprawdzana w pętli nosi nazwę zmiennej
sterującej lub licznika. Musi ona być typu całkowitego (integer, byte, word,
longint), znakowego (char) lub logicznego (boolean).
Pętla for pozwala zliczać w górę z krokiem 1 lub w dół z krokiem -1.
W pętli for liczba przebiegów jest z góry określona.
JeŜeli blok instrukcji składa się z pojedynczej instrukcji, słowa kluczowe
begin i end moŜna pominąć.
Schemat blokowy pętli for i:=początek to koniec do {blok instrukcji}
for i:=początek to koniec do A
i:=początek
i:=i+1
akcja A
tak
Czy
i=koniec?
nie
Przygotowanie do sprawdzianu nr 3
1
For – dla. To – do.
Schemat blokowy pętli for i:=początek downto koniec do {blok instrukcji}
for i:=początek downto koniec do A
i:=początek
i:=i-1
akcja A
tak
Czy
i=koniec?
nie
PROGRAMY:
CW. 1 Napisz program, wyświetlający napis TURBO PASCAL 15 razy.
program turbo_Pascal;
var i :word;
begin
for i:=1 to 15 do
writeln ('TURBO PASCAL’);
end.
CW.2 Napisz program, który wypisze liczby od 1 do 10.
program liczby;
var i : byte;
begin
for i:=1 to 10 do {pętla zlicza w górę od 1 do 10}
begin
write (i, ‘ ‘ );
Przygotowanie do sprawdzianu nr 3
2
end;
end.
CW.3 Napisz program, który wypisze liczby w dół od 10 do 1.
program liczby_w_dol;
var i : byte;
begin
for i:=10 downto 1 do
begin
write (i, ‘ ‘ );
end;
end.
{pętla zlicza w dół od 10 do 1}
CW.4 Napisz program realizujący wyświetlanie liczb naturalnych nieparzystych od 1 do 21.
program petelka;
var i: word;
begin
for i:=1 to 21 do
begin
if (i mod 2<>0) then
write(i, ‘ ‘);
end;
end.
CW.5 Napisz program, który obliczy i wyświetli sumę dla n podanych przez uŜytkownika
liczb. Liczba wprowadzanych liczb podawana jest w programie.
program suma_z_liczb;
var liczba, i: integer;
suma, a: real;
begin
suma:=0;
writeln (‘Podaj liczbę wprowadzanych liczb: ’);
readln (liczba);
for i:=1 to liczba do
begin
writeln(‘Podaj liczbe’ ,i, ‘=’);
readln (a);
suma:=suma+a;
end;
writeln (‘Suma podanych liczb wynosi’, suma);
Przygotowanie do sprawdzianu nr 3
3
end.
CW.6 Napisz program sprawdzający czy z odcinków o długościach wprowadzanych przez
uŜytkownika z klawiatury moŜna zbudować trójkąt (warunek istnienia trójkąta). Liczby
zadeklaruj jako byte. Program ma sprawdzić 5 takich trójek liczb i zaleŜnie od rezultatu
wyprowadzić komunikaty: ,,moŜna zbudować trójkąt” lub ,,nie moŜna zbudować trójkąta”.
Warunek istnienia trójkąta
Z danych trzech odcinków o długości a, b i c moŜna zbudować trójkąt, jeŜeli:
a<b+c
b<a+c
c<b+a
c>b-a
a>c-b
b>c-a
program warunek_trojkat;
var a, b, c, i : byte;
begin
writeln(‘Podaj wymiary trójkąta’);
for i:=1 to 5 do
begin
writeln (‘Podaj bok a :’);
readln (a);
writeln (‘Podaj bok b :’);
readln (b);
writeln (‘Podaj bok c :’);
readln (c);
if (a<b+c) then
writeln (‘Z podanych liczb moŜna zbudować trójkąt’)
else
writeln (‘Z podanych liczb nie moŜna zbudować trójkata’);
end;
end.
CW.7 Program szachownica – napisz program, który na ekranie monitora wyrysuje za
pomocą znaku * ,,szachownicę”.
program szachownica;
var i , j :integer;
Przygotowanie do sprawdzianu nr 3
4
begin
for i:=1 to 2 do
writeln (‘*** *** *** *** ‘);
for j:=1 to 2 do
writeln (‘ *** *** *** ***’);
end.
Pętle zagnieŜdŜone
Instrukcje iteracyjne for mogą się zagnieŜdŜać, czyli po słowie do w bloku instrukcji moŜe
wystąpić kolejna instrukcja iteracyjna for (pętla w pętli) np.
for i:=1 to n do
begin
for j:=1 to m do
end;
CW.8 Napisz program, który umoŜliwi wyprowadzenie na ekran monitora ,,prostokąta”
narysowanego za pomocą znaków ,,x” o bokach n i m (m – liczba znaków ,,x’’ w poziomie, n
– liczba znaków ,,x’’ w pionie). Liczba kroków tej iteracji określona jest przez iloczyn: n *m.
program Prostokat;
var i, j, m, n: integer;
begin
writeln (‘Podaj wymiary prostokąta’);
writeln (‘Podaj n’);
readln (n);
writeln (‘Podaj m’);
readln (m);
for i:=1 to n do
begin
for j:=1 to m do
write (‘x’);
end;
end.
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
Przygotowanie do sprawdzianu nr 3
5
Instrukcja pętli while
Postać pętli while w Pascalu:
while warunek do
{blok instrukcji}
Konstrukcja pętli w mowie potocznej:
Dopóki jest spełniony warunek, wykonuj blok instrukcji.
Schemat blokowy pętli while
while X do A
akcja A
nie
Czy
zachodzi
warunek X
tak
while – dopóki
WaŜne: W pętli while warunek sprawdzany jest na początku, czyli przed
pierwszym wykonaniem instrukcji. Wynika stąd, Ŝe pętla while moŜe nie wykonać
się ani razu. Liczba kroków w pętli while nie jest z góry określona.
CW. 1 Napisz program, który czyta kolejne liczby i liczy ich sumę aŜ do wpisania wartości 0.
program cw_1;
var suma, liczba: integer;
begin
suma:=0;
writeln (‘Podaj liczba’);
readln (liczba);
Przygotowanie do sprawdzianu nr 3
6
while (liczba <> 0) do
begin
suma:=suma+liczba;
writeln (‘Podaj liczba’);
readln (liczba);
end;
writeln (‘Suma liczb = ‘, suma);
end.
Do programu wskazówki:
→ Do programu powinniśmy wprowadzić przynajmniej jedną liczbę, stąd instrukcje
writeln (‘podaj liczba’) i readln (liczba); które podajemy jeszcze przed pętlą while i
warunkiem. W ten sposób pętla wykona się co najmniej raz (wskazówka: do tego typu
zadań najlepsza jest pętla repeat).
→ Zmienna suma została zadeklarowana wartością początkową równą zero. W ten
sposób unikniemy błędów które mogą pojawić się przy pierwszym sumowaniu, gdzie
moŜe nastąpić sumowanie z zupełnie przypadkową wartością.
→ Pamiętaj o inicjalizowaniu zmiennych.
→ W przypadku wykonywania więcej niŜ jednej instrukcji pętla while wymaga uŜycia
słów kluczowych begin i end (blok instrukcji).
CW 2. Napisz program, który będzie odczytywał z klawiatury kolejne liczby, sumował je i
wyświetlał sumę aŜ do momentu, gdy przekroczy ona wartość 100.
program cw_2;
var suma, liczba: integer;
begin
suma:=0;
writeln (‘Podaj liczba’);
readln (liczba);
while (suma < 100) do
begin
suma:=suma+liczba;
writeln (‘Suma liczb wynosi’, suma);
writeln (‘Podaj liczba’);
readln (liczba);
end;
end.
Przygotowanie do sprawdzianu nr 3
7
CW_3 Napisz program, który będzie wczytywał z klawiatury kolejne pary liczb i obliczał ich
iloraz, dopóki druga liczba nie będzie równa zero. Dla b równego zero program ma
wyprowadzić komunikat o treści ,,dzielenie przez zero jest niewykonalne’’ i ma zakończyć
działanie.
program cw_3;
var a, b, iloraz: real;
begin
writeln (‘Podaj liczba a’);
readln (a);
writeln (‘Podaj liczba b’);
readln (b);
while (b <> 0) do
begin
iloraz:=a/b;
writeln (‘Iloraz wynosi = ’, iloraz:5:2);
writeln (‘Podaj liczba a’);
readln (a);
writeln (‘Podaj liczba b’);
readln (b);
if (b=0) then
writeln (‘Dzielenie przez zero jest niewykonalne’);
end;
end.
CW 4 Napisz program wyświetlający liczby naturalne od 1 do 23.
program cw_4;
var i: integer;
begin
i:=0;
while (i < 23) do
begin
i:=i+1;
writeln (i);
end;
end.
Przygotowanie do sprawdzianu nr 3
8
CW 5 Napisz program wyświetlający liczby naturalne od 25 do 50.
program cw_5;
var i: integer;
begin
i:=25;
while (i < 51) do
begin
writeln (i);
i:=i+1;
end;
end.
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
Instrukcja pętli Repeat ... until
Postać pętli repeat w Pascalu:
repeat
{blok instrukcji}
until warunek
Konstrukcja pętli repeat w mowie potocznej:
Powtarzaj blok instrukcji, aŜ zostanie spełniony warunek.
Schemat blokowy pętli repeat
repeat A until X
akcja A
tak
Czy
zachodzi
warunek X
nie
repeat – powtarzaj
until – aŜ do
Przygotowanie do sprawdzianu nr 3
9
WaŜne: Liczba kroków w pętli repeat nie jest z góry określona. Konstrukcja pętli
repeat wymusza wykonanie jej zawartości co najmniej raz.
Dodatkowe wiadomości:
Instrukcję repeat moŜna takŜe wykorzystać do chwilowego zatrzymania programu w celu
oczekiwania na naciśnięcie dowolnego klawisza, określonej litery lub konkretnego klawisza.
Stosujemy wtedy w programie instrukcję repeat until keypressed;
repeat
Instrukcja 1;
.....
Instrukcja n;
until KeyPressed;
CW. 1 Napisz program, który czyta kolejne liczby i liczy ich sumę aŜ do wpisania wartości 0.
program cw_1;
var suma, liczba: integer;
begin
suma:=0;
repeat
begin
writeln (‘Podaj liczba’);
readln (liczba);
suma:=suma+liczba;
end;
until (liczba=0);
writeln (‘Suma liczb = ‘, suma);
end.
Do programu wskazówki:
→ Zmienna suma została zadeklarowana wartością początkową równą zero. W ten
sposób unikniemy błędów które mogą pojawić się przy pierwszym sumowaniu, gdzie
moŜe nastąpić sumowanie z zupełnie przypadkową wartością.
→ Pamiętaj o inicjalizowaniu zmiennych.
→ W przypadku wykonywania więcej niŜ jednej instrukcji pętla while wymaga uŜycia
słów kluczowych begin i end (blok instrukcji). W przypadku pętli repeat są one
zbędne, gdyŜ słowa repeat i until są ogranicznikami bloku (nic się jednak nie stanie
jeśli w programie uŜyjesz bloku instrukcji begin i end).
Przygotowanie do sprawdzianu nr 3
10
CW 2. Napisz program, który będzie odczytywał z klawiatury kolejne liczby, sumował je i
wyświetlał sumę aŜ do momentu, gdy przekroczy ona wartość 100.
program cw_2;
var suma, liczba: integer;
begin
suma:=0;
repeat
begin
writeln (‘Podaj liczba’);
readln (liczba);
suma:=suma+liczba;
writeln (‘Suma liczb wynosi’, suma);
end;
until (suma>100);
end.
CW_3 Napisz program, który będzie wczytywał z klawiatury kolejne pary liczb i obliczał ich
iloraz, dopóki druga liczba nie będzie równa zero. Dla b równego zero program ma
wyprowadzić komunikat o treści ,,dzielenie przez zero jest niewykonalne’’ i ma zakończyć
działanie.
program cw_3;
var a, b, iloraz: real;
begin
repeat
begin
writeln (‘Podaj liczba a’);
readln (a);
writeln (‘Podaj liczba b’);
readln (b);
if (b=0) then
writeln (‘Dzielenie przez zero jest niewykonalne’)
else
begin
iloraz:=a/b;
writeln (‘Iloraz wynosi = ’, iloraz:5:2);
end;
end;
until (b=0);
end.
Przygotowanie do sprawdzianu nr 3
11
CW 4 Napisz program wyświetlający liczby naturalne od 1 do 23.
program cw_4;
var i: integer;
begin
i:=0;
repeat
begin
i:=i+1;
writeln (i);
end;
until (i>23);
end.
CW 5 Napisz program wyświetlający liczby naturalne od 25 do 50.
program cw_5;
var i: integer;
begin
i:=25;
repeat
begin
writeln (i);
i:=i+1;
end;
until (i>50);
end.
CW 6 Napisz program, który wyświetli 15 razy napis TURBO PASCAL
program cw_6;
var i: integer;
begin
i:=0;
repeat
begin
i:=i+1;
writeln (‘TURBO PASCAL’);
end;
until (i=15);
readln;
end.
Przygotowanie do sprawdzianu nr 3
12
CW 7 Napisz program, który będzie wczytywał z klawiatury kolejne pary liczb i obliczał ich
sumę. Wprowadź do programu instrukcje tak aby w zaleŜności od naciśniętego klawisza
moŜna było ponownie uruchomić program.
program cw_7;
var a,b, suma: integer;
decyzja: char;
begin
suma:=0;
repeat
begin
writeln (‘Podaj liczba a’);
readln (a);
writeln (‘Podaj liczba b’);
readln (b);
suma:=a+b;
writeln (‘Suma wynosi = ’, suma);
writeln (‘Jeszcze raz ? (T/N)’);
readln (decyzja);
end;
until (decyzja <>’T’);
end.
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
Porównanie pętli for, while i repeat
Pętla
Sterowana...
Liczba
przebiegów
Minimalna
liczba
przebiegów
Zastosowania
for
licznikiem
z góry określona
Zero (moŜe nie
wykonać się ani
razu)
Obliczenia dla z góry
określonej liczby
wartości;
przetwarzanie
ciągów (tablic) liczb i
znaków
while
warunkiem
nieznana z góry
repeat
warunkiem
nieznana z góry
Zero (moŜe nie
Jeden (musi
wykonać się ani
wykonać się co
razu)
najmniej raz)
Obliczenia dla nieznane z góry liczby
wartości; wielokrotne wykonywanie
fragmentów programu; obsługa menu;
WAśNE
•
Konstrukcja pętli repeat wymusza wykonanie jej zawartości co najmniej
raz, natomiast pętla while moŜe nie wykonać się ani razu.
•
W odróŜnieniu od pętli for, liczba przebiegów pętli repeat i while nie jest z
góry określona.
Przygotowanie do sprawdzianu nr 3
13
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
INSTRUKCJA WYBORU CASE
Do wyboru jednej z wielu ścieŜek wykonania programu słuŜy w Pascalu instrukcja wyboru
– case. Instrukcja wyboru case jest często stosowana w programowaniu interfejsu
uŜytkownika (wybór opcji z menu).
Postać instrukcji CASE
case wyraŜenie of
wartość_1 : {blok instrukcji 1};
wartość_2 : {blok instrukcji 2};
...
wartość_N : {blok instrukcji N}
WAśNE:
WyraŜenie, którego wartość steruje
wyborem, musi być typu porządkowego
(a więc nie moŜe być łańcuchem
[string] ani liczbą rzeczywistą [real])..
else
{blok instrukcji alternatywnych}
end;
case – przypadek
Zapamiętaj:
Instrukcja wyboru case kończy się słowem kluczowym end;
Etykiety występujące w instrukcji muszą być tego samego rodzaju co selektor. Np.
jeŜeli selektor x (patrz rysunek poniŜej) jest zmienną typu całkowitego (integer) to
etykiety x1, x2, x3 itd. muszą być takŜe liczbami całkowitymi.
Schemat działania instrukcji case of
case x of
x1 :
x2 :
x3 :
...
xn :
end;
A1 ;
A2 ;
A3 ;
An ;
x=x1
akcja A1
Sprawdzenie
warunku
X
x=x2
akcja A2
x=x3
akcja A3
Przygotowanie do sprawdzianu nr 3
x=xn
...
akcja An
14
CW. 1 Napisz program realizujący czterodziałaniowy kalkulator.
program kalkulator;
var wybor: byte;
a, b, suma, roznica, iloraz, iloczyn: real;
begin
writeln('podaj 1,2,3 lub 4');
writeln('w zaleŜności od tego co chcesz obliczyć');
writeln('1-suma dwóch liczb');
writeln('2-roznica');
writeln('3-iloczyn');
writeln('4-iloraz');
readln(wybor);
writeln('podaj pierwsza liczbe ');
readln(a);
writeln('podaj druga liczbe ');
readln(b);
case wybor of
1: begin
suma:=a+b;
writeln('Suma podanych liczb wynosi =',suma:10:2);
end;
2: begin
roznica:=a-b;
writeln('RoŜnica podanych liczb wynosi=',roznica:10:2);
end;
3: begin
iloczyn:=a*b;
writeln('Iloczyn podanych liczb wynosi =',iloczyn:10:2);
end;
4: begin
iloraz:=a/b;
writeln('Iloraz podanych liczb wynosi=',iloraz:10:2);
end
else
writeln ('Błędny symbol działania');
end;
readln;
end.
Przygotowanie do sprawdzianu nr 3
15
CW. 2 Napisz program realizujący czterodziałaniowy kalkulator. Sterowanie w programie ma
odbywać się za pomocą symboli +,-,*,/
program kalkulator_2;
var wybor: char;
a, b, suma, roznica, iloraz, iloczyn: real;
begin
writeln('Wybierz symbol działania');
writeln('w zaleŜności od tego co chcesz obliczyć');
writeln('+ suma dwóch liczb');
writeln('- roznica');
writeln('* iloczyn');
writeln('/ iloraz');
readln(wybor);
writeln('podaj pierwsza liczbe ');
readln(a);
writeln('podaj druga liczbe ');
readln(b);
case wybor of
'+': begin
suma:=a+b;
writeln('Suma podanych liczb wynosi =',suma:10:2);
end;
'-': begin
roznica:=a-b;
writeln('RoŜnica podanych liczb wynosi=',roznica:10:2);
end;
'*': begin
iloczyn:=a*b;
writeln('Iloczyn podanych liczb wynosi =',iloczyn:10:2);
end;
'/': begin
iloraz:=a/b;
writeln('Iloraz podanych liczb wynosi=',iloraz:10:2);
end
else
writeln ('Błędny symbol działania');
end;
readln;
end.
Przygotowanie do sprawdzianu nr 3
16
CW. 3 Napisz program, który po wpisaniu numeru miesiąca poda jego nazwę w języku
polskim.
program miesiace;
var wybor: byte;
begin
writeln('Podaj numer miesiąca');
writeln('1 - styczeń');
writeln('2 - luty');
writeln('3 - marzec');
writeln('4 - kwiecień');
writeln('5 - maj');
writeln('6 - czerwiec');
writeln('7 - lipiec');
writeln('8 - sierpień');
writeln('9 - wrzesień');
writeln('10 - październik');
writeln('11 - listopad');
writeln('12 - grudzień');
readln(wybor);
case wybor of
1: begin
writeln('Styczeń');
end;
2: begin
writeln('Luty');
end;
3: begin
writeln('Marzec');
end;
4: begin
writeln('Kwiecień');
end;
5: begin
writeln('Maj');
end;
6: begin
writeln('Czerwiec');
end;
7: begin
writeln('Lipiec');
Przygotowanie do sprawdzianu nr 3
17
end;
8: begin
writeln('Sierpień');
end;
9: begin
writeln('Wrzesień');
end;
10: begin
writeln('PaŜdziernik');
end;
11: begin
writeln('Listopad');
end;
12: begin
writeln('Grudzień');
end
else
writeln ('Nie ma takiego miesiąca');
end;
readln;
end.
Do programu wskazówki:
→ JeŜeli blok instrukcji składa się z pojedynczej instrukcji, słowa kluczowe begin i end
moŜna pominąć.
Dodatkowe wiadomości:
Instrukcja case pozwala uŜywać nie tylko pojedynczych wartości do definiowania akcji, ale
takŜe przedziałów wartości (granice przedziału naleŜy oddzielić dwiema kropkami). Ilustruje
to poniŜszy program:
CW. 4 Napisz program który czyta podaną liczbę i odgaduje czy jest ona jedno lub
wielocyfrowa.
program rodzajLiczby;
var liczba: integer;
begin
writeln('Podaj liczbe: ');
readln(liczba);
Przygotowanie do sprawdzianu nr 3
18
case liczba of
0..9 :
writeln('Podana przez ciebie liczba jest jednocyfrowa');
10..99 :
writeln('Podana przez ciebie liczba jest dwucyfrowa');
else
writeln ('Podana przez Ciebie liczba jest wielocyfrowa');
end;
readln;
end.
CW. 5 Napisz program który czyta podaną literę i odgaduje czy jest to mała bądź duŜa litera.
program rodzajLitery;
var litera: char;
begin
writeln('Podaj litere: ');
readln(litera);
case litera of
'a'.. 'z' :
writeln('Podana przez ciebie litera jest mała');
'A'.. 'Z' :
writeln('Podana przez ciebie litera jest duŜa');
else
writeln ('Podany przez ciebie znak nie jest litera');
end;
readln;
end.
CW. 6 Napisz program wyznaczający pola figur: trójkąta, prostokąta, koła i trapezu.
Wprowadź identyfikatory dla figur 1 – trójkąt, 2 – prostokąt, 3 – trapez, 4 – koło.
program Pola_figur;
var wybor: byte;
a, b, ,h, ,r, P: real;
const Pi=3.14;
begin
writeln('podaj 1,2,3 lub 4');
Przygotowanie do sprawdzianu nr 3
19
writeln('w zaleŜności od tego co chcesz obliczyć');
writeln('1-pole trojkata');
writeln('2-pole prostokata');
writeln('3-pole trapezu');
writeln('4-pole kola');
readln(wybor);
case wybor of
1: begin
writeln ('Podaj podstawe trojkata');
readln (a);
writeln ('Podaj wysokosc trojkata');
readln (h);
P:=0.5*a*h;
writeln('Pole trójkąta wynosi =',P:10:2);
end;
2: begin
writeln ('Podaj bok a prostokata');
readln (a);
writeln ('Podaj bok b prostokata');
readln (b);
P:=a*b;
writeln('Pole prostokata wynosi =',P:10:2);
end;
3: begin
writeln ('Podaj podstawe a trapeza');
readln (a);
writeln ('Podaj podstawe b trapeza');
readln (b);
writeln ('Podaj wysokość trapeza');
readln (h);
P:=((a+b)/2)*h;
writeln('Pole trapeza wynosi =',P:10:2);
end;
4: begin
writeln ('Podaj promien kola');
readln (r);
P:=Pi*r*r;
writeln('Pole kola wynosi =',P:10:2);
end
else
writeln ('Bład w danych – nie ma takiej opcji');
end;
readln;
end.
Przygotowanie do sprawdzianu nr 3
20