1сем Дагаев / ЛР9 / Отчет
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет инфокоммуникационных Сетей и систем (иксс)
кафедра программной инженерии и вычислительной техники
(пи и вт)
Дисциплина: «Программирование»
Лабораторная работа №9.
Тема: «Работа со строками»
вариант №20
Выполнил: Студент группы ИКВТ-03
Ситников Д.Г.
Подпись____________
Принял: к.т.н, доцент кафедры ПИиВТ
Дагаев А.В.
Подпись____________
«_____»________ 2020
Санкт-Петербург
2020г
Постановка задачи
Имеется текст, состоящий из n(n <= 20) строк, который вводится с клавиатуры. Длина каждой строки не превосходит 128 символов. В каждой строке содержится не менее двух слов. Количество слов в строке не более 20. Отдельные слова отделяются друг от друга одним или более пробелами. Необходимо удалить из каждой строки ее второе слово при условии, что длина слова l удовлетворяет отношению l < Lmax.
Разработка алгоритма
Программа состоит из основной программы - функции main() и файла с 4 функциями, распределенными по выполнению следующих операций:
1) Ввод строк;
2) Обработка строк – замена второго слова пробелами;
3) Удаление лишних пробелов;
4) Вывод результата.
Рис.1 Функция ввода.
Рис.2 Функция обработки.
Рис.3 Функция удаления лишних пробелов.
Рис.4 Функция вывода результата.
Рис.5 Основная программа.
В программе должно быть предусмотрен ввод исходных данных с клавиатуры; обработка строк – замена второго слова пробелами при верном условии (первое слово меньше Lmax); Опускание пробелов в итоговых строках и вывод результата.
Таблица идентификаторов
Табл.1. Таблица идентификаторов
N |
Обозначения в задаче |
Идентификатор |
Назначение |
1 |
n |
n |
Исходные данные |
|
Lmax |
Lmax |
|
2 |
str[] |
str |
|
|
str[] |
*b |
Результаты вычислений |
|
p1 |
p1 |
|
2 |
p2 |
p2 |
|
3 |
i |
i |
Операторы инкремента |
4 |
j |
j |
Описание программы
Программа разработана при помощи среды разработки Microsoft Visual Studio, в которой предоставлены все необходимые библиотеки, заголовки, необходимые компилятором C и C++ для работы в системе Windows, написана на языке C++. Программа собрана при помощи системы сборки компилятор C++ Visual Studio includes a command-line C, набора инструментов .NET Framework 4.5, тестировалась на Windows 10. Были подключены библиотеки iostream, windows.h, stdio.h, string; были использованы функции cout, cin, system, sizeof, malloc, free, setlocale. Был подключен файл Function.cpp. А также определены константы LEN = 129.
Результаты работы программы
Далее предоставлены результаты выполнения программы. Введены 3 строки. В строке: если первое слово имеет меньше шести символов, то второе слово удалятся.
Рис.6 Результат выполнения программы.
Текст программы на C++
Functions.cpp:
#include <iostream>
#include <string>
#include <windows.h>
#include <stdio.h>
#define LEN 129
using namespace std;
inline void InputDvMass(int n, char** a) {
for (int i = 0; i < n; i++) {
fgets(a[i], LEN, stdin);
}
}
inline void RemS(int n, const char *a, char *b) {
int m = 0, j;
for (int i = 0; i < sizeof(a); i++) {
j = i - 1;
if (i == 0)
b[m++] = a[i];
else
if ((a[i] != ' ') || (a[i] == ' ') && (a[j] != ' '))
b[m++] = a[i];
}
}
inline void OutputDvMass(int n, char** a) {
for (int i = 0; i < n; i++)
puts(a[i]);
}
inline void ObrDvMass(int n, char** a, int Lmax) {
int p1, p2, i, j, k = 0, x = 0;
for (i = 0; i < n; i++) {
p1 = 0; p2 = 0;
for (j = 0; j < LEN; j++)
if ((a[i][j] == ' ') || (a[i][j] == '\0'))
if (p1 == 0)
p1 = j;
else if (p2 == 0) {
p2 = j;
break;
}
if (p1 < Lmax)
for (k = p2; k > p1; k--)
a[i][k] = ' ';
RemS(n, a[i], a[i]);
}
}
Source.cpp:
#include "Functions.cpp"
void main()
{
setlocale(LC_ALL, "RUS");
int n, Lmax;
char **str = NULL;
system("cls");
cout << "Введите кол-во строк: ";
cin >> n;
cout << "Введите Lmax: ";
cin >> Lmax;
cout << "Введите " << n << " строк (по " << LEN << " символов): " << endl;
n++;
(str = (char **)malloc(n * sizeof(char*)));
for (int i = 0; i < n; i++)
str[i] = (char *)malloc(LEN * sizeof(char));
InputDvMass(n, str);
ObrDvMass(n, str, Lmax);
cout << "Результат: " << endl;
OutputDvMass(n, str);
free(str);
system("pause");
}
Выводы
В ходе выполнения работы были получены следующие результаты:
1. Изучены алгоритмы обработки двумерных символьных массивов;
2. Программа разработана для заданной обработки символьного двумерного массива на языке C++;
3. Использование передачи в качестве аргумента символьных двумерных массивов.