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

Отчет 1 лаба (17 вар.)

.docx
Скачиваний:
9
Добавлен:
09.02.2015
Размер:
16.87 Кб
Скачать

Федеральное агентство образования

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

Факультет компьютерных технологий и информатики

Кафедра МО ЭВМ

Дисциплина: «Программирование»

Отчет по лабораторной работе № 1

Выполнил: студент группы 1304

Плохой Николай

Проверила: Фролова С.А.

Санкт-Петербург 2012

  1. Содержательная постановка задачи

Функция Ф преобразования текста определяется следующим образом (аргумент функции – это текст, т. е. последовательность символов):

Φ(γ)β, если α = β/γ и текст β не содержит вхождений символа «/»,

Φ(α) = α, если в α нет вхождений символа «/».

Реализовать функцию Ф рекурсивно.

  1. Анализ и пример решения задачи

Исходная постановка задачи - необходимо обработать исходную строку в соответствие с заданными условиями.

1) Φ(γ)β, если α = β/γ и текст β не содержит вхождений символа «/»

Например: исходная строка – «ла/ска», обработав с помощью данной функции строку получаем, что α = ла/ска, (β = ла, γ = ска). После обработки будет получена строка Φ(ска)ла. Далее необходимо рекурсивно вызвать функцию Φ еще раз, где будет использовано второе условие.

2) Φ(α) = α, если в α нет вхождений символа «/».

В результате будет выполнено: Ф(ска)ла = скала

  1. Формальная постановка задачи

- Исходные данные: выражение (текстовая строка)

- Ограничение на исходные данные: выражение должно представлять символьную строку, содержащую (не содержащую) знак «/»

- Результирующие данные: выходными данными программы является строка, полученная из исходной в результате обработки её функцией Ф

  1. Описание функций

void handler (string &str, string &result)

{

if(str.find('/',0) != -1)

{

result.insert(0,str,0,str.find('/',0));

str.erase(0,str.find('/',0) + 1);

handler(str, result);

}

else result = str + result;

}

Функция обрабатывает передаваемую ей строку str в соответствие с заданными условиями и возвращает результат в виде строки result, если строка str больше не содержит знаков «/», либо вызывает себя рекурсивно для продолжения обработки.

  1. Код программы

#include <iostream.h>

#include <fstream.h>

#include <conio.h>

void handler(string &str, string &result);

int main()

{

ifstream fin("in.txt");

string str, result;

while (fin >> str)

{

cout << "String before = " << str << endl;

handler(str,result);

cout << "String after = " << result << "\n\n";

result.clear();

}

getch();

return 0;

}

void handler (string &str, string &result)

{

if(str.find('/',0) != -1)

{

result.insert(0,str,0,str.find('/',0));

str.erase(0,str.find('/',0) + 1);

handler(str, result);

}

else result = str + result;

}

  1. Вывод

В данной работе были получены навыки работы с основными понятиями и приёмами рекурсивного программирования, такими, как работа с рекурсивными функциями на языке C++.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]