МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
кафедра „ЗАХИСТ ІНФОРМАЦІЇ”
ЗВІТ
до лабораторної роботи №4
З КУРСУ “АЛГОРИТМІЧНІ МОВИ І ПРОГРАМУВАННЯ”
на тему: „РОБОТА З ТЕКСТОВИМИ ФАЙЛАМИ.
СИМВОЛЬНІ ТА РЯДКОВІ ЗМІННІ”
Варіант № 12
2. ПОВНИЙ ТЕКСТ ЗАВДАННЯ
Дано текстовий файл, в якому міститься програма мовою Турбо-Паскаль. Скласти блок-схеми алгоритмів та програму мовою Турбо-Паскаль для виведення на екран текстового файлу (Лабораторна робота №3) в якому не зустрічаються слова “for”, “then”, “іf”, “else”. Підрахувати кількість рядків, в яких кількість приголосних літер парна. Для обробки текстового файлу використовувати розроблені процедури та функції для роботи зі стрічками. Оформити виконання одного із завдань у вигляді підпрограми.
3. ОСТАТОЧНА ВЕРСІЯ БЛОК-СХЕМИ АЛГОРИТМУ
Функція nPrugol(s)
Підпрограма DelWord(is, s)
4. СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ПРОЦЕДУР І ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
gol – константа перелічувального типу яка містить усі голосні літери;
all – константа перелічувального типу яка містить усі літери;
oper – константа перелічувального типу яка містить символи які можуть зустрічатися в тексті програми перед операторами “for”, “then”, “іf”, “else”;
n – змінна типу integer для зберігання даних про поточну кількість рядків у яких кількість приголосних букв є непарним;
j, i, count – змінні типу integer для зберігання проміжних значень у процедурах та функціях;
str – змінна типу string для зберігання проміжних текстових даних;
f – змінна типу text за допомогою якої здійснюється читання текстового файлу з диску;
DelWord(s1, s2) – користувацька процедура яка видаляє слово що міститься в стрічковій змінні s1 з стрічкової змінної s2;
nPrugol(s) – користувацька функція яка повертає кількість приголосних букв в рядку s;
clrscr – процедура очистки екрана яка об’явлена в модулі crt;
readkey – процедура яка очікує натискання будь-якої клавіші;
writeln – процедура виведення текстових повідомлень і значень змінних на екран чи у файл;
readln – процедура яка зчитує дані з клавіатури чи файлу та присвоює відповідне значення змінній;
Delete(s, i, j) – процедура яка видаляє з рядка s певну кількість символів j починаючи з i-того символу;
Inc(i) – процедура інкременту, яка збільшує числову змінну i на 1;
Assign – процедура яка зв’язує ідентифікатор текстової змінної з файлом на диску;
reset – процедура яка відкриває файл для читання;
close – процедура яка закриває файл;
Pos(s1, s2) – функція яка повертає позицію першого символу входження рядка s1 в рядок s2
Length(s) – функція яка повертає довжину рядка s;
Eof(f) – функція яка повертає true якщо досягнуто кінець файлу f;
mod – операція для знаходження остачі від ділення.
5. ОСТАТОЧНА ВЕРСІЯ ПРОГРАМИ
program lab4;
uses crt;
var f:text;
str:string; n:integer;
{===================================}
procedure DelWord(is:string; var s:string);
const oper=[' ',';','(',')','{','}'];
var i,j:integer;
begin
i:=Pos(is,s); j:=Length(is);
if (i<>0) and ((i=1) or (s[i-1] in oper)) and
((i+j-1=Length(s)) or (s[i+j] in oper)) then
Delete(s,i,j);
end;
{===================================}
function nPrugol(s:string):integer;
const gol=['a','e','i','y','o'];
all=['a'..'z'];
var i,count:integer;
begin
count:=0;
for i:=1 to Length(s) do
if (s[i] in all) and not (s[i] in gol) then
inc(count);
nPrugol:=count;
end;
{===================================}
begin
assign(f,'lab3.pas');
reset(f); clrscr; n:=0;
while not eof(f) do
begin
read(f,str);
DelWord('for',str);
DelWord('then',str);
DelWord('if',str);
DelWord('else',str);
writeln(str);
readln(f);
if (nPrugol(str) mod 2=1) then inc(n);
end;
writeln;
writeln('Kilkist radkiv z neparnoy kilkisty prugolosnuh:',n:3);
close(f); readkey;
end.
6. РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ
program SortMas;
uses crt;
const n=5;
type mas=array [1..n,1..n] of integer;
var a:mas;
r,s:byte;
sum,sg:real;
{=============================================}
function sGeom(a:mas;i:byte):real;
var j:byte;
dob,sg:real;
begin
dob:=1;
j:=i+1 to n do dob:=dob*a[i,j];
sg:=exp(1/(n-i)*ln(abs(dob)));
(dob<0) and ((n-i) mod 2=1) sg:=-sg;
sGeom:=sg;
end;
{=============================================}
procedure PrintMas;
var i,j:byte;
begin
i:=1 to n do
begin
j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end;
{=============================================}
procedure Sort;
var x:integer;
k,i,j:byte;
begin
k:=1 to n do
i:=2 to n do
j:=n downto i do
a[j,k]>a[j-1,k]
begin
x:=a[j-1,k];
a[j-1,k]:=a[j,k];
a[j,k]:=x;
end;
end;
{=============================================}
begin clrscr;
writeln('Vvedit matrix A (rozmir ',n,'x',n,'):');
r:=1 to n do
s:=1 to n do
begin
write('a[',r,',',s,']:= '); readln(a[r,s]);
end;
writeln; Writeln('Vvedeno matrix A:');
PrintMas;
Sort;
writeln('Rezultatu robotu programu, Matrix A:'); writeln;
PrintMas;
sum:=0;
r:=1 to n-1 do
begin
sg:=sGeom(a,r);
writeln('Seredne geom radka ',r,':',sg:3:2);
sum:=sum+sg;
end;
writeln; writeln('Suma = ',Sum:3:2);
readkey;
end.
Kilkist radkiv z neparnoy kilkisty prugolosnuh: 29