Добавил:
Лабы/курсовые по программированию (С++/Verilog HDL), Теория и Практика Помехоустойчивого Кодирования Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1сем Дагаев / ЛР9 / Отчет

.docx
Скачиваний:
18
Добавлен:
09.03.2022
Размер:
174.23 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет инфокоммуникационных Сетей и систем (иксс)

кафедра программной инженерии и вычислительной техники

(пи и вт)

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

Лабораторная работа №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. Использование передачи в качестве аргумента символьных двумерных массивов.

Соседние файлы в папке ЛР9