Зайцев М. Г. / 4
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ
Новосибирский государственный технический университет
Практическое занятие №4
по курсу «Информатика и программирование»
«Динамические переменные»
Факультет бизнеса
Группа: ФБИ-11
Студенты: Рыбаченко А.А.
Преподаватель: Зайцев М.Г.
Новосибирск
2012г.
Тема: Динамические переменные структурных типов, средства динамического распределения памяти, ссылочные типы
Цель: Сформировать практические навыки обработки данных представленных динамическими переменными структурных типов с использованием ссылочных типов, и средств динамического распределения памяти Object Pascal.
Задание
-
Для каждого варианта задания разработайте консольное приложение.
-
Разработайте тестовый набор и выполните тестирование приложения.
Варианты заданий
-
В одномерном массиве (типа 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 |
-
В одномерном динамическом массиве (типа 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 |