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 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 akcja A i:=i+1 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 akcja A i:=i-1 tak Czy i=koniec? nie PROGRAMY: CW. 1 Napisz program, wyświetlający napis TURBO PASCAL 15 razy. program turbo_pascal; var i :word; for i:=1 to 15 do writeln ('TURBO PASCAL ); CW.2 Napisz program, który wypisze liczby od 1 do 10. program liczby; var i : byte; for i:=1 to 10 do {pętla zlicza w górę od 1 do 10} write (i, ); Przygotowanie do sprawdzianu nr 3 2
CW.3 Napisz program, który wypisze liczby w dół od 10 do 1. program liczby_w_dol; var i : byte; for i:=10 downto 1 do {pętla zlicza w dół od 10 do 1} write (i, ); CW.4 Napisz program realizujący wyświetlanie liczb naturalnych nieparzystych od 1 do 21. program petelka; var i: word; for i:=1 to 21 do if (i mod 2<>0) then write(i, ); 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; suma:=0; writeln ( Podaj liczbę wprowadzanych liczb: ); readln (liczba); for i:=1 to liczba do writeln( Podaj liczbe,i, = ); readln (a); suma:=suma+a; writeln ( Suma podanych liczb wynosi, suma); Przygotowanie do sprawdzianu nr 3 3
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; writeln( Podaj wymiary trójkąta ); for i:=1 to 5 do 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 ); 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
for i:=1 to 2 do writeln ( *** *** *** *** ); for j:=1 to 2 do writeln ( *** *** *** *** ); 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 for j:=1 to m do 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; writeln ( Podaj wymiary prostokąta ); writeln ( Podaj n ); readln (n); writeln ( Podaj m ); readln (m); for i:=1 to n do for j:=1 to m do write ( x ); 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; suma:=0; writeln ( Podaj liczba ); readln (liczba); Przygotowanie do sprawdzianu nr 3 6
while (liczba <> 0) do suma:=suma+liczba; writeln ( Podaj liczba ); readln (liczba); writeln ( Suma liczb =, suma); 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 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; suma:=0; writeln ( Podaj liczba ); readln (liczba); while (suma < 100) do suma:=suma+liczba; writeln ( Suma liczb wynosi, suma); writeln ( Podaj liczba ); readln (liczba); 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; writeln ( Podaj liczba a ); readln (a); writeln ( Podaj liczba b ); readln (b); while (b <> 0) do 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 ); CW 4 Napisz program wyświetlający liczby naturalne od 1 do 23. program cw_4; var i: integer; i:=0; while (i < 23) do i:=i+1; writeln (i); 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; i:=25; while (i < 51) do writeln (i); i:=i+1; Postać pętli repeat w Pascalu: repeat {blok instrukcji} until warunek Instrukcja pętli Repeat... until 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; suma:=0; repeat writeln ( Podaj liczba ); readln (liczba); suma:=suma+liczba; until (liczba=0); writeln ( Suma liczb =, suma); 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 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 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; suma:=0; repeat writeln ( Podaj liczba ); readln (liczba); suma:=suma+liczba; writeln ( Suma liczb wynosi, suma); until (suma>100); 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; repeat writeln ( Podaj liczba a ); readln (a); writeln ( Podaj liczba b ); readln (b); if (b=0) then writeln ( Dzielenie przez zero jest niewykonalne ) else iloraz:=a/b; writeln ( Iloraz wynosi =, iloraz:5:2); until (b=0); 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; i:=0; repeat i:=i+1; writeln (i); until (i>23); CW 5 Napisz program wyświetlający liczby naturalne od 25 do 50. program cw_5; var i: integer; i:=25; repeat writeln (i); i:=i+1; until (i>50); CW 6 Napisz program, który wyświetli 15 razy napis TURBO PASCAL program cw_6; var i: integer; i:=0; repeat i:=i+1; writeln ( TURBO PASCAL ); until (i=15); readln; 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; suma:=0; repeat 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); until (decyzja <> T ); Porównanie pętli for, while i repeat Pętla for while repeat Sterowana... licznikiem warunkiem warunkiem Liczba z góry określona nieznana z góry nieznana z góry przebiegów Minimalna liczba przebiegów Zero (moŝe nie wykonać się ani razu) Zero (moŝe nie wykonać się ani razu) Jeden (musi wykonać się co najmniej raz) Zastosowania Obliczenia dla z góry określonej liczby wartości; przetwarzanie ciągów (tablic) liczb i znaków 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} case przypadek Zapamiętaj: Instrukcja wyboru case kończy się słowem kluczowym 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 x 1, x 2, x 3 itd. muszą być takŝe liczbami całkowitymi. Schemat działania instrukcji case of case x of x 1 : A 1 ; x 2 : A 2 ; x 3 : A 3 ;... x n : A n ; Sprawdzenie warunku X x=x 1 x=x 2 x=x 3 x=x n akcja A 1 akcja A 2 akcja A 3 akcja A n... Przygotowanie do sprawdzianu nr 3 14
CW. 1 Napisz program realizujący czterodziałaniowy kalkulator. program kalkulator; var wybor: byte; a, b, suma, roznica, iloraz, iloczyn: real; 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: suma:=a+b; writeln('suma podanych liczb wynosi =',suma:10:2); 2: roznica:=a-b; writeln('roŝnica podanych liczb wynosi=',roznica:10:2); 3: iloczyn:=a*b; writeln('iloczyn podanych liczb wynosi =',iloczyn:10:2); 4: iloraz:=a/b; writeln('iloraz podanych liczb wynosi=',iloraz:10:2); end else writeln ('Błędny symbol działania'); readln; 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; 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 '+': suma:=a+b; writeln('suma podanych liczb wynosi =',suma:10:2); '-': roznica:=a-b; writeln('roŝnica podanych liczb wynosi=',roznica:10:2); '*': iloczyn:=a*b; writeln('iloczyn podanych liczb wynosi =',iloczyn:10:2); '/': iloraz:=a/b; writeln('iloraz podanych liczb wynosi=',iloraz:10:2); end else writeln ('Błędny symbol działania'); readln; 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; 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: writeln('styczeń'); 2: writeln('luty'); 3: writeln('marzec'); 4: writeln('kwiecień'); 5: writeln('maj'); 6: writeln('czerwiec'); 7: writeln('lipiec'); Przygotowanie do sprawdzianu nr 3 17
8: writeln('sierpień'); 9: writeln('wrzesień'); 10: writeln('paŝdziernik'); 11: writeln('listopad'); 12: writeln('grudzień'); end else writeln ('Nie ma takiego miesiąca'); readln; Do programu wskazówki: JeŜeli blok instrukcji składa się z pojedynczej instrukcji, słowa kluczowe 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; 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'); readln; 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; 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'); readln; 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; 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: 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); 2: writeln ('Podaj bok a prostokata'); readln (a); writeln ('Podaj bok b prostokata'); readln (b); P:=a*b; writeln('pole prostokata wynosi =',P:10:2); 3: 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); 4: 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'); readln; Przygotowanie do sprawdzianu nr 3 20