Розробка формату зберігання даних програм і вирішення завдань

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Мета: вивчити можливості роботи з файлами в мові 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; Створення вихідного файлу
Зчитування вже записаного файлу, в який записуються координати точок. Перевірка на наявність файлу за допомогою функції IOResult ().
//--//--//--//--//--//--//--//--//--//--//--//--// --//--//--//--//--//--//--//--//--//--//--//--//-- //--//
Procedure CrTFile; Створення вхідного файлу
Створення файлу. Запис у цей файл координат точок.
//--//--//--//--//--//--//--//--//--//--//--//--// --//--//--//--//--//--//--//--//--//--//--//--//-- //--//
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; Створення вихідного файлу.
Зчитування вже записаного файлу, в який записуються координати точок. Перевірка на наявність файлу за допомогою функції IOResult ().
Якщо файл існує проводиться виконання розрахунків. Якщо не існує, то з'являється повідомлення: 'О Ш І Б К А! Файл не існує! '
//--//--//--//--//--//--//--//--//--//--//--//--// --//--//--//--//--//--//--//--//--//--//--//--//-- //--//
Procedure CrTFile; Створення вхідного файлу.
Створення файлу. Запис у цей файл координат точок.
//--//--//--//--//--//--//--//--//--//--//--//--// --//--//--//--//--//--//--//--//--//--//--//--//-- //--//
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]. xD [k]. x) + Sqr (D [i]. yD [k]. y));
il: = Sqrt (Sqr (D [i]. xD [l]. x) + Sqr (D [i]. yD [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]. xD [k]. x) + Sqr (D [i]. yD [k]. y));
kl: = Sqrt (Sqr (D [l]. xD [k]. x) + Sqr (D [l]. yD [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]. xD [l]. x) + Sqr (D [k]. yD [l]. y));
li: = Sqrt (Sqr (D [i]. xD [l]. x) + Sqr (D [i]. yD [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 ('4 to 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. Тестові приклади
Вхідний файл:
Координати перші точки:
. X = 4
. Y = 6
Координати другий точки:
. X = 9
. Y = 0
Координати третій точки:
. X = 32
. Y = 6
Вихідний файл:
Мін. радіус =: 7.21
Вхідний файл:
Координати перші точки:
. X = 10
. Y = 9
Координати другий точки:
. X = -34
. Y = -2
Координати третій точки:
. X = 3
. Y = 56
Координати четвертий точки:
. X = 1
. Y = 0
Вихідний файл:
Мін. радіус =: 34.06
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
23.9кб. | скачати


Схожі роботи:
Принципи розробки алгоритмів і програм для вирішення прикладних завдань
Розробка форматів зберігання програм Структурування
Розробка комплексних програм з вирішення актуальних соціальних проблем
Розробка форматів зберігання даних програми Структурування
Розробка стратегії формування ефективної управлінської команди для вирішення перспективних завдань
Створення бази даних функціональних аналогів Windows-програм для ОС Linux і розробка методики
Програмування вирішення завдань
Рішення завдань оптимізації бізнес процесів з використанням прикладних програм
Excel вирішення завдань з підбором параметрів
© Усі права захищені
написати до нас