Использование указателей при работе с массивами является мощным средством экономии памяти, ведь мы можем организовывать массивы в куче, когда это требуется программе, и отдавать память в переиспользование, когда массив перестает быть нам нужен.
Для работы с динамическими массивами требуется сначала объявить указатель требуемого типа данных, например,
double *uk_mas;
Затем где-нибудь в программе выделить память в куче для массива
uk_mas = new double[50];
После этого с массивом можно работать обычным образом, например,
for (int i = 0; i < 50; i++)
uk_mas[i] = rand()%100;
После работы с массивом следует освободить его память операцией
delete[] uk_mas;
Теперь можно снова использовать освобожденный объем памяти посредством повторного резервирования памяти. Если в операторе delete не указать квадратные скобки, то результат его работы окажется непредсказуемым.
Таким образом, время жизни динамического массива, как и любой динамической переменной, - с момента выделения памяти до момента ее освобождения. Область действия зависит от места описания указателя, через который производится работа с массивом. Область действия и время жизни указателей подчиняются общим правилам. Локальная переменная при выходе из блока, в котором она описана, теряется. Если эта переменная является указателем и в ней хранится адрес выделенной динамической памяти, то при выходе из блока эта память перестает быть доступной, однако не помечается как свободная, поэтому не может быть использована в дальнейшем. Это называется утечкой памяти и является распространенной ошибкой.
Если размер массива точно не определен или массив очень большой, то лучше использовать динамические массивы, объявленные с применением указателей.
Пример
Дан массив из 100 целочисленных элементов. Создать другой массив, содержащий только четные элементы исходного массива.
#include <iostream>
#include <iomanip>
#include <cstdlib>
const int M = 100;
int main ()
{ int mas[M];
int *ukm; // указатель на целое
int k = 0; // счетчик четных элементов
j = 0; // для нового массива
for (int i = 0; i < M; i++)
{ mas[i] = rand() % 100 – 50;
cout << setw(4) << mas[i];
if (mas[i] % 2 == 0)
k++;
}
cout << endl;
ukm = new int[k];
for (int i = 0; i < M; i++)
{ if (mas[i] % 2 == 0)
{ ukm[j] = mas[i];
cout << setw(4) << ukm[j]; // вывод значений нового массива
j = j + 1;
}
}
cout << endl;
return 0;
}
Указатели и матрицы
Мы знаем, что двумерный массив представляется в С++ как массив, состоящий из массивов. С матрицами можно успешно работать с помощью указателей.
int matr[4][2]; // массив [4×2]
int *uk_matr; // указатель на целый тип
В этом случае uk_matr = matr указывает на первый элемент первой строки: uk_matr == &matr[0][0], uk_matr + 1 – на matr[0][1] и так далее согласно расположению элементов массива в памяти, которое всегда однозначно (сначала запоминаются элементы первой строки, за ней – элементы второй строки и так далее).
ukmatr ukmatr + 1 ukmatr + 2
matr[0][0] | matr[0][1] | matr[1][0] | matr[1][1] | … |
matr
Тогда
uk_matr == &matr[0][0]
uk_matr + 1 == &matr[0][1]
uk_matr + 2 == &matr[1][0]
…
uk_matr +5 == &matr[2][1]
или
matr[0] == &matr[0][0]
matr[1] == &matr[1][0] и так далее.
Выделить память под матрицу в куче можно таким образом.
1) int *uk_ma = new int[row*col]; … delete[]uk_ma;
2) uk_ma = malloc(row*col*sizeof(int)); free(uk_ma);
Но тогда в куче будет выделен сплошной кусок памяти, что неэффективно для матриц больших размеров.
Чаще выделение памяти под матрицу выполняют иначе.
Пусть требуется создать двумерный динамический массив целых чисел размерностью n*m.
…
int m, n, i;
int **mas; // указатель на указатель типа int
…
cin << n; // число строк матрицы
cin << m; // число столбцов матрицы
mas = new int* [n]; // выделяется память под n указателей на строку
for (i = 0; i < n; i++)
mas[i] = new int[m]; // выделяется память для каждой строки
…
for (i = 0; i < n; i++)
delete [] mas[i]; // освобождение памяти
delete [] mas;
Для двумерного динамического массива в данном случае память не представляет собой сплошной участок, так как выделяется с помощью нескольких операций new.
Пример
Найти максимальный элемент каждого столбца в двумерном массиве и переписать эти значения в одномерный массив (всё в динамических массивах)
#include <iostream>
#include <ctime>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main()
{
const int rows=5;
const int cols=5;
srand(time(0)); // перемешиваем базу случайных чисел
// создаем указатель на матрицу, указатель на одномерный массив и выделяем память
float **ptr2arr = new float *[cols];
float *ptrmax = new float[cols];
for (int count=0;count<rows; count++)
ptr2arr[count] = new float[cols];
// заполняем матрицу вещественными случайными числами
for (int count_row =0; count_row <rows; count_row++)
{
for (int count_col=0;count_col<cols;count_col++)
ptr2arr[count_row][count_col] = ((rand()%10+1) / float(rand()%10+1));
}
// выводим матрицу
for (int count_row = 0; count_row < rows; count_row++)
{
for (int count_col =0; count_col < cols; count_col++)
cout « setw(4) « setprecision(2) « ptr2arr[count_row][count_col] « " ";
cout « endl;
}
/* находим максимальный элемент каждого столбца в матрице и переписываем эти значения в одномерный массив */
cout « "-------------------------------------------\n";
for (int count_col =0; count_col < cols; count_col++)
{
ptrmax[count_col]=0;
for (int count_row=0;count_row < rows; count_row++)
{
if(ptr2arr[count_row][count_col] >= ptrmax[count_col])
ptrmax[count_col] = ptr2arr[count_row][count_col];
}
cout « setw(4) « setprecision(2) « ptrmax[count_col]«" ";
}
// удаляем занимаемую массивами память (отдаем в переиспользование)
for (int count=0; count < rows; count++)
delete ptr2arr [count];
delete [] ptrmax;
delete [] ptr2arr;
return 0;
}
Задания для лабораторных работ по вариантам
Лабораторная работа 1
Простейшие программы
Вариант 1
Написать программу для решения следующей задачи:
Найти сумму цифр заданного трехзначного числа.
Вариант 2
Написать программу для решения следующей задачи:
Найти целую часть и остаток от деления двух целых отрицательных чисел.
Вариант 3
Написать программу для решения следующей задачи:
Найти периметр и площадь прямоугольного треугольника по длинам двух катетов.
---------------------------------------------------------------------------------------------------------------------------
Вариант 4
Написать программу для решения следующей задачи:
Найти третью с конца цифру заданного шестизначного числа.
Вариант 5
Написать программу для решения следующей задачи:
Вычислить длину окружности, площадь круга и объем шара одного и того же заданного радиуса.
Вариант 6
Написать программу для решения следующей задачи:
Найти среднее арифметическое трех чисел.
-------------------------------------------------------------------------------------------------------
Вариант 7
Написать программу для решения следующей задачи:
Найти число, полученное выписыванием в обратном порядке цифр заданного трехзначного числа.
Вариант 9
Написать программу для решения следующей задачи:
Поменять местами значения переменных x, y, z так, чтобы в x оказалось значение переменной y, в y – значение переменной z, а в z – прежнее значение переменной x.
---------------------------------------------------------------------------------------------------------
Вариант 10
Написать программу, которая печатает True или False в зависимости от того, выполняется ли условие:
Первая заданная дата (день, месяц) предшествует второй (в пределах одного года).
Вариант 12
Написать программу для решения следующей задачи:
Приписать к заданному двузначному числу такое же справа.
Вариант 11
Написать программу, которая печатает True или False в зависимости от того, выполняется ли условие:
Код первого введенного символа предшествует коду второго введенного символа.
Коды символов также вывести на печать.
Вариант 13
Написать программу, которая печатает True или False в зависимости от того, выполняется ли условие:
Для произвольных вещественных чисел а. b и с определить, имеет ли уравнение аx*x+bx+c=0 хотя бы одно вещественное решение.
Вариант 14
Написать программу, которая печатает True или False в зависимости от того, выполняется ли условие: среди цифр заданного трехзначного числа есть одинаковые.
---------------------------------------------------------------------------------------------------------------------------
Вариант 15
Написать программу для решения следующей задачи:
Вычислить среднее геометрическое двух заданных положительных чисел.
------------------------------------------------------------------------------------------------------
Вариант 16
Написать программу для решения следующей задачи:
Найти произведение цифр заданного четырехзначного числа.
Вариант 17
Написать программу, которая печатает True или False в зависимости от выполнения условия: x лежит вне отрезков [2,5] и [-1,1].
Вариант 18
Написать программу, которая печатает True или False в зависимости от выполнения условия: x принадлежит отрезкам [2,5] и [-1,1].
Вариант 19
Написать программу для решения следующей задачи:
Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.
Вариант 20
Написать программу для решения следующей задачи:
Найти площадь кольца, для которого известны внутренний и внешний радиусы.
Вариант 21
Написать программу для решения следующей задачи:
Полторы кошки за полтора часа съедают полторы мышки. Сколько мышек съедят X кошек за Y часов?
Вариант 22
Написать программу для решения следующей задачи:
Дано x. Получить значения -2x +3x*x-4x*x*x и 1+2x-3x*x+4x*x*x. Позаботиться об экономии операций.
-----------------------------------------------------------------------------------------------------------------
Вариант 23
Написать программу для решения следующей задачи:
Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и объем этого куба.
---------------------------------------------------------------------------------------------------------------------------
Вариант 24
Написать программу для решения следующей задачи:
Даны два действительных числа x и y. Вычислить их сумму, разность, произведение и частное.
Вариант 25
Написать программу для решения следующей задачи:
Найти расстояние между точками с координатами (x1, y1) и (x2, y2).
Вариант 26
Написать программу для решения следующей задачи:
Вычислить дробную часть среднего геометрического трех заданных положительных чисел.
Вариант 27
Написать программу для решения следующей задачи:
По координатам трех вершин некоторого треугольника найти его площадь и периметр.
---------------------------------------------------------------------------------------------------------------------------
Вариант 28
Написать программу для решения следующей задачи:
Исходные данные – два момента времени одних суток, выраженные в часах и минутах. Первый момент времени предшествует второму. Напишите оператор, определяющий интервал между этими двумя моментами времени. Результат должен быть выражен в часах и минутах.
---------------------------------------------------------------------------------------------------
Вариант 29
Написать программу, которая печатает True или False в зависимости от выполнения условия: квадрат заданного трехзначного числа равен кубу суммы цифр этого числа.
Вариант 30
Написать программу, которая печатает True или False в зависимости от выполнения условия: среди первых трех цифр из дробной части заданного положительного числа есть цифра 0.
Вариант 31
Написать программу для решения следующей задачи:
Даны два числа. Найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чисел.
---------------------------------------------------------------------------------------------------------------------------
Вариант 32
Написать программу, которая печатает True или False в зависимости от выполнения условия:
Сумма цифр заданного трехзначного числа является четным числом.
Лабораторная работа 2
Программы с повторениями (операторами цикла)
Вариант 1
1. Написать программу нахождения суммы цифр натурального числа N.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Вычислить среднее арифметическое всех положительных членов последовательности.
Вариант 2
1. Найти сумму тех цифр натурального числа, которые больше пяти.
2. Вводится последовательность из N произвольных чисел. Определить, сколько раз последовательность меняет знак.
Вариант 3
1. Найти двузначное число, равное квадрату числа его единиц, сложенному с кубом его десятков.
2. Найти наименьший элемент в последовательности целых чисел, 0 – конец последовательности.
Вариант 4
1. Определить, сколько раз заданная цифра встречается в произвольном натуральном числе.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Посчитать, сколько в ней отрицательных чисел, и сумму положительных чисел.
Вариант 5
1. Натуральное число из N цифр называется числом Армстронга, если сумма его цифр, возведенных в N-ую степень, равна самому числу. Получить все числа Армстронга, состоящие из трех, четырех и пяти цифр.
2. Вводится последовательность натуральных чисел, признак окончания ввода – число, оканчивающееся двумя семерками. Найти количество удвоенных нечетных чисел в последовательности.
Вариант 6
1. Дано натуральное число N. Выяснить, сколько раз в нем встречается его максимальная цифра.
2. Дано натуральное К. Напечатать К-тую цифру последовательности 12345678910111213..., в которой выписаны подряд все натуральные числа.
Вариант 7
1. Дано натуральное число N. Найти сумму первой и последней цифры этого числа.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Вывести на печать только четные числа.
--------------------------------------------------------------------------------------------------------------------------
Вариант 8
1. Дано натуральное число N<=99. Дописать к нему введенную пользователем цифру К в конец и в начало.
2. Вводится последовательность из N целых чисел. Найти наименьший элемент из тех чисел последовательности, которые больше 10.
Вариант 9
1. Дано натуральное число N. Верно ли, что в нем на четных местах стоит цифра А.
2. Дана последовательность из N целых чисел. Определить, со скольких отрицательных чисел она начинается.
Вариант 10
1. Приписать по единице в начало и конец записи числа N.
2. Вводится последовательность из N целых чисел. Является ли она знакопеременной.
---------------------------------------------------------------------------------
Вариант 11
1. Дано натуральное число N. Определить, равна ли первая цифра числа его последней цифре.
2. Вводится последовательность целых чисел, за которой следует 0. Вывести на экран порядковые номера положительных элементов последовательности.
Вариант 12
1. Дано натуральное число. Определить, сколько раз в записи числа встречается цифра пять.
2. Вводится последовательность из N целых чисел. Вычислить сумму положительных элементов последовательности, порядковые номера которых нечетны.
--------------------------------------------------------------------------------------------------------
Вариант 13
1. Дано натуральное число. Определить, является ли четной первая цифра в записи числа.
2. Вводится последовательность из N целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.
Вариант 14
1. Найти количество четных цифр целого положительного числа.
2. Дана последовательность из N целых чисел. Найти порядковый номер наименьшего числа последовательности.
Вариант 15
1. Поменять местами первую и последнюю цифры числа. Например, из числа 1254 должно получиться число 4251.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить, является ли последовательность возрастающей.
Вариант 16
1. Найти сумму четных делителей заданного натурального числа N.
2. Вводится последовательность положительных чисел, 0 – конец последовательности. Найти максимальное среди введенных чисел. Определить, сколько раз оно встретилось в последовательности и превышает ли число его вхождений одну треть от общего количества введенных чисел.
Вариант 17
1. Приписать к исходному натуральному числу N такое же число.
2. Вводится последовательность из N целых чисел. Вычислить сумму отрицательных элементов последовательности, порядковые номера которых четны.
Вариант 18
1. Дано натуральное четырехзначное число. Определить, является ли оно палиндромом. Например, палиндромами являются числа 2222, 4114 и так далее.
2. Найти наименьший элемент в последовательности целых чисел, 0 – конец последовательности.
Вариант 19
1. Дано натуральное число. Определить, сколько раз первая цифра встречается в данном числе.
2. Вводится последовательность из N целых чисел. Найти сумму отрицательных чисел.
------------------------------------------------------------------------------------------------------------
Вариант 20
1. Дано натуральное число. Верно ли, что данное число начинается на А, а заканчивается на В (цифры А и В вводятся с клавиатуры).
2. Вводится последовательность из N целых чисел. Найти наименьшее среди положительных чисел.
----------------------------------------------------------------------------------------------------------------
Вариант 21
1. Найти все такие натуральные числа, которые делятся на 7 и сумма цифр которых кратна 7.
2. Вводится последовательность из целых чисел, за которой следует 0. Вычислить сумму положительных элементов последовательности, порядковые номера которых больше 3.
--------------------------------------------------------------------------------------
Вариант 22
1. Выяснить, является ли разность максимальной и минимальной цифр числа четной.
2. Вводится последовательность целых чисел, за которой следует 0. Определить два наименьших числа.
Вариант 23
1. Дано натуральное число N. Найти среднее арифметическое значение цифр числа, стоящих на нечетных местах.
2. Вводится последовательность из N целых чисел. Найти наибольшее из всех отрицательных чисел.
----------------------------------------------------------------------------------------------------------------------------
Вариант 24
1. Найти все натуральные числа, не превосходящие заданного N, которые делятся на каждую из своих цифр.
2. Вводится последовательность ненулевых целых чисел, 0 – конец последовательности. Определить, какой элемент встречался чаще, максимальный или минимальный.
Вариант 25
1. Из заданного натурального числа удалить все цифры А. А вводится с клавиатуры.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить два наибольших числа среди отрицательных.
Вариант 26
1. Дано натуральное число. Изменить число, приписав в конец числа максимальную из его цифр.
2. Дана последовательность из N чисел. Определить, сохраняет ли она знак.
Вариант 27
1. Определить, существует ли натуральное четырехзначное число, сумма пятых степеней цифр которого равна самому числу.
2. Вводится последовательность вещественных чисел, за которой следует 0. Найти наименьшее из всех положительных чисел.
Вариант 28
1. Дано натуральное число. Найти цифровой корень числа.
Число 12345, цифровой корень находится так: 1+2+3+4+5 = 15, 1+5 = 6 – это цифровой корень для числа 12345.
2. Вводится последовательность чисел, 0 – конец последовательности. Определить, сколько в ней пар соседних равных элементов.
----------------------------------------------------------------------------------------------------
Вариант 29
1. Найти сумму только тех цифр натурального числа, которые меньше пяти.
2. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в очереди до первой женщины.
Вариант 30
1. Дано натуральное число. Верно ли, что оно начинается и заканчивается одной и той же цифрой.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Посчитать, сколько в ней отрицательных чисел, порядковые номера которых четные.
Вариант 31
1. Натуральное число из N цифр называется числом Армстронга, если сумма его цифр, возведенных в N-ую степень, равна самому числу. Получить все числа Армстронга в заданном интервале.
2. Вводится последовательность положительных чисел, признак окончания ввода – число, являющееся степенью 3. Найти максимальное из введенных чисел и определить номер его первого вхождения.
----------------------------------------------------------------------------------------------------------------------------
Вариант 32
1. Дано натуральное число. Верно ли, что сумма цифр данного числа равна А (А вводится с клавиатуры).
2. Вводится последовательность из N целых чисел. Определить длину максимальной подпоследовательности из подряд идущих чисел.
-------------------------------------------------------------------------------------------------------------------
Вариант 33
1. Определить, существует ли натуральное четырехзначное число, равное четвертой степени суммы своих цифр.
2. Вводится последовательность из N целых чисел. Определить номер последнего нечетного члена последовательности.
Вариант 34
1. Дано натуральное число N. Поменять порядок цифр числа на обратный. Например, из числа 12345 получим 54321.
2. Вводится последовательность чисел, 0 – конец последовательности. Определить, содержит ли последовательность хотя бы два равных соседних числа, и подсчитать число таких пар.
Вариант 35
1. Дано натуральное число N. Найти сумму первой и последней цифры этого числа.
3. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Найти число соседств двух положительных членов.
--------------------------------------------------------------------------------------------------------------------------
Вариант 36
1. Дано натуральное число N. Найти количество четных цифр числа.
2. Вводится последовательность из N целых чисел. Выяснить, какое число встречается в последовательности раньше – положительное или отрицательное.
Вариант 39
1. Дано натуральное число N. Переставить первую и последнюю цифру числа.
2. Вводится последовательность из целых чисел, оканчивающаяся нулем. Найти количество наибольших чисел последовательности.
Вариант 40
1. Найти все автоморфные числа из промежутка от N до M. Автоморфным называется число, которое равно последним цифрам своего квадрата. Например, 5 и 25, 25 и 625.
2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Найти длину максимальной подпоследовательности подряд идущих нечетных чисел.
Вариант 41
1. Дано натуральное число N. Переставить его цифры так, чтобы образовалось максимальное число, записанное теми же цифрами.
2. Вводится последовательность из целых чисел, оканчивающаяся нулем. Найти номер большего из двух наименьших чисел последовательности.
------------------------------------------------------------------------------------------------------------
Вариант 42
1. Дано натуральное число. Верно ли, что его можно одинаково читать слева направо и справа налево.
2. Вводится последовательность из N целых чисел. Найти номер последнего из наименьших чисел.
--------------------------------------------------------------------------------------------------------------------------
Вариант 43
1. Верно ли, что в данном числе нет данной цифры А (цифру А вводить с клавиатуры).
2. Вводится последовательность целых чисел, за которой следует 0. Найти сумму тех из них, которые кратны пяти.
Вариант 38
1. Дано натуральное число N, кратное 3. Найдем сумму кубов цифр числа. К полученному числу применим такое же преобразование. Составить программу выполнения описанного преобразования.
2. Вводится последовательность вещественных чисел, оканчивающаяся нулем и состоящая более чем из одного ненулевого элемента. Определить номер числа по абсолютной величине самого близкого к своему номеру.
Вариант 37
1. Дано натуральное число N. Выбросите из записи этого числа цифры 3 и 7, оставив прежним порядок остальных цифр. Например, из числа 3171507377 должно получиться 1150.
2. Вводится последовательность ненулевых чисел, оканчивающаяся нулем. Определить номер меньшего из двух наибольших членов последовательности.
Вариант 44
1. Найти количество нечетных делителей натурального числа N.
2. Вводится последовательность ненулевых чисел, оканчивающаяся нулем. Вывести на экран порядковые номера положительных элементов последовательности.
Лабораторная работа 3
Программы с функциями в С++
Вар. 1
Найти натуральное число в интервале от 1 до N с максимальной суммой делителей.
Вар. 2
Дано натуральное число N. Вычислить S = 2! + 4! + ... + 2N!.
Вар. 3
Дано два натуральных числа. Определить, является ли первое число перевертышем второго.
Вар. 4
Вычислить площадь правильного шестиугольника со стороной А, используя подпрограмму вычисления площади треугольника.
Вар. 5
Составить программу нахождения наибольшего общего делителя четырех заданных чисел.
Вар. 6
Даны натуральное число N, действительное число а. Вычислить
S = 1/a + 1/a2 +...+1/a 2N-2. Написать функцию нахождения степени числа.
Вар. 7
Даны 3 натуральных числа. Определить, в каком из них сумма цифр больше.
Вар. 8
Написать программу, подсчитывающую число сочетаний без повторения из N элементов по К элементов:
C(N,K) = N!/K!(N - K)!
Вар. 9
Даны три числа. Определить, в каком из них больше цифр.
Вар. 10
Даны два натуральных числа M и N (M<=9999, N<=9999). Проверить, есть ли в записи числа М цифры, одинаковые с цифрами в записи числа N.
Вар. 11
Составить программу нахождения наименьшего общего кратного трех натуральных чисел. НОК (А, В) = А*В/НОД (А, В).
Вар. 12
Дано 4 числа. Вывести на экран наименьшую из первых цифр заданных чисел.
Вар. 13
Составить программу нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел. НОК (А, В) = А*В/НОД (А, В). Написать рекурсивную версию функции НОД.
Вар. 14
Даны три стороны одного треугольника и три стороны другого треугольника. Определить, являются ли эти треугольники равновеликими.
Вар. 15
Среди чисел от 300 до 500 найти все простые, начиная с заданного числа М.
Вар. 16
Написать программу вычисления суммы факториалов всех нечетных чисел от 1 до 9.
Вар. 17
Написать программу, подсчитывающую число сочетаний с повторениями из N элементов по К элементов. Примените формулу
C(N,K) = (N+K-1)!/K!(N - 1)!
Вар. 18
Найти все натуральные числа из промежутка от 1 до 200, у которых число делителей равно N.
Вар. 19
В книге N страниц. Составить программу, которая будет находить, сколько цифр понадобится для того, чтобы занумеровать все страницы этой книги.
Вар. 20
Натуральные числа a, b, c называются числами Пифагора, если выполняется условие: a2 + b2 = c2. Напечатать все числа Пифагора, меньшие N.
Вар. 21
Для делимости числа на 3 требуется, чтобы сумма цифр числа делилась на 3. Написать функцию проверки делимости числа N, вводимого с клавиатуры, на 3.
Использовать функцию в программе.
Вар. 22
Для делимости числа на 5 требуется, чтобы последняя цифра числа была 0 или 5. Написать функцию проверки делимости числа N, вводимого с клавиатуры, на 5.
Использовать функцию в программе.
Вар. 23
Для делимости числа на 4 требуется, чтобы число из последних двух цифр делилось на 4. Написать функцию проверки делимости числа N, вводимого с клавиатуры, на 4.
Использовать функцию в программе.
Вар. 24
Вывести на экран все простые трехзначные числа.
Вар. 25
Для делимости числа на 8 требуется, чтобы число из последних четырех цифр делилось на 8. Написать функцию проверки делимости числа N, вводимого с клавиатуры, на 8.
Использовать функцию в программе.
Вар. 26
Составить программу, которая находит цифровой корень числа. Цифровой корень находится суммой через сумму цифр до тех пор, пока эта сумма сама не станет цифрой.
Вар. 27
Составьте программу для проверки, можно ли заданное натуральное число представить в виде произведения трех простых чисел.
Вар. 28
Каждое составное число можно единственным способом представить в виде произведения простых чисел. Например, 20 = 2*2*5. Составить программу разложения на простые множители двух заданных чисел.
Вар. 29
Два натуральных числа называются ‘дружественными’, если каждое из них равно сумме всех делителей другого, за исключением его самого (таковы, например, 220 и 284). Напечатать все пары “дружественных” чисел, не превосходящих заданного натурального числа.
Вар. 29
Дано натуральное число N. Определить все простые числа, не превосходящие N.
Вар. 30
Найти все автоморфные числа из промежутка от А до В. Число называется автоморфным, если квадрат этого числа заканчивается этим же числом (например, 6 – квадрат 36, 25 – квадрат 625).
Вар. 32
Дан прямоугольник со сторонами А и В, где А, В – натуральные числа. Начинаем отсекать от него квадраты. Сколько таких квадратов можно отсечь, если каждый раз отсекать самый большой квадрат?
Вар. 33
Счастливым считается тот автобусный билет, у которого сумма трех первых цифр равна сумме трех последних цифр. Определить все счастливые билеты из интервала от N до M.
Вар. 34
Аня нарвала яблок и поровну раздала своим сестрам Оле, Маше и Тане, а что осталось, съела. Оля свои яблоки поделила между тремя сестрами, а что осталось, съела. То же самое сделали Маша и Таня. Сколько яблок оказалось у каждой сестры?
Вар. 35
Даны два натуральных числа. Верно ли, что они взаимно простые. Взаимно простыми называются числа, у которых наибольший общий делитель равен единице
Вар. 36
Составить программу, проверяющую, является ли число палиндромом (например, 12721 –палиндром).
Вар. 37
Даны две дроби А/B и C/D (A, B, C, D – натуральные числа). Составить программу деления этих дробей. Ответ должен быть несократимой дробью.
Вар. 38
Даны две дроби А/B и C/D (A, B, C, D – натуральные числа). Составить программу вычитания из первой дроби второй. Ответ должен быть несократимой дробью.
Вар. 39
Напечатать все совершенные числа в интервале от М до К. (Число называется совершенным, если оно равно сумме всех своих делителей, включая единицу и исключая себя).
Вар. 40
Введено число N, например, 59. Оно не палиндром. Перевернем его, получим 95. Найдем сумму чисел 59 и 95 – 154. Перевернем это число – 451. Находим сумму – 605. Еще раз: 506 и 605. Получим палиндром – 1111. Найти для всех натуральных чисел из интервала от 50 до 80 количество шагов, необходимых для сведения их к палиндромам, с помощью предлагаемой схемы.
Вар. 41
Дано N целых чисел. Найти среди них число с наибольшим количеством делителей.
Вар. 31
Привести дробь 1+1/2+1/3+...+1/20 к несократимому виду.
Лабораторная работа 4
Программы с одномерными массивами (векторами) в С++
Вар. 1
----------------------------------------------------------------------------------------------------------
Вар. 2
----------------------------------------------------------------------------------------------------------
Вар. 3
----------------------------------------------------------------------------------------------------------
Вар. 4
----------------------------------------------------------------------------------------------------------
Вар. 5
----------------------------------------------------------------------------
Вар. 6
----------------------------------------------------------------------------------------------------------
Вар. 7
----------------------------------------------------------------------------------------------------------
Вар. 8
----------------------------------------------------------------------------------------------------------
Вар. 9
----------------------------------------------------------------------------------------------------------
Вар. 10
-------------------------------------------------------------------------------------------------
Вар. 11
----------------------------------------------------------------------------------------------------------
Вар. 12
----------------------------------------------------------------------------------------------------------
Вар. 13
----------------------------------------------------------------------------------------------------------
Вар. 14
----------------------------------------------------------------------------------------------------------
Вар. 15
-----------------------------------------------------------------------------------------
Вар. 16
----------------------------------------------------------------------------------------------------------
Вар. 17
----------------------------------------------------------------------------------------------------------
Вар. 18
----------------------------------------------------------------------------------------------------------
Вар. 19
----------------------------------------------------------------------------------------------------------
Вар. 20
----------------------------------------------------------------------------------------------------------
Вар. 21
----------------------------------------------------------------------------------------------------------
Вар. 22
----------------------------------------------------------------------------------------------------------
Вар. 23
----------------------------------------------------------------------------------------------------------
Вар. 24
----------------------------------------------------------------------------------------------------------
Вар. 25
---------------------------------------------------------------------------------------------
Вар. 26
----------------------------------------------------------------------------------------------------------
Вар. 27
----------------------------------------------------------------------------------------------------------
Вар. 28
----------------------------------------------------------------------------------------------------------
Вар. 29
----------------------------------------------------------------------------------------------------------
Вар. 30
-------------------------------------------------------------------------------------------------
Лабораторная работа 5
Программы с двумерными массивами (матрицами) в С++
Вар. 1
Дана квадратная целочисленная матрица. Найти сумму и число элементов матрицы, которые находятся под главной диагональю. Распечатать левую половину матрицы до диагонали.
-----------------------------------------------------------------------------------------------------------
Вар. 2
Дана квадратная действительная матрица. Найти сумму и число элементов матрицы, которые находятся над главной диагональю и на ней. Распечатать правую половину матрицы, начиная с диагонали.
-----------------------------------------------------------------------------------------------------------
Вар. 3
Дана матрица. Найти сумму и число положительных элементов каждого столбца матрицы. Результат напечатать в виде двух строк.
-----------------------------------------------------------------------------------------------------------
Вар. 4
Дана матрица. Найти сумму и число отрицательных элементов каждой строки матрицы. Результат напечатать в виде двух столбцов.
Вар. 5
Дана матрица. Найти в каждой строке матрицы самый левый максимальный элемент и поместить его в строке на первое место. Распечатать первый столбец.
-----------------------------------------------------------------------------------------------------------
Вар. 6
Дана матрица. Найти в ней столбцы, в которых положительных элементов больше, чем отрицательных. Распечатать эти столбцы.
-----------------------------------------------------------------------------------------------------------
Вар. 7
Дана матрица. Найти в матрице строки, в которых есть нулевые элементы. Распечатать эти строки и индексы нулевых элементов.
-----------------------------------------------------------------------------------------------------------
Вар. 8
Дана квадратная матрица. Найти в каждом столбце наибольший элемент и поменять его местами с элементом на главной диагонали в этом же столбце. Напечатать матрицу.
Вар. 9
Дана матрица. Найти строку с наибольшей суммой элементов. Напечатать эту строку и сумму элементов.
-----------------------------------------------------------------------------------------------------------
Вар. 10
Дана матрица. Найти в каждой строке матрицы самый правый минимальный элемент и поместить его в строке на последнее место. Распечатать последний столбец.
Вар. 11
Дана матрица. Поменять местами первый столбец и столбец, в котором находится первый нулевой элемент. Распечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 12
Дана квадратная матрица. Переставить местами элементы над главной диагональю и под главной диагональю. Распечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 13
Дана квадратная матрица. Найти сумму элементов, расположенных на диагоналях, параллельных главной, включая главную. Напечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 14
Дана матрица. Найти столбец с наименьшей суммой элементов. Напечатать этот столбец и сумму элементов.
-----------------------------------------------------------------------------------------------------------
Вар. 15
Дана матрица. Найти сумму элементов, расположенных по периметру и сумму элементов, расположенных на главной диагонали.
Вар. 16
Дана матрица. Поменять местами первую строку и строку, в которой находится первый отрицательный элемент. Распечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 17
Дана квадратная матрица. Найти среднее значение элементов, расположенных на главной диагонали. Заменить все элементы на диагонали средним значением. Напечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 18
Дана матрица. Найти в первом и последнем столбце матрицы максимальные элементы. Поменять местами эти элементы и напечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 19
Дана матрица. Найти сумму положительных элементов в каждой строке матрицы. Поместить их в массив и распечатать этот массив как вектор.
-----------------------------------------------------------------------------------------------------------
Вар. 20
Дана матрица. Найти в ней строки, в которых нет отрицательных элементов. Распечатать эти строки.
-----------------------------------------------------------------------------------------------------------
Вар. 21
Дана матрица. Найти в матрице строки, в которых есть отрицательные элементы. Распечатать эти строки.
-----------------------------------------------------------------------------------------------------------
Вар. 22
Дана квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом на главной диагонали в этой же строке. Напечатать матрицу.
-----------------------------------------------------------------------------------------------------------
Вар. 23
Дана матрица. В заданном столбце найти наименьший элемент. Напечатать этот столбец.
-----------------------------------------------------------------------------------------------------------
Вар. 24
Дана матрица. Найти в каждой строке матрицы самый правый максимальный элемент и поместить его в строке на последнее место. Распечатать последний столбец.
-----------------------------------------------------------------------------------------------------------
Вар. 25
Дана квадратная матрица. Найти максимальный элемент среди элементов, находящихся выше главной диагонали. Указать его индексы.
-----------------------------------------------------------------------------------------------------------
Вар. 26
Дана квадратная матрица. Найти максимальный и минимальный элементы среди элементов, расположенных на побочной диагонали матрицы.
-----------------------------------------------------------------------------------------------------------
Вар. 27
Дана матрица. Обнулить столбцы матрицы, в которых находятся максимальный и минимальный элементы.
-----------------------------------------------------------------------------------------------------------
Вар. 28
Дана матрица. Найти для каждой строки матрицы сумму максимального и минимального элементов. Распечатать в виде столбца.
-----------------------------------------------------------------------------------------------------------
Лабораторная работа 6
Программы с динамическими массивами (векторами и матрицами) в С++
Вар. 1
Написать программу, в которой создается динамический массив. Размер массива – случайное число (то есть генерируется случайное число, которое определяет размер массива). Заполнить массив симметричными значениями: первый и последний элемент получает значение 1, второй и предпоследний элемент получают значение 2, и так далее.
Вар.2
Написать программу, в которой создается два динамических массива (разной длины). Массивы заполняются случайными числами. Затем создается третий динамический массив, и его размер равен сумме размеров первых двух массивов. Третий массив заполняется так: сначала в него записываются значения элементов первого массива, а затем значения элементов второго массива.
Вар.3
Написать программу, в которой создается два динамических массива одинакового размера. Массивы заполняются случайными числами. Затем создается третий динамический массив, и его размер в два раза больше размера каждого из первых двух массивов. Третий массив заполняется поочередной записью элементов из первых двух массивов: сначала записывается значение элемента первого массива, затем значение элемента второго массива, затем снова первого и снова второго, и так далее.
Вар.4
Написать программу, в которой создается динамический двумерный числовой массив. Массив заполняется случайными числами. На его основе создается новый массив, который получается вычеркиванием из старого одной строки и одного столбца. Номера вычеркиваемых столбца и строки определяются вводом с клавиатуры.
Вар.5
Написать программу, в которой создается динамический массив. Размер его определяется случайным образом. Массив заполняется случайными числами. Вывести элементы массива в обратном порядке.
Вар.6
Написать программу, в которой создается динамическая прямоугольная матрица. Размер ее определяет пользователь. Матрица заполняется по желанию пользователя или с клавиатуры, или случайным образом. Найти сумму всех элементов матрицы.
Вар.7
Написать программу, в которой создается динамическая прямоугольная матрица. Размер ее определяет пользователь. Матрица заполняется по желанию пользователя или с клавиатуры, или случайным образом. Найти в каждом столбце матрицы сумму элементов и эти суммы поместить в новый одномерный массив.
Вар.8
Написать программу, в которой создается динамическая квадратная матрица. Размер ее определяет пользователь. Матрица заполняется по желанию пользователя или с клавиатуры, или случайным образом вещественными числами. Все числа главной диагонали поместить в одномерный массив.
Вар.9
Написать программу, в которой создается динамическая прямоугольная матрица. Размер ее определяет пользователь. Матрица заполняется по желанию пользователя или с клавиатуры, или случайным образом вещественными числами. Заменить все положительные элементы матрицы на отрицательные и наоборот.
Вар.10
Написать программу, в которой создается динамическая квадратная матрица. Размер ее определяет пользователь. Матрица заполняется по желанию пользователя или с клавиатуры, или случайным образом целыми числами. Построить новую матрицу, которая создается из старой добавлением к ней строки, состоящей из максимальных значений по столбцам.
Вар.11
Написать программу, в которой создается динамический одномерный массив. Размер его определяет пользователь. Массив заполняется случайным образом. Найти сумму элементов между первым минимальным элементом и последним максимальным.
Вар.12
Написать программу, в которой создается динамическая прямоугольная целочисленная матрица. Размер ее определяет пользователь. Матрица заполняется с клавиатуры. Определить номер самого левого столбца, содержащего только положительные элементы. Если такого столбца нет, то вывести соответствующее сообщение.
Вар.13
Написать программу, в которой создается динамический одномерный массив. Размер его определяет пользователь. Массив заполняется случайным образом целыми числами. Найти количество в нем максимальных элементов.
Вар.14
Написать программу, в которой создается динамический одномерный массив. Размер его определяет пользователь. Массив заполняется с клавиатуры вещественными числами. Найти минимальный элемент среди отрицательных элементов. Если отрицательных элементов нет, то выдать соответствующее сообщение.
Вар.15
Написать программу, в которой создается динамический одномерный массив. Размер его является случайным числом. Массив заполняется случайным образом целыми элементами. Найти количество максимальных и минимальных элементов массива.
Дата: 2019-04-23, просмотров: 358.