Wprowadzenie komentarzy do programu Instrukcja wyboru CASE

Transkrypt

Wprowadzenie komentarzy do programu Instrukcja wyboru CASE
Wprowadzenie komentarzy do programu
W programach mogą wystąpić objaśnienia, uwagi zamykane w klamrach { } lub nawiasach z gwiazdką (* *). Komentarze
ułatwiają zrozumienie programów.
Przyjmijmy, że komentarze umieszczane w programach będziemy zamykali w nawiasach z gwiazdką (* *). Komentarze
nie są wyświetlane razem z wynikami działania programu, lecz pozostają w samych programach.
Ćwiczenie 32
Otworzyć z dyskietki plik o nazwie pole_4.pas zawierający program o nazwie „Pole_prostokata_4", a następnie go
uruchomić. Zmienić nazwę programu na „Pole_prostokata_kom". Wprowadzić objaśnienia w części dotyczącej instrukcji warunkowej. Zapisać program w pliku o nazwie kom_1.pas.
Cały program został przedstawiony poniżej:
PROGRAM Poleprostokata_4_kom;
USES Crt;
VAR
a,b, Pp : REAL;
BEGIN
CIrScr;
Writeln (' Obliczenie pola powierzchni prostokąta');
Writeln;
Write ('Podaj wartość boku a prostokąta - w cm, a= ');
Readln (a);
Writeln;
Write (' Podaj wartość boku b prostokąta - w cm, b= ');
Readln (b);
Writeln;
IF a*b>0 THEN (* warunek sprawdzający istnienie prostokąta - czy jednocześnie wartości
boków a oraz b sa większe od zera *)
BEGIN (* jeśli warunek jest spełniony, to zostaną wykonane instrukcje zamknięte
w bloku BEGIN END*)
Writeln;
Writeln (' Boki wynoszą a = ',a:6:2,' cm, b = ',b:6:2,' cm');
Pp:=a*b;
Writeln;
Write('Pp= ',Pp:10:2,'cm kw.');
END
ELSE
(* jeśli warunek istnienia prostokąta nie jest spełniony to zostanie wykonana instrukcja występująca
po ELSĘ *)
Write (' Prostokąt nie istnieje ')
END.
Instrukcja wyboru CASE
Instrukcja CASE znacznie uprości programy, w których była konieczność zastosowania większej liczby przypadków
dla instrukcji IF...THEN. Instrukcja ta umożliwia wybranie z wielu przypadków jednego, na podstawie odpowiedniej listy
zawierającej ich spis.
Instrukcja wyboru CASE ma postać:
CASE wyrażenia OF
wybór 1;
wybór 2;
…………………
wybór n
END;
Może wystąpić nieco inna postać tej instrukcji, czyli:
CASE wyrażenia OF
wybór_ 1,
wybór_ 2;
..... ;
wybór n
ELSE instrukcja
END;
W następnym ćwiczeniu wykorzystamy instrukcję CASE do wyboru odpowiedniego wzoru na obliczenie pola jednej
z trzech figur: kwadratu, koła lub trójkąta.
■ Ćwiczenie
Napisać program wyznaczający pola figur: kwadratu, kola i trójkąta.
Dla lepszego zrozumienia programu wprowadzimy odpowiednie objaśnienia. Program
ma tytuł „Pole _Figury_1". Zapisać program na dysku w pliku o nazwie figury _1.pas.
Przyjmijmy, że pierwszą figurą będzie prostokąt, drugą trójkąt, a trzecią koło. Wprowadzimy identyfikatory dla figur:
1 - prostokąt,
2 - trójkąt,
3 - koło.
Przypomnijmy wzory na pole powierzchni figur: Prostokąt: boki a i b, pole P - a » b .
Koło: przyjmijmy oznaczenie promienia jako a, pole P = 3.14 • a » a .
a•b
Trójkąt: podstawa a, wysokość b, pole P = ——.
Ł
Cały program został przedstawiony poniżej:
PROGRAM Polefigury; (*Program do wyznaczania pol figur*)
USES Crt;
VAR
figura : INTEGER;
a,b,P : REAL;
BEGIN
ClrScr;
Writeln (' Wyznaczenie pola figury ');
Writeln (‘1 - prostokąt, 2 - kolo, 3 - trójkąt');
Writeln;
Write ('Podaj typ figury geometrycznej : ');
Readln (figura);
CASE figura OF
1:BEGIN(* prostokąt *)
Writeln;
Writeln (' * Prostokąt *');
Write (' Podaj bok a - w cm, a= ');
Readln (a);
Write (' Podaj bok b - w cm, b= ');
Read (b); P:=a*b;
Writeln (' Boki prostokąta a = ',a:5:2,' cm oraz b = ',b:5:2 ,' cm');
Writeln (' Pole prostokąta P= ',P:6:2,'cm kw.');
END;
2:BEGIN(* kolo *)
Writeln;
Writeln (* Kolo *');
Write ('Podaj promień kola a-w cm, a= ');
Readln (a);
P:=PI*a*a;
Writeln (' Kolo o promieniu a = ',a:5:2,' cm');
Writeln (* Pole kola wynosi P= ',P:6:2,' cm kw.*);
END;
3:BEGIN(* trójkąt *)
Writeln;
Writeln ('* Trójkąt *');
Write (' Podaj podstawę trójkąta a - w cm, a= ');
Readln(a);
Write ('Podaj wysokość trójkąta b - w cm, b= ');
Readln(b);
P:=a*b/2;
Writeln (' Podstawa trójkąta a = ',a:5:2,' cm ');
Writeln (' Wysokość trójkąta b = ',b:5:2,' cm');
Write (' Pole trójkąta wynosi P= ',P:6:2,' cm kw.');
END;
ELSE
Writeln (' Blad w danych ')
END;
END.
Ćwiczenie
Napisać program obliczający sumę liczb naturalnych od 1 do n, sumę ich kwadratów oraz sumę ich sześcianów. Program
ma umożliwiać wybór jednego z tych trzech wariantów obliczeń. Wykorzystać w programie następujące wzory:
Program ma tytuł „Suma_liczb_1". Zapisać program na dysku w pliku o nazwie suma_l.pas. Dokonać obliczeń dla n=10.
Ćwiczenie
Napisać program przeliczający podaną wartość w jednej z trzech walut (dolary amerykańskie, marki niemieckie i złote) na
jedną z dwóch pozostałych. Program ma tytuł Waluta_1l". Zapisać program na dysku w pliku o nazwie waluta_l.pas.
Instrukcja pętli
W Turbo Pascalu istnieją trzy instrukcje powtórzeń:
•
Instrukcja „FOR...TO...DO" („Dla"),
•
Instrukcja „REPEAT...UNTIL" („Powtarzaj") oraz
•
Instrukcja „WHILE" („Dopóki").
W Turbo Pascalu mówimy o powtórzeniu wtedy, kiedy określony ciąg instrukcji musi zostać wielokrotnie powtórzony w
celu wykonania danego zadania.
Instrukcja FOR...TO...DO
Instrukcja ta określa dokładnie, ile razy zostanie powtórzony dany ciąg instrukcji. Zapis tej instrukcji jest następujący:
FOR zmienna : = wartość_ początkowa TO wartośc_ końcowa DO instrukcja.
Podana „instrukcja" może być zarówno pojedynczą instrukcją Turbo Pascala, jak i grupą instrukcji ujętych w „nawiasy"
BEGIN-END (co przedstawiono poniżej).
FOR zmienna : = wartość_ początkowa TO wartość_ końcowa DO
BEGIN
instrukcja_l;
instrukcja_2;
.......................................... *
instrukcja_k
END;
Zmienna nazywana jest zmienną sterującą instrukcji FOR. Musi ona być typu całkowitego, znakowego lub logicznego.
Przy wykonaniu instrukcji FOR, instrukcja wyszczególniona po słowie kluczowym DO wykonywana jest tyle razy, ile
wartości znajduje się w przedziale:
wartośc_ początkowa.... wartość_końcowa.
Poniżej przedstawiono przykładowy zapis instrukcji FOR:
FOR x: = 1 TO 10 DO BEGIN
y:=2*x;
Writeln ('x=',x ,' y=',y)
END;
Kolejno wartości x (od 1 do 10) będą podstawiane do wzoru, a następnie zostaną wyświetlone wraz z wynikiem obliczeń,
czyli otrzymamy:
x=l y=2
x=2 y=4
……………
x=10 y=20
Instrukcja FOR może również przybrać nieco inną postać, a mianowicie:
FOR zmienna := wartość_początkowa DOWNTO wartość_ końcowa DO instrukcja.
W tym przypadku zmienna sterująca przyjmuje kolejną wartość mniejszą od danej z przedziału wartość_ początkowa,
wartość końcowa. Należy pamiętać o tym, że krok w pętli wynosi odpowiednio 1 i -1.
Ćwiczenie 37
Napisać program realizujący wyświetlanie liczb naturalnych od 1 do 16. Program ma tytuł „ Liczby_1_16". Zapisać program
na dysku w pliku o nazwie liczby_1.pas.
W programie wystąpi zmienna sterująca x zliczająca liczbę przejść w instrukcji FOR, jednocześnie wyświetlana będzie jej
wartość. Zmienna sterująca przyjmuje kolejno wartość większą od poprzedniej z krokiem wynoszącym 1.
Zakończenie działania tej instrukcji nastąpi z chwilą wyświetlenia ostatniej wartości, czyli 16.
Cały program został przedstawiony poniżej:
PROGRAM Liczby_l_16;
USES
Crt;
VAR
x : INTEGER;
BEGIN
ClrScr;
Writeln (' Wyświetlanie liczb naturalnych od 1 do 16');
FOR x:=l TO 16 DO Write( ‘ ‘,x)
END.
Ćwiczenie 38
Napisać program realizujący wyświetlanie liczb naturalnych od 16 do 1. Program ma tytuł „Liczby_16_1". Zapisać program
na dysku w pliku o nazwie liczby_2.pas.
Ćwiczenie 39
Napisać program realizujący wyświetlanie liczb naturalnych nieparzystych od 1 do 21. Program ma tytuł „ Liczby_nie_1".
Zapisać program na dysku w pliku o nazwie nlicz_l.pas.
liczenie 40
napisać program realizujący obliczanie średniej arytmetycznej z podanych liczb. Liczba wprowadzanych liczb podawana jest
w programie. Program ma tytuł „Srednia_z_liczb_4". Zapisać program na dysku w pliku o nazwie sred_4.pas.
napisać program realizujący obliczanie średniej arytmetycznej. ' programie zastosujemy następujące
zmienne:
i
- sterująca pętlą powtórzeń,
liczba - określająca liczbę powtórzeń (wprowadzanych liczb),
a
- wartość wprowadzanej liczby,
suma - zliczająca sumę wprowadzanych liczb.
Zmienna suma zlicza sumę wprowadzanych liczb w celu późniejszego obliczenia ich średniej arytmetycznej. Na początku
zmiennej suma zostaje przypisana wartość zero za pomocą instrukcji:
suma:=0;
Podczas realizacji instrukcji powtarzania za każdym razem jest wykonywana instrukcja:
suma:=suma+a;
Zakończenie działania tej instrukcji nastąpi z chwilą wprowadzenia ostatniej liczby do uchomionego programu. Obliczona
zostanie wartość średniej arytmetycznej i wyświetlony wynik.
Cały program został przedstawiony poniżej:
PROGRAM Średnia z Iiczb_4;
USES Crt;
VAR
liczba, i : INTEGER;
suma : REAL;
BEGIN
ClrScr;
suma:=0; (* przypisanie wartości zero dla zmiennej suma *)
Writeln (' OBLICZENIE ŚREDNIEJ ARYTMETYCZNEJ ');
Writeln;
Write (' Podaj liczbę wprowadzanych liczb, i = ');
Readln (liczba);
FOR i:=l TO liczba DO
BEGIN Write(' Podaj liczbę a',i,' =');
Readln (a);
suma:=suma+a;
(*przypisanie zmiennej suma wartości równej sumie poprzednio wprowadzonych liczb powiększonej o wartość
następnej wprowadzonej liczby*)
END;
Writeln ('Średnia podanych ',liczba,' liczb wynosi ',suma/liczba:6:2);
END.
Ćwiczenie 41
Napisać program realizujący obliczanie wartości średniej geometrycznej z dwóch liczb rzeczywistych. Program ma tytuł
„Srednia_geometryczna_l". Zapisać program na dysku w pliku o nazwie sgeo_l.pas.
Instrukcja REPEAT
Kolejną instrukcją zawierającą cykl powtórzeń jest instrukcja REPEAT. Instrukcja ta ma postać:
REPEAT
instrukcja_1;
instrukcja_2;
……………..
instrukcja_n;
UNTIL warunek
Cechą charakterystyczną tej instrukcji jest to, że bez względu na wartość warunku musi zostać co najmniej raz
wykonana. Instrukcja REPEAT powoduje wykonanie wszystkich instrukcji umieszczonych pomiędzy słowem kluczowym
REPEAT a słowem kluczowym UNTIL. Wykonywanie tych instrukcji kończy się, jeśli wartość warunku jest TRUE, w
przeciwnym przypadku powtarzane jest ponownie.
Poniżej przedstawiono przykładowy zapis instrukcji REPEAT:
REPEAT
Readln(x);
x: = x+l;
UNTIL x>200;
Program będzie prosił o podanie kolejnych wartości x, jednocześnie je sumując, dopóki wartość sumy nie przekroczy
200.
Ćwiczenie 42
Napisać program obliczający średnią arytmetyczną wprowadzanych liczb z chwilą, gdy ich suma przekroczy wartość 150.
Program ma tytuł „Suma_150". Zapisać program na dysku w pliku o nazwie lsuma_l.pas.
Napisać program obliczający średnią arytmetyczną wprowadzanych liczb, aż do chwili, gdy ich suma nie przekroczy wartości
150.
Podczas realizacji instrukcji powtarzania za każdym razem jest wykonywana instrukcja:
suma:=suma+liczba;
oraz obliczana wartość licznika i.
Zakończenie działania tej instrukcji nastąpi z chwilą przekroczenia przez zmienną suma wartości 150. Wówczas obliczona
zostaje średnia arytmetyczna wprowadzonych liczb.
Cały program został przedstawiony poniżej:
PROGRAM Suma_150;
USES Crt;
VAR
liczba, suma, i:INTEGER;
BEGIN
ClrScr;
Writeln (' Obliczenie średniej arytmetycznej wprowadzanych liczb');
Writeln(‘ z chwila, gdy ich suma > 150');
Writeln;
i:=l;
Write (' Podaj liczbę: ');
Readln (liczba);
suma:=0;
suma:=suma+liczba;
IF liczba <= 150 THEN
BEGIN
REPEAT Write ('Podaj liczbę: ');
Readln (liczba);
suma: =suma+liczba;
i:=i+l;
UNTIL suma>150;
END;
Writeln (' średnia ',i,' liczb = ‘,suma/i:6:2);
END.
Instrukcję REPEAT również można wykorzystać do chwilowego zatrzymania programu w celu oczekiwania na
naciśnięcie dowolnego klawisza, określonej litery lub konkretnego klawisza.
Stosując w programie instrukcję:
REPEAT UNTIL KeyPressed
mamy możliwość jego chwilowego zatrzymania w celu oczekiwania na naciśnięcie dowolnego klawisza.
Możemy również zatrzymać program w celu oczekiwania na naciśnięcie określonej litery:
REPEAT
Instrukcja_l;
……………..
Instrukcja_n;
Writeln ('Jeszcze raz? (T )ak');
Tak_Nie:=UpCase(ReadKey)
UNTIL NOT (Tak Nie='T')
co umożliwi ponowne uruchomienie (lub nie) instrukcji zawartych w bloku REPEAT...UNTIL.
Ćwiczenie 43
Odczytać z dyskietki plik o nazwie sred_4.pas. Wprowadzić do programu instrukcję:
REPEAT Instrukcja_l;
……………….
Instrukcja_n;
Writeln ('Jeszcze raz? ( T )ak');
Tak_Nie:=UpCase(ReadKey)
UNTIL NOT (Tak_Nie='T*)
tak aby w zależności od naciśniętego klawisza można było ponownie uruchomić program. Zmienić nazwę programu na
„Srednia_z_liczb_5". Zmodyfikowany program zapisać na dysku w pliku o nazwie sred_5.pas.
Instrukcja WHILE
Instrukcja WHILE powoduje wykonywanie instrukcji tak długo, dopóki warunek DO instrukcja będzie spełniony. Zapis
tej instrukcji jest następujący:
WHILE warunek DO instrukcja;
Cechą charakterystyczną tej instrukcji jest sprawdzenie warunku przerywającego jeszcze przed jej wykonaniem.
Podana „instrukcja" może być zarówno pojedynczą instrukcją Turbo Pascala, jak i grupą instrukcji ujętych w „bloku"
BEGIN-END (co przedstawiono poniżej).
WHILE warunek DO BEGIN
instrukcja_l;
instrukcja_2;
………………..
instrukcja_n;
END;
Poniżej przedstawiono przykładowy zapis instrukcji WHILE:
WHILE x<>100 DO BEGIN
x:=x+2;
Writeln ('x= ',x )
END;
Jeśli warunek przerywający przy rozpoczęciu pętli WHILE ma wartość logiczną FALSE (Fałsz), to instrukcje zawarte w
bloku nie zostaną wykonane ani razu. Jeśli jednak warunek przerywający miał wartość TRUE (Prawda), to zmiana tej
wartości na FALSE musi być zawarta w bloku wykonawczym pętli lub wyrażeniu tworzącym warunek przerywający. Jeśli x
osiągnie wartość 100, nastąpi przerwanie wykonywania pętli WHILE.
Przykładem zastosowania instrukcji WHILE jest następny program.
Ćwiczenie 48
Napisać program obliczający liczby naturalne od 1 do 23. Program ma tytuł „Lkzby_od_l_do_23". Zapisać program na
dysku w pliku o nazwie wysw_l.pas.
Na początku programu wartość licznika została ustawiona na zero (liczba: =0).
Ponieważ warunek WHILE ma wartość TRUE (Prawda), tj. 0 <> 23, następuje wykonanie bloku instrukcji zawartych między
słowami BEGIN i END. Jeśli zmienna liczba osiągnie wartość 23, nastąpi przerwanie wykonywania pętli WHILE.
PROGRAM Liczby_od_l_do_23;
USES Crt;
VAR
liczba : INTEGER;
BEGIN
ClrScr;
liczba:=0;
Writeln (' Liczby naturalne od 1 do 23');
Writeln;
WHILE liczba<>23 DO
BEGIN
liczba:=liczba+l;
Write (' ‘,liczba);
END;
END.
Ćwiczenie 49
Napisać program obliczający sumę dowolnej liczby wprowadzanych liczb, bez pytania o liczbę tych liczb. Program ma tytuł
„Sumajbez_pytania". Zapisać program na dysku w pliku o nazwie ksuma__l.pas.
Zbiór wprowadzanych liczb uzupełnimy tzw. liczbą „kończącą" ten zbiór. Może to być liczba bardzo mała lub bardzo duża.
Załóżmy, że jest to liczba bardzo mała tj. 1000000 = -106 = - l e 6 . Liczba „kończąca" nie może występować w naszym zbiorze
liczb. Wyświetlenie sumy wprowadzonych liczb następuje z chwilą wprowadzenia liczby -le6.
Cały program został przedstawiony poniżej:
PROGRAM Suma b e z p y t a n i a ;
USES Crt;
VAR
liczba, suma : REAL;
BEGIN
ClrScr;
suma:=0;
liczba:=0;
Writeln (' Obliczenie sumy wprowadzanych liczb rzeczywistych ');
Writeln (' * Podanie liczby -le6 kończy wprowadzanie liczb * ');
Writeln;
WHILE liczba<>-le6 DO
BEGIN
suma:=suma+liczba;
Write (' Podaj liczbę : ');
Readln (liczba);
END;
Writeln (' suma = ',suma:6:2);
END.
Instrukcja WHILE umożliwia wyznaczenie liczby minimalnej i maksymalnej w ciągu liczb zakończonych liczbą bardzo
małą lub bardzo dużą, tzw. „kończącą" ten zbiór. Przyjmijmy, jak to miało miejsce w poprzednim ćwiczeniu, że jest to liczba
bardzo mała, tj. 1000000 = -106 = -1e6 .
Ćwiczenie 50
Napisać program wyznaczający najmniejszą z danego ciągu liczb, o dowolnej liczbie wprowadzanych liczb, bez pytania o
liczbę tych liczb. Program ma tytuł „Najmniejsza_z_ciągu_l". Zapisać program na dysku w pliku o nazwie min_l.pas.
Uwaga:
Zbiór podawanych liczb uzupełnić tzw. liczbą „kończącą" ten zbiór (np. -1e6). Na początku przyjąć za minimum pierwszą
wprowadzoną liczbę z ciągu. Przy sprawdzaniu warunku, jeśli następna liczba jest od niej mniejsza, staje się nowym
minimum itd.

Podobne dokumenty