Лабораторная работа 5. Статические матрицы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Цель лабораторной работы: изучить программировани задач, в которых требуется использовать такую структуру данных как двумерные массивы (матрицы). В этой лабораторной работе предполагается программирование статических матриц.

 

Теоретические сведения

Двумерные массивы – матрицы – представляют собой массивы одномерных массивов (таблицы) и задаются двумя числами в квадратных скобках:

тип_элементов имя_массива [размер1] [размер2];

Здесь размер1 – количество строк, размер2 – количество столбцов.

Пример - объявление матриц

double matr1 [100] [10];

int matr2 [10] [20];

В памяти компьютера матрицы занимают последовательно расположенные ячейки в следующем порядке: сначала располагается первая строка, за ней – вторая, третья и так далее.

Заполнение и обработку многомерных массивов обычно производят, пользуясь вложенными циклами. При этом медленнее всего изменяется крайний левый индекс, а быстрее всего – крайний правый.

Пример – ввод целочисленной матрицы с клавиатуры

#include <iostream>

const ROW = 5;

const COL = 4;

 

int main ( )

{ int i, j;

int x [ROW][COL];

for (i = 0; i < ROW; i++) // по строкам

{ for (j = 0; j < COL; j++)  // столбцам

    { cout << “x[“ << i << “][“ <<j <<”]”;

        cin >> x[i][j];

     }

  }

return 0;

}

Пример – ввод целочисленной матрицы с помощью генератора случайных чисел

#include <iostream>

#include <iomanip.h>

#include <stdlib.h>

const ROW = 5;

const COL = 4;

 

int main ( )

{ int i, j;

int x [ROW][COL];

for (i = 0; i < ROW; i++) // по строкам

{ for (j = 0; j < COL; j++)  // столбцам

        { x[i][j] = rand ( ) % 10 – 5;

            cout << setw (4) <<x[i] [j];

         }

       cout << endl;

  }

return 0;

}

Вывод матриц тоже происходит с помощью вложенных циклов.

for (i = 0; i < ROW; i++)

{ for (j = 0; j < COL; j++)

   cout << setw(4) << x[i][j];

cout << endl;

}

Инициализация многомерных массивов осуществляется аналогично инициализации одномерных массивов. При этом инициализирующие значения должны совпадать с последовательностью хранения элементов массива в памяти.

int x [5] [3] = { {1, 2, 3),   // строка первая

                       {4, 5, 6},  // строка вторая

                       {7, 8, 9},  // строка третья

                       {10, 11, 12}, // строка четвертая

                       {13, 14, 15} }; // строка пятая

Типичной ошибкой, не вызывающей сообщения компилятора, является объявление вида:

int m [i, j];  // ошибка

Компилятор воспринимает запятую как операцию “запятая” и игнорирует один из индексов.

Обрабатывая матрицы, часто приходится решать задачи одного из следующих классов:

- работа с матрицей в целом,

- работа со строками или столбцами матрицы,

- работа с диагональными элементами матрицы.

При работе с матрицей в целом вся подготовительная и инициализирующая часть выполняется один раз перед внешним циклом.

Пример – поиск максимального элемента матрицы

int matr [n] [k], max;

        max = matr [0][0];

for (i = 0; i < n; i++)

for (j = 0; j < k; j++)

if (max < matr [i][j]) max = matr [i][j];

При работе со строками матрицы инициализирующие действия производятся внутри внешнего цикла и до начала внутреннего цикла.

Пример – поиск максимальных элементов каждой строки матрицы

int matr [n] [k];

int max [n];

for (i = 0; i < n; i++)

           { max[i] = matr [i][0];

for (j = 0; j < k; j++)

if (max[i] < matr [i][j]) max[i] = matr [i][j];

}

В результате этих действий формируется столбец (одномерный массив), размерность которого равна числу строк в обрабатываемой матрице.

Работа со столбцами матрицы отличается от работы со строками только тем, что цикл обработки столбцов становится внешним и результирующий массив (строка) имеет размерность, равную количеству столбцов.

Пример – поиск максимальных элементов каждого столбца матрицы

int matr [n] [k];

int max [k];

for (j = 0; j < k; i++)

           { max[j] = matr [0][j];

for (i = 0; i < n; i++)

if (max[j] < matr [i][j]) max[j] = matr [i][j];

}

При работе с диагональными элементами матрицы предполагают, что матрица квадратная.

a00 a01…  a04

a10 a11…  a14

а40 a41…  a44

Диагональ, соединяющая левый верхний угол матрицы с ее правым нижним углом, называется главной, а соединяющая правый верхний угол с левым нижним – побочной.

Для элементов, стоящих на главной диагонали, выполняется равенство i = j. Если выполняется условие i > j, то элемент находится под главной диагональю, если i < j, то элемент находится над главной диагональю.

Элемент находится на побочной диагонали, если выполняется условие i = n – j – 1. Здесь n – порядок (количество элементов) матрицы.

i > (n – j – 1) – условие нахождения элемента под побочной диагональю.

i < (n – j – 1) – условие нахождения элемента над побочной диагональю.

Пример

Найти среднее арифметическое отрицательных элементов, расположенных под главной диагональю квадратной действительной матрицы 9×9

 

#include <iostream>

#include <iomanip.h>

#include <stdlib.h>

const ROW = 9;

const COL = 9;

int main ( )

{ int i, j, n = 0;

float matr [ROW][COL];

float srednee = 0;

for (i = 0; i < ROW; i++) // по строкам

{ for (j = 0; j < COL; j++)  // столбцам

        { matr[i][j] = (float) rand ( ) % 20 – 10;

            cout << setw (6) <<matr[i] [j];

         }

       cout << endl;

  }

for (i = 0; i < ROW; i++) // по строкам

{ for (j = 0; j < i; j++)

         if (matr[i][j] < 0)

            { n++;

                srednee += matr[i][j];

             }

  srednee = srednee / n;

  cout << endl;

  cout << “Среднее арифметическое = “ << srednee << endl;

return 0;

}

 

Примеры программ со статическими матрицами

Пример 1

Найти сумму элементов матрицы, лежащих выше главной диагонали.

 

Алгоритм решения этой задачи следующий. Вводим переменную для хранения суммы, обнуляем ее предварительно. Организовываем цикл в цикле (внешний по строкам, внутренний по столбцам), просматриваем каждый элемент матрицы, но суммируем только те элементы матрицы, которые лежат выше главной диагонали (для индексов справедливо условие i < j).

 

#include <iostream>

 

using namespace std ;

int main ( )

{

int i ,  j , n;

int a [ 20 ] [ 20 ] ; // описание матрицы

cout <<" n = ";

cin >> n;              //ввод количества строк и столбцов

cout <<"Ввод матрицы a "<< endl ;

for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<m; j++)                 // цикл по элементам строки

     cin >> a [ i ] [ j ] ;                    

 

// работа с матрицей

int s = 0;

for ( i =0; i<n ; i++)

for ( j =0; j < n; j++)

// если элемент лежит выше главной диагонали, то наращиваем сумму

     i f ( j > i )  s+=a [ i ] [ j ] ;

cout<<" S = "<<s<<endl ;

return 0;

}

 

Пример 2

Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях.

 

Нам не нужно рассматривать всю матрицу, достаточно рассмотреть ее первую строку, последнюю строку, первый столбец, последний столбец, главную диагональ и побочную диагональ.

Будем считать, что матрица a имеет размер [n*n].

Элементы первой строки матрицы a можно представить как a[0][ i], где i меняется от 0 до n,

элементы последней строки - a[ n-1, 0],

элементы первого столбца – a[ i, 0].

элементы последнего столбца – a[ i, n-1],

элементы главной диагонали – a[ i, i],

элементы побочной диагонали – a[ i, n- i -1]

При подсчете надо иметь ввиду, что некоторые элементы строк и столбцов матрицы могут просматриваться дважды и исключить такую возможность. Если размер матрицы n – нечетное число, то главная и побочная диагонали пересекаются, тогда элемент пересечения будет просматриваться дважды, это тоже надо учесть.

 

 #include <iostream>

 

using namespace std ;

int main ( )

{

int i ,  j , n, k;

int a [ 20 ] [ 20 ] ; // описание матрицы

cout <<" n = " ;

cin >> n;              //ввод количества строк и столбцов

 

cout <<"Ввод матрицы a "<< endl ;

for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<n; j++)                 // цикл по элементам строки

     cin >> a [ i ] [ j ] ;                    

//k - количество положительных элементов матрицы,

// расположенных по её периметру и на диагоналях.

for ( i=0, k=0; i<n; i++)

{

  if  (a [ i ] [ i ] > 0) k = k+1;                    // элемент лежит на главной диагонали

  if  (a [ i ] [n−i −1] > 0) k = k+1;                // элемент лежит на побочной диагонали

}

for  ( i =1; i<n−1; i++)

{

if  (a [ 0 ] [ i ] > 0) k = k+1;                          // элемент находится в нулевой строке

if  (a [n−1] [ i ] > 0) k++;                           // элемент находится в последней строке

if  (a [ i ] [ 0 ] > 0 )     k++;                                  // элемент находится в нулевом столбце

if  (a [ i ] [n−1] > 0) k++;                             // элемент находится в последнем столбце

}

// элемент, находящийся на пересечении диагоналей, возможно, подсчитан дважды,

// надо уменьшить вычисленное значение k на один

if ( (n%2 != 0) && (a [n/ 2] [n/2] > 0) ) k = k-1;

cout<<" k = "<<k<<endl ;

return 0;

}

Пример 3

Преобразовать исходную матрицу так, чтобы на первом месте в каждой строке стояло среднее арифметическое элементов этой строки.

 

Для решения задачи нужно найти в каждой строке матрицы сумму элементов и разделить ее на количество элементов в строке. Затем полученное число записать в нулевой элемент соответствующей строки.

 

#include <iostream>

#include <iomanip>  // библиотека манипуляторов

 

using namespace std ;

int main ( )

{

int i ,  j , n, m;

float a [ 20 ] [ 20 ] ; // описание матрицы

cout <<" n = " ;

cin >> n;              //ввод количества строк

cout << " m = " ;

cin >> m;             //ввод количества столбцов

 

cout <<"Ввод матрицы a "<< endl ;

for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<m; j++)                // цикл по столбцам

     cin >> a [ i ] [ j ] ;                    

 

// работа с матрицей

float S = 0;

for ( i =0; i<n; i++)                       // цикл по строкам

{

    for ( j =0; j<m; j++)                // цикл по столбцам

       S = S + a[ i ] [ j ] ;

// когда строка просмотрена, надо найти среднее арифметическое и записать его в начало строки

   a[ i ] [ 0 ] = S / m;

// переходим на новую строку (новая итерация внешнего цикла)

}

// преобразованная матрица

for ( i =0; i<n; i++)                        // цикл по переменной i, перебираем строки матрицы

{

for ( j =0; j<m; j++)                       // цикл по переменной j, перебираем элементы внутри строки

      cout << setw(5) << a [ i ] [ j ] ;   // вывод очередного элемента матрицы

cout<<endl ;                       // после вывода всех элементов строки  переходим на новую строку

}

 return 0;

}

 

Пример 4

Поменять местами минимальный и максимальный элемент в матрице.

 

Для решения этой задачи надо найти минимальный элемент матрицы (min) и его индексы imin и jmin, а также максимальный элемент (max) и его индексы imax и jmax. Затем надо поменять местами элементы a[ imin ][ jmin ] и a[ imax ][ jmax ], для этого надо ввести вспомогательную переменную.

Чтобы найти минимум во всей матрице, в переменную min запишем значение a[0][0], в переменную imin и в переменную jmin (номер строки и столбца, где находится минимальный элемент) запишем нули. Затем в двойном цикле сравниваем каждый элемент матрицы с минимальным (переменная min). Если какой-то элемент окажется меньше, чем min, записываем его в переменную min, а в переменную imin – текущее значение индекса i, в переменную jmin – текущее значение индекса j. Поиск максимального элемента матрицы аналогичен, только сравнение будет другое.

#include <iostream>

#include <iomanip>  // библиотека манипуляторов

 

using namespace std ;

int main ( )

{

int i ,  j , n, m;

int a [ 20 ] [ 20 ] ; // описание матрицы

cout <<" n = " ;

cin >> n;              //ввод количества строк

cout << " m = " ;

cin >> m;             //ввод количества столбцов

cout <<"Ввод матрицы a "<< endl ;

for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<m; j++)                // цикл по столбцам

     cin >> a [ i ] [ j ] ;                    

 

// работа с матрицей

int min, max, imin. imax, jmin, jmax;

min = a[0][0]; max = a[0][0];

imin = 0; jmin = 0;

imax =0; jmax = 0;

for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<m; j++)                     // цикл по столбцам

{ if  (a[i][j] < min)

          { min = a[i][j];

             imin = i;

             jmin = j;

           }

         if  (a[i][j] > max)

          { max = a[i][j];

             imax = i;

             jmax = j;

           }

      }

// меняем местами

int b;

b = a[ ima][jmax];

a[ imax ][ jmax ] = a[ imin ][jmin ];

a[imin][jmin] = b;

 

// преобразованная матрица

for ( i =0; i<n; i++)                        // цикл по переменной i, перебираем строки матрицы

{

for ( j =0; j<m; j++)                       // цикл по переменной j, перебираем элементы внутри строки

      cout << setw(5) << a [ i ] [ j ] ;   // вывод очередного элемента матрицы

cout<<endl ;                       // после вывода всех элементов строки  переходим на новую строку

}

 return 0;

}

Пример 5

Проверить, является ли заданная матрица единичной.

 

Квадратная матрица называется единичной, если по ее главной диагонали записаны единицы, а все остальные элементы матрицы нулевые.

Чтобы решить задачу, предположим, что матрица является единичной. Если окажется, что какой-то элемент главной диагонали не равен 1 или какой-то элемент помимо диагональных является ненулевым, то матрица единичной не будет.

 

#include <iostream>

 

using namespace std ;

int main ( )

{

int i ,  j , n;

int a [ 20 ] [ 20 ] ; // описание матрицы

cout <<" n = ";

cin >> n;              //ввод количества строк и столбцов

cout <<"Ввод матрицы a "<< endl ;

for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<m; j++)                 // цикл по элементам строки

     cin >> a [ i ] [ j ] ;                    

 

// предположим, что матрица единичная и запишем в некоторой переменной pr единицу.

//  Если значение этой переменной не изменится по выходу из цикла, то матрица единичная

 int pr =1;

 for ( i =0; i<n; i++)                       // цикл по строкам

for ( j =0; j<n; j++)                 // цикл по элементам строки

   if ((( i == j) && (a[i][j] != 1)) || ((i != j) && (a[i][j] != 0)))

      { pr = 0;

          break; // матрица не является единичной, выходим из цикла

       }

if (pr == 1)

cout << “Матрица является единичной”;

else cout << “Матрица единичной не является”;

return 0;

}  

 

Порядок выполнения работы

Построить алгоритм решения задачи и написать программу согласно вариантам заданий.

 

Контрольные вопросы

1. Как объявить матрицу в программе на С++?

2. Как индексируются элементы матрицы в языке С++?

3. Что такое главная и побочная диагонали в матрице?

4. Каким образом можно объявить трехмерный массив в С++ программе?

 

Содержание отчета

1. Титульный лист отчета

2. Запись алгоритма решения задачи

3. Текст программы на языке С++

4. Скриншоты результатов, выводимых на экран для заранее подготовленных тестовых примеров для задачи

 

Задания для лабораторных работ по вариантам

Лабораторная работа 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

  1. Найти сумму тех элементов массива, которые кратны трем или пяти.

----------------------------------------------------------------------------------------------------------

Вар. 2

  1. Найти сумму элементов массива с k1-ого по k2-ой.

----------------------------------------------------------------------------------------------------------

Вар. 3

  1. Найти сумму элементов массива, имеющих нечетные индексы.

----------------------------------------------------------------------------------------------------------

Вар. 4

  1. Умножить все элементы массива, кратные двум, на второй элемент массива.

 

----------------------------------------------------------------------------------------------------------

Вар. 5

  1. Вывести индексы тех элементов массива, значения которых больше заданного числа К.

----------------------------------------------------------------------------

Вар. 6

  1. Найти удвоенную сумму положительных элементов массива.

----------------------------------------------------------------------------------------------------------

Вар. 7

  1. Найти количество тех элементов массива, значения которых не превосходят некоторое заданное число.

----------------------------------------------------------------------------------------------------------

Вар. 8

  1. Найти индексы всех четных элементов массива и поместить их в другой массив.

----------------------------------------------------------------------------------------------------------

Вар. 9

  1. Найти количество элементов массива, которые кратны трем или пяти.

----------------------------------------------------------------------------------------------------------

Вар. 10

  1. Найти сумму индексов четных элементов массива.

-------------------------------------------------------------------------------------------------

Вар. 11

  1. Найти индексы всех элементов массива с минимальным значением.

----------------------------------------------------------------------------------------------------------

Вар. 12

  1. Найти сумму элементов массива до наибольшего элемента массива.

----------------------------------------------------------------------------------------------------------

Вар. 13

  1. Найти сумму индексов положительных элементов массива.

----------------------------------------------------------------------------------------------------------

Вар. 14

  1. Вывести индексы тех элементов, значения которых больше значения предыдущего элемента.

----------------------------------------------------------------------------------------------------------

Вар. 15

  1. Найти индекс первого элемента, который делится на три с остатком 2.

-----------------------------------------------------------------------------------------

Вар. 16

  1. Найти сумму индексов тех элементов массива, которые кратны трем.

----------------------------------------------------------------------------------------------------------

Вар. 17

  1. Найти произведение четных элементов массива.

----------------------------------------------------------------------------------------------------------

Вар. 18

  1. Найти произведение элементов массива, имеющих четные индексы.

----------------------------------------------------------------------------------------------------------

Вар. 19

  1. Умножить все элементы массива, которые меньше 10, на третий элемент массива.

----------------------------------------------------------------------------------------------------------

Вар. 20

  1. Вывести индексы тех элементов, значения которых равны заданному числу К.

----------------------------------------------------------------------------------------------------------

Вар. 21

  1. Найти количество тех элементов массива, значения которых превосходят некоторое заданное число.

----------------------------------------------------------------------------------------------------------

Вар. 22

  1. Вывести на печать значения всех четных элементов массива.

----------------------------------------------------------------------------------------------------------

Вар. 23

  1. Поместить индексы тех элементов массива, которые кратны трем, в новый массив.

----------------------------------------------------------------------------------------------------------

Вар. 24

  1. Найти сумму индексов четных элементов массива.

----------------------------------------------------------------------------------------------------------

Вар. 25

  1. Найти количество нечетных элементов массива.

---------------------------------------------------------------------------------------------

Вар. 26

  1. Найти среднее значение элементов массива, исключая первый и последний его элементы.

----------------------------------------------------------------------------------------------------------

Вар. 27

  1. Найти индекс наименьшего элемента массива.

----------------------------------------------------------------------------------------------------------

Вар. 28

  1. Найти сумму индексов отрицательных элементов массива.

----------------------------------------------------------------------------------------------------------

Вар. 29

  1. Вывести индексы тех элементов, значения которых больше 5.

----------------------------------------------------------------------------------------------------------

Вар. 30

  1. Найти индекс последнего элемента массива, который делится на пять с остатком 1

-------------------------------------------------------------------------------------------------

Лабораторная работа 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

Дана матрица. Найти для каждой строки матрицы сумму максимального и минимального элементов. Распечатать в виде столбца.

-----------------------------------------------------------------------------------------------------------

 

 

Дата: 2019-03-05, просмотров: 468.