МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
кафедра „ЗАХИСТ ІНФОРМАЦІЇ”
ЗВІТ
до лабораторної роботи № 7
З КУРСУ “АЛГОРИТМІЧНІ МОВИ І ПРОГРАМУВАННЯ”
на тему:
„РОБОТА З ТЕКСТОВИМИ ФАЙЛАМИ.
СИМВОЛЬНІ ТА РЯДКОВІ ЗМІННІ”
Варіант № 20
Мета роботи – навчитися працювати з файлами та з розробленими процедурами мови Сі для роботи з стрічками, вивчити синтаксис опису функцій для роботи з файлами та стрічками.
2. ПОВНИЙ ТЕКС ЗАВДАННЯ
Знайти кількість приголосних літер в кожному рядку заданого файлу. Вивести на екран рядки файлу в порядку збільшення кількості приголосних літер в цих рядках. Сформувати та вивести на екран текстовий файл, в якому замінити символи “;” словами “END_LINE”. Пошук символу “;” оформити у вигляді підпрограми.
Програму написати з використанням розроблених процедур та функцій для роботи зі стрічками.
3. ОСТАТОЧНА ВЕРСІЯ БЛОК-СХЕМИ АЛГОРИТМУ
Блок-схема функції IsProcedure(s)
4. СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ПРОЦЕДУР І ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
in, out – покажчики на тип FILE за допомогою яких отримуємо доступ до файлів на диску;
tmp, buf – масиви символів;
lines – масив користувацької структури;
i, j – змінні типу int для зберігання введених даних та результату роботи програми;
clrscr() – функція очистки екрана яка об’явлена в модулі conio.h;
getch() – функція яка чекає натискання будь-якої клавіші;
printf() – функція виведення текстових повідомлень і значень змінних на екран;
fopen(fPath,s) – функція яка відкриває файл fPath у режимі s (fPath i s – стрічки) та повертає покажчик на тип FILE тим самим зв’язуючи цей покажчик з файлом на диску;
fclose(file) – функція, яка закриває файл зв’язаний з покажчиком file;
fgets(buf, n, file) – функція, яка закриває зчитує з файла file рядок символів у масив buf, де n – розмір масиву buf;
fputs(s, file) – функція, яка записує у файл file рядок s;
strcat(s1, s2) – функція, яка дописує до рядка s1 рядок s2;
strstr(s1, s2) – функція, яка повертає покажчик на перший символ входження рядка s2 в рядок s1. Якщо рядок s1 не містить рядка s2 то функція повертає NULL;
Користувацькі функції
rEnd_Line(s) – функція яка замінює символи “;” на слово “END_LINE” в рядку s;
SortLines() – впорядковує рядки шляхом заміни покажчиків на ці рядки в масиві структури;
nPrugol(s) – повертає кількість приголосних букв у стрічці s;
5. ОСТАТОЧНА ВЕРСІЯ ПРОГРАМИ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define IN "Lab3_v20.pas"
#define OUT "Out.txt"
#define MAX 256
struct
{
char *s;
int n;
} lines[MAX];
int nStr=0;
//=======================================================
void rEnd_Line(char *s)
{
char buf[MAX]; buf[0]=0;
char *tmp,*p=s;
while (tmp=strstr(p,";"))
{
*tmp=0;
strcat(buf,p); strcat(buf,"END_LINE");
p=tmp+1;
}
strcat(buf,p); strcpy(s,buf);
}
//=======================================================
void SortLines()
{
int i=1,j;
for (i=1;i<nStr;i++)
for (j=nStr-1;j>=i;j--)
if (lines[j-1].n>lines[j].n)
{
char *p=lines[j-1].s; lines[j-1].s=lines[j].s; lines[j].s=p;
int t = lines[j-1].n; lines[j-1].n=lines[j].n; lines[j].n=t;
}
}
//=======================================================
int nPrugol(char *s)
{
const int n=10; int np=0;
char szGol[]="AaEeIiOoYy";
while (*s)
{
if (*s>='A' && *s<='Z' || *s>='a' && *s<='z')
{
np++;
for (int j=0; j<n; j++)
if (*s==szGol[j]) np--;
} s++;
}
return np;
}
//=======================================================
void main(void)
{
FILE *in,*out;
char tmp[MAX];
in=fopen(IN,"r"); out=fopen(OUT,"w");
while (1)
{
if (fgets(tmp,MAX,in)==NULL) break;
lines[nStr].s=(char*)malloc(strlen(tmp));
strcpy(lines[nStr].s,tmp);
lines[nStr].n=nPrugol(tmp);
nStr++;
rEnd_Line(tmp);
fputs(tmp,out);
} fclose(in); fclose(out);
SortLines();
for (int j=0;j<nStr;j++) printf("%s",lines[j].s);
printf("\n\n\n=====\tOut.txt\t=====\n\n\n");
out=fopen(OUT,"r");
while (1)
{
if (fgets(tmp,MAX,in)==NULL) break;
printf("%s",tmp);
}
fclose(out); getch();
}
6. РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ
{=============================================}
{=============================================}
{=============================================}
{=============================================}
dob:=1;
end;
end;
end;
end;
end;
end;
end;
end.
begin
begin
begin
begin
begin
x:=a[j-1,k];
a[j,k]:=x;
begin
sum:=0;
begin
readkey;
var a:mas;
dob:real;
write(a[i,j]:4);
k,i,j:byte;
a[j-1,k]:=a[j,k];
const n=5;
var j:byte;
var i,j:byte;
for i:=1 to n do
writeln;
for i:=2 to n do
for i:=1 to n do
for i:=2 to n do
uses crt;
for j:=1 to n do
for k:=1 to n do
for j:=1 to n do
clrscr;
PrintMas;
d:=Dobutok(a,i);
Dobutok:=dob;
var x:integer;
write('a[',i,',',j,']:= '); read(a[i,j]);
sum:=sum+d;
if a[j,k]>a[j-1,k] then
Sort; writeln;
i,j:byte; sum,d:real;
procedure Sort;
for j:=n downto i do
begin clrscr;
program SortMas;
PrintMas; writeln;
procedure PrintMas;
type mas=array [1..n,1..n] of integer;
for j:=n downto n-i+2 do dob:=dob*a[i,j];
function Dobutok(a:mas;i:byte):real;
writeln; Writeln('Vvedeno matrix A:');
writeln('Vvedit matrix A (rozmir ',n,'x',n,'):');
writeln('Dobutok radka ',i,' pid dopom diagonally: ',d:1:0);
writeln; writeln('Seredne arufmetuchne SA = ',Sum/(n-1):3:2);
writeln('Rezultatu robotu programu, Matrix A:'); writeln;
===== Out.txt =====
program SortMasEND_LINE
uses crtEND_LINE
const n=5END_LINE
type mas=array [1..n,1..n] of integerEND_LINE
var a:masEND_LINE
i,j:byteEND_LINE sum,d:realEND_LINE
{=============================================}
function Dobutok(a:masEND_LINEi:byte):realEND_LINE
var j:byteEND_LINE
dob:realEND_LINE
begin
dob:=1END_LINE
for j:=n downto n-i+2 do dob:=dob*a[i,j]END_LINE
Dobutok:=dobEND_LINE
endEND_LINE
{=============================================}
procedure PrintMasEND_LINE
var i,j:byteEND_LINE
begin
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4)END_LINE
writelnEND_LINE
endEND_LINE
endEND_LINE
{=============================================}
procedure SortEND_LINE
var x:integerEND_LINE
k,i,j:byteEND_LINE
begin
for k:=1 to n do
for i:=2 to n do
for j:=n downto i do
if a[j,k]>a[j-1,k] then
begin
x:=a[j-1,k]END_LINE
a[j-1,k]:=a[j,k]END_LINE
a[j,k]:=xEND_LINE
endEND_LINE
endEND_LINE
{=============================================}
begin clrscrEND_LINE
writeln('Vvedit matrix A (rozmir ',n,'x',n,'):')END_LINE
for i:=1 to n do
for j:=1 to n do
begin
write('a[',i,',',j,']:= ')END_LINE read(a[i,j])END_LINE
endEND_LINE
clrscrEND_LINE
writelnEND_LINE Writeln('Vvedeno matrix A:')END_LINE
PrintMasEND_LINE
SortEND_LINE writelnEND_LINE
writeln('Rezultatu robotu programu, Matrix A:')END_LINE writelnEND_LINE
PrintMasEND_LINE writelnEND_LINE
sum:=0END_LINE
for i:=2 to n do
begin
d:=Dobutok(a,i)END_LINE
writeln('Dobutok radka ',i,' pid dopom diagonally: ',d:1:0)END_LINE
sum:=sum+dEND_LINE
endEND_LINE
writelnEND_LINE writeln('Seredne arufmetuchne SA = ',Sum/(n-1):3:2)END_LINE
readkeyEND_LINE
end.
7. ВИСНОВОК
На даній лабораторній роботі я навчився зчитувати та записувати дані у файл, вивчив синтаксис деяких функцій для роботи з стрічками. Також була вивчена технологія макропідстановки за допомогою макроса #define. На основі наведених вище даних була створена відповідна програма для роботи з файлами та стрічками.