Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Новосибирский государственный технический университет»
Факультет бизнеса
Кафедра экономической информатики
Расчётно-графическая работа
по дисциплине «Информатика и программирование»
Выполнила:
студентка ФБИ – 22
Проверил: Зайцев М.Г.
Новосибирск 2013
Оглавление
1.Вариант задания 3
2.Текст программ на Object Pascal 4
3.Тестовые наборы данных для тестирования типа данных 22
-
Вариант задания
Упорядочить в заданном порядке записи типизированного файла с помощью упорядоченного списка.
Таблица 1. Вариант задания.
Номер Варианта |
Тип записей |
Упорядочение |
4 |
T = record num, denom: real end; - простые дроби; |
по убыванию |
Для выполнения работы вам необходимо реализовать динамическую информационную структуру – упорядоченный список.
Порядок выполнения
-
В режиме консольного приложения в отдельном модуле UOrderedList:
-
опишите необходимые типы и реализуйте упорядоченный в соответствии с вариантом задания список;
-
протестируйте каждую операцию. Тестовые наборы поместите в таблицу следующего вида:
-
Создайте новое консольное приложение и подключите к нему разработанный модуль UOrderedList.
-
В головной программе консольного приложения (файл с расширением dpr) выполните следующее:
-
создайте типизированный файл на диске (тип записей определяется вашим вариантом);
-
заполните файл записями;
-
выведите содержимое файла на экран;
-
создайте пустой упорядоченный список;
-
перепишите в него записи из файла;
-
удалите файл;
-
создайте новый файл;
-
перепишите в него записи из упорядоченного списка;
-
выведите содержимое файла на экран;
-
проанализируйте результат.
-
Текст программ на Object Pascal
Текст модуля uFrac
unit UFrac;
interface
uses SysUtils;
type
Frac=record
num,denom:integer;
end;
PFrac=^Frac;
//------------------Ввод дроби--------------------------------------------------
procedure InputF(var a:Frac);
//------------------Операция сложения-------------------------------------------
function AddF(a,b:Frac):Frac;
//------------------Операция вычитания------------------------------------------
function SubtF(a,b:Frac):Frac;
//------------------Операция умножения------------------------------------------
function MultF(a,b:Frac):Frac;
//------------------Операция деления--------------------------------------------
function DivF(a,b:Frac):Frac;
//------------------Проверка на равенство---------------------------------------
function EqualF(a,b:Frac):boolean;
//------------------Дробь в строку----------------------------------------------
function FracToStr(a:Frac):string;
//------------------Больше------------------------------------------------------
function FindIfBigger(a,b:Frac):boolean;
//------------------Меньше------------------------------------------------------
function FindIfSmaller(a,b:Frac):boolean;
implementation
//------------------Нахождение НОД числит. и знаменат.--------------------------
function FindNOD(a,b:integer):integer;
var x:integer;
begin
a:=abs(a);
if a>b then begin
repeat
x:=b;
b:=a mod b;
a:=x;
until b=0;
result:=a;
end
else begin
repeat
x:=a;
a:=b mod a;
b:=x;
until a=0;
result:=b;
end;
end;
//------------------Сокращение дроби--------------------------------------------
procedure ReductF(var a:Frac);
var
nod:integer;
begin
nod:=FindNod(a.num,a.denom);
a.num:=a.num div nod;
a.denom:=a.denom div nod;
end;
//------------------------------------------------------------------------------
procedure InputF(var a:Frac);
begin
write('числитель: ');readln(a.num);
write('знаменатель: ');readln(a.denom);
ReductF(a);
end;
//------------------Проверка числителя на значение 0----------------------------
function CheckIfZero(a:Frac):boolean;
begin
if a.num=0 then result:=TRUE
else result:=FALSE;
end;
//------------------------------------------------------------------------------
function AddF(a,b:Frac):Frac;
begin
result.num:=a.num*b.denom+b.num*a.denom;
result.denom:=a.denom*b.denom;
ReductF(result);
if not CheckIfZero(result) then
ReductF(result);
end;
//------------------------------------------------------------------------------
function SubtF(a,b:Frac):Frac;
begin
result.num:=a.num*b.denom-b.num*a.denom;
result.denom:=a.denom*b.denom;
if not CheckIfZero(result) then
ReductF(result);
end;
//------------------------------------------------------------------------------
function MultF(a,b:Frac):Frac;
begin
result.num:=a.num*b.num;
result.denom:=a.denom*b.denom;
ReductF(result);
end;
//------------------------------------------------------------------------------
function DivF(a,b:Frac):Frac;
begin
result.num:=a.num*b.denom;
result.denom:=a.denom*b.num;
ReductF(result);
end;
//------------------------------------------------------------------------------
function EqualF(a,b:Frac):boolean;
begin
a.num:=a.num*b.denom;
b.num:=b.num*a.denom;
if a.num=b.num then result:=TRUE
else result:=FALSE;
end;
//------------------------------------------------------------------------------
function FindIfBigger(a,b:Frac):boolean;
begin
a.num:=a.num*b.denom;
b.num:=b.num*a.denom;
if a.num>b.num then result:=TRUE
else result:=FALSE;
end;
//------------------------------------------------------------------------------
function FindIfSmaller(a,b:Frac):boolean;
begin
a.num:=a.num*b.denom;
b.num:=b.num*a.denom;
if a.num<b.num then result:=TRUE
else result:=FALSE;
end;
//------------------------------------------------------------------------------
function FracToStr(a:Frac):string;
begin
result:='';
if (abs(a.num)=a.denom) or (a.denom=1) then result:=result+IntToStr(a.num) else
if a.num<>0 then
result:=result+IntToStr(a.num)+'/'+IntToStr(a.denom)
else result:=result+'0';
end;
//------------------------------------------------------------------------------
end.