Skip to content

Практическая работа №5

Работа с массивами и символьными последовательностями

Section titled “Работа с массивами и символьными последовательностями”

Цель работы: Научиться объявлять, инициализировать и эффективно использовать одномерные и многомерные массивы, а также работать с символьными последовательностями (C-стиль строки) в языке программирования C++.

Основные теоретические положения

Section titled “Основные теоретические положения”

Массив — это структура данных, которая хранит фиксированное количество элементов одного типа в последовательной области памяти. Доступ к элементам массива осуществляется по индексу.

Объявление и инициализация одномерных массивов
Section titled “Объявление и инициализация одномерных массивов”
// Объявление массива из 5 целых чисел
int arr[5];
// Инициализация массива при объявлении
int arr1[5] = {10, 20, 30, 40, 50};
// Инициализация массива без указания размера (размер определяется количеством элементов)
int arr2[] = {1, 2, 3};
// Доступ к элементам массива (индексация начинается с 0)
int firstElement = arr1[0]; // 10
int thirdElement = arr1[2]; // 30
// Изменение элемента массива
arr1[1] = 25; // arr1 теперь {10, 25, 30, 40, 50}

Многомерные массивы (например, двухмерные массивы или матрицы) представляют собой массивы массивов.

// Объявление и инициализация двухмерного массива (матрицы 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 “Компиляция и запуск программы”
Terminal window
g++ *имя_файла*.cpp -o *название_файла_для_компиляции*
./*название_скомпилированного_файла*

Для каждого задания необходимо:

  1. Составить схему алгоритма программы;
  2. Написать программу на языке программирования C++;
  3. Произвести отладку программы на различных входных данных.

Задания для выполнения

Section titled “Задания для выполнения”

Выбор варианта: Номер варианта соответствует порядковому номеру студента в списке группы. Если количество студентов превышает 15, варианты повторяются по кругу (например, 16-й студент выполняет Вариант 1, 17-й - Вариант 2 и т.д.).

  1. Одномерный массив: Найти сумму элементов одномерного массива целых чисел, расположенных между первым и последним отрицательными элементами. Если отрицательных элементов нет или их меньше двух, вывести 0.
  2. Многомерный массив: Для заданной квадратной матрицы N x N найти сумму элементов, расположенных выше главной диагонали.
  3. Последовательность символов: Подсчитать количество слов в введенной строке. Слова разделяются одним или несколькими пробелами.
  1. Одномерный массив: Найти минимальный элемент в одномерном массиве и его индекс. Если таких элементов несколько, вывести индекс первого.
  2. Многомерный массив: Для заданной квадратной матрицы N x N найти произведение элементов, расположенных ниже побочной диагонали.
  3. Последовательность символов: Определить, является ли введенная строка анаграммой другой введенной строки (без учета регистра и пробелов).
  1. Одномерный массив: Отсортировать одномерный массив целых чисел методом пузырька по возрастанию.
  2. Многомерный массив: Заменить все отрицательные элементы в матрице на их абсолютные значения.
  3. Последовательность символов: Удалить все повторяющиеся символы из введенной строки, оставив только первое вхождение каждого символа.
  1. Одномерный массив: Найти среднее арифметическое положительных элементов одномерного массива.
  2. Многомерный массив: Найти максимальный элемент в каждой строке матрицы и вывести его.
  3. Последовательность символов: Перевести все буквы в введенной строке в верхний регистр.
  1. Одномерный массив: Сдвинуть все элементы одномерного массива на K позиций вправо (циклический сдвиг).
  2. Многомерный массив: Транспонировать заданную матрицу (поменять строки со столбцами).
  3. Последовательность символов: Подсчитать количество цифр в введенной строке.
  1. Одномерный массив: Подсчитать количество четных и нечетных элементов в одномерном массиве.
  2. Многомерный массив: Найти минимальный элемент в каждом столбце матрицы и вывести его.
  3. Последовательность символов: Заменить все вхождения одного символа в строке на другой символ.
  1. Одномерный массив: Удалить из одномерного массива все элементы, равные заданному значению.
  2. Многомерный массив: Для заданной квадратной матрицы N x N найти сумму элементов, расположенных на побочной диагонали.
  3. Последовательность символов: Проверить, является ли введенная строка палиндромом (без учета регистра).
  1. Одномерный массив: Вставить новый элемент в одномерный массив по заданному индексу.
  2. Многомерный массив: Поменять местами две заданные строки в матрице.
  3. Последовательность символов: Подсчитать количество гласных и согласных русских букв в введенной строке.
  1. Одномерный массив: Найти сумму элементов одномерного массива, расположенных на четных позициях.
  2. Многомерный массив: Поменять местами два заданных столбца в матрице.
  3. Последовательность символов: Удалить все пробелы из введенной строки.
  1. Одномерный массив: Отсортировать одномерный массив целых чисел методом выбора по убыванию.
  2. Многомерный массив: Для заданной квадратной матрицы N x N найти произведение элементов, расположенных на главной диагонали.
  3. Последовательность символов: Найти первое вхождение заданной подстроки в другой строке и вывести его индекс.
  1. Одномерный массив: Найти количество элементов в одномерном массиве, которые больше среднего арифметического всех элементов.
  2. Многомерный массив: Заполнить матрицу N x N случайными числами и вывести ее по спирали, начиная с центра.
  3. Последовательность символов: Проверить, является ли введенная строка допустимым именем переменной в C++ (начинается с буквы или подчеркивания, содержит буквы, цифры или подчеркивания).
  1. Одномерный массив: Найти второй по величине элемент в одномерном массиве целых чисел.
  2. Многомерный массив: Для заданной квадратной матрицы N x N найти сумму элементов, расположенных на главной диагонали и ниже нее.
  3. Последовательность символов: Инвертировать порядок слов в предложении, сохраняя порядок символов внутри слов.
  1. Одномерный массив: Поменять местами максимальный и минимальный элементы одномерного массива.
  2. Многомерный массив: Найти сумму элементов матрицы, расположенных в четных строках и нечетных столбцах.
  3. Последовательность символов: Удалить из строки все символы, кроме букв и цифр.
  1. Одномерный массив: Подсчитать количество элементов в одномерном массиве, которые встречаются более одного раза.
  2. Многомерный массив: Отсортировать каждую строку матрицы по возрастанию.
  3. Последовательность символов: Заменить все вхождения заданной подстроки в строке на другую подстроку.
  1. Одномерный массив: Разделить одномерный массив на два: один с положительными числами, другой с отрицательными (сохраняя относительный порядок).
  2. Многомерный массив: Найти сумму элементов матрицы, расположенных в заданном диапазоне строк и столбцов.
  3. Последовательность символов: Проверить, является ли введенная строка числом (целым или дробным).

  1. В чем разница между одномерным и многомерным массивом?
  2. Как объявить и инициализировать массив в C++?
  3. Что такое последовательность символов (строка на основе массива char)?
  4. Назовите основные функции для работы с C-стиль строками и опишите их назначение.
  5. Какие потенциальные проблемы могут возникнуть при работе с C-стиль строками и как их избежать?
  6. Как передать массив в функцию в C++?
  7. Объясните концепцию “переполнения буфера” при работе со строками.

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. LearnCPP.com - лучший онлайн-учебник по C++ (на английском)
  2. GeeksforGeeks.org - статьи и примеры по программированию
  3. Стивен Прата. Язык программирования C++. Лекции и упражнения. 6-е изд. – М.: ООО “И.Д. Вильямс”, 2012. – 1248 с.
  4. Бьерн Страуструп. Язык программирования C++. 4-е изд. – М.: Бином-Пресс, 2011. – 1136 с.