Rrekordy Typ rekordowy, zmienna rekordowa, instrukcja with, tabele rekordów |
Typ rekordowy jest typem strukturalnym o strukturze jednowymiarowej i o składowych dowolnych typów, które nazywają się polami:
Opis typu:
record
lista_nazw_pól_1: typ1;
lista_nazw_pól_2: typ2;
........
end;
np.
type
data = record
rok: 1900..2000;
mies: 1..12;
dzien: 1..31;
end;
type osoba = record
nazw: string[20];
imie: string[15];
data_ur: data;
stopnie: array[1..5] real;
end;
var student: osoba;
Uwagi
W powyższym przykładzie osoba jest typem.
Student jest zmienną typu rekordowego (zmienna rekordową). W rekordzie tym występują cztery pola o nazwach: nazw, imie, data_ur i stopnie. Pola nazw i imię są typu tekstoweg, data_ur jest typu rekordowego (ten typ musi być zdefiniowany wcześniej) a stopnie jest typu tablicowego.
Zmienne rekordowe oznaczają zawartość całych rekordów. Dla zmiennych rekordowych tego samego typu dostępna jest tylko operacja przypisania jednemu rekordowi wartości drugiego rekordu.
Do pól rekordu istnieje dostęp bezpośredni, odwołanie do pola zmiennej odbywa się przez nazwę zmiennej rekordowej i nazwę pola, oddzielonych kropką.
nazwa_zmiennej . nazwa_pola [. ewentualnie_nazwa_pola_składowego ...]
Na zmiennych składowych można dokonywać operacji dopuszczalnych dla ich typu.
np.
student . nazw := 'Kowalski';
if student . data_ur . rok < 1975 then ...
W jednym typie rekordowym wszystkie pola muszą mieć różne nazwy.
Zmienne rekordowe można zgromadzić w tablicy, np.:
var grupa: array[1..30] of osoba; {wcześniej zdefiniowany typ}
var grupa: array[1..30] of record
pole1: typ1;
pole2: typ2;
...
end;
begin
...
grupa[1]. nazw := 'Nowak';
if grupa[2]. data_ur. rok < 1975 then writeln(`weteran'); ... end.
Instrukcja wiążąca - with
Instrukcja with upraszcza zapis dostępu do pól rekordu. Odwołanie w instrukcji (także złożonej) może nastąpić bezpośrednio do nazw pól wymienionych w liście zmiennych, bez wyspecyfikowanej nazwy zmiennej całościowej.
with lista_zmiennych_rekordowych do Istrukcja;
np. with student do
begin
nazw:='Nowak';
imie: =`Jan';
with data_ur do
begin
rok: =1978;
mies:= 1;
dzien:= 14;
end;
end;
Zadanie 1
Napisz program, który:
Umożliwia przechowywanie następujących danych
Imię i nazwisko
Datę urodzenia w postaci rok miesiąc dzień
Wprowadź z klawiatury dane o jednej osobie, zapisz je w pamięci i wyświetl na ekranie w postaci
Jan Kowalski - 1956.01.21
Zadanie rozwiąż dwoma sposobami:
Bez instrukcji with
Z wykorzystaniem instrukcji with
Zadanie 2
Napisać program, który:
wprowadzi z klawiatury liczbę całkowitą n (mniejszą od 10), która określa liczbę studentów
dla każdego studenta wprowadzi z klawiatury następujące dane:
numer studenta (liczba całkowita)
nazwisko studenta (do 20 znaków)
średnia ocen studenta ( liczba rzeczywista)
umieści te dane w tablicy jednowymiarowej
wprowadzi z klawiatury liczbę, która określa średnią powyżej której studentom przyznaje się stypendium
wszystkim studentom, którzy osiągnęli tę średnią przyznaje stypendium dowolnej wysokości (wartość stypendium zapisuje do rekordu w polu stypendium)
wyświetla tablicę .
wyświetla nazwisko studenta, który ma najwyższą średnią
Zadanie 3.
Napisać program, który pobierze z klawiatury ciąg danych ( nie dłuższy niż 20)
o towarach w magazynie, podających dla każdego towaru jego nazwę, ilość i cenę jednostkową. Pusta nazwa towaru oznacza zakończenie pobierania danych.
Dane należy umieścić w wektorze. Program ma wyznaczyć towar o największej wartości .
PODSTAWY PROGRAMOWANIA
TEMAT : Typ rekordowy, zmienna rekordowa
---------------------------------------------------------------------------------------------------------------------------------
2