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 );
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.