1. Завдання 1
Умова завдання
Дослідити представлення в пам’яті комп’ютера даних статичної структури. Розглянути основні прості (цілі, дійсні, символьні, логічні) і складові або фундаментальні (масиви, записи, рядки символів) структури даних:
const zz1= 08;
zz2= 85;
zz3= 55;
type perelic=( Starchevska, Mariya, Mykhailivna);
var b1 : Boolean;
b2 : Wordbool;
b3 : Longbool;
ch : Char;
i1 : Byte;
i2 : Shortint;
i3 : Word;
i4 : Integer;
i5 : Longint;
r1 : Real;
r2 : Single;
r3 : Double;
r4 : Extended;
r5 : Comp;
str : String [15];
p : perelic;
d : zz1 .. zz2;
m : array [1..2, 1..5] of char;
rec : record
a1, a2 : string[15];
b1, b2, b3 : char;
c1, c2 : integer
end;
s : set of zz1 .. zz3 ;
f : text;
В даному випадку тестування буде проводитися для наступних значень змінних:
Формула знаходження значень змінних
Значення змінних

true, якщо день народження парне число;
b1 =
false, якщо день народження непарне число;
b2 := succ(b1);
b3 := pred(pred(b1)); повертає попереднє значення х
ch – перша літера Прізвища ;
i1 – день народження;
i2 := -i1;
i3 := i1*125;
i4 := -i3;
i5 := -i3;
r1– дробове число: ціла частина – місяць народження, дробова частина - рік народження;
r2 := r1*125;
r3 := -r2;
r4 := r2;
r5 := i5;
str – Прізвище;
p – Ім’я;
d – число, яке відповідає дню народження + 15;
m[1,1] – символ, який відповідає першій цифрі номера домашнього телефону;
m[1,2] – символ, який відповідає другій цифрі;
m[1,3] := ’0’;
m[1,4] – символ, який відповідає третій цифрі;
m[1,5] := ’0’;
m[2,1] := ’0’;
m[2,2] - символ, який відповідає четвертій цифрі;
m[2,3] := ’0’;
m[2,4] - символ, який відповідає п’ятій цифрі;
m[2,5] - символ, який відповідає шостій цифрі;
rec.a1 – назва міста в адресі прописки;
rec.a2 – назва вулиці в адресі;
rec.с1 – номер будинку в адресі прописки;
rec.с2 – номер квартири в адресі прописки;
rec.b1 := ’,’ ;
rec.b2 := ’,’ ;
rec.b3 := ’/’ ;
S – множина всіх чисел кратних k з діапазону 08 .. 85,
( k = 2 );

ch=’S’
i1=28
i2=-28
i3=3500
i4=-3500
i5=-3500
r1=8.85
r2=1106.25
r3=-1106.25
r4=1106.25
r5=-3500
str=Starchevska
p=Mariya
d=43
m[1,1]=’2’
m[1,2]=’3’
m[1,3]=’0’
m[1,4]=’1’
m[1,5] := ’0’
m[2,1] := ’0’
m[2,2]=’5’
m[2,3] := ’0’
m[2,4]=’9’
m[2,5]=’1’
rec.a1=’Boryslav’
rec.a2=’Kovaliva’
rec.c1=44
rec.c2=81
rec.b1 := ’,’
rec.b2 := ’,’
rec.b3 := ’/’


1.2.Програмна реалізація
program MEMORYinterpretation;
const
zz1= 08;
zz2= 85;
zz3= 55;
type
perelic=(Starchevska, Mariya, Mykhailivna);
var
b1 : Boolean;
b2 : Wordbool;
b3 : Longbool;
ch : Char;
i1 : Byte;
i2 : Shortint;
i3 : Word;
i4 : Integer;
i5 : Longint;
r1 : Real;
r2 : Single;
r3 : Double;
r4 : Extended;
r5 : Comp;
str : String [15];
p : perelic;
d : zz1 .. zz2;
m : array [1..2, 1..5] of char;
rec : record
a1, a2 : string[15];
b1, b2, b3 : char;
c1, c2 : integer
end;
s : set of zz1 .. zz3 ;
f : text;
procedure CharTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..1] of byte absolute ch;
begin
write('Char interpretation in memory is: ');
for i:=1 to 1 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure ByteTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..1] of byte absolute i1;
begin
write('Byte interpretation in memory is: ');
for i:=1 to 1 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure ShortIntegerTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..1] of byte absolute i2;
begin
write('Short integer interpretation in memory is: ');
for i:=1 to 1 do
write(b[a[i] div 16], b[a[i] mod 16]);
writeln
end;
procedure WordTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..2] of byte absolute i3;
begin
write('Word interpretation in memory is: ');
for i:=1 to 2 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure IntegerTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..2] of byte absolute i4;
begin
write('Integer interpretation in memory is: ');
for i:=1 to 2 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure LongIntegerTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..4] of byte absolute i5;
begin
write('Long integer interpretation in memory is: ');
for i:=1 to 4 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure RealTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..6] of byte absolute r1;
begin
write('Real interpretation in memory is: ');
for i:=1 to 6 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure SingleTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..4] of byte absolute r2;
begin
write('Single interpretation in memory is: ');
for i:=1 to 4 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure DoubleTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..8] of byte absolute r3;
begin
write('Double interpretation in memory is: ');
for i:=1 to 8 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure ExtendedTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..10] of byte absolute r4;
begin
write('Extended interpretation in memory is: ');
for i:=1 to 10 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure CompTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..8] of byte absolute r5;
begin
write('Comp interpretation in memory is: ');
for i:=1 to 8 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure StringTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..16] of byte absolute str;
begin
write('String interpretation in memory is: ');
for i:=1 to 16 do
begin
write(b[a[i] div 16], b[a[i] mod 16],' ');
if i=10 then begin writeln; write(' ');
end;
end;
writeln
end;
procedure CountingTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..1] of byte absolute p;
begin
write('Counting interpretation in memory is: ');
for i:=1 to 1 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure DiapasonTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..1] of byte absolute d;
begin
write('Diapason interpretation in memory is: ');
for i:=1 to 1 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure MasyvTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..10] of byte absolute m;
begin
write('Masyv interpretation in memory is: ');
for i:=1 to 10 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
procedure RecordTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..39] of byte absolute rec;
begin
write('Record interpretation in memory is: ');
for i:=1 to 39 do
begin
write(b[a[i] div 16], b[a[i] mod 16],' ');
if (i=10) or (i=20) or (i=30) then begin writeln; write(' ');
end;
end;
writeln;
end;
begin
ch:='S';
i1:=28;
i2:=-28;
i3:=3500;
i4:=-3500;
i5:=-3500;
r1:=8.85;
r2:=1106.25;
r3:=-1106.25;
r4:=1106.25;
r5:=-3500;
str:='Starchevska';
p:=Mariya;
d:=43;
m[1,1]:='2';
m[1,2]:='3';
m[1,3]:='0';
m[1,4]:='1';
m[1,5]:='0';
m[2,1]:='0';
m[2,2]:='5';
m[2,3]:='0';
m[2,4]:='9';
m[2,5]:='1';
rec.a1:='Boryslav';
rec.a2:='Kovaliva';
rec.c1:=44;
rec.c2:=81;
rec.b1:= ',';
rec.b2:= ',';
rec.b3:= '/';
BooleanTP;
WordBooleanTP;
LongBooleanTP;
CharTP;
ByteTP;
ShortIntegerTP;
WordTP;
IntegerTP;
LongIntegerTP;
RealTP;
SingleTP;
DoubleTP;
ExtendedTP;
CompTP;
StringTP;
CountingTP;
DiapasonTP;
MasyvTP;
RecordTP;
SetOfTP;
FileTP;
readln
end.
1.3.Опис процедур та тестування
1.3.1.Логічні змінні
При представленні логічних змінних завжди є надлишковість. Значенню FALSE відповідає 0 в усіх байтах, значенню TRUE—будь-яке інше число.
procedure BooleanTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..1] of byte absolute b1;
begin
b1:=(i1 mod 2)=0;
write('Boolean interpretation in memory is: ');
for i:=1 to 1 do
write(b[a[i] div 16], b[a[i] mod 16]);
writeln
end;
Ідентифікатору BOOLEAN відповідає 1 байт пам’яті. В даному випадку твердження є правдивим. В пам’яті одержуємо 01.
procedure WordBooleanTP;
const b:array[0..15] of char='0123456789ABCDEF';
var
i:integer;
a:array[1..2] of byte absolute b2;
begin
b2:=succ(b1);
write('Word Boolean interpretation in memory is: ');
for i:=1 to 2 do
write(b[a[i] div 16], b[a[i] mod 16],' ');
writeln
end;
Ідентифікатору WORDBOOL відповідає 2 байти пам’яті. В даному випадку потрібно повернути наступне значення b1(b1 приймало значення 1 на попередньому кроці). Отже дане число 00 02. Оскільки в пам’яті числа представляються побайтно в зворотньому порядку, то одержуємо 02 00.