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

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

Цель: изучить возможности работы с файлами в языке 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 ( 'TOCHKA ',i,'- CENTR OKRYGNOSTI')


End


Else


writeln('TOCHKA ',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 ( 'TOCHKA ',k,'- CENTR OKRYGNOSTI')


End


Else


writeln('TOCHKA ',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 ( 'TOCHKA ',l,'- CENTR OKRYGNOSTI')


End


Else


writeln('TOCHKA ',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 ('TOCHKA 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

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:1504
Символов:20401
Размер:39.85 Кб.