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