Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4 12ЛР инфа

.docx
Скачиваний:
12
Добавлен:
16.04.2021
Размер:
496.26 Кб
Скачать

Лабораторная работа №12

Строки и текстовые файлы

Цель лабораторной работы: изучение структурной организации, способов доступа к элементам и других особенностей текстовых файлов; изучение стандартных средств языка C/C++ для работы со строками и текстовыми файлами; совершенствование навыков процедурного программирования на языке C/C++ при решении задач редактирования текстовых файлов.

Задание на программирование: используя технологию процедурного программирования разработать программу обработки текстовых файлов с числом строк не менее пяти, каждая из которых содержит не более 80 символов, в соответствии с индивидуальным заданием.

Порядок выполнения работы:

1) Получить у преподавателя индивидуальное задание на обработку строк текстового файла.

2) Построить схему алгоритма решения задачи с использованием функций обработки строки, функции создания, просмотра и редактирования текстового файла.

3) Составить спецификации функций.

4) Составить программу на языке C/C++.

5) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов. Обеспечить одновременный показ на экране исходного и отредактированного файлов.

8) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, спецификации функций, текст программы, контрольные примеры.

Формулировка задания:

(Вариант №21)

Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Перенести последнюю букву каждого слова в его начало.

Текст программы

#include <stdio.h>

#include <conio.h>

#include <iostream>

#include <string.h>

#include <stdlib.h>

#include <locale.h>

#include <windows.h>

#define FNAME_I "D:\\st_i.txt\0"

#define FNAME_R "D:\\st_r.txt\0"

const int RAZ = 80;

const char PR_R[] = "r";

const char PR_W[] = "w";

void make_file(char *fname);

int proverka_file(char *fname, const char *);

void obrabotka_file(char *, char *);

void vivod_file(char*);

using namespace std;

int main()

{setlocale(LC_ALL,"Russian") ;

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char fname_i[20] = FNAME_I;

char fname_r[20] = FNAME_R;

make_file(fname_i);

if (!proverka_file(fname_i, PR_R))

{

cout << "Ошибка открытия файла " << fname_i << " на чтение" << endl;

cout << "Нажмите <Enter>" << endl;

getchar();

return 0;

}

cout << "Содержимое исходного файла:" << endl;

vivod_file(fname_i);

obrabotka_file(fname_i, fname_r);

if (!proverka_file(fname_r, PR_R))

{

cout << "Ошибка открытия файла " << fname_r << " на чтение" << endl;

cout << "Нажмите <Enter>" << endl;

getchar();

return 0;

}

cout << "Результат :\n";

vivod_file(fname_r);

cout << endl << "Для завершения нажмите <Enter>";

getchar();

return 0;

}

void make_file(char *fname_i)

{

char st[RAZ];

FILE *in;

char otv;

while (proverka_file(fname_i, PR_R))

{

cout << "Такой файл уже есть! Зададите новое имя Y/N?" << endl;

cin.get(otv);

if (otv == 'Y' || otv == 'y')

{

cout << "Введите новое имя:" << endl;

cin >> fname_i;

cin.get();

}

else {

cin.get();

break;

}

}

if (!proverka_file(fname_i, PR_W))

{

cout << "Ошибка открытия файла " << fname_i << " на запись" << endl;

cout << "Нажмите <Enter>" << endl;

getchar();

exit(0);

}

in = fopen(fname_i, PR_W);

cout << "Создание файла." << endl;

cout << "Признак окончания ввода - ввод пустой строки" << endl;

cout << "Введите строку и нажмите <Enter>" << endl;

cout << "->";

cin.getline(st, RAZ);

while (strlen(st))

{

fprintf(in, "%s\n", st);

cout << "Введите строку и нажмите <Enter>" << endl;

cout << "->";

otv++;

cin.getline(st, RAZ);

}

fclose(in);

}

int proverka_file(char *fname, const char *pr)

{

if ((fopen(fname, pr)) == NULL)

return(0);

return(1);

}

void obrabotka_file(char *fname_i, char *fname_r) {

FILE *in, *out;

char buffer[2];

std::string str = " ";

std::string words;

in = fopen(fname_i, PR_R) ;

out = fopen(fname_r, PR_W) ;

while (!feof(in))

{

if (fgets(buffer, 2, in) == NULL) break;

if (buffer[0] == ' ' || buffer[0] == '\n') {

str[0] = str[str.length() - 1];

str[str.length() - 1] = buffer[0];

fprintf(out, str.c_str());

str.clear();

str = " ";

}

else {

str.append(buffer);

}

}

fclose(in);

fclose(out);

}

void vivod_file(char *fname)

{

FILE *in_out;

char st[RAZ];

in_out = fopen(fname, PR_R);

fgets(st, RAZ, in_out);

while (!feof(in_out))

{

cout << st;

fgets(st, RAZ, in_out);

}

fclose(in_out);

}

Скриншот контрольного примера выполнения программы

8

Соседние файлы в предмете Основы программирования