Міністерство освіти і науки України
Національний технічний університет України
“Київський політехнічний інститут”
Кафедра ОТ
ЗВІТ
про виконання лабораторної роботи № 9.2
з дисципліни
“Основи програмування та алгоритмічні мови”
Тема: ТЕКСТОВІ ФАЙЛИ
Варіант 28
Постановка задачі
Створити текстовий файл, вводячи рядки з клавіатури. Сформувати новий файл, що складається зі слів вхідного файлу, які зустрічаються у ньому більше N раз. Розмістити ці слова в новому файлі в порядку зростання їхньої довжини. Вивести вміст вхідного і створеного файлів.
Аналітичні викладки
Створити текстовий файл, зчитати слова з нього в масив, відсортувати масив за довжиною і алфавітом, записати слова, що повторюються більше N раз у новий файл.
Блок-схема алгоритму розв’язання задачі
Текст програми
program lab_9_2;
uses crt;
const max = 100;
type str = string[15];
mas = array[1..max] of str;
var m,r:mas; {Масиви даних}
_N, {параметр N}
n,v:word; {лічильники слів}
a,b:string;
k:char;
{Створення}
procedure create(const a:string);
var st:string;
s1, s2:char;
f : text;
begin
Assign (f, a);
Rewrite (f);
Writeln ('input text (right arrow to end): ');
REPEAT
s1 := readkey;
s2 := readkey;
if (s1 = #0) and (s2 = #77) then break;
write (s1, s2);
ReadLn (st);
st := s1 + s2 + st;
Writeln (f, st);
UNTIL False;
Close (f);
end;
procedure blank(var s:string);
begin
while (s[1] = ' ') do
Delete (s, 1, 1);
while Pos (' ', s) <> 0 do
Delete (s, Pos (' ', s), 1);
if s[Length (s)] <> ' ' then s := s + ' ';
end;
{Формування масиву}
procedure form(var m:mas; st:string; var n:word);
begin
while Pos (' ', st) <> 0 do
begin
n := n + 1;
m[n] := Copy (st, 1, Pos (' ', st) - 1);
Delete (st, 1, Pos (' ', st));
end;
end;
{Зчитування файлу}
procedure readf(const a:string; var m:mas; var n:word);
var f:text;
st:string;
begin
Assign (f, a);
reset (f);
n := 1;
while not Eof(f) do
begin
readln(f,st);
blank(st);
form(m, st, n);
end;
close (f);
end;
{Запис файлу}
procedure writef(const a:string; const m:mas; n:word);
var i:word;
f:text;
begin
Assign (f, a);
rewrite (f);
for i := 1 to n do
writeln (f, m[i], ' ');
close(f);
end;
{Виведення файлу}
procedure outf(const a:string);
var st:string;
f:text;
begin
Assign(f, a);
reset(f);
writeln ('This is ',a);
while not Eof(f) do
begin
readln(f, st);
writeln(st);
end;
close(f);
end;
procedure swap (var a,b:str);
var k:string;
begin
k:=a;
a:=b;
b:=k;
end;
{Сортування масиву}
procedure sort (var m:mas; i:word);
var k,j,l:word;
begin
For k:=1 to i-1 do
for j := 1 to i-k do
if (length(m[j]) > length(m[j+1])) or ((length(m[j]) = length(m[j+1])) and (m[j] > m[j+1])) then swap(m[j],m[j+1]);
end;
{Створення масиву слів, що задовольняють умові}
procedure filter (const m:mas; n:word; var r:mas; var v:word);
var i, k:word;
begin
i := 1;
k := 1;
v := 1;
for i := 1 to n do
if m[i+1] = m[i] then k := k + 1 else if k >= _N then
begin
r[v] := m[i];
v := v + 1;
k := 1;
end;
v := v - 1;
end;
begin
TextColor(0);
TextBackGround(7);
clrscr;
a := '9_2in.txt';
b := '9_2out.txt';
create(a);
outf(a);
Write ('Vvedite N: ');
Readln(_N);
readf(a, m, n);
sort(m, n);
filter(m,n,r,v);
writef(b, r, v);
outf(b);
readkey;
end.
Результати виконання програми
/
Висновок
Під час виконання лабораторної роботи я вивчив особливості створення і обробки текстових файлів.
Програма працює правильно: записує в файл ті слова, що зустрічаються в даному файлі більше N раз.