Складання програм з використанням модулів.
Теоретичні відомості.
Прогресивним підходом у програмувонні вважається використання модулів або блоків. Набір процедур та функцій, об’єднаних в один блок (UNIT), може компілюватися незалежно від головної програми. Завдяки цьому час компіляції для великих програм може на багато зменшуватися, а це має велике значення при відладці програм, які приходиться досить часто компілювати.
МОДУЛЬ(UNIT) – це програмна одиниця, текст якої відкомпільовано незалежно. Вона включає в себе визначення констант, типів даних, змінних, процедур та функцій, доступних для використання в програмах, які викликають.
Внутрішня структура модуля прихована від користувача.
Структура модуля.
В модулі можна виділити декілька розділів: заголовок, інтерфейсна частина, реалізаційна частина і інілізаційна частина.
Заголовок модуля.
UNIT ім’я модуля;
Інтерфейсна частина.
INTERFACE початок розділу оголошень;
USES модулі, які використовуються;
LABEL оголошення доступних глобальних
міток;
CONST оголошення доступних глобальних
констант;
TYPE оголошення доступних глобальних
типів;
VAR оголошення доступних глобальних
змінних;
PROCEDURE(FUNCTION) заголовки доступних процедур (функцій);
Реалізаційна частина.
IMPLEMENTATION початок розділу реалізації;
USES модулі, які використовуються при реалізації;
LABEL оголошення скритих глобальних міток;
CONST оголошення глобальних констант;
TYPE оголошення скритих глобальних типів;
VAR оголошення скритих глобальних змінних;
PROCEDURE(FUNCTION) тіла доступних та скритих процедур (функцій);
Інілізаційна частина.
BEGIN основний блок модуля.
END.
Індивідуальне завдання.
Варіант №7.
Скласти програму на мові Pascal розв’язку даної задачі та виконання її на ЕОМ. Процедури та функції оформити у вигляді модуля.
Задача 1.
Модуль:
unit gregory;
{---------------------------------------------------------}
interface
uses crt;
var
c,k:array [1..5,1..4] of real;
i,j:integer;
m:byte;
function facktorial(x:integer):real;
{---------------------------------------------------------}
implementation
function facktorial(x:integer):real;
var
i:integer;
facktorial1:real;
begin
facktorial1:=1;
if i<=1 then facktorial:=1 else begin
for i:=1 to x do facktorial1:=facktorial1*i;
facktorial:=facktorial1;
end;
end;
{---------------------------------------------------------}
begin
end.
Запускна програма:
uses gregory;
begin
clrscr;
writeln('Введiть елементи масива:');
writeln;
for i:=1 to 5 do
for j:=1 to 4 do begin
write('Елемент [',i,',',j,']=');
readln(c[i,j]);
end;
m:=0;
clrscr;
for i:=1 to 5 do begin
for j:=1 to 4 do begin
k[i,j]:=c[i,j]/facktorial(i+j);
if k[i,j]<1 then m:=m+1;
write(k[i,j]:7:5,' ');
end;
writeln;
end;
end.
Робота з файлами.
Теоретичні відомості
Файл – це сукупність даних однакового типу. Таке визначення збігається з визначенням масиву, але, на відміну від останнього, файл зберігають на диску, кількість даних у файлі при його описуванні не вказується, елементи файла не мають індексів, що ускоаднює роботу з ними.
Опис файлового типу має вигляд:
Type <ім'я типу> = File of <тип компонент>;
Процедури і функції для роботи з файлами:
Assign – зв'язує деякий зовнішній файл на диску з файловою змінною.
Reset – відкриває уже раніше створений файл данних на диску, ім'я якого було перед цим пов'язане процедурою Assign.
Rewrite – створює новий файл і відкриває його. Якщо файл вже існує вміст знищується, а сам файл відкривається знову.
Close – закриває файл, який зв'язаний з файловою змінною.
Eof – набуває значення true, якщо досягнуто кінець файла, інакше набуває значення false.
IOResult – використовується для пошуку помилок, які виникають при роботі з файлами.
Індивідуальне завдання
Задача 1.
Написати програму контролю знань студентів з літератури.
Оформити файл відповідей та файл питань.
Задача 2.
Написати програму що виводить на екран студентів, що набрали прохідний бал не нижче 8.
Задача 1:
program zavd1;
uses
crt;
const
qfile='quest.txt';
afile='ansver.txt';
var
f1,f2:text;
i,k:integer;
name,ansv:string;
begin
clrscr;
assign(f1,qfile);
assign(f2,afile);
rewrite(f2);
reset(f1);
write('Введіть своє ім`я, групу :');
readln(name);
writeln(f2,name);
while not eof(f1) do begin
readln(f1,name);
writeln(name);
write('Ваша відповідь :');
readln(name);
writeln(f2,name);
readln(f1,ansv);
if ansv=name then k:=k+1;
i:=i+1;
end;
writeln(f2,'Всього питань :');
writeln(f2,i);
writeln(f2,'Правильних питань :');
writeln(f2,k);
close(f1);
close(f2);
end.
РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ:
Вміст файлу протоколу:
Бригіда e02
толстой
поет
да
Всього питань :
3
Правильних питань :
2
Задача 2:
program typefiles;
uses
crt;
const
kolocenok=2;
type
abiturient=record
fio:string;
marks:array [1..kolocenok] of integer;
end;
var
ser,i,j,k:integer;
abit: array [1..40] of abiturient;
temp: abiturient;
begin
clrscr;
write('Введiть кiлькiсть абiтурiентiв: ');
readln(k);
for i:=1 to k do begin
writeln('абiтурiент ',i,':');
write('im`я: ');
readln(temp.fio);
writeln('Введiть оцiнки: ');
for j:=1 to kolocenok do readln(temp.marks[j]);
abit[i]:=temp;
end;
clrscr;
for i:=1 to k do begin
writeln('абiтурiент ',i,':');
write('im`я: ',abit[i].fio);
write(' мае оцiнки: ');
ser:=0;
for j:=1 to kolocenok do begin
write(abit[i].marks[j],', ');
ser:=ser+abit[i].marks[j];
end;
writeln;
if ser>8 then writeln(' З А Ч И С Л Е Н И Й ! ');
writeln;
end;
end.
РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ:
абiтурiент 1:
im`я: Саша мае оцiнки: 4, 5,
ЗАЧИСЛЕНИЙ!
абiтурiент 2:
im`я: Петро мае оцiнки: 3, 4,
абiтурiент 3:
im`я: Олег мае оцiнки: 4, 2,
абiтурiент 4:
im`я: Микола мае оцiнки: 2, 2,
Висновок:поглибив знання, вміння та навички розробки з використанням текстових та типизованих файлів, закріпив свої знання в області записів та типизованих файлів.