Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
02.01.2020
Размер:
33.11 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ

Новосибирский государственный технический университет

Практическое занятие №4

по курсу «Информатика и программирование»

«Динамические переменные»

Факультет бизнеса

Группа: ФБИ-11

Студенты: Рыбаченко А.А.

Преподаватель: Зайцев М.Г.

Новосибирск

2012г.

Тема: Динамические переменные структурных типов, средства динамического распределения памяти, ссылочные типы

Цель: Сформировать практические навыки обработки данных представленных динамическими переменными структурных типов с использованием ссылочных типов, и средств динамического распределения памяти Object Pascal.

Задание

  1. Для каждого варианта задания разработайте консольное приложение.

  2. Разработайте тестовый набор и выполните тестирование приложения.

Варианты заданий

  1. В одномерном массиве (типа T) указателей на целочисленные переменные (тип PInt)

const

n = 10; //количество переменных в массиве

type

PInt = ^Integer;//ссылочный тип указателя на целую //переменную

T = array[0..n-1] of PInt;//массив указателей на целые //переменные

отыскать и вывести:

  • минимальное значение среди переменных, указатели на которые хранятся в массиве;

  • максимальное значение среди переменных, указатели на которые хранятся в массиве;

  • сумму значений переменных, указатели на которые хранятся в массиве;

Текст программы:

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

n = 5; //количество переменных в массиве

type

PInt = ^Integer;// ссылочный тип указателя на целую переменную

T = array[0..n-1] of PInt;// массив указателей на целые переменные

procedure input(var x:t);

var i,r:integer; p:pint;

begin

for i:=low(t) to high(t) do

begin

new(p);

write('Enter ',i+1,' element ');

readln(r); p^:=r;x[i]:=p;

end;

end;

procedure ArrMin(x:t);

var i,min:integer; p:pint;

begin

p:=x[low(t)];

min:=p^;

for i:=low(t) to high(t) do

begin

p:=x[i];writeln(p^);

if min>p^ then min:=p^;

end;

writeln;

writeln('Minimum= ',min);

writeln;

p^:=0;

end;

procedure ArrMax(x:t);

var i,max:integer; p:pint;

begin

p:=x[low(t)];

max:=p^;

for i:=low(t) to high(t) do

begin

p:=x[i];

if max<p^ then max:=p^;

end;

writeln;

writeln('Maximum= ',max);

writeln;

end;

procedure ArrSumm(x:t);

var i,sum:integer; p:pint;

begin

sum:=0;

for i:=low(t) to high(t) do

begin

p:=x[i];

sum:=sum+p^;

end;

writeln;

writeln('Sum= ',sum);

writeln;

end;

procedure output(x:t);

var i,o:integer;

begin

i:=0;

while i<>1 do

begin

writeln('1-Minimum in array ');

writeln('2-Maximum in array ');

writeln('3-Summa arrays ');

writeln('Every other - exit ');

readln(o);

case o of

1:ArrMin(x);

2:ArrMax(x);

3:ArrSumm(x);

else i:=1;

end;

end;

end;

var y:t;

begin

input(y);

output(y);

end.

Тестовый набор:

Тестовый набор

Номер теста

Исходные данные

Ожидаемый результат

1

1 element: 56

2 element: 35

3 element: 78

4 element: 63

Minimum:35

Maximum:78

Sum:169

2

1 element: -96

2 element: -9

3 element: 23

4 element: 3

Minimum:-96

Maximum:23

Sum:-82

  1. В одномерном динамическом массиве (типа T) указателей на вещественные переменные

const n = 10;

type

PReal = ^Real;

PT = ^T;

T = array[0..9] of PReal;//массив указателей на вещественные переменные

отыскать и вывести:

  • минимальное вещественное значение, среди компонентов с чётными значениями индекса;

  • максимальное вещественное значение, среди компонентов с нечётными значениями индекса;

  • сумму вещественных значений, на которые указывают компоненты массива.

Текст программы:

program Project4;

{$APPTYPE CONSOLE}

uses

SysUtils;

const n = 5;

type

PReal = ^Real;

PT = ^T;

T = array[0..n-1] of PReal;// массив указателей на вещественные переменные

procedure input(var x:pt);

var i:integer; p:PReal;

begin

new(x);

for i:=low(t) to high(t) do

begin

new(p);

write('Enter ',i+1,' element ');

readln(p^); x^[i]:=p;

end;

end;

procedure ArrMin(x:pt);

var i:integer; min:real; p:preal;

begin

p:=x[low(t)];

min:=p^;

for i:=low(t) to high(t) do

begin

p:=x[i];

if min>p^ then min:=p^;

end;

writeln;

writeln('Minimum= ',min:0:2);

writeln;

p^:=0;

end;

procedure ArrMax(x:pt);

var i:integer; max:real; p:preal;

begin

p:=x[low(t)];

max:=p^;

for i:=low(t) to high(t) do

begin

p:=x[i];

if max<p^ then max:=p^;

end;

writeln;

writeln('Maximum= ',max:0:2);

writeln;

end;

procedure ArrSumm(x:pt);

var i:integer; sum:real; p:preal;

begin

sum:=0;

for i:=low(t) to high(t) do

begin

p:=x[i];

sum:=sum+p^;

end;

writeln;

writeln('Sum= ',sum:0:2);

writeln;

end;

procedure output(x:pt);

var i,o:integer;

begin

i:=0;

while i<>1 do

begin

writeln('1-Minimum in array ');

writeln('2-Maximum in array ');

writeln('3-Summa arrays ');

writeln('Every other - exit ');

readln(o);

case o of

1:ArrMin(x);

2:ArrMax(x);

3:ArrSumm(x);

else i:=1;

end;

end;

end;

var y:pt;

begin

input(y);

output(y);

end.

Тестовый набор:

Тестовый набор

Номер теста

Исходные данные

Ожидаемый результат

1

1 element: 56

2 element: 35

3 element: 78

4 element: 63

5element: 0

Minimum:0

Maximum:78

Sum:232

2

1 element: -1

2 element: -86

3 element: -13

4 element: 13

5element: -123

Minimum:-123

Maximum:86

Sum:87

3.В одномерном массиве (типа T) указателей на множества (типа PtrM)

const n = 10;

type

Elmnts = 0..9;

M = set of Elmnts;

PtrM = ^M;

T = array[0..9] of PtrM;

отыскать и вывести:

  • множество с минимальной мощностью, среди компонентов с чётными значениями индекса;

  • множество с максимальной мощностью, среди компонентов с нечётными значениями индекса;

  • множества, содержащие заданное значение, среди компонентов с нечётными значениями индекса;

Текст программы:

program Project3;

{$APPTYPE CONSOLE}

uses

SysUtils;

const n = 10;

type

Elmnts = 0..5;

M = set of Elmnts;

PtrM = ^M;

T = array[0..5] of PtrM;

procedure input(var z:t);

var i,u,y:integer; x:ptrm;

begin

writeln(‘Random elements’);

for i:=low(elmnts) to high(elmnts) do

begin new(x);write('Ctroka ',i+1,'=');

for u:=0 to n-1 do

begin

y:=Random(10); write(y);

include(x^,y);

end; writeln;

z[i]:=x;

end;

end;

function FindMinPower(z:t):integer;

var i,u,k,min:integer; p:PtrM;

begin

result:=low(elmnts); min:=0; k:=0;

for i:=0 to 9 do begin

p:=z[i];

while p^<>[] do

begin

for u:=0 to 9 do

if u in p^ then

begin

exclude(p^,u);

k:=k+1;

end;

if ((min>k) or (min=0)) and (not odd(i)) then begin result:=i; min:=k; end;

k:=0;

end;end;

end;

function FindMaxPower(z:t):integer;

var i,u,k,max:integer; p:PtrM;

begin

result:=low(elmnts); max:=0; k:=0;

for i:=0 to 9 do begin

p:=z[i];

while p^<>[] do

begin

for u:=0 to 9 do

if u in p^ then

begin

exclude(p^,u);

k:=k+1;

end;

if ((max<k) or (max=0)) and (odd(i)) then begin result:=i; max:=k; end;

k:=0;

end;end;

end;

procedure output(z:t);

var z2:t;

begin

z2:=z;

writeln(‘Lowest power in ',FindMinPower(z),' line ');

writeln(‘Most power in',FindMaxPower(z2),' line');

end;

var z1:t;

begin

randomize;

input(z1);

output(z1);

readln;

end.

Тестовый набор:

Тестовый набор

Номер теста

Исходные данные

Ожидаемый результат

1

64177

38673

51712

39865

47772

33679

2.3

2

49614

22629

92472

59505

77043

23274

5.2

Соседние файлы в папке Зайцев М. Г.