z6


Sprawdzanie przebiegu programu "krok-po-kroku"
(debugging)
oprac. Robert Tomaszewski
>>>> Zadanie 1
Przepisz poniższy program:
type
TabS = array[1..10] of String[10];
var
a, j: Byte;
tab: TabS;
function Check(const a:TabS; const rozmiar: Byte):Byte;
var
i, licznik: Byte;
wyraz: String[10];
begin
licznik:=0;
for i:=1 to rozmiar do begin
wyraz:=a[i];
if wyraz[1]=wyraz[Length(wyraz)] then Inc(licznik);
end;
Check:=licznik;
end;
begin
Writeln('Ile wyrazow chcesz sprawdzic (<=10) ?');
readln(a);
for j:=1 to a do begin
writeln('Podaj wyraz ',j,': ');
readln(tab[j]);
end;
Writeln('Tym samym znakiem konczy sie i zaczyna ',Check(tab,a),' wyraz(y/ow)');
end.
Skompiluj do pamięci, usuń ewentualne błędy wykryte podczas
kompilacji.
Wybierz z menu głównego Debug -> Add watch... (Ctrl+F7). Dodaj do
listy obserwowanych zmiennych następujące zmienne: a[i], licznik,
a, tab[j].
Kolejne zmienne możesz dodawać klawiszem Insert (patrz na pasek
podpowiedzi na dole ekranu!). Pomiędzy okienkami z programem oraz
oknem Watches przechodzimy klawiszem lewy ALT+numer okienka.
Zmiany położenia okna (Move) lub jego rozmiaru (Size) można
dokonać z poziomu menu głównego Window.
Po dodaniu zmiennych do okna Watches uruchom program do pracy
krokowej: każdy krok klawiszem F7 (Run -> Trace into) lub F8 (Run
-> Step over). Zaobserwuj różnice w obu przebiegach programu.
Możesz dodać do listy Watches inne zmienne (lokalne/globalne).
Pracę krokową kończymy Ctrl+F2 (Run -> Program reset).
Teoria - typ rekordowy
Typ rekordowy, podobnie jak typ tablicowy, zaliczamy do typów
złożonych. Zmienna typu rekorodwego przechowuje w swojej
strukturze kilka zmiennych (podobnie jak tablica) ALE w tym
przypadku mogą to być zmienne różnych typów (odmiennie niż w
tablicy!). Dostęp do zmiennych odbywa się na zasadzie dostępu do
pól (a nie jak w przypadku tablic na zasadzie indeksacji).
Przykład definicji i użycia typu rekordowego:
type
TOsoba = record
imie, nazwisko: String[20]; {dwa pola typu String[20] każde}
wiek: 0..100; {pole z wiekiem osoby, typ okrojony}
plec: Char; {pole typu 'M' lub 'K'}
end;
var
a: TOsoba;
begin
readln(a.imie);{wczytanie wartości do pola "imie" rekordu "a"}
readln(a.nazwisko);{analogicznie jak wyżej}
readln(a.wiek);
readln(a.plec);
end.
Rekordy mogą - tak jak tablice - być parametrami funkcji/procedur.
Ponadto można tworzyć tablice rekordów (pojedynczy element tablicy
to rekord).
Przykład tablicy rekordów
type
TOsoba = record
imie, nazwisko: String[20]; {dwa pola typu String[20] każde}
wiek: 0..100; {pole z wiekiem osoby, typ okrojony}
plec: Char; {pole typu 'M' lub 'K'}
end;
TOsoby = array[1..100] of TOsoba;
var
a: TOsoby;
i, x: Byte;
begin
readln(x);
for i:=1 to x do begin
readln(a[i].imie);{wczytanie wartości do pola "imie" rekordu "a[i]"}
readln(a[i].nazwisko);{analogicznie jak wyżej}
readln(a[i].wiek);
readln(a[i].plec);
end;
end.
>>>> Zadanie 2
Napisz program, który w tablicy rekordów przechowuje długości
boków prostokątów (jeden rekord w tablicy dotyczy jednego
prostokąta) a następnie w procedurze/funkcji oblicza pola
prostokątów wyniki zapisując do tablicy liczb. Program najpierw
pyta użytkownika ile prostokątów wprowadzić do tablicy, pobiera
długości boków umieszczając je w tablicy rekordów, gotową tablicę
przekazuje do funkcji/procedury, ta oblica pola i umieszcza wyniki
w tablicy liczb. Główna zasada organizacji tablic: jeśli w tablicy
rekordów na pozycji (indeksie) 3 są liczby 3 i 5 to w tablicy pól
na pozycji (indeksie) 3 będzie liczba 15.
Wskazówki dot. definicji typów:
type
TProst = record
a, b: Real;
end;
TTabProst = array[1..100] of TProst;
TTabPola = array[1..100] of Real;
>>>> Zadanie 3
Zmodyfikuj zadanie 2 zamieniając tablicę liczb zawierającą pola
prostokątów na tablicę rekordów zawierającą pola i obwody
prostokątów.
>>>> Zadanie domowe
Sprawdz działanie instrukcji wiążącej "with".
Sprawdz działanie procedur/funkcji operujących na tekstach
(Stringach): Copy, Delete, Pos, Insert.


Wyszukiwarka