PODSTAWY PROGRAMOWANIA

Laboratorium

Temat 5: Operacje na tablicach

Zadania do wykonania:

  1. Napisz i zastosuj w programie procedurę, która oblicza sumę oraz średnią wartość elementów tablicy.

  2. Napisz i zastosuj w programie funkcję, która oblicza i zapamiętuje w 100-elementowej tablicy 100 początkowych wyrazów szeregu Fibonacci.oraz zwraca K-ty element szeregu.

  3. Napisz i zastosuj w programie procedurę, która przesuwa cyklicznie zawartość tablicy o K pozycji w prawo.

  4. Napisz i zastosuj w programie procedurę, która sortuje wartości pamiętane w tablicy w porządku rosnącym.

  5. Napisz i zastosuj w programie następujące procedury: a/ procedurę, która metodą kolejnego dzielenia przez dwa znajduje binarny odpowiednik liczby dziesiętnej, umieszczając kolejne bity wyniku w kolejnych elementach tablicy. b/ procedurę, która wyprowadza zawartość tablicy na ekran. Załóż, że liczba dziesiętna jest w zakresie typu Word.

  6. Napisz i zastosuj w programie funkcję, która przez argument wyjściowy przekazuje największa wartość pamiętaną w tablicy, a przez samą siebie - liczbę wystąpień tej największej wartości.

  7. Napisz i zastosuj w programie procedurę, która oblicza i zapamiętuje w odpowiedniej tablicy 100 początkowych liczb pierwszych.

  8. Napisz i zastosuj w programie procedurę, która przesuwa cyklicznie zawartość tablicy o K pozycji w lewo.

  9. Napisz i zastosuj w programie procedurę, która przepisuje zawartość jednej tablicy do innej tablicy, zmieniając przy tym znaki elementów na przeciwne.

  10. Napisz i wywołaj w programie procedurę, która znajduje liczbę takich elementów tablicy, które są parzyste i jednocześnie zawarte w przedziale wartości [A..B].

  11. Napisz i zastosuj w programie procedurę, która przegląda tablicę T1, zawierającą wartości całkowite o różnych znakach i jednocześnie zapełnia inną tablicę T2 o elementach typu Boolean w taki sposób, że jeżeli T1[I]>=0, to T2[I]:=True; w przeciwnym przypadku T2[I]:=False.

  12. Napisz i zastosuj w programie a/ procedurę, która zapełnia tablicę czytanymi z klawiatury kolejnymi cyframi ośmiobitowej liczby binarnej. b/ funkcję, która wykorzystuje zapełnioną tablicę do obliczenia i przekazania do programu głównego dziesiętnej wartości danej liczby.

Uwagi:

Wszystkie procedury i funkcje operujące na tablicy muszą mieć argument tablicowy. Jeżeli podprogram operuje na dwóch tablicach, to musi posiadać dwa argumenty tablicowe.

W każdym zadaniu tablicę, na której operujemy, trzeba wstępnie zapełnić danymi. Można w tym celu napisać specjalną procedurę (na przykład taką, która zapełnia tablicę losowymi wartościami). Można też zainicjować tablicę określonymi wartościami elementów, deklarując ją po słowie const.

W każdym zadaniu będzie też potrzebna procedura, wyprowadzająca zawartość tablicy na ekran, która ułatwi sprawdzenie poprawności otrzymanych wyników.

Materiał pomocniczy

1. Definiowanie typu tablicowego i deklarowanie zmiennej tablicowej

Poniżej podano definicję typu i deklaracje zmiennej tablicowej, która pamięta 10 elementów typu Word, ponumerowanych od 1 do 10:

type Tab=array [1..10] of Word;

var T:Tab;

2. Odwołania do elementów tablicy

Do elementu tablicy odwołujemy się przez indeks (czyli numer elementu), umieszczony w nawiasach kwadratowych. Na przykład:

T[3]:=5; T[K]:=0; T[K+1]:=T[K]; Readln(T[0]); Write(T[1]);

Indeks może być stałą jawną, nazwą zmiennej lub stałej definiowanej, lub też wyrażeniem odpowiedniego typu. Indeks musi być typu porządkowego (całkowitego, znakowego, lub boolowskiego).

Zakres indeksów, podany w definicji typu, określa liczbę elementów tablicy. W przykładzie powyżej indeksy pozostają w przedziale wartości [1..10], tablica ma więc 10 elementów.

Przedział indeksów może zawierać wartości ujemne, na przykład:

type Tab1=array [Shortint] of Real;

W tym przypadku indeksy leżą w przedziale wartości typu Shortint, to jest od -128 do +127, więc tablica ma 256 elementów typu Real.

Odwołując się do elementu tablicy, nie można przekraczać definiowanego zakresu indeksów tablicy - może to spowodować błędy kompilacji lub wykonania programu.

3. Zapełnianie tablicy przy deklarowaniu zmiennej tablicowej po słowie const

const T:Tab=(0,2,4,6,8,10,12,14,16,18);

4. Przykłady procedur operujących na tablicy

Do operacji na tablicy wygodna jest instrukcja for, w której zakres wartości zmiennej sterującej pokrywa się z zakresem indeksów. Zakres zmiennej sterującej bardzo wygodnie jest określać, stosując standardowe funkcje Low oraz High. Funkcje te zwracają samoczynnie dolną i górną wartość graniczna definiowanego zakresu indeksów. Zwróćmy uwagę, że każda procedura lub funkcja operująca na tablicy musi być zaopatrzona w argument tablicowy. Aby zaoszczędzić miejsce na stosie, jest on zawsze poprzedzony słowem var, niezależnie od tego, czy argument tablicowy ma charakter wejścia, czy wyjścia danych.

{Procedura zapełniania tablicy wartościami losowymi z zakresu 0..Z}

procedure Zap_tab_los(var T:Tab; Z:Word);

var I:Integer;

begin

Randomize;

for I:=Low(T) to High(T) do

T[I]:=Random(Z+1);

end;

{Procedura wyprowadzająca zawartość tablicy na ekran}

procedure Pok_tab(var T:Tab);

var I:Integer;

begin

for I:=Low(T) to High(T) do Write (T[I]:8);

Writeln;

end;

{Instrukcje wywołania procedur tablicowych w programie głównym}

var T:Tab;

begin

Zap_tab_los(T,50);

Pok_tab(T);

end.