МІНІСТЕРСТВО  ОСВІТИ  І  НАУКИ  УКРАЇНИ
НАЦІОНАЛЬНИЙ  УНІВЕРСИТЕТ  “ЛЬВІВСЬКА  ПОЛІТЕХНІКА”
ІКТА
кафедра „ЗАХИСТ ІНФОРМАЦІЇ”
ЗВІТ
до лабораторної роботи №4
З  КУРСУ “АЛГОРИТМІЧНІ  МОВИ  І  ПРОГРАМУВАННЯ”
на тему: „РОБОТА З ТЕКСТОВИМИ ФАЙЛАМИ.
СИМВОЛЬНІ ТА РЯДКОВІ ЗМІННІ”
Варіант № 12
Виконав:
	        студент групи ІБ – 1
Львів – 2006
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