на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка формата хранения данных программ и решение задач

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

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.