Przeglądaj wersję html pliku:

wiczenie 21


cwicz_21

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

str. 55
W D E L P H I

ĆWICZENIE 21 – Zmienna typu tablicowego i pętla iteracyjna for ... do
Potrafisz: ♦ stosować instrukcję iteracyjną repeat ... until ♦ stosować instrukcję iteracyjną while ... do ♦ generować liczby losowe W zadaniu kończącym ćwiczenie 20 program nie zapamiętuje ciężaru każdego samochodu, który wjechał na prom. A gdyby ta informacja musiała być zapamiętana, to jak nazwalibyśmy zmienne przechowujące wartości ciężarów kolejnych samochodów. Może tak: waga1, waga2, waga3, waga4, . . . Ale to jest za każdym razem inna nazwa zmiennej, chociaż znaczenie liczb jest zawsze takie samo (tj. ciężar). Nie da się w żadnej pętli iteracyjnej, w każdej kolejnej iteracji stosować zmienne o innych nazwach. Do tego, by pod jedną nazwą przechowywać można było wiele informacji (np. ciężary wielu samochodów) służy zmienna typu tablicowego. Tablica składa się z wielu elementów tego samego typu. Wszystkie elementy mają taką samą nazwę, ale rozróżnia się je wg tzw. indeksu. Matematyczną analogią tablicy jest macierz. Jak każda zmienna, także i zmienna tablicowa musi być przed użyciem zadeklarowana. Sposób deklaracji zmiennej tablicowej jednowymiarowej (wektor) pokazują poniższe przykłady.

var dzien: array[1..7] of string[12];
nazwa zmiennej zakres indeksów typ elementów

var waga: array[1..ilosc_max] of real;
Pierwszy przykład, to deklaracja 7-mio elementowej tablicy, której elementami są łańcuchy tekstowe o długości 12 znaków. Jeśli łańcuchami tymi są np. nazwy kolejnych dni tygodnia, to dzien[1] zawiera wyraz „poniedziałek”, a dzien[3] zawiera wyraz „środa”. Drugi przykład, to deklaracja tablicy, której elementami są liczby rzeczywiste. Indeksowanie tej tablicy zaczyna się od 1, a kończy wartością przechowywaną pod stałą ilosc_max. (Wartość tej stałej musi być już wcześniej określona.) W tak zdefiniowanej tablicy mogą być przechowywane np. wartości ciężarów kolejnych samochodów załadowanych na promie. Dostęp do tych danych uzyskuje się oczywiście poprzez indeksy. I tak ciężar dziewiątego samochodu znajduje się pod waga[9]. Sposób deklaracji zmiennej tablicowej dwuwymiarowej (macierz) pokazuje przykład (tablica może zawierać np. współrzędne 10 punktów wykresu).

var xy_punktow: array[1..2,1..10] of integer;
nazwa zmiennej zakresy zakresy indeksów indeksó typ elementów 55

cwicz_21

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

str. 56
W D E L P H I

Oto kilka przykładów użycia zmiennych typu tablicowego w instrukcjach przypisania.

dzien[2]:=’wtorek’; dzien_nastepny:=dzien[i]; waga[12]:=123.78; waga[i]:=wynik_wazenia; x:=(xy_punktow[1,7]+x0)*skala; y:=(xy_punktow[2,7]+y0)*skala;
Możliwość operowania zmiennymi typu tablicowego jest niesłychanie przydatna we wszelkiego rodzaju instrukcjach iteracyjnych. Poznamy teraz ostatnią z instrukcji iteracyjnych, tj. instrukcję for...do (dla). W odróżnieniu od instrukcji iteracyjnych już poznanych, instrukcję for...do stosuje się wtedy, gdy liczba powtórzeń (iteracji) jest znana. Schemat działania tej instrukcji oraz sposób jej zapisu pokazany jest niżej. początek licznik pętli skrajne wartości instrukcji licznik pętli iteracyjnych licznikapętli zm := wyr1 zm := zm+1 czy zm <=wyr2 ? nie wyjście z instrukcji

tak

blok instrukcji

for zm:=wyr1 to wyr2 do begin instrukcja1; instrukcja2; ... ... end;

Ciąg powtarzanych instrukcji umieszczony jest pomiędzy słowami end grupującymi instrukcje elementarne w blok. Kontrolowana jest wartość licznika pętli iteracyjnych zm. Jest to zmienna typu całkowitego. Ostatnia pętla zostaje zrealizowana, gdy wartość jej równa jest wartości wyr2. Przemyśl poniższy przykład. Program oblicza średnią z pięciu ocen. Podana jest tylko treść procedury uruchamianej poprzez kliknięcie na klawisz [Licz]. procedure TForm1.Kl_liczClick(Sender: TObject); var i: integer; //-- licznik pętli oceny: array[1..5] of real; srednia, suma: real; srednia_text: String[4]; begin //--wpis z ekranu do tablicy oceny[1]:=StrToFloat(mat.text); oceny[2]:=StrToFloat(fiz.text); oceny[3]:=StrToFloat(mech.text); oceny[4]:=StrToFloat(rys.text); oceny[5]:=StrToFloat(jez.text); suma:=0; for i:=1 to 5 do //-- sumowanie begin suma:=suma+oceny[i] begin i end może end; //---------- koniec pętli for zostać pominięte, poniesrednia:=suma/5; //-- obl. średniej waż między tymi „nawiasrednia_text:=FloatToStr(srednia); sami” jest tylko jedna wynik.caption:=srednia_text instrukcja elementarna

begin

56

cwicz_21

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

str. 57
W D E L P H I

end; Wszystkie instrukcje iteracyjne można zagnieżdżać, tzn. umieszczać jedna w drugiej (podobnie jak instrukcje warunkowe). Nie mogą jednak wzajemnie się przeplatać. Wyjaśnia to poniższy schemat. dobrze źle instr.1 instr.2 instr.3 koniec instr.1 instr.3 koniec instr.3 koniec instr.2 koniec instr.2 instr.1 instr.2

koniec instr.1

koniec instr.3

Z A D A N I E . Opracuj program, który ustala ocenę zawodnika w zawodach jazdy figurowej na lodzie, na podstawie not wystawianych przez 7-miu sędziów. Sposób ustalenia oceny zawodnika jest następujący. Nota najmniejsza i największa jest odrzucana, a z pozostałych 5-ciu not oblicza się średnią. To ta średnia jest właśnie oceną zawodnika. Zalecenia. ♦ Wykorzystaj podany niżej schemat podziału zadania na etapy. ♦ Wszystkie noty sędziowskie umieść w zmiennej tablicowej. ♦ Zastosuj instrukcję iteracyjną for...do przy znajdowaniu najmniejszej i największej noty oraz przy obliczaniu średniej z not. Wczytanie not z ekranu do zmiennej tablicowej

Odrzucenie noty max.

Odrzucenie noty min.

Obliczenie oceny zawodnika

Wyeksponowanie oceny w oknie programu 57

cwicz_21

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

str. 58
W D E L P H I

Zadania do samodzielnego wykonania
♦ ♦ ♦

Stosowanie instrukcji iteracyjnej for ... do Zastosowanie zmiennych typu tablicowego Zagnieżdżanie instrukcji iteracyjnych
Opracuj program, który służy do zapamiętania rezultatów sędziowania w całych zawodach łyżwiarstwa figurowego (10 zawodników). W tym celu zmodyfikuj program wykonany w ćwiczeniu 21. Zastosuj także zmienną tablicową dwuwymiarową oraz tablicę pamiętającą nazwiska zawodników. Opracuj program, który dla 7-miu studentów oblicza średnią ocen, które otrzymali z 5-ciu przedmiotów. Zastosuj zmienną tablicową dwuwymiarową oraz tablicę pamiętającą nazwiska studentów. Opracuj program, który przechowuje wartość średnią każdej z 24-ech serii pomiarów prędkości wiatru, dokonanych w pobliżu bazy rybackiej (pomiar np. co godzinę). Każda seria składa się z 10 odczytów pomiarowych (pomiary z 10 mierników rozmieszczonych w różnych miejscach), Wartości odczytane są liczbami z przedziału 0..100. Niech wyniki pomiarów pochodzą z generatora liczb losowych (trudno - może będą huragany).

Zadanie 1.

Zadanie 2.

Zadanie 3.

58

 
statystyka