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

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

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

Практическое задание №5

по дисциплине информатика и программирование

на тему: «Модульное программирование»

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

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

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

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

Новосибирск

2012г.

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

Задание:

  1. Разработайте тип данных «простая дробь» (Frac) для выполнения операций над простыми дробями. Предусмотрите возможность выполнения операций: сложение, умножение, деление, вычитание. Включите в состав подпрограмм для работы с простыми дробями: процедуру ввода значений в переменную типа «простая дробь» с клавиатуры терминала, функцию для формирования строкового представления простой дроби, функцию для сокращения простых дробей, поиска наибольшего общего делителя.

  2. Разработайте тестовый набор и выполните тестирование разработанного типа данных.

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

unit UFrac;

//тип данных простая дробь с операцией сложения

interface

//--------------------------------------------

type

//--------------------------------------------

PrtFrac=^Frac;

Frac = record//простая дробь

num: integer;//числитель

denom: integer;//знаменатель

end;

//--------------------------------------------

function Add(a,b: Frac): frac;//сложение простых дробей

function Minus(a,b: frac): frac;//разность простых дробей

function Mult(a,b: frac): frac;//произведение простых дробей

function Divis(a,b: frac): frac;//деление простых дробей

function FracToStr(a: frac): string;//перевод в строку

function NOD(a,b:integer): integer;//наименьший общий делитель

procedure CutFrac(var a: frac);

procedure InputFrac(var a:frac);

procedure prov(var a: frac);//смена знака

//--------------------------------------------

implementation

uses

SysUtils;

//--------------------------------------------

function Add(a,b: Frac): Frac;

begin

result.num:= a.num*b.denom + b.num*a.denom;

result.denom:= a.denom*b.denom;

prov(result);

CutFrac(result);

end;

//--------------------------------------------

function Minus(a,b: frac): frac;

begin

result.num:= a.num*b.denom - b.num*a.denom;

result.denom:= a.denom*b.denom;

prov(result);

CutFrac(result);

end;

//--------------------------------------------

function Mult(a,b: frac): frac;

begin

prov(a);

result.num:=a.num*b.num;

result.denom:=a.denom*b.denom;

CutFrac(result);

end;

//--------------------------------------------

function Divis(a,b: frac): frac;

begin

result.num:=a.num*b.denom;

result.denom:=a.denom*b.num;

prov(result);

CutFrac(result);

end;

//--------------------------------------------

function NOD(a,b:integer):Integer;

begin

a:=abs(a);

b:= abs(b);

while a<>b do

if a>b then

a:=a-b

else if a<abs(b) then b:=b-a;

result:=a;

end;

//--------------------------------------------

procedure CutFrac(var a:frac);

var c:integer;

begin

c:=nod(a.num,a.denom);

a.num:=a.num div c;

a.denom:=a.denom div c;

end;

//--------------------------------------------

procedure InputFrac(var a:frac);

begin

write('Frac.num= ');readln(a.num);

write('Frac.denom= ');readln(a.denom);

CutFrac(a);

end;

//--------------------------------------------

procedure prov(var a:frac);

begin

if a.denom<0 then

begin

a.denom:=(-1)*a.denom;

a.num:=(-1)*a.num;

end;

end;

//--------------------------------------------

function FracToStr(a:frac):string;

begin

result:=inttostr(a.num)+'/'+inttostr(a.denom);

end;

end.

program PFrac;

{$APPTYPE CONSOLE}

//--------------------------------------------

uses

SysUtils,

UFrac in 'UFrac.pas';

//--------------------------------------------

var

a: PrtFrac;

b: PrtFrac;

c: PrtFrac;

//--------------------------------------------

begin

new(a);

new(b);

new(c);

InputFrac(a^);

InputFrac(b^);

c^:= Add(a^,b^);//сложение простых дробей

writeln('Add= ',FracToStr(c^));

c^:= Minus(a^,b^);//разность простых дробей

writeln('Minus= ',FracToStr(c^));

c^:= Mult(a^,b^);//произведение простых дробей

writeln('Multiplication= ',FracToStr(c^));

c^:= Divis(a^,b^);//деление простых дробей

writeln('Division= ',FracToStr(c^));

readln;

end.

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

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

Номер теста

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

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

1

A=3/4

B=1/2

Add=5/4

Minus=1/4

Multiplication=3/8

Division=6/4

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