Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
X
- •ВВЕДЕНИЕ
- •ОБРАБОТКА МАССИВОВ ДАННЫХ С ПРИМЕНЕНИЕМ ФУНКЦИЙ
- •1.1. Общие рекомендации по работе с динамическими массивами
- •1.2. Пример программы для работы с динамическими массивами
- •1.3. Первое задание к лабораторной работе № 1
- •1.4. Общие рекомендации по использованию функций
- •ЛАБОРАТОРНАЯ РАБОТА № 2
- •ПРОГРАММНАЯ ОБРАБОТКА СТРОК И СТРУКТУР
- •2.1. Общие рекомендации по работе со строками
- •1.5. Пример программы для работы с функциями
- •1.6. Второе задание к лабораторной работе № 1
- •1.8. Третье задание к лабораторной работе № 1
- •2.2. Пример программы для работы со строками
- •2.3. Первое задание к лабораторной работе № 2
- •2.4. Общие рекомендации по работе с данными типа string
- •2.5. Второе задание к лабораторной работе № 2
- •2.6. Общие рекомендации по работе со структурами
- •2.7. Пример программы для работы со структурами
- •2.8. Третье задание к лабораторной работе № 2
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •ПРОГРАММНЫЕ МЕТОДЫ РАБОТЫ
- •С ЦЕЛОЧИСЛЕННЫМИ ДАННЫМИ
- •3.1. Общие рекомендации
- •3.2. Первое задание к лабораторной работе № 3
- •3.3. Системы счисления и перевод чисел из одной системы в другую
- •3.4. Второе задание к лабораторной работе № 3
- •ЛАБОРАТОРНАЯ РАБОТА № 4
- •ТЕХНОЛОГИИ РАБОТЫ С ФАЙЛАМИ
- •4.1. Общие рекомендации по работе с файлами
- •4.2. Первое задание для лабораторной работы № 4
- •4.3. Пример программы для работы с файлами структур
- •4.4. Второе задание для лабораторной работы № 4
- •ЛАБОРАТОРНАЯ РАБОТА № 5
- •МЕТОДЫ СОРТИРОВКИ И ИХ ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
- •5.1. Общие рекомендации по реализации методов сортировки
- •5.2. Задания к лабораторной работе № 5
- •ЛАБОРАТОРНАЯ РАБОТА № 6
- •ЛИНЕЙНЫЕ СПИСКИ
- •6.2. Пример программы работы с линейным списком
- •6.3. Задания к лабораторной работе № 6
- •ЛАБОРАТОРНАЯ РАБОТА № 7
- •ПРОГРАММНОЕ СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ КЛАССОВ
- •7.1. Общие рекомендации по работе с классами
- •7.2. Пример программы реализации класса
- •7.3. Задания к лабораторной работе № 7
- •ЛАБОРАТОРНАЯ РАБОТА № 8
- •РАБОТА С РОДИТЕЛЬСКИМИ И ДОЧЕРНИМИ КЛАССАМИ
- •8.2. Пример программы с виртуальными функциями
- •8.3. Виртуальные функции и абстрактные классы
- •8.4. Задания к лабораторной работе № 8
- •ЛАБОРАТОРНАЯ РАБОТА № 9
- •РАБОТА С КОНТЕЙНЕРНЫМИ КЛАССАМИ И МОДУЛЯМИ
- •9.1. Общие сведения о контейнерных классах и векторах
- •9.2. Общие сведения о модулях
- •9.3. Пример программы на С++
- •9.4. Задания к лабораторной работе № 9
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Функция
Назначение
strncpy_s(s1, s2,
n)
Функция копирует не более n символов из строки s2 в s1 и
возвращает s1.
strpbrk(s1, s2)
Функция ищет символ одной строки в другой. Функция воз-
возвращается NULL (пустое значение указателя).
strrchr(s, ch)
функция ищет символ в строке. Функция возвращает указа-
нет - возвращает NULL.
strstr(s1, s2)
Функция ищет первое вхождение подстроки s2 в строке s1.
начинается s2 или NULL в случае неудачи
isalnum(c)
возвращает значение true, если с является буквой или цифрой, и false в других случаях
возвращает значение true, если с является буквой, и false в
других случаях
возвращает значение true, если с является цифрой, и false в
других случаях
возвращает значение true, если с является буквой нижнего
регистра, и false в других случаях
возвращает значение true, если с является буквой верхнего
регистра, и false в других случаях
возвращает значение true, если с является пробелом,
и false в других случаях
если символ с, является символом нижнего регистра, то
регистре, иначе символ возвращается без изменений.
поиск первого вхождения символа с в строке s. В случае
ется ноль.
определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2
возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2
Возвращает указатель первого вхождения любого символа
строки s2 в строке s1
atof(s1)
преобразует строку s1 в тип double
atoi(s1)
преобразует строку s1 в тип int
atol(s1)
преобразует строку s1 в тип long int
isalpha(c)
Окончание табл. 4
вращает указатель на символ, являющийся первым вхождением любого из символов из
s2 в строку s1, если его нет,
тель на первое вхождение символа ch в строку s, если его
Функция возвращает указатель на элемент из s1, с которого
isdigit(c)
islower(c)
isupper(c)
isspace(c)
toupper(c)
strchr(s,c)
strcspn(s1,s2)
strspn(s1,s2)
функция возвращает преобразованный символ с в верхнем
удачного поиска возвращает указатель на место первого
вхождения символа с. Если символ не найден, то возвраща-
strprbk(s1,s2)
21

2.2. Пример программы для работы со строками
Пример. В строке размером до 30 символов определить, сколько раз
встречается определенный символ. Строка и символ вводятся пользователем.
Вывести строку, символ и найденное количество.
Текст программы на языке С++ приведен ниже.
#include <Windows.h> // Добавляется для ввода русских букв
#include <iostream> // Подключение заголовочного файла
// с функциями ввода-вывода
using namespace std; // Использование пространства имен std
int _main()
{
SetConsoleCP(1251); // Возможность вводить и отображать
SetConsoleOutputCP(1251); // русские буквы
char str[30]; // Строка, задаваемая пользователем
char s; // Символ, задаваемый пользователем
cout << "Введите строку" << endl;
cin.getline(str,30); // Ввод строки в переменную str
cout << "Введите символ" << endl;
cin >> s; // Ввод символа
int k = 0; // Инициализация счетчика для расчета
// количества символов s в строке str
// Цикл подсчета количества символов s в строке str
// strlen – функция определения длины строки
for (int i = 0; i < strlen(str); i++)
if (str[i] == s)
k++;
// Вывод результата на экран
cout << "Количество вхождений символа " << s << " в строку \n" <<
str << "\n равно " << k << endl;
system("pause"); // Ожидание нажатия клавиши
}
Для отображения русских букв необходимо на заглавии окна при вводе
данных нажать правой кнопкой мыши, выбрать пункт «Свойства», выбрать
шрифт Luсida Console.
22

2.3. Первое задание к лабораторной работе № 2
Вариант
Задание
1
В текстовой строке проверить, какая буква встречается чаще – 'a',
вое сообщение.
2
. В текстовой строке проверить правильность расстановки круглых
личеству закрывающих).
3
В текстовой строке подсчитать число вхождений тройки символов
'abc'.
4
В текстовой строке определить количество слов, начинающихся с
буквы 'a'.
5
В текстовой строке определить количество слов, заканчивающихся
буквой 'w'.
6
В текстовой строке определить количество слов, начинающихся и
заканчивающихся одной и той же буквой.
7
В текстовой строке определить количество слов, в которых есть
хотя бы одна буква 'd'.
8
В текстовой строке определить количество слов, в которых содержится ровно три буквы ‘e’.
9
В текстовой строке найти самое длинное слово и вывести его на
экран вместе с его длиной.
10
В текстовой строке заменить все пробелы знаком '_'.
11
В текстовой строке поменять все символы '!' на '?'.
12
На основе текстовой строки, введенной пользователем, создать но-
нескольких подряд идущих пробелов оставить один).
Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания;
- варианты задания приведены в табл. 5; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты первого задания для реализации программы со строками
Таблица 5
'b' или ‘c’. В качестве результата вывести соответствующее тексто-
скобок (т.е. соответствует ли количество открывающих скобок ко-
вую строку, из которой будут удалены все лишние пробелы (т.е. из
23

Продолжение табл. 5
Вариант
Задание
13
На основе текстовой строки, введенной пользователем, создать но-
символ 'f'
14
На основе текстовой строки, введенной пользователем, создать новую, из которой будут удалены все знаки ‘-’ и ‘+’.
15
В текстовой строке найти количество символов арифметических
операций (т.е. знаков ‘+’, ‘-‘, ‘/’ и ‘*’).
16
На основе текстовой строки, введенной пользователем, создать новую строку, где каждый третий символ заменен знаком ‘#’.
17
Подсчитать, сколько раз пара 'th' входит в заданный текст.
18
В текстовой строке найти самое короткое слово и вывести его на
экран вместе с его длиной.
19
В строке заданы фамилия, имя и отчество студента (именно в таком порядке). Напечатайте его фамилию и инициалы.
20
Дана текстовая строка, слова в которой разделены пробелами.
Найти количество слов в тексте.
21
Напишите программу, которая позволяет ввести строку и вывести
не останется один символ.
22
Дана текстовая строка. Определить является ли она положительным или отрицательным целым числом.
23
В текстовой строке найти количество точек и запятых.
24
В текстовой строке определить количество слов, в которых содержатся буквы ‘x’ и ‘y’ (и та, и другая вместе).
25
Дана текстовая строка. Найти в ней количество цифр ‘1’, ‘2’ и ‘3’.
26
Дана текстовая строка. Найти в ней количество слов, длина которых равна 5 символам.
27
В текстовой строке заменить все символы ‘@’ на ‘#’.
28
Дана текстовая строка. Найти в ней количество нулей.
29
В текстовой строке проверить, какая буква встречается чаще – 'd',
вое сообщение.
30
В текстовой строке проверить правильность расстановки фигур-
количеству закрывающих).
31
В текстовой строке подсчитать число вхождений тройки символов
'qwe'.
32
В текстовой строке определить количество слов, начинающихся с
буквы 'c'.
33
В текстовой строке определить количество слов, заканчивающихся
буквой 'e'.
вую строку, в которой все пары символов 'ph' будут заменены на
ее, сокращая каждый раз на один символ до тех пор, пока в строке
'k' или ‘g’. В качестве результата вывести соответствующее тексто-
ных скобок (т.е. соответствует ли количество открывающих скобок
24

Окончание табл. 5
Вариант
Задание
34
В текстовой строке определить количество слов, начинающихся и
заканчивающихся одной и той же буквой ‘e’.
35
В текстовой строке определить количество слов, в которых есть
хотя бы одна буква 's'.
36
В текстовой строке определить количество слов, в которых содержится ровно три буквы ‘k’.
37
В текстовой строке найти самое длинное слово, начинающееся с
символа ‘a’ и вывести его на экран вместе с его длиной.
38
В текстовой строке заменить все тире знаком '_'.
39
В текстовой строке поменять все символы '?' на '!'.
40
На основе текстовой строки, введенной пользователем, создать новую строку, из которой будут удалены все символы ‘*’.
2.4. Общие рекомендации по работе с данными типа string
Тип данных string требует подключения к программе заголовочного фай-
ла <string>. Основные действия с подобными строками выполняются с помощью стандартных операций и методов, а длина строки изменяется динамически
в соответствии с потребностями.
Простейший пример использования данных типа string.
#include <iostream> // Подключение заголовочного файла
// с функциями ввода-вывода
#include <string>
using namespace std; // Определение пространства имен
int main()
{
string s1, s2, s3, s4;
s1 = "new string";
cout << "Enter string " << endl;
getline(cin,s2);
cout << s2 << endl;
s3 = s1;
if (s3 > s2) cout << s3 << endl;
s4 = s1 + s2;
cout << s4 << endl;
system("pause");
}
25

Основные методы для работы со строками приведены в табл. 6.
Функция
Назначение
s.append(str)
добавляет в конец строки строку str
s.assign(str)
присваивает строке s значение строки str
s.clear()
отчищает строку, т.е. удаляет все элементы в ней
s.compare(str)
сравнивает строку s со строкой str и возвращает 0 в случае совпадения
копирует из строки s в строку C(может быть как строка
с N-го символа
bool b = s.empty()
если строка пуста, возвращает true, иначе false
s.erase(I,N)
удаляет N элементов с I-го символа
s.find(str,I)
ищет строку str начиная с I- го символа
s.insert(pos, s1)
вставляет строку s1 в строку s, начиная с позиции pos
int len=s.length()
записывает в len длину строки
s.push_back(symbol)
добавляет в конец строки символ
s.replace(index,
str=s.substr(n,m)
возвращает m символов, начиная с позиции n
s.swap(str)
меняет содержимое s и str местами.
s.size()
возвращает число элементов в строке.
Основные методы для работы со строками класса string
Таблица 6
s.copy(C, I, N)
типа string, так и строка типа char) I символов, начиная
берет n первых символов из str и заменяет символы
n,str)
строки s на них, начиная с позиции index
Чтобы обращаться к отдельным символам строки типа string, можно воспользоваться операцией взятия индекса ([]), или при помощи метода at().
Например:
cout << s1[1] << endl;
cout << s1.at(2) << endl;
Если индекс превышает длину строки, порождается исключение
out_of_range.
2.5. Второе задание к лабораторной работе № 2
Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания;
- варианты задания приведены в табл. 7; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
26

Отчет
Вариант
Задание
1
В текстовой строке определить количество слов, начинающихся и
заканчивающихся одной и той же буквой.
2
В текстовой строке определить количество слов, в которых есть
хотя бы одна буква 'd'.
3
В текстовой строке определить количество слов, в которых содержится ровно три буквы ‘e’.
4
В текстовой строке найти самое длинное слово и вывести его на
экран вместе с его длиной.
5
В текстовой строке заменить все пробелы знаком '_'.
6
В текстовой строке поменять все символы '!' на '?'.
7
На основе текстовой строки, введенной пользователем, создать но-
нескольких подряд идущих пробелов оставить один).
8
На основе текстовой строки, введенной пользователем, создать но-
символ 'f'.
9
На основе текстовой строки, введенной пользователем, создать новую, из которой будут удалены все знаки ‘-’ и ‘+’.
10
В текстовой строке найти количество символов арифметических
операций (т.е. знаков ‘+’, ‘-‘, ‘/’ и ‘*’).
11
На основе текстовой строки, введенной пользователем, создать новую строку, где каждый третий символ заменен знаком ‘#’.
12
Подсчитать, сколько раз пара 'th' входит в заданный текст.
13
В текстовой строке найти самое короткое слово и вывести его на
экран вместе с его длиной.
14
В строке заданы фамилия, имя и отчество студента (именно в таком порядке). Напечатайте его фамилию и инициалы.
15
Дана текстовая строка, слова в которой разделены пробелами.
Найти количество слов в тексте.
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты второго задания для реализации программы со строками
Таблица 7
вую строку, из которой будут удалены все лишние пробелы (т.е. из
вую строку, в которой все пары символов 'ph' будут заменены на
27

Продолжение табл. 7
Вариант
Задание
16
Напишите программу, которая позволяет ввести строку и вывести
не останется один символ.
17
Дана текстовая строка. Определить является ли она положительным или отрицательным целым числом.
18
В текстовой строке проверить, какая буква встречается чаще – 'a',
вое сообщение.
19
В текстовой строке проверить правильность расстановки круглых
личеству закрывающих).
20
В текстовой строке подсчитать число вхождений тройки символов
'abc'.
21
В текстовой строке определить количество слов, начинающихся с
буквы 'a'.
22
В текстовой строке определить количество слов, заканчивающихся
буквой 'w'.
23
Дана текстовая строка. Найти в ней количество нулей.
24
В текстовой строке заменить все символы ‘@’ на ‘#’.
25
Дана текстовая строка. Найти в ней количество слов, длина которых равна 5 символам.
26
Дана текстовая строка. Найти в ней количество цифр ‘1’, ‘2’ и ‘3’.
27
В текстовой строке определить количество слов, в которых содержатся буквы ‘x’ и ‘y’ (и та, и другая вместе).
28
В текстовой строке найти количество точек и запятых.
29
В текстовой строке подсчитать количество букв ‘a’ в последнем
слове.
30
Из текстовой строки получить новую текстовую строку, в которую
тексте нет двоеточия, то сообщить об этом.
31
В текстовой строке подсчитать наибольшее количество идущих
этом.
32
В текстовой строке заменить каждую группу символов child груп-
пой символов children.
33
В текстовой строке удалить все символы 1, 2, 3.
ее, сокращая каждый раз на один символ до тех пор, пока в строке
'b' или ‘c’. В качестве результата вывести соответствующее тексто-
скобок (т.е. соответствует ли количество открывающих скобок ко-
записать все символы до первого двоеточия включительно. Если в
подряд символов ‘*’. Если такого символа нет, то сообщить об
28

Окончание табл. 7
Вариант
Задание
34
В текстовой строке удалить каждый повторный символ из двух
идущих подряд символов.
35
В текстовой строке каждый символ ’_’ заменить двумя символами
‘!’.
36
В текстовой строке определить количество слов, в которых есть
три буквы ‘e’.
37
В текстовой строке заменить все символы ‘;’ на символ ‘,’.
38
В текстовой строке заменить каждый символ ‘.’ на символ ‘…’.
39
В текстовой строке заменить каждую группу стоящих рядом точек
одной точкой.
40
Из текстовой строки получить новую текстовую строку, в которую
двоеточия, то сообщить об этом.
записать все символы после первого двоеточия. Если в тексте нет
2.6. Общие рекомендации по работе со структурами
Данные типа структуры могут содержать элементы разных типов. В языке
С++ структура является видом класса и обладает всеми его свойствами. При
работе со структурами в ряде задач обработки данных достаточно использовать
структуры так, как они описаны в языке С:
struct [ имя_типа ] {
тип_1 элемент_1;
тип_2 элемент_2;
…
тип_n элемент_n;
} [список_описателей];
Элементы структуры называются полями структуры. Поля структуры могут иметь любой тип, кроме типа этой же структуры. Поля структуры также могут быть указателями на структуру.
Описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например:
29

struct Worker{ // описание нового типа Worker
ФИО
Курс
Группа
Матем.
Прог.
Физ.
Ср. балл
char fio[30];
int age, code;
double zarpl;
}; // описание структуры заканчивается точкой с запятой
// определение массива типа Worker
Worker mas_struct[100];
Для доступа к полям структуры указывают имя структуры, ставят точку,
записывают имя поля. Например:
Worker worker, mas_struct[100];
worker.fio = "Миронов";
mas_struct[8].code = 215;
2.7. Пример программы для работы со структурами
Пример. Заполнить массив из 3 записей следующей структуры:
– ФИО студента;
– курс;
– группа;
– оценка по математике;
– оценка по программированию;
– оценка по физике.
Вывести на экран массив записей в виде таблицы следующего вида:
Средний балл рассчитать по всем трем оценкам.
Текст программы на языке С++ приведен ниже.
#include <iostream> // Подключение заголовочного файла
// с функциями ввода-вывода
#include <iomanip>
#include <string>
using namespace std; // Определение пространства имен
int main()
{
const int n = 3; // Размерность массива со структурами
const int m = 77; // Ширина таблицы в символах
// Понадобится для рисования таблицы
setlocale(LC_ALL, "Russian");
// Описание типа структуры
struct stud {
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
