МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
З В І Т
до лабораторної роботи №4
з курсу: «Алгоритмічні мови та програмування»
на тему: «Обробка символьних рядків. Робота з файлами»
Варіант № 17
Мета роботи – вивчити елементи мови Сі, рядки, рядкові константи, принципи потокового вводу-виводу, стандартні файли і функції для роботи з ними.
1. Завдання
1. Ознайомитися з організацією роботи вводу-виводу в мові Cі.
2. Ознайомитися з потоковим вводом, відкриттям і закриттям потоку в мові Cі.
3. Ознайомитися з стандартними функціями для роботи з файлами в мові Cі.
4. Дано текстовий файл, в якому міститься програма мовою С (Лабораторна робота №3). Скласти блок-схеми алгоритмів та програму мовою С для обробки текстового файлу з використанням розроблених функцій для роботи зі стрічками. Оформити виконання одного із завдань у вигляді підпрограми. Словами є слова в коментарях, назви ідентифікаторів, зарезервовані слова, які розділяються між собою згідно із синтаксисом мови С. Дані для роботи беруться з табл.1 за вказівкою викладача (варіант №27):
Сформувати і вивести на екран текстовий файл в якому видалити всі голосні літери. Підрахувати і вивести на екран кількість арифметичних операцій (+, -, *, /) у кожному рядку.
2. Блок-схема алгоритму програми
/
3. Список ідентифікаторів констант, змінних, функцій,
використаних у блок-схемі алгоритму і програмі,
та їх пояснення
FILE *ff – ініціалізація вказівника на потік
fopen() – функція відкриття потоку;
Використані режими для відкриття файлу, зв’язаного з потоком:
“w” – новий текстовий файл відкривається для запису;
“r” – існуючий текстовий файл відкривається лише для читання.
fprintf() – форматований вивід в файл;
while – цикл з передумовою;
fclose( ) – функція закриття потоку;
fprintf() – форматований вивід в файл;
fgetc()– ввід(читання) одного символу з файлу;
fputc()– запис одного символу в файл;
puts() – виведення на екран.
4. Текст програми
#include <stdio.h>
#include <conio.h>
#include <string.h>
int find(const char *str, const char *what)
{
int i = 0, j = 0;
while(str[i])
{
for(j = 0;what[j] && str[i+j];++j)
{
if(str[i+j] != what[j]) break;
}
if(strlen(what) == j) return i;
++i;
}
return -1;
}
void replace(char *str, const char *from, const char *to)
{
int i, j, k;
char s[256];
while((i = find(str, from)) != -1)
{
for(j = 0, k = 0;str[j];++j, ++k)
{
if(j == i) j += strlen(from), k += strlen(to);
s[k] = str[j];
}
s[k] = 0;
for(j = 0;to[j];++j)
s[i++] = to[j];
while(str[i] = s[i++]);
}
}
int count(const char *str, const char *word)
{
int i = 0, j = 0, count = 0;
while(str[i])
{
for(j = 0;word[j] && str[i+j];++j)
{
if(str[i+j] != word[j]) break;
}
if(strlen(word) == j) ++count;
++i;
}
return count;
}
int main() {
FILE *f = fopen("code.c", "r");
char str[256];
while(fgets(str, 256, f)) {
replace(str, "+", "SUMA");
replace(str, "-", "MULT");
replace(str, "/", "DIV");
printf("[%d =] - %s", count(str, "="), str);
}
fclose(f);
getch();
}
5.Результати роботи програми
/
/
/