Помощь в написании студенческих работ
Антистрессовый сервис

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

Лабораторная работаПомощь в написанииУзнать стоимостьмоей работы

Ввод входных данных с клавиатуры. Контроль вводимых данных при помощи процедуры Val (). И в дальнейшем выполнение расчётов. Если мы вводим кол-во точек больше или меньше нужного выводится сообщение: 'ОШИБКА!!! Введенное число вне рамок диапазона'. Файлы прямого доступа — это файлы, у которого в любой момент времени, возможно, получить элемент с указанным доступом: Согласно заданному варианту… Читать ещё >

Разработка формата хранения данных программ и решение задач (реферат, курсовая, диплом, контрольная)

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

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 ((Vvz)) 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

Begin

min:=rad2;

writeln ('Min. radiys= ', min:4:2,' dlj tochki', k,'');

End;

if ((rad3>0) and (rad3

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

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

Показать весь текст
Заполнить форму текущей работой