Практическая работа №5
Работа с массивами и символьными последовательностями
Section titled “Работа с массивами и символьными последовательностями”Цель работы: Научиться объявлять, инициализировать и эффективно использовать одномерные и многомерные массивы, а также работать с символьными последовательностями (C-стиль строки) в языке программирования C++.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Массивы
Section titled “1. Массивы”Массив — это структура данных, которая хранит фиксированное количество элементов одного типа в последовательной области памяти. Доступ к элементам массива осуществляется по индексу.
Объявление и инициализация одномерных массивов
Section titled “Объявление и инициализация одномерных массивов”// Объявление массива из 5 целых чиселint arr[5];
// Инициализация массива при объявленииint arr1[5] = {10, 20, 30, 40, 50};
// Инициализация массива без указания размера (размер определяется количеством элементов)int arr2[] = {1, 2, 3};
// Доступ к элементам массива (индексация начинается с 0)int firstElement = arr1[0]; // 10int thirdElement = arr1[2]; // 30
// Изменение элемента массиваarr1[1] = 25; // arr1 теперь {10, 25, 30, 40, 50}Многомерные массивы
Section titled “Многомерные массивы”Многомерные массивы (например, двухмерные массивы или матрицы) представляют собой массивы массивов.
// Объявление и инициализация двухмерного массива (матрицы 2x3)int matrix[2][3] = { {1, 2, 3}, {4, 5, 6}};
// Доступ к элементу (первая строка, второй столбец)int element = matrix[0][1]; // 2
// Изменение элементаmatrix[1][2] = 7; // matrix теперь {{1, 2, 3}, {4, 5, 7}}2. Символьные последовательности (C-стиль строки)
Section titled “2. Символьные последовательности (C-стиль строки)”В C++ символьные последовательности (или C-стиль строки) представляют собой массивы символов, завершающиеся нулевым символом (\0).
Объявление и инициализация
Section titled “Объявление и инициализация”// Объявление символьного массиваchar greeting[6]; // Достаточно места для "Hello" и '\0'
// Инициализация символьного массиваchar name[] = "World"; // Компилятор автоматически добавляет '\0'
// Использование std::string (предпочтительный способ работы со строками в современном C++)#include <string>std::string modernString = "Hello, C++!";Основные функции для работы с C-стиль строками (из <cstring>)
Section titled “Основные функции для работы с C-стиль строками (из <cstring>)”| Функция | Описание | Пример |
|---|---|---|
strlen(s) | Возвращает длину строки s (без учета завершающего \0). | strlen("Hello") вернет 5. |
strcpy(dest, src) | Копирует строку src в dest. dest должен быть достаточно большим. | char dest[10]; strcpy(dest, "Hi"); dest будет “Hi”. |
strcat(dest, src) | Конкатенирует (объединяет) строку src к dest. dest должен быть достаточно большим. | char s1[10] = "Hello"; strcat(s1, " World"); s1 будет “Hello World”. |
strcmp(s1, s2) | Сравнивает строки s1 и s2. Возвращает 0, если равны; <0, если s1 меньше s2; >0, если s1 больше s2. | strcmp("apple", "banana") вернет <0. |
Важно: При работе с C-стиль строками необходимо быть осторожным с переполнением буфера, так как эти функции не проверяют размер целевого буфера. В современном C++ рекомендуется использовать std::string для безопасной и удобной работы со строками.
Компиляция и запуск программы
Section titled “Компиляция и запуск программы”g++ *имя_файла*.cpp -o *название_файла_для_компиляции*
./*название_скомпилированного_файла*Общие требования
Section titled “Общие требования”Для каждого задания необходимо:
- Составить схему алгоритма программы;
- Написать программу на языке программирования C++;
- Произвести отладку программы на различных входных данных.
Задания для выполнения
Section titled “Задания для выполнения”Выбор варианта: Номер варианта соответствует порядковому номеру студента в списке группы. Если количество студентов превышает 15, варианты повторяются по кругу (например, 16-й студент выполняет Вариант 1, 17-й - Вариант 2 и т.д.).
Вариант 1
Section titled “Вариант 1”- Одномерный массив: Найти сумму элементов одномерного массива целых чисел, расположенных между первым и последним отрицательными элементами. Если отрицательных элементов нет или их меньше двух, вывести 0.
- Многомерный массив: Для заданной квадратной матрицы N x N найти сумму элементов, расположенных выше главной диагонали.
- Последовательность символов: Подсчитать количество слов в введенной строке. Слова разделяются одним или несколькими пробелами.
Вариант 2
Section titled “Вариант 2”- Одномерный массив: Найти минимальный элемент в одномерном массиве и его индекс. Если таких элементов несколько, вывести индекс первого.
- Многомерный массив: Для заданной квадратной матрицы N x N найти произведение элементов, расположенных ниже побочной диагонали.
- Последовательность символов: Определить, является ли введенная строка анаграммой другой введенной строки (без учета регистра и пробелов).
Вариант 3
Section titled “Вариант 3”- Одномерный массив: Отсортировать одномерный массив целых чисел методом пузырька по возрастанию.
- Многомерный массив: Заменить все отрицательные элементы в матрице на их абсолютные значения.
- Последовательность символов: Удалить все повторяющиеся символы из введенной строки, оставив только первое вхождение каждого символа.
Вариант 4
Section titled “Вариант 4”- Одномерный массив: Найти среднее арифметическое положительных элементов одномерного массива.
- Многомерный массив: Найти максимальный элемент в каждой строке матрицы и вывести его.
- Последовательность символов: Перевести все буквы в введенной строке в верхний регистр.
Вариант 5
Section titled “Вариант 5”- Одномерный массив: Сдвинуть все элементы одномерного массива на K позиций вправо (циклический сдвиг).
- Многомерный массив: Транспонировать заданную матрицу (поменять строки со столбцами).
- Последовательность символов: Подсчитать количество цифр в введенной строке.
Вариант 6
Section titled “Вариант 6”- Одномерный массив: Подсчитать количество четных и нечетных элементов в одномерном массиве.
- Многомерный массив: Найти минимальный элемент в каждом столбце матрицы и вывести его.
- Последовательность символов: Заменить все вхождения одного символа в строке на другой символ.
Вариант 7
Section titled “Вариант 7”- Одномерный массив: Удалить из одномерного массива все элементы, равные заданному значению.
- Многомерный массив: Для заданной квадратной матрицы N x N найти сумму элементов, расположенных на побочной диагонали.
- Последовательность символов: Проверить, является ли введенная строка палиндромом (без учета регистра).
Вариант 8
Section titled “Вариант 8”- Одномерный массив: Вставить новый элемент в одномерный массив по заданному индексу.
- Многомерный массив: Поменять местами две заданные строки в матрице.
- Последовательность символов: Подсчитать количество гласных и согласных русских букв в введенной строке.
Вариант 9
Section titled “Вариант 9”- Одномерный массив: Найти сумму элементов одномерного массива, расположенных на четных позициях.
- Многомерный массив: Поменять местами два заданных столбца в матрице.
- Последовательность символов: Удалить все пробелы из введенной строки.
Вариант 10
Section titled “Вариант 10”- Одномерный массив: Отсортировать одномерный массив целых чисел методом выбора по убыванию.
- Многомерный массив: Для заданной квадратной матрицы N x N найти произведение элементов, расположенных на главной диагонали.
- Последовательность символов: Найти первое вхождение заданной подстроки в другой строке и вывести его индекс.
Вариант 11
Section titled “Вариант 11”- Одномерный массив: Найти количество элементов в одномерном массиве, которые больше среднего арифметического всех элементов.
- Многомерный массив: Заполнить матрицу N x N случайными числами и вывести ее по спирали, начиная с центра.
- Последовательность символов: Проверить, является ли введенная строка допустимым именем переменной в C++ (начинается с буквы или подчеркивания, содержит буквы, цифры или подчеркивания).
Вариант 12
Section titled “Вариант 12”- Одномерный массив: Найти второй по величине элемент в одномерном массиве целых чисел.
- Многомерный массив: Для заданной квадратной матрицы N x N найти сумму элементов, расположенных на главной диагонали и ниже нее.
- Последовательность символов: Инвертировать порядок слов в предложении, сохраняя порядок символов внутри слов.
Вариант 13
Section titled “Вариант 13”- Одномерный массив: Поменять местами максимальный и минимальный элементы одномерного массива.
- Многомерный массив: Найти сумму элементов матрицы, расположенных в четных строках и нечетных столбцах.
- Последовательность символов: Удалить из строки все символы, кроме букв и цифр.
Вариант 14
Section titled “Вариант 14”- Одномерный массив: Подсчитать количество элементов в одномерном массиве, которые встречаются более одного раза.
- Многомерный массив: Отсортировать каждую строку матрицы по возрастанию.
- Последовательность символов: Заменить все вхождения заданной подстроки в строке на другую подстроку.
Вариант 15
Section titled “Вариант 15”- Одномерный массив: Разделить одномерный массив на два: один с положительными числами, другой с отрицательными (сохраняя относительный порядок).
- Многомерный массив: Найти сумму элементов матрицы, расположенных в заданном диапазоне строк и столбцов.
- Последовательность символов: Проверить, является ли введенная строка числом (целым или дробным).
Контрольные вопросы
Section titled “Контрольные вопросы”- В чем разница между одномерным и многомерным массивом?
- Как объявить и инициализировать массив в C++?
- Что такое последовательность символов (строка на основе массива
char)? - Назовите основные функции для работы с C-стиль строками и опишите их назначение.
- Какие потенциальные проблемы могут возникнуть при работе с C-стиль строками и как их избежать?
- Как передать массив в функцию в C++?
- Объясните концепцию “переполнения буфера” при работе со строками.
Рекомендуемая литература
Section titled “Рекомендуемая литература”- LearnCPP.com - лучший онлайн-учебник по C++ (на английском)
- GeeksforGeeks.org - статьи и примеры по программированию
- Стивен Прата. Язык программирования C++. Лекции и упражнения. 6-е изд. – М.: ООО “И.Д. Вильямс”, 2012. – 1248 с.
- Бьерн Страуструп. Язык программирования C++. 4-е изд. – М.: Бином-Пресс, 2011. – 1136 с.