Отчет 1 лаба (17 вар.)
.docxФедеральное агентство образования
Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»
Факультет компьютерных технологий и информатики
Кафедра МО ЭВМ
Дисциплина: «Программирование»
Отчет по лабораторной работе № 1
Выполнил: студент группы 1304
Плохой Николай
Проверила: Фролова С.А.
Санкт-Петербург 2012
-
Содержательная постановка задачи
Функция Ф преобразования текста определяется следующим образом (аргумент функции – это текст, т. е. последовательность символов):
Φ(γ)β, если α = β/γ и текст β не содержит вхождений символа «/»,
Φ(α) = α, если в α нет вхождений символа «/».
Реализовать функцию Ф рекурсивно.
-
Анализ и пример решения задачи
Исходная постановка задачи - необходимо обработать исходную строку в соответствие с заданными условиями.
1) Φ(γ)β, если α = β/γ и текст β не содержит вхождений символа «/»
Например: исходная строка – «ла/ска», обработав с помощью данной функции строку получаем, что α = ла/ска, (β = ла, γ = ска). После обработки будет получена строка Φ(ска)ла. Далее необходимо рекурсивно вызвать функцию Φ еще раз, где будет использовано второе условие.
2) Φ(α) = α, если в α нет вхождений символа «/».
В результате будет выполнено: Ф(ска)ла = скала
-
Формальная постановка задачи
- Исходные данные: выражение (текстовая строка)
- Ограничение на исходные данные: выражение должно представлять символьную строку, содержащую (не содержащую) знак «/»
- Результирующие данные: выходными данными программы является строка, полученная из исходной в результате обработки её функцией Ф
-
Описание функций
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 больше не содержит знаков «/», либо вызывает себя рекурсивно для продолжения обработки.
-
Код программы
#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;
}
-
Вывод
В данной работе были получены навыки работы с основными понятиями и приёмами рекурсивного программирования, такими, как работа с рекурсивными функциями на языке C++.