PODSTAWY PROGRAMOWANIA
Laboratorium
Temat 5: Operacje na tablicach
Zadania do wykonania:
Napisz i zastosuj w programie procedurę, która oblicza sumę oraz średnią wartość elementów tablicy.
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.
Napisz i zastosuj w programie procedurę, która przesuwa cyklicznie zawartość tablicy o K pozycji w prawo.
Napisz i zastosuj w programie procedurę, która sortuje wartości pamiętane w tablicy w porządku rosnącym.
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.
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.
Napisz i zastosuj w programie procedurę, która oblicza i zapamiętuje w odpowiedniej tablicy 100 początkowych liczb pierwszych.
Napisz i zastosuj w programie procedurę, która przesuwa cyklicznie zawartość tablicy o K pozycji w lewo.
Napisz i zastosuj w programie procedurę, która przepisuje zawartość jednej tablicy do innej tablicy, zmieniając przy tym znaki elementów na przeciwne.
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].
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.
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.