Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование основы языка С++. Учебное пособие
.pdf
Рисунок 7.1
101

Рисунок 7.2
Задача 11. Даны натуральное число n, целые числа a1, … , an. Найти
количество и сумму тех членов данной последовательности, которые
делятся на 5 и не делятся на 7.
102

Задача 12. Даны натуральные числа n, p, целые числа a1, … , an.
Получить произведение членов последовательности a1, … , an, кратных p.
Задача 13. Даны натуральное число n, действительные числа a1, …
, an. Получить удвоенную сумму всех положительных членов последовательности a1, … , an.
Задача 14. Даны натуральное число n, действительные числа a1, … ,
an. Вычислить обратную величину произведения тех членов ai последовательности a1, … , an, для которых выполнено i+1 < ai < i!.
Задача 15. Даны натуральное число n, действительные числа a1, … ,
an. В последовательности a1, … , an все отрицательные члены увеличить
на 0.5, а все неотрицательные заменить на 0.1.
Задача 16. Даны натуральное число n, действительные числа x1, … ,
xn. В последовательности x1, … , xn все члены, меньшие двух, заменить
нулями. Кроме того, получить сумму членов, принадлежащих отрезку
[3,7], а также число таких членов.
Задача 17. Даны натуральное число n, действительные числа a1, … ,
an. В последовательности a1, … , an все неотрицательные члены, непринадлежащие отрезку [1, 2], заменить на единицу. Кроме того, получить
число отрицательных членов и число членов, принадлежащих отрезку
[1, 2].
Задача 18. Даны натуральное число n, целые числа a1, … , an.
Получить сумму положительных и число отрицательных членов последовательности a1, … , an.
Задача 19. Даны натуральное число n, целые числа a1, … , an.
Заменить все большие семи члены последовательности a1, … , an числом
7. Вычислить количество таких членов.
Задача 20. Даны целые числа a1, … , a45. Получить число отрицательных членов последовательности a1, … , a35 и число нулевых членов
всей последовательности a1, … , a45 .
Задача 21. Даны натуральное n, действительные числа a1, … , an. В
последовательности a1, … , an определить число соседств: а) двух положительных чисел; б) двух чисел разного знака; в) двух чисел одного
знака, причем модуль первого числа должен быть больше модуля второго числа;
Задача 22. Даны целые числа c1, …, c95. Имеются ли в последовательности c1, …, c95: а) два идущих подряд нулевых члена; б) три идущих
подряд нулевых члена?
103

Задача 23. Даны натуральное число n, действительные числа x1, …,
x3n. Последовательность чисел x1, …, x3n определяет на плоскости n
квадратов со сторонами, параллельными координатным осям: так, х1,
х2 – координаты центра первого квадрата, х3 – длина его стороны; аналогично, числа х4, х5, х6 определяют второй квадрат, х7, х8, х9 – третий
и т. д. Имеются ли точки, принадлежащие всем квадратам? Если да, то
указать координаты одной из них.
Задача 24. Даны натуральное число n, действительные числа x1, …,
x3n. последовательность чисел x1, …, x3n. Вычислить сумму чисел из x
n+1
…, x3n, которые превосходят по величине все числа x1, …, xn.
Задача 25. Дано натуральное число n. Получить все натуральные
числа, меньшие n и взаимно простые с ним.
Задача 26. Даны целые числа p и q. Получить все делители числа q,
взаимно простые с p.
Задача 27. Дано натуральное число n. Получить все простые делители этого числа.
Задача 28. Найти наименьшее натуральное число n, представимое
двумя различными способами в виде суммы кубов двух натуральных
чисел x3+y3 (x ≥ y).
Задача 29. Даны натуральные числа a, b (a ≤ b). Получить все простые числа p, удовлетворяющие неравенствам a ≤ p ≤ b.
Задача 30. Найти 100 первых простых чисел.
Задача 31. Даны натуральные числа n, m. Получить все меньшие n
натуральные числа, квадрат суммы цифр которых равен m.
Задача 32. Натуральное число называется совершенным, если оно
равно сумме всех своих делителей, за исключением себя самого. Число
6 – совершенное, так как 6 = 1+2+3. Число 8 – не совершенное, так
как 8 ≠ 1+2+4.Дано натуральное число n. Получить все совершенные
числа, меньшие n.
Задача 33. Дано натуральное число n. Можно ли представить его
в виде суммы трех квадратов натуральных чисел? Если можно, то а)
указать тройку x, y, z таких натуральных чисел, что n = x2 + y2 + z2, б)
указать все тройки x, y,z таких натуральных чисел, что n = x2 + y2 + z2.
Задача 34. Известно, что любое натуральное число можно представить в виде суммы не более чем четырех квадратов натуральных чисел
или, что-то же самое, в виде суммы четырех квадратов неотрицательныхцелых чисел (теорема Лагранжа). Дано натуральное n; указать такие
неотрицательные x, y, z, t , что n = x2 + y2 + z2 + t2 .
,
104

Задача 35. Даны натуральные числа m, n1, ... , nm (m ≥ 2). Вычислить
НОД(n1,..., nm) , воспользовавшись для этого соотношением НОД(n1,
..., nk) = НОД(НОД(n1, ..., nk −1)nk) (k = 3, …, n) и алгоритмом Евклида.
Задача 36. Дано трехзначное целое число. Проверить, читается ли
оно одинакова слева направо и справа налево. Такие числа называются
палиндромами.
Задача 37. Напишите программу, которая запрашивает номер месяца
и выводит соответствующее название времени года.
Задача 38. Напишите программу, которая спрашивает Ваш возраст
в годах и выводит его с правильным использованием слов «год» или
«лет», например, 17 лет, 21 год, 22 года.
Задача 39. Напишите программу, вводящую номер месяца и выводящую его название.
Задача 40. В старояпонском календаре был принят 60–летний цикл,
основанный на пяти 12–летних подциклах. Подциклы обозначались
названиями цвета: зеленый, красный, желтый, белый и черный. Внутри
каждого подцикла годы носили названия животных: крысы, коровы,
тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и
свиньи. (1984 год – год зеленой крысы – был началом очередного цикла). Напишите программу, которая вводит номер некоторого года, больший чем 1984, и печатает его название по старояпонскому календарю.
Задача 41. Даны координаты вершин треугольника и координаты
некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника. (При определении расстояний учесть,
что площадь треугольника можно вычислить и через три его вершины
и через произведение площади основания на высоту.)
Задача 42. Напишите программу, печатающую таблицу чисел
Фибоначчи, номера которых не превышают заданного значения n.
Задача 43. Напишите программу, выводящую число Фибоначчи с
заданным номером n > 1.
Задача 44. Напишите программу, выводящую все числа Фибоначчи,
значения которых не превышают некоторого числа N.
Задача 45. Вычислить S – сумму всех чисел Фибоначчи, которые
не превосходят 1000.
Задача 46. Напишите программу, вводящую заданное число n пар
вещественных чисел x, y. Рассматривая эти пары как координаты точек
на плоскости, определить радиус наименьшего круга (с центром в начале
105

координат), внутрь которого попадают все эти точки.
Задача 47. Даны положительные числа A и B (A > B). На отрезке
длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления,
найти длину незанятой части отрезка A.
Задача 48. Даны положительные числа A и B (A > B). На отрезке
длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления,
найти количество отрезков B, размещенных на отрезке A.
Задача 49. Даны целые положительные числа N и K. Используя
только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.
Дано целое число N (> 0). Если оно является степенью числа 3, то
вывести TRUE, если не является – вывести FALSE.
106

РАЗДЕЛ 8 МАССИВЫ
Массив – набор однотипных данных, расположенных в памяти последовательно. Массивы используются для хранения таблиц, матриц,
последовательностей и так далее. Элемент массива – одна из ячеек.
Размерность массива – количество элементов в массиве. Индекс (в мас-
сиве) – номер конкретного элемента в массиве.
8.1 Определение массива
Формальное определение массива выглядит следующим образом:
тип_переменной название_массива [длина_массива]
После типа переменной идет название массива, а затем в квадратных
скобках его размер. Например, определим массив из 5 чисел:
int arrays [5];
Данный массив имеет пять чисел, но все эти числа имеют неопределенное значение, однако можно выполнить инициализацию и присвоить этим числам некоторые начальные значения через фигурные скобки:
int arrays [5] = {1, 2, 3, 4, 5};
Значения в фигурных скобках еще называют инициализаторами.
Если инициализаторов меньше, чем элементов в массиве, то инициализаторы используются для первых элементов. Если в инициализаторов больше, чем элементов в массиве, то при компиляции возникнет
ошибка:
// массив имеет размер 5, однако ему передается 7 значений.
int arrays [5] = {1, 2, 3, 4, 5, 6, 7};
Если размер массива не указан явно, то он выводится из количества
инициализаторов:
// в массиве 6 элементов
int arrays [] = {1, 2, 3, 4, 5, 6};
Инициализация символьных массивов происходит путем передачи
символьному массиву как набора инициализаторов, так и строки:
char s1[] = {'h', 'e', 'l', 'l', 'o'}; // массив будет иметь 5 элементов
char s2[] = "world"; // массив будет иметь 6 элементов, т.к .при инициализации
// строкой в символьный массив автоматически добавляется нулевой
символ '\0'.
107

При этом не допускается присвоение одному массиву другого мас-
сива:
int nums1[] = {1,2,3,4,5};
int nums2[] = nums1; // ошибка
nums2 = nums1; // ошибка
После определения массива к нему можно обратиться к его отдельным элементам по индексу. Индексы начинаются с нуля, поэтому для
обращения к первому элементу необходимо использовать индекс 0.
Обратившись к элементу по индексу можно получить его значение,
либо изменить его:
#include <iostream>
int main()
{
int arrays [4] = {1,2,3,4};
int first_number = arrays [0];
std::cout << first_number << std::endl; // 1
arrays [0] = 34; // изменяем элемент
std::cout << arrays [0] << std::endl; // 34
return 0;
}
Число элементов массива также можно определять через константу:
const int n = 4;
int arrays [n] = {1,2,3,4};
8.2 Перебор массивов
Используя циклы, можно пробежаться по всему массиву и через
индексы обратиться к его элементам:
#include <iostream>
int main()
{
int arrays [4] = {1,2,3,4};
int size = sizeof(arrays)/sizeof(arrays [0]);
for(int i=0; i < size; i++)
std::cout << arrays [i] << std::endl;
return 0;
}
Чтобы осуществить перебор массива в цикле, вначале надо найти
длину массива. Для нахождения длины применяется оператор sizeof.
108

По сути длина массива равна совокупной длине его элементов. Все элементы представляют один и тот же тип и занимают один и тот же размер
в памяти. Поэтому с помощью выражения sizeof(numbers) находим длину
всего массива в байтах, а с помощью выражения sizeof(numbers[0]) –
длину одного элемента в байтах. Разделив два значения, можно получить количество элементов в массиве. А далее с помощью цикла for
осуществляется перебор всех элементов, пока счетчик i не станет равным
длине массива.
В С++ существует еще одна форма цикла for, которая предназначена
специально для работы с коллекциями, в том числе с массивами.
Эта форма имеет следующее формальное определение:
for(тип переменная : коллекция)
{
инструкции;
}
Используем эту форму для перебора массива:
#include <iostream>
int main()
{
int arrays [4] = {1,2,3,4};
for(int number : arrays)
std::cout << number << std::endl;
return 0;
}
При переборе массива каждый перебираемый элемент будет помещаться в переменную number, значение которой в цикле выводится
на консоль.
Если тип объектов в массиве неизвестен, то можно использовать
спецификатор auto для определения типа:
for(auto number : numbers)
std::cout << number << std::endl;
8.3 Многомерные массивы
Кроме одномерных массивов в C++ есть многомерные. Элементы
таких массивов сами в свою очередь являются массивами, в которых
также элементы могут быть массивами. Например, двухмерный массив
типа int:
int arrays [3][2]; // массив состоит из трех элементов,
109

//при этом каждый элемент представляет массив из двух элементов.
Инициализируем подобный массив:
int arrays [3][2] = { {1, 2}, {4, 5}, {7, 8} };
Вложенные фигурные скобки очерчивают элементы для каждого
подмассива. Также при инициализации можно опускать фигурные
скобки:
int arrays [3][2] = { 1, 2, 4, 5, 7, 8 };
Возможна также инициализация не всех элементов, а только некоторых:
int arrays [3][2] = { {1, 2}, {}, {7} };
Чтобы обратиться к элементам вложенного массива, необходимо
использовать два индекса:
int arrays [3][2] = { {1, 2}, {3, 4}, {5, 6} };
std::cout << arrays [1][0] << std::endl; // 3
arrays [1][0] = 12; // изменение элемента
std::cout << arrays [1][0] << std::endl; // 12
Для перебора двумерного массива можно использовать следующий
код:
#include <iostream>
int main()
{
const int rows = 3, columns = 2;
int numbers[rows][columns] = { {1, 2}, {3, 4}, {5, 6} };
for(int i=0; i < rows; i++)
{
for(int j=0; j < columns; j++)
{
std::cout << numbers[i] [j] << "\t";
}
std::cout << std::endl;
}
return 0;
}
Также для перебора элементов многомерного массива можно использовать другую форму цикла for:
#include <iostream>
int main()
{
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
