МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ
Новосибирский государственный технический университет
ЛАБОРАТОРНАЯ РАБОТА № 1
по курсу «Информатика и программирование»
«Динамические переменные»
Факультет бизнеса
Группа: ФБИ-11
Студенты: Рыбаченко А.А., Сердюков К.Е.
Преподаватель: Забуга А.А.
Новосибирск
2012г.
Цель: Сформировать практические навыки обработки данных представленных динамическими переменными структурных типов с использованием ссылочных типов, и средств динамического распределения памяти Object Pascal.
Задание:
-
Для каждого варианта задания разработайте консольное приложение.
-
Разработайте тестовый набор и выполните тестирование приложения.
-
Ввод вывод и поиск значений выполняйте с помощью подпрограмм.
Варианты заданий:
-
В динамическом одномерном массиве (типа T) записей (типа Rec)
const
n = 10; //количество переменных в массиве
type
Rec = record //запись с двумя полями
x,y: real;
end;
PT = ^T;//ссылочный тип указателей на массивы типа T
T = array[0..n-1] of Rec;//тип динамического массива
отыскать и вывести:
-
запись с минимальным значением произведения полей x*y среди записей с чётными значениями индекса;
-
запись с минимальным значением произведения полей x*y среди записей с нечётными значениями индекса;
-
сумму полей x записей с чётными значениями индекса;
-
произведение полей y записей с нечётными значениями индекса;
Тест программы:
program Zada4a11;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n = 5; //количество переменных в массиве
type
Rec = record //запись с двумя полями
x,y: real;
end;
PT = ^T;//ссылочный тип указателей на массивы типа T
T = array[1..n] of Rec;//тип динамического массива
procedure input(var x:pt);
var i:integer; p:real;
begin
x:=nil;
new(x);
for i:=low(T) to high(T) do
begin
write('Vvedite 4iclo ',i,' po X ');
readln(p);
x^[i].x:=p;
write('Vvedite 4iclo ',i,' po Y ');
readln(p);
x^[i].y:=p;
end;
end;
function MinArr(x:pt;var u:integer):real;
var i:integer;
begin
result:=x^[low(t)+1].x*x^[low(t)+1].y; u:=low(t)+1;
for i:=low(T) to high(T) do
if (result>x^[i].x*x^[i].y) and (i mod 2=0) then
begin result:=x^[i].x*x^[i].y; u:=i; end;
end;
procedure output(x:pt);
var i:integer;
begin
writeln;
writeln('Minimalmoe proizvedenie ravno ',MinArr(x,i):0:2,' v pozicii ',i );
end;
var
p:PT;
begin
input(p);
output(p);
dispose(p);
readln;
end.
Таблица 1.1. Тестовый набор.
|
Тестовый набор |
|||||
Номер теста |
Исходные данные |
Ожидаемый результат |
||||
1 |
X=1,Y=7 |
X=3,Y=9 |
X=5,Y=0 |
X=6,Y=4 |
X=5,Y=5 |
24.00 |
2 |
X=0,Y=0 |
X=1,Y=1 |
X=2,Y=2 |
X=3,Y=3 |
X=4,Y=4 |
1.00 |
Тест программы:
program Zada4a12;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n = 5; //количество переменных в массиве
type
Rec = record //запись с двумя полями
x,y: real;
end;
PT = ^T;//ссылочный тип указателей на массивы типа T
T = array[1..n] of Rec;//тип динамического массива
procedure input(var x:pt);
var i:integer; p:real;
begin
x:=nil;
new(x);
for i:=low(T) to high(T) do
begin
write('Vvedite 4iclo ',i,' po X ');
readln(p);
x^[i].x:=p;
write('Vvedite 4iclo ',i,' po Y ');
readln(p);
x^[i].y:=p;
end;
end;
function MinArr(x:pt;var u:integer):real;
var i:integer;
begin
result:=x^[low(t)].x*x^[low(t)].y; u:=low(t);
for i:=low(T) to high(T) do
if (result>x^[i].x*x^[i].y) and (i mod 2<>0) then
begin result:=x^[i].x*x^[i].y; u:=i; end;
end;
procedure output(x:pt);
var i:integer;
begin
writeln;
writeln('Minimalmoe proizvedenie ravno ',MinArr(x,i):0:2,' v pozicii ',i );
end;
var
p:PT;
begin
input(p);
output(p);
dispose(p);
readln;
end.
Таблица 1.2. Тестовый набор.
|
Тестовый набор |
|||||
Номер теста |
Исходные данные |
Ожидаемый результат |
||||
1 |
X=1,Y=1 |
X=2,Y=2 |
X=3,Y=3 |
X=5,Y=5 |
X=7,Y=7 |
1.00 |
2 |
X=5,Y=9 |
X=3,Y=7 |
X=2,Y=9 |
X=4,Y=5 |
X=3,Y=7 |
18.00 |
Текст программы:
program Zada4a13;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n = 5; //количество переменных в массиве
type
Rec = record //запись с двумя полями