Лабораторная работа

Лабораторная работа на тему Разработка формата хранения данных программ и решение задач

Работа добавлена на сайт bukvasha.net: 2014-12-15

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 8.11.2024


Цель: изучить возможности работы с файлами в языке Pascal. Получить навыки разработки формата хранения данных на примере решения задач аналитической геометрии. Освоить приемы структурирования программ.
Задание:
Задано множество точек. Найти параметры окружности минимального радиуса проходящей через три точки множества.
Изучить процедуры и функции языка Pascal для работы с файлами прямого и последовательного доступа.
Согласно заданному варианту, разработать формат и структуру файла прямого доступа для хранения входных данных.
Выходные данные вывести на экран и сохранить в текстовом файле.
При написании программы организовать контроль вводимых данных используя функцию IOResult();
Условие задачи с реквизитами исполнителя должны быть представлены на экране при запуске программы.
Структурировать программу с использованием процедур и функций.
Реализовать возможность ввода данных из файла и с клавиатуры.

1. Теоретическая часть:
Файл - именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, электронного «виртуального» диска), либо логическое устройство – потенциальный источник или приемник информации.
Классификация файлов по типу доступа к элементам:
Файлы прямого доступа – это файлы, у которого в любой момент времени, возможно, получить элемент с указанным доступом:
А.Типизированные
F : file of <тип>;
F : file of point <точки>;
Б.Без типа
F : file;
2) Файлы последовательного доступа – это файлы у которых доступ к элементам осуществляется строго последовательно и отсутствует доступ по номеру элемента. (текстовые).
F : text;
В своей      лабораторной работе я использовал файлы последовательного доступа. Следовательно, я использовал текстовые файлы, что обуславливает точность хранения данных программы. Для перевода  числа в строку используем Function IntToStr, для создания файла используем Procedure CrTFile, для считывания из файла используем Procedure ReDFile.
2. Описание блоков программы
Procedure titlist;  Tитульная страница.
Выводит на экран условия задачи с реквизитами исполнителя.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Function IntToStr; Перевод числа в строку.
Эта функция переводит число в строку.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure PROV; Проверка вводимых данных.
В этой процедуре происходит контроль вводимых данных при помощи Val ().
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure Osnova;  Расчёты программы
В этой процедуре происходят расчёты основной программы:
Проверка на равность отдельных отрезков исходящих из одной точки.
На существование возможных радиусов. И на существование наименьшего радиуса. Запись в текстовый файл Минимального радиуса.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure Klava;  Bвод входных данных с клавиатуры
Ввод входных данных с клавиатуры. Контроль вводимых данных при помощи процедуры Val ().  И в дальнейшем выполнение расчётов.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure ReDFile; Cоздание выходного файла
Считывание уже записанного файла, в который записываются координаты точек. Проверка на существование файла с помощью функции IOResult ().
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure CrTFile; Cоздание входного файла
Создание файла. Запись в этот файл координат точек.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure Menu; Предоставление пользователю варианта выбора дальнейшего действия программы.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Сама программа.
3. Обоснование выбора средств программной реализации блоков
Procedure titlist;                                                    Tитульная страница.
Выводит на экран условия задачи с реквизитами исполнителя.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Function IntToStr(V:integer):string;                   Перевод числа в строку.
V - число, которое переводим в строку – S..
V – параметрическая переменная.
String – тип возвращ. значения.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure PROV(Prigl:string; var V:integer; nz,vz:integer);   Проверка.
Prigl - приглашение, V - возращаемое число,
Nz - нижнее значение, vz - верхнее значение.
V – переменная, которая имеет непосредственную связь с самой программой.
Prigl - параметрическое заначение.
V – параметрическая переменная.
Nz, vz – параметрические заначения.
В этой процедуре происходит контроль вводимых данных при помощи Val ().
Если мы вводим буквы то, это строковые значения и выводится сообщение:
'ОШИБКА!!! Некорректные данные'.
Если мы вводим кол-во точек больше или меньше нужного выводится сообщение: 'ОШИБКА!!! Введенное число вне рамок диапазона'.
Если мы вводим координаты точек больше большего значения или меньше меньшего то выводиться сообщение: 'ОШИБКА!!! Число должно быть от Nz до Vz.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure Osnov(var m:integer;d:pnt);                            Расчёты программы.
M – параметрическая переменная.
D -  параметрическое значение.
В этой процедуре происходят расчёты основной программы:
Проверка на равность отдельных отрезков исходящих из одной точки.
На существование возможных радиусов. И на существование наименьшего радиуса. Запись в текстовый файл Минимального радиуса.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure Klava;                                    Bвод входных данных с клавиатуры.
Ввод входных данных с клавиатуры. Контроль вводимых данных при помощи процедуры Val ().  И в дальнейшем выполнение расчётов.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure ReDFile;                                           Cоздание выходного файла.
Считывание уже записанного файла, в который записываются координаты точек. Проверка на существование файла с помощью функции IOResult ().
Если файл существует производится выполнение расчётов. Если не существует, то появляется сообщение: 'О Ш И Б К А ! Файл не существует!'
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure CrTFile;                                                   Cоздание входного файла.
Создание файла. Запись в этот файл координат точек.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Procedure Menu;                                Выводит на экран меню программы.
Данная процедура выводит на экран меню программы, руководствуясь которым мы можем выполнять различные дальнейшие действия.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Выполнение самой программы.
Сама программа состоит из двух процедур: Titlist, Menu.
//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
Листинг программы:
PROGRAM L_3;
Uses crt;
Type Point = Record               {zapis s koordinatami to4ek}
x : integer;                 {koordinatu X}
y : integer;                 {koordinatu Y}
END;
pnt = Array [1..20] Of Point; {koordinati to4ek}
{*************************** ************************************************}
{****************************************************************************}
procedure Titlist;
BEGIN
clrscr;
writeln('      Doneckiy gosudarstvennuy institut intelekta');
writeln;
writeln;
gotoxy(40,6);
write('Kafedra programnogo obespecheniy');
gotoxy(40,7);
writeln('    intellektualnuh sistem');
gotoxy(19,10);
writeln('     Laborotornay rabota #3');
writeln('          po kursu:"OP i AY"');
writeln('              po teme:"Razrabotka formatov hranenij dannih programmi.  "');
gotoxy(60,20);
write('Vupolnil:');
gotoxy(60,21);
write(');
gotoxy(60,22);
write();
writeln;
writeln;
writeln;
write('Nagmite lubuy klavishu');
readkey;
clrscr;
writeln('  Zadanie: Zadono mnogestvo tochek . Nayti parametru');
writeln('minimalnogo radiusa,prohodyshie cherez 3 tochki mnogestva.');
gotoxy(1,25);
write('Nagmite lubuy klavishu...');
readkey;
END;
{****************************************************************************}
{****************************************************************************}
function IntToStr(V:integer):string;
var S:string[11];
BEGIN
Str(V,S);
IntToStr:=S;
END;
{**************************** *********************************************}
procedure PROV(Prigl:string; var V:integer; nz,vz:integer);
{Prigl-priglawenie, V-vozrawaemoe 4islo,
nz-nignee zna4enie,vz-verhnee zna4enie}
Var S,S1:string[11];
Code:integer;
f:boolean;
BEGIN
repeat
write(Prigl);
f:=false;
readln(S);
val(S,V,Code);
if (Code)<>0 then
writeln(' OSHIBKA','NEKORECTNIE DANNUE')
else begin
str(V,S1);
if  S1 <> S then
writeln(' OSHIBKA','VVEDENNOE CHISLO VNE RAMKAH DEAPOZONA')
else
if ((V<nz) or (V>vz)) then begin
writeln(' OSHIBKA','CHISLO DOLGNO BUT OT '+InttoStr(nz)+' DO '+IntToStr(vz));
end
else f:=true;
end;
Until f;
END;
{****************************************************************************}
{****************************************************************************}
procedure Osnov(var m:integer;d:pnt);
Var out_f:text;                  {M-kolli4estvo to4ek, D-koordinati tochek}
FName:string[20];
i,k,l:integer;             {s4et4iki}
ki,kl,lk,li,ik,il:real;    {dlinu vektorov}
rad1,rad2,rad3:real;       {dlinu radiysov}
min:real;                  {Min. radiys}
BEGIN
ClrScr;
rad1:=0; rad2:=0; rad3:=0; min:=0;
for i:=1 to (m-2) do
BEGIN
textcolor(Green);
ik:=Sqrt(Sqr(D[i].x-D[k].x)+Sqr(D[i].y-D[k].y));
il:=Sqrt(Sqr(D[i].x-D[l].x)+Sqr(D[i].y-D[l].y));
if (il=ik) then
Begin
rad1:=ik;
writeln ( 'HKA ',i,'- CENTR OKRYGNOSTI')
End
Else
writeln('HKA ',i,' NE JAVLJETSJ CENTROM OKRYGNOSTI');
END;
for k:=i+1 to (m-1) do
BEGIN
textcolor(lightgray);
ki:=Sqrt(Sqr(D[i].x-D[k].x)+Sqr(D[i].y-D[k].y));
kl:=Sqrt(Sqr(D[l].x-D[k].x)+Sqr(D[l].y-D[k].y));
if (kl=ki) then
Begin
rad2:=ki;
writeln ( 'HKA ',k,'- CENTR OKRYGNOSTI')
End
Else
writeln('HKA ',k,' NE JAVLJETSJ CENTROM OKRYGNOSTI');
END;
for l:=k+1 to m do
BEGIN
textcolor(blue);
lk:=Sqrt(Sqr(D[k].x-D[l].x)+Sqr(D[k].y-D[l].y));
li:=Sqrt(Sqr(D[i].x-D[l].x)+Sqr(D[i].y-D[l].y));
if (lk=li) then
Begin
rad3:=lk;
writeln ( 'HKA ',l,'- CENTR OKRYGNOSTI')
End
Else
writeln('HKA ',l,' NE JAVLJETSJ CENTROM OKRYGNOSTI');
END;
writeln ('Nagmite lubyu klaviwy...');
readLn;
if rad1>0 then
BEGIN
textcolor(lightred);
min:=rad1;
writeln ('Min. radiys= ' ,min:4:2,' ¤«п в®зЄЁ' ,i,'');
if ((rad2>0) and (rad2<min)) then
Begin
min:=rad2;
writeln ('Min. radiys= ' ,min:4:2,' dlj tochki' ,k,'');
End;
if ((rad3>0) and (rad3<min)) then
Begin
min:=rad3;
writeln ('Min.radiys= ' ,min:4:2,' dlj tochki' ,l,'');
End
ELSE
if rad2>0 then
BEGIN
min:=rad2;
writeln ('Min.radiys= ' ,min:4:2,' dlj tochki' ,k,'');
if ((rad3>0) and (rad3<min)) then
Begin
min:=rad3;
writeln ('Min. radiys= ' ,min:4:2,' dlj tochki' ,l,'');
End
ELSE
if rad3>0 then
BEGIN
min:=rad3;
writeln ('Min. radiys= ' ,min:4:2,' dlju tochki' ,l,'');
END;
if min=0 then
writeln ('HKA NE OBRAZUET RADIYS OKRYGNOSTI');
readkey;
End;
End;
TextColor(3);
TextBackground(0);
GoToXY(30,13);
WriteLn('Min. radiys=: ', min:4:2);
GoToXY(3,25);
NormVideo;
write('Dlj sohranenij nagmite ''ctrl+S'' ');
GoToXY(50,25);
write('Dlj prodolgenij nagmite ''Esc'' ');
if ReadKey=#19 then begin
clrscr;
write('Vvedite imj vihodnogo fajla: ');
readLn(FName);
Assign(out_f,FName);
Rewrite(out_f);
WriteLn(out_f,'Min. radiys= ',min);
Close(out_f);
writeln('Fajl yspewno sohranen');
readln;
end;
END;
{******************** *******************************************************}
{****************************************************************************}
procedure Klava;
Var
m:integer;    {kolli4estvo to4ek}
i:integer;    {s4et4ik}
d:pnt;        {koordinati to4ek}
BEGIN
clrscr;
PROV('Kolli4estvo to4ek M=',m,3,20);
for i:=1 to M do begin
writeLn('Vvedite koordinati ', i, '-j to4ki:');
PROV('.X = ', D[i].X,-99,99);
PROV('.Y = ', D[i].Y,-99,99);
end;
Osnova(m,d);
END;
{*********************** ****************************************************}
{****************************************************************************}
procedure ReDFile;
var in_f:file;
FName:string[20];
f:word;
m:integer;    {kolli4estvo to4ek}
i:integer;    {s4et4ik}
d:pnt;        {koordinati to4ek}
BEGIN
clrscr;
f:=0;
write('Vedite imj fajla: ');
readLn(FName);
Assign(in_f,FName);
{$I-}
Reset(in_f,2);
{$I+}
if IOResult=0 then
begin
blockread(in_f, m,1);
for i:=1 to m do begin
blockread(in_f, D[i].X,1);
blockread(in_f, D[i].Y,1);
end;
Close(in_f);
if f=0 then
Osnova(m,d);
end
else
begin
writeln('OSHIBKA','FAJL NE SYWESTVYET');
readln;
end;
END;
{*********************** ****************************************************}
{****************************************************************************}
procedure CrTFile;
var in_f: file;
FName:string[20];
m:integer;        {kolli4estvo to4ek}
i:integer;        {s4et4ik}
D:pnt;            {koordinati to4ek}
BEGIN
clrscr;
write('Vvedite imj fajla: ');
readLn(FName);
Assign(in_f,FName);
begin
clrscr;
Rewrite(in_f,2);
PROV('Vvedite kolli4estvo to4ek:',m,3,20);
BlockWrite(in_f,m,1);
for i:=1 to m do begin
writeLn('Vvedite koordinati ', i, '-j to4ki:');
PROV('.X = ', D[i].X,-99,99);
BlockWrite(in_f, D[i].X,1);
PROV('.Y = ', D[i].Y,-99,99);
BlockWrite(in_f, D[i].Y,1);
end;
ClrScr;
Close(in_f);
clrscr;
writeln('Fajl yspewno sozdan');
readln;
end;
END;
{****************************************************************************}
{****************************************************************************}
procedure Menu;
var
ch:char;
BEGIN
repeat
clrscr;
writeLn('4to vi hotite sdelat:');
writeLn('1: dlj voda vhodnih dannih s klaviatyru..');
writeLn('2: dlj s4ituvanij vhodnih dannih iz fajla..');
writeLn('3: dlj sozdanij vhodnogo fajla..');
writeLn(#10#13);
writeLn('0: dlj vihoda..');
repeat
ch:=ReadKey;
Until (ch='1') or (ch='2') or (ch='3') or (ch='0');
case ch of
'1': Klava;
'2': ReDFile;
'3': CrTFile;
end;
Until ch='0';
END;
{****************************************************************************}
{****************************************************************************}
BEGIN
Titlist;
Menu;
END.
5. Тестовые примеры
Входной файл:
Координаты 1-ой точки:
.X = 4
.Y = 6
Координаты 2-ой точки:
.X = 9
.Y = 0
Координаты 3-ей точки:
.X = 32
.Y = 6
Выходной файл:
Мин. радиус =: 7.21
Входной файл:
Координаты 1-ой точки:
.X = 10
.Y = 9
Координаты 2-ой точки:
.X = -34
.Y = -2
Координаты 3-ей точки:
.X = 3
.Y = 56
Координаты 4-ой точки:
.X = 1
.Y = 0
Выходной файл:
Мин. радиус =: 34.06

1. Реферат на тему Jane Eyre Role Of Women Essay Research
2. Курсовая Бюджет государства и его роль в реализации социальной политики
3. Методичка на тему Технология обработки древесины Элементы машиноведения
4. Реферат Курс лекций по анализу экономической деятельности
5. Реферат Резервные фонды
6. Курсовая Балансовый метод в статистическом изучении трудовых показателей 2
7. Курсовая Організація роботи дільничної станції Хутір-Михайлівський
8. Реферат на тему Клінічне та лабораторне об рунтування реабілітації зубощелепного апарату при односторонніх необмежених
9. Реферат на тему Bigfoot Essay Research Paper Bigfoot
10. Диплом Станция технического обслуживания легковых автомобилей с разработкой участка окраски