Przeglądaj wersję html pliku:

wiczenie 20


cwicz_20

H M P R O G R A M O W A N I E

str. 52
W D E L P H I

ĆWICZENIE 20 – Zastosowanie instrukcji iteracyjnej while ... do
Potrafisz: ♦ stosować instrukcję iteracyjną repeat ... until Istnieje w Delphi druga instrukcja iteracyjna, którą stosuje się w podobnych przypadkach jak poprzednią - a więc, gdy pewien ciąg działań wykonany musi być wielokrotnie raz za razem i zazwyczaj, gdy nie wiadomo, ile razy ciąg tych działań trzeba powtórzyć. Musi też być znana okoliczność decydująca o zakończeniu cyklu powtórzeń. Umownie określamy tą instrukcję jako while ... do (dopóki). Schemat działania tej instrukcji oraz sposób jej zapisu pokazany jest niżej. początek instrukcji

czy wyrażenie jest prawdziwe ? nie wyjście z instrukcji

tak

blok instrukcji

while wyr_log do begin instrukcja1; instrukcja2; ... ... end;

Ciąg powtarzanych instrukcji umieszczony jest pomiędzy słowami end grupującymi instrukcje elementarne w blok, tj. w jedną instrukcję złożoną. W odróżnieniu od instrukcji repeat ... until blok ten może nie być wykonany ani razu. Ten przypadek zajdzie wtedy, gdy pierwsze sprawdzenie wyrażenia logicznego umieszczonego za słowem while da odpowiedź negatywną (false). Przemyśl poniższy przykład. Program mnoży kolejne liczby nieparzyste poczynając od 1 i przerywając to działanie, gdy okaże się, że wynik następnego mnożenia dałby liczbę przekraczającą granicę zadaną przez użytkownika. Podana jest tylko treść procedury uruchamianej poprzez kliknięcie na klawisz [Wymnażaj]. procedure TForm1.MnozenieClick(Sender: TObject); var max,wynik_mnoz,x,nr_mnoz: integer; begin max:=StrToInt(granica.text); wynik_mnoz:=1; x:=1; nr_mnoz:=0; while (wynik_mnoz*(x+2))<=max do begin x:=x+2; wynik_mnoz:=wynik_mnoz*x; nr_mnoz:=nr_mnoz+1 end; ilosc_mnozen.caption:=IntToStr(nr_mnoz); ost_liczba.caption:=IntToStr(x)

begin

52

cwicz_20

H M P R O G R A M O W A N I E

str. 53
W D E L P H I

end; Dygresja liczby losowe.

W dalszej części nauki programowania przydatna okaże się umiejętność stosowania generatora liczb losowych. („maszyny losującej”). Liczby losowe wykorzystamy najczęściej do automatycznego tworzenia większej liczby danych. Otrzymanie liczb losowych rozbite jest na dwie „czynności”: ♦ uruchomienie generatora liczb losowych (uruchomienie „maszyny losującej”), ♦ wylosowanie liczby (konkretne „losowanie z maszyny”). Do uruchomienia generatora liczb losowych służy bezparametrowa procedura

Randomize
Najlepiej wywołać ją na etapie inicjowania okna programu, czyli umieścić ją w zdarzeniu OnActivate. Wtedy „maszyna losująca” już na starcie programu zostaje „puszczona w ruch”. Nic widocznego jeszcze się nie dzieje. Do wylosowania liczby służy funkcja

Random
Można wywołać ją na dwa sposoby: ♦ x:=Random - bez parametrów, wtedy x będzie liczbą rzeczywistą z niedomkniętego przedziału [0, 1), ♦ x:=Random(zakres) - z całkowitym parametrem zakres, wtedy x będzie liczbą całkowitą z niedomkniętego przedziału [0, zakres). Z A D A N I E . Prom rzeczny ma ładowność określoną na 1 000 kN. Za każdym razem załadowuje kolejno przejeżdżające przez wagę samochody osobowe i ciężarowe. Ciężar pojedynczego z nich nie przekracza 200 kN. Opracuj program, który w odpowiednim momencie zatrzyma załadunek promu. Informacja o ciężarze kolejnych pojazdów pochodzić ma z generatora liczb losowych (niech on zastępuje wagę). Wynikiem pokazywanym na ekranie powinna być ilość samochodów wpuszczonych na prom oraz ich łączny ciężar. Zalecenia. ♦ Zastosuj procedurę uruchomienia generatora liczb losowych przy aktywacji okna. ♦ Funkcję losowania (ważenia) ciężaru pojazdów umieść w instrukcji iteracyjnej while do.

53

cwicz_20

H M P R O G R A M O W A N I E

str. 54
W D E L P H I

Zadania do samodzielnego wykonania
♦ ♦

Stosowanie instrukcji iteracyjnej while ... do Stosowanie generatora liczb losowych
Opracuj program, który liczy sumę wszystkich liczb z przedziału, którego granice są liczbami losowymi z “rozsądnego” przedziału. Granice przedziału i wartość sumy program pokazuje jako rezultat swoich działań. Zwróć uwagę na fakt, że kolejna wylosowana liczba może być mniejsza lub większa od poprzedniej. Opracuj program, który oblicza wartość całki funkcji 2 2

Zadanie 1.

Zadanie 2.

y = sin x + x

w przedziale, którego granice są są liczbami losowymi. Obliczenia przeprowadzone powinny być dla dwóch różnych kroków całkowania. Oba wyniki (dla porównania) powinny być pokazane w oknie programu.

Zadanie 3.

Opracuj program, który odpowie na pytanie: do jakiej całkowitej potęgi trzeba podnieść pierwszą daną liczbę rzeczywistą, aby wartość tej potęgi przekroczyła drugą liczbę rzeczywistą. Pierwszą z liczb wprowadzić powinien użytkownik programu, a druga powinna być ustalona z wykorzystaniem generatora liczb losowych. Pamiętaj, że musi być ona większa od pierwszej. Opracuj program, który wyznaczy pierwiastek równania wyrażonego wzorem 2

Zadanie 4.

− 5 x − 2 + (sin x ) = 0

Uwaga. Właściwie, wyznaczyć musisz metodą iteracyjną miejsce przecięcia wykresu funkcji z osią x układu współrzędnych. Zastanów się, jakie z tym prostym zadaniem programistycznym wiążą się problemy natury matematycznej ?

54

 
statystyka