Зміст
1 Постановка завдання
1.1 Опис предметної області розв'язуваної задачі
1.2 Функції, що реалізуються завданням
1.3 Вхідні документи, необхідні для вирішення задачі
1.4 Опис вихідної інформації
2 Розробка інформаційного забезпечення задачі
2.1 Опис реквізитів вхідної інформації
3 Опис технології та алгоритмів розв'язання задачі та їх машинна реалізація
3.1 Опис технології введення вхідної інформації
3.2 Узагальнений алгоритм вирішення задачі та його декомпіляція на модулі
3.3 Алгоритми реалізації окремих модулів завдання
Висновок
Введення
Для оперування матричними даними вирішується комплекс різних завдань: створення модуля, створення програмного інтерфейсу, створення процедур і функцій, необхідних для вирішення поставленого завдання.
Метою даної роботи є закріплення отриманих знань з мови програмування Turbo Pascal.
Для цього створюється модуль, який служить для здійснення операцій над матрицями та викликає програма, яка використовує цей модуль
1 Постановка завдання
1.1 Опис предметної області розв'язуваної задачі
В якості предметної області розглядається програма і модуль для обробки матричних даних.
У даному проекті розглядається процеси оперування матричними даними за допомогою окремого створеного модуля
1.2 Функції, що реалізуються завданням
У даному проекті мають бути реалізовані наступні функції:
Заповнення вихідної матриці різними способами;
Формування мінору мінімального елемента вихідної матриці;
Визначення кількості нулів в отриманому мінорі;
Висновок результату на екран, у файл або на принтер
1.3 Вхідні документи, необхідні для вирішення задачі
Для функціонування програми крім виконуваного файлу повинен бути присутнім розроблений модуль.
За умови заповнення матриці з файлу повинен бути присутнім файл, що містить числову матрицю.
1.4 Опис вихідної інформації
Програма виводить результат на екран, у файл або на принтер.
Результат є отриману матрицю С і рядок, що оповідає про кількість нулів у матриці С.
2 Розробка інформаційного забезпечення задачі.
2.1 Опис реквізитів вхідної інформації
Вхідна інформація являє собою матрицю довільного розміру, що складається з цілих чисел.
Для матриці створений тип matr = array [1 .. n, 1 .. n] of integer,
Де n - максимально допустима кількість рядків і стовпців.
У вхідному файлі може міститися матриця будь-якої розмірності, не перевершує n. Елементи у файлі повинні бути розділені символом «Пробіл», і були розбиті на рядки. За відсутності необхідних елементів, програми заповнить відсутні елементи нулями.
Якщо у вихідних даних є помилка, програма повідомить, і надасть можливість знову ввести дані.
3 Опис технології та алгоритмів розв'язання задачі та їх машинна реалізація.
3.1 Опис технології введення вхідної інформації
При формуванні матриці датчиком випадкових чисел необхідно тільки задати розмір матриці (кількість рядків і стовпців)
При введенні матриці з клавіатури буде запропоновано ввести розмір матриці і по черзі всі її елементи. Якщо елемент буде набрано невірно, програма видасть попереджувальне повідомлення.
3.2 Узагальнений алгоритм вирішення задачі та його декомпіляція на модулі
Даний проект містить модуль і викликає програму.
Завдання модуля полягає в наступному:
Заповнити вихідну матрицю А;
Обробити матрицю А і сформувати матрицю С, шляхом викреслювання рядка та стовпця матриці А, на перетині яких знаходиться мінімальний елемент матриці А;
Визначити кількість нулів у матриці С;
Вивести результат.
Завдання викликає програми полягає в наступному:
Створення інтерфейсу користувача - меню;
Використання засобів програмного модуля.
Схема алгоритму:
3.3 Алгоритми реалізації окремих модулів завдання
Модуль Modul 1 містить наступні процедури і функції:
procedure create (var b: matr; t: integer); - процедура створення матриці, t - спосіб створення;
procedure vivod (b: matr; t: integer; x: integer); - процедура виведення результату, t - спосіб виведення, x - тип матриці (вихідна, результуюча);
function nomi (x: char; b: matr): integer; - функція знаходження рядка або стовпця мінімального елемента матриці;
function null (c: matr): integer; - функція визначає кількість нулів у матриці;
procedure obrab (b: matr; var c: matr); - процедура створення мінору З з матриці А;
function FileExists (FileName: String): Boolean; - функція визначає створений запитаний на читання файл.
Зухвала програма містить:
procedure menu; - процедура, що створює програмний інтерфейс типу меню.
Текст модуля modul1:
unit modul1;
interface
{Uses wincrt, winprn;}
const n = 40;
type
matr = array [1 .. n, 1 .. n] of integer;
var k1, k2: integer;
procedure create (var b: matr; t: integer);
procedure vivod (b: matr; t: integer; x: integer);
function nomi (x: char; b: matr): integer;
function null (c: matr): integer;
procedure obrab (b: matr; var c: matr);
function FileExists (FileName: String): Boolean;
implementation
function FileExists;
var
F: file;
begin
{$ I-}
Assign (F, FileName);
Reset (F);
Close (F);
{$ I +}
FileExists: = (IOResult = 0) and (FileName <>'');
end;
function null;
var k, i, j: integer;
begin
k: = 0;
for i: = 1 to k1-1 do
for j: = 1 to k2-1 do
if c [i, j] = 0 then k: = k +1;
null: = k;
end;
procedure obrab;
var x, y, i, j: integer;
begin
x: = 0; y: = 0;
for i: = 1 to k1 do
begin
if i <> nomi ('i', b) then x: = x +1;
y: = 0;
for j: = 1 to k2 do
if (j <> nomi ('j', b)) And (i <> nomi ('i', b)) then
begin
y: = y +1;
c [x, y]: = b [i, j];
end;
end;
end;
function nomi;
var min, a, i, j: integer;
begin
min: = maxint;
for i: = 1 to k1 do
for j: = 1 to k2 do
begin
if b [i, j] <min then begin
min: = b [i, j];
if x = 'i' then a: = i;
if x = 'j' then a: = j;
end;
end;
nomi: = a;
end;
procedure create;
var i, j, x, e: integer;
f: text;
ch: char;
path, s: string;
begin
case t of
1: begin {random}
randomize;
writeln ('Vvedite razmer matrici');
write ('n ='); readln (k1);
write ('m ='); readln (k2);
for i: = 1 to k1 do
for j: = 1 to k2 do
b [i, j]: = random (21) -10;
end; {random}
2: begin {keyboard}
writeln ('Vvedite razmer matrici');
write ('n ='); readln (k1);
write ('m ='); readln (k2);
writeln ('Vvedite', k1 * k2, 'elementov');
for i: = 1 to k1 do
for j: = 1 to k2 do
begin
write ('Vvedite [', i ,',', j, '] element:');
readln (s);
val (s, x, e);
if e = 0 then b [i, j]: = x
else begin
Writeln ('Matrica dolzhna sostoyat''iz celih chisel');
readln;
i: = k1;
j: = k2;
end;
end;
end; {keyboard}
3: begin {FromFile}
i: = 1; j: = 1; s :=''; k1: = 1; k2: = 1;
Writeln ('Vvedite imya faila (ili polniy put)');
readln (path);
if FileExists (path) then
begin
Assign (f, path);
Reset (f);
repeat
Read (F, ch);
if ch = # 10 then begin
i: = i +1;
k1: = k1 +1;
k2: = j-1;
j: = 1;
end;
if ((ch <> '') and (ch <> # 13) and (ch <> # 10)) then s: = s + ch
else begin
if (s <>'') then
begin
val (s, x, e);
s :='';
if e = 0 then begin
b [i, j]: = x;
j: = j +1;
end
else begin
writeln ('Oshibka v dannih');
end;
end;
end;
until Eof (F);
if s <>''then begin
val (s, x, e);
s :='';
if e = 0 then begin
b [i, j]: = x;
j: = j +1;
end
else begin
writeln ('Oshibka v dannih');
end;
end;
Close (f);
end {FileExist}
else begin
writeln ('Fail ne sushestvuet');
readln;
end;
end; {FromFile}
end; {case}
end; {procedure}
procedure vivod;
var i, j: integer;
ff, fp: text;
path: string;
line: string;
begin
case t of
1: begin
for i: = 1 to k1-x do
begin
for j: = 1 to k2-x do
write (b [i, j]: 6);
writeln;
end;
if x = 1 then Writeln ('Kolichestvo nuley:', null (b));
end;
2: begin
Writeln ('Vvedite imya faila (ili polniy put)');
readln (path);
assign (ff, path);
rewrite (ff);
for i: = 1 to k1-x do
begin
for j: = 1 to k2-x do
write (ff, b [i, j], '');
writeln (ff);
end;
Writeln (ff, 'Kolichestvo nuley:', null (b));
Close (ff);
Writeln ('Matrica uspeshno sohranena v faile', path);
end;
(* 3: begin {Printer}
AssignDefPrn (fp);
for i: = 1 to k1 do
for j: = 1 to k2 do
Writeln (fp, b [i, j], '');
if KeyPressed and (ReadKey = # 27) then
begin
AbortPrn (Prn);
Break;
end;
Close (fp);
end; *) {Printer}
end; {case}
end; {Procedure}
end.
Текст викликає програми:
uses crt, modul1;
var A, c: matr;
f1, f2: boolean;
procedure menu;
var choise, cinp: char;
inp, e: integer;
begin
clrscr;
Writeln ('Menu');
Writeln ('1. Vvod matrici A');
Writeln ('2. Obraborat''matricu');
Writeln ('3. Vivesti rezultat');
Writeln ('4. Vihod');
choise: = readkey;
if choise = # 27 then halt;
if ((choise <> "1") and (choise <> '4 ') and (f1 = false)) then
begin
Writeln ('Snachala neobhodimo sozdat''matricu A');
cinp: = readkey;
if cinp = # 27 then halt;
menu;
end;
if ((choise = '3 ') and (f2 = false)) then
begin
Writeln ('Snachala neobhodimo obrabotat''matricu A');
cinp: = readkey;
if cinp = # 27 then halt;
menu;
end;
Case choise of
'1 ': Begin
f1: = true;
clrscr;
Writeln;
Writeln ('1. Sozdat sluchainuyu matricu ');
Writeln ('2. Vvesti s klaviaturi ');
Writeln ('3. Iz faila ');
cinp: = readkey;
val (cinp, inp, e);
if ((e = 0) And ((inp = 1) Or (inp = 2) Or (inp = 3))) then
begin
create (A, inp);
menu;
end
else begin
writeln ('Neverniy vibor');
readkey;
menu;
end;
end; {1}
'2 ': Begin
f2: = true;
obrab (a, c);
Writeln ('Matrica uspeshno obrabotana:');
Writeln ('Ishodnaya matrica:');
vivod (A, 1,0);
Writeln ('Naiden minor minimalnogo elementa [', nomi ('i', A ),',', nomi ('j', A ),']');
readkey;
menu;
end;
'3 ': Begin
clrscr;
Writeln;
Writeln ('1. Vivesti na ekran ');
Writeln ('2. Sohranit v fail ');
Writeln ('3. Raspechatat''');
cinp: = readkey;
val (cinp, inp, e);
if ((e = 0) And ((inp = 1) Or (inp = 2) Or (inp = 3))) then
begin
vivod (C, inp, 1);
readkey;
menu;
end
else begin
writeln ('Neverniy vibor');
readkey;
menu;
end;
end;
'4 ': Halt;
else begin
writeln ('Neverniy vibor');
readkey;
menu;
end;
end; {Case}
end;
BEGIN
clrscr;
f1: = false;
f2: = false;
menu;
readkey;
END.
Висновок
Виконавши цю роботу, ми ознайомилися з усіма питаннями, пов'язаними з процесом створення модулів у Турбо Паскалі та оперування матричними даними. Розширили свої знання в області Турбо Паскаля і навчилися застосовувати їх у вирішенні математичних завдань. З наочних прикладів видно, що використання модулів серйозно полегшує трудомісткі процеси, а також перешкоджає захаращення програми кодом.