Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование основы языка С++. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
const int rows = 3, columns = 2; int numbers[rows][columns] = { {1, 2}, {3, 4}, {5, 6} };
for(auto &subnumbers : numbers) { for(int number : subnumbers) { std::cout << number << "\t"; } std::cout << std::endl; } return 0; }
Для перебора массивов, которые входят в массив, применяют­ся ссылки. То есть во внешнем цикле for(auto &subnumbers : numbers) &subnumbers представляет ссылку на подмассив в массиве. Во вну­треннем цикле for(int number : subnumbers) из каждого подмассива в subnumbers получаем отдельные его элементы в переменную number и выводим ее значение на консоль.
8.4 Динамические массивы
Динамическое выделение памяти необходимо для эффективного использования памяти компьютера.
В С++ операции new и delete предназначены для динамического распределения памяти компьютера. Операция new выделяет память из области свободной памяти, а операция delete высвобождает выделенную память. Выделяемая память, после ее использования должна высво­бождаться, поэтому операции new и delete используются парами. Даже если не высвобождать память явно, то она освободится ресурсами ОС по завершению работы программы. Рекомендую все-таки не забывать про операцию delete.
Оператор new используется в следующих формах:
new тип; – для переменных
•
new тип[размер]; – для массивов
•
Память может быть распределена для одного объекта или для мас­сива любого типа, в том числе типа, определенного пользователем. Результатом выполнения операции new будет указатель на отведенную память, или нулевой указатель в случае ошибки:
111
// пример использования операции new int *value = new int; //где value – указатель на выделенный участок памяти типа int //new – операция выделения свободной памяти под создаваемый объект.
Память, отведенная в результате выполнения new, будет считаться
распределенной до тех пор, пока не будет выполнена операция delete:
// пример использования операции delete: delete value; // где value – указатель на выделенный участок памяти типа int // delete – операция высвобождения памяти
Освобождение памяти связано с тем, как выделялась память – для одного элемента или для нескольких. В соответствии с этим существует и две формы применения delete:
delete указатель; – для одного элемента
•
delete[] указатель; – для массивов
•
Освобождаться с помощью delete может только память, выделенная оператором new.
Чаще всего операции new и delete применяются для создания ди­намических массивов, а не для создания динамических переменных:
// объявление одномерного динамического массива на 10 элементов:
float *array = new float [10];
// где array – указатель на выделенный участок памяти под
// массив вещественных чисел типа float
// в квадратных скобочках указываем размер массива
После того как динамический массив стал ненужным, нужно осво­бодить участок памяти, который под него выделялся:
// высвобождение памяти отводимой под одномерный динамический массив:
delete [] array;
После оператора delete ставятся квадратные скобочки, которые го­ворят о том, что высвобождается участок памяти, отводимый под одно­мерный массив.
Теперь рассмотрим фрагмент кода, в котором показано, как объ­является двумерный динамический массив:
// объявление двумерного динамического массива на 10 элементов:
float **array = new float* [2]; // две строки в массиве
112
for (int count = 0; count < 2; count++) array[count] = new float [5]; // и пять столбцов // где array – массив указателей на выделенный участок памяти под
массив вещественных чисел типа float
Сначала объявляется указатель второго порядка float **array, кото- рый ссылается на массив указателей float*[2], где размер массива равен двум. После чего в цикле for каждой строке массива объявленного в строке 2 выделяется память под пять элементов. В результате получа­ется двумерный динамический массив array[2][5]. Теперь необходимо освободить память, отведенное под двумерный динамический массив:
// высвобождение памяти отводимой под двумерный динамический массив:
for (int count = 0; count < 2; count++)
delete [] array[count];
// где 2 – количество строк в массиве
8.5 Задачи для самостоятельного решения
Задача 1. Введите с клавиатуры в массив пять целочисленных значе­ний, введите их в одну сторону через запятую и найдите среднее ариф­метическое элементов массива.
Задача 2. Найдите в одномерном массиве элементы, сумма которых максимальна.
Задача 3. Дан одномерный массив целых чисел. Найдите, сколько раз в нем повторяется самое частое число.
Задача 4. Дан одномерный массив из 10 целых чисел. Подсчитайте количество различных чисел в нем.
Задача 5. Дан одномерный массив из 10 целых чисел. Подсчитайте наибольшее число одинаковых идущих подряд в нем чисел.
Задача 6. Составить программу, прибавляющую единицу ко всем элементам линейной таблицы.
Задача 7. Даны натуральное N и последовательность А1, А2 ,…, AN. В данной последовательности определите число соседств двух чисел разного знака.
Задача 8. Посчитать количество отрицательных, нулевых и положи­тельных элементов массива, стоящих на четных местах.
Задача 9. Даны натуральное число N и последовательность А1, А2, …, АN. В данной последовательности определите число соседств двух чисел разного знака.
113
Задача 10. Дана последовательность n-чисел. Заменить все ее члены,
больше заданного числа z, этим числом. Посчитать количество замен.
Задача 11. Выставленные в журнале оценки результатов контроль­ной работы по информатике образуют массив. Составить программу определения числа “5”, “2”, среднего балла за контрольную работу.
Задача 12. В классе 30 учеников. Подсчитать количество учени­ков, у которых оценка по информатике выше оценки по математике. Все оценки вводятся с клавиатуры.
Задача 13. Дана последовательность вывести те, которые входят в данную последовательность по одному разу.
Задача 14. Дан массив натуральных чисел. Вывести на печать те числа, у которых остаток от деления на m равен t.
Задача 15. Вывести элементы массива на экран в обратном порядке.
Задача 16. Дана последовательность целых чисел A1, A2… An. Выяснить какое число встречается раньше – положительное или от­рицательное.
Задача 17. Дана последовательность целых чисел a1, a2, …, an. Выяснить, будет ли она возрастающей.
Задача 18. Даны натуральное число N и последовательность A1, A2, …, An. Определить наименьшее положительное среди A1, A2, …, An.
Задача 19. Даны целые числа а1, а2….,аn. Вывести на печать только те числа, для которых выполняется условие ai<=i.
Задача 20. В заданном одномерном массиве поменять местами со­седние элементы, стоящие на четных местах, с элементами, стоящими на нечетных.
Задача 21. Дана последовательность целых положительных чисел. Найти произведение только тех чисел, которые больше заданного числа M. Если таких нет, то выдать сообщение об этом.
Задача 22. Дана последовательность из n вещественных чисел. Поменять в последовательности местами наибольший элемент с но­мером m.
Задача 23. Подсчитать сколько дней в январе было дней с темпера­турой ниже, выше и равной средней температуре месяца.
Задача 24. Секретный замок для сейфа состоит из 10 расположенных в ряд ячеек, в которые надо вставить игральные кубики. Но дверь откры­вается только в том случае, когда в любых трех соседних ячейках сумма точек на передних гранях кубиков равна 10. (Игральный кубик имеет
114
на каждой грани от 1 до 6 точек). Напишите программу, которая разга­дывает код замка при условии, что два кубика уже вставлены в ячейки.
Задача 25. По фигурному катанию N судей выставляют оценки. Наибольшая и наименьшая отбрасываются, а по остальным выставля­ется средний бал. Напишите программу, вычисляющую среднюю оценку и выдайте номер судей, которые поставили наибольшую и наименьшую оценки.
Задача 26. Сформировать массив по следующему образцу: a1=-1/, a2=5, a3=-2, a4=6, a5=-3, a7=-4 и т.д.
Задача 27. Поменять максимальный и минимальный элемент не­которого массива местами.
Задача 28. Дана последовательность A1, A2,…, A10. Получить наи­большее среди A1+A10, A2+A9,…, A5+A6.
Задача 29. Проверить есть ли в заданном массиве простые числа.
Задача 30. Дан одномерный массив. Найти сумму максимума среди четных и минимума среди нечетных.
Задача 31. Даны натуральное число N и последовательность А1, А2, …, АN. В данной последовательности определить число соседств двух положительных чисел.
Задача 32. Подсчитать сколько дней в ноябре было дней с темпера­турой ниже, выше и равной 0.
Задача 33. Даны натуральное число n и последовательность А1, А2,….., АN. Получить все элементы , входящие в данную последова­тельность по одному разу.
Задача 34. Дан массив натуральных чисел. Найти сумму элементов, кратных некоторому данному числу K.
Задача 35. Найти минимальное среди чисел, расположенных на четных позициях некоторой последовательности.
Задача 36. Сформировать массив следующим образом a1=-1, a2=1, a3=-2, a4=2, a5=-3, a6=3, a7=-4 и т.д.
Задача 37. Найти минимальное из четных элементов массива пяти целых чисел.
Задача 38. В данном одномерном массиве найти количество по­ложительных, отрицательных и нулевых элементов, имеющих номера позиций кратные трем.
Задача 39. Дано целое число N > 0. Сформировать и вывести цело­численный массив размера N, содержащий N первых положительных нечетных чисел: 1, 3, 5, … .
115
Задача 40. Дано целое число N > 0. Сформировать и вывести цело­численный массив размера N, содержащий степени двойки от первой до N-й: 2, 4, 8, 16, … .
Задача 41. Дано целое число N > 1, а также первый член A и разность D арифметической прогрессии. Сформировать и вывести массив раз­мера N, содержащий N первых членов данной прогрессии.
Задача 42. Дан целочисленный массив размера N. Вывести все со­держащиеся в данном массиве нечетные числа в порядке возрастания их индексов, а также их количество K.
Задача 43. Дан целочисленный массив размера N, все элементы которого упорядочены (по возрастанию или по убыванию). Найти ко­личество различных элементов в данном массиве.
Задача 44. Дан целочисленный массив размера N, содержащий ров­но два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номера в порядке возрастания.
Задача 45. Напишите программу, создающую массив из 10 элемен­тов целого типа, вводящую некоторое целое число и определяющую, встречается ли это число среди элементов массива.
Задача 46. Напишите программу, которая вводит массив из 10 чисел с плавающей точкой и проверяет, образуют ли они возрастающую по­следовательность.
Задача 47. Напишите программу, которая проверяет, есть ли во вве­денном массиве одинаковые элементы.
Задача 48. Напишите программу, которая находит среднее арифме­тическое значение элементов введенного массива.
Задача 49. Напишите программу, которая находит разность между наибольшим и наименьшим элементами массива.
Задача 50. Последовательность вещественных чисел размещена в массиве. Определить число поворотных точек этой последовательности, то есть число членов последовательности больших или меньших своих соседей.
Задача 51. В заданном двумерном массиве (матрице) 4*4 найдите максимальный элемент, его номер строки и номер столбца.
Задача 52. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, проверить наличие положи­тельных элементов в каждой строке.
Задача 53. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти количество положи­тельных элементов в каждой строке.
116
Задача 54. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти сумму положительных элементов в каждой строке.
Задача 55. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти среднее арифметическое ненулевых элементов в каждой строке.
Задача 56. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти минимальный элемент в каждой строке.
Задача 57. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, проверить наличие отрицательных элементов в каждой строке.
Задача 58. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти количество отрицательных элементов в каждой строке.
Задача 59. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти произведение ненулевых элементов в каждой строке.
Задача 60. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти среднее арифметическое по­ложительных элементов в каждой строке.
Задача 61. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти минимальный элемент в каждой строке.
Задача 62. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, проверить наличие отрицательных элементов в каждой строке.
Задача 63. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти количество отрицательных элементов в каждой строке.
Задача 64. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти произведение ненулевых элементов в каждой строке.
Задача 65. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти среднее ариф­метическое положительных элементов в каждой строке.
Задача 66. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти минимальный элемент в каждой строке.
117
Задача 67. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, проверить наличие отрицательных элементов в каждой строке.
Задача 68. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти количество отрицательных элементов в каждой строке.
Задача 69. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти произведение ненулевых элементов в каждой строке.
Задача 70. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти среднее арифметическое положительных элементов в каждой строке.
Задача 71. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти макси­мальный элемент в каждой строке.
Задача 72. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, проверить наличие положительных элементов в каждой строке.
Задача 73. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти количество положительных элементов в каждой строке.
Задача 74. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти сумму положительных элементов в каждой строке.
Задача 75. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти среднее арифметическое ненулевых элементов в каждой строке.
118
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Парадигмы программирования [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https://ru.bmstu. wiki/%D0%9F(парадигмы программирования), свободный
2. Алан Тьюринг [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https://ru.wikipedia.org/wiki/Тьюринг_Алан, сво­бодный
3. Объектно-ориентированное программирование [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https:// ru.wikipedia.org/wiki/Объектно_ориентированное_программирование, свободный
4. Дейкстра Эдсгер Вибе [Электронный ресурс] /. – Электрон. тек­стовые дан. – Режим доступа: https://ru.wikipedia.org/wiki/ Дейкстра_ Эдсгер_Вибе, свободный
5. Структурное программирование [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https://ru.wikipedia.org/ wiki/Структурное_программирование, свободный
6. Функциональное программирование [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https://ru.wikipedia.org/wiki/ Функциональное_программирование, свободный
7. Джон Маккарти [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https://ru.wikipedia.org/wiki/Маккартни_Джон, свободный
8. C++ (язык программирования) [Электронный ресурс] /. – Электрон. текстовые дан. – Режим доступа: https://ru.bmstu.wiki/ C%2B%2B_(язык программирования), свободный.
9. Программирование. принципы и практика использования С++ /Бьерн Страуструп. – 2-издание. – Москва: Вильямс, 2015. – 1328 с.
10. Основы программирования на языках Си и C++ для начина­ющих [Электронный ресурс] /. – Электрон. текстовые дан. – 2020. – Режим доступа: http://cppstudio.com/, свободный
11. Справочник по языку C++ [Электронный ресурс] /. – Электрон. текстовые дан. – 2020. – Режим доступа: https://docs.microsoft.com/ru­ru/cpp/cpp/cpp-language-reference?view=vs-2019, свободный
119
12. Руководство по языку программирования C++ [Электронный ресурс] /. – Электрон. текстовые дан. – 2020. – Режим доступа: https:// metanit.com/cpp/, свободный
13. Абромян, М.Э. 1000 задач по программированию /М.Э. Абромян. – Ростов-на-Дону: Ростовский государственный универси­тет, 2004. – 536 с.
14. Создание игры «Змейка» на С++ [Электронный ресурс]/. – Электрон. текстовые дан. – Режим доступа: https://code-live.ru/post/ cpp-oldschool-snake/, свободный.
15. 90 рекомендаций по стилю написания программ на C++ [Электронный ресурс] /. – Электрон. текстовые дан. – 2020. – Режим доступа: https://habr.com/ru/post/172091/, свободный
16. Вывод двоичного представления целого десятичного числа [Электронный ресурс] / Cranium. – Электрон. текстовые дан. – 2020. – Режим доступа: https://code-live.ru/solutions/cpp/99/, свободный
17. Разложение натурального числа на простые множители [Электронный ресурс] / Cranium. – Электрон. текстовые дан. – 2020. – Режим доступа: https://code-live.ru/solutions/cpp/18/, свободный
18. Итеративное вычисление факториала [Электронный ресурс] / selevit. – Электрон. текстовые дан. – 2020. – Режим доступа: https:// code-live.ru/solutions/cpp/12/, свободный
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]