-
Задачи первого, простого уровня
-
Найти произведение вектор-строки (одномерного массива) на матрицу.
-
Найти норму заданной матрицы следующим образом. В каждой строке находим сумму модулей всех элементов. Среди этих сумм определяем максимальную сумму.
-
Определить, является ли матрица симметричной относительно главной диагонали.
-
Определить, есть ли в матрице хотя бы одна строка, состоящая только из нулевых элементов. Если есть, найти номер последней такой строки.
-
Даны две действительные квадратные матрицы одинакового порядка n. Получить новую матрицу путем умножения элементов каждой строки первой матрицы на наибольшее из значений элементов соответствующей строки второй матрицы.
-
Найти минимальное значение элементов квадратной матрицы, расположенных в закрашенной части, включая и диагональные элементы, на рис.1.
-
Найти сумму положительных элементов, расположенных в закрашенной части матрицы, не включая диагональные элементы, на рис. 2.
-
Найти произведение ненулевых элементов, расположенных в закрашенной части матрицы, включая диагональные элементы, на рис. 3.
-
Найти количество ненулевых элементов, расположенных в закрашенной части матрицы, не включая диагональные элементы, на рис. 4.
Рис. 1. Рис. 2. Рис. 3. Рис. 4.
-
В квадратной матрице найти разность между наибольшим и наименьшим значениями побочной диагонали.
-
Найти номера всех максимальных элементов главной диагонали квадратной матрицы.
В. Задачи второго, среднего уровня
-
Найти максимальное из чисел, встречающихся в матрице более одного раза.
-
Седловой точкой матрицы назовём такой элемент, который является одновременно максимальным в столбце и минимальным в строке. Найти одну, любую седловую точку заданной матрицы.
-
Для заданной квадратной матрицы найти такие k, что к-я строка совпадает с к-м столбцом.
-
Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены (либо по возрастанию, либо по убыванию).
-
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Найти количество локальных минимумов заданной матрицы.
-
Выполнить операцию сглаживания для заданной матрицы, в результате которой получается новая матрица того же размера, каждый элемент которой вычисляется как среднеарифметическое имеющихся соседей соответствующего элемента исходной матрицы.
-
Если в заданной матрице нет нулей, то заменить повторяющиеся элементы матрицы нулями и найти количество ненулевых, то есть неповторяющихся элементов. В противном случае матрицу оставить без изменения. Память для новой матрицы не резервировать.
-
Расстояние между k-й и m-й строками матрицы a определяется как , где n2 — количество элементов в строке матрицы. Указать номер строки, максимально удаленной от первой строки заданной матрицы.
-
Найти строку заданной матрицы, в которой длина максимальной серии упорядоченных по возрастанию элементов минимальна.
-
Взаимно однозначное отображение элементов матрицы на себя можно задать с помощью двух целочисленных матриц: в первой указываем номер строки, куда переходит данный элемент, а во второй – номер столбца. Построить две матрицы, задающие отражение каждого элемента исходной матрицы на симметричный ему элемент относительно главной диагонали.
-
Изменяя порядок следования строк, рассортировать матрицу по возрастанию первых элементов строк. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку выбором.
-
Изменяя порядок следования строк, рассортировать матрицу по возрастанию количества нулей в строках. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку выбором.
-
Изменяя порядок следования строк, рассортировать матрицу по возрастанию суммы модулей элементов строк. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку обменом (алгоритм “пузырька”).
-
Изменяя порядок следования строк, рассортировать матрицу по возрастанию наименьших элементов строк. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку обменом (алгоритм “пузырька”).
-
Получить действительную матрицу B, каждый элемент bij которой равен сумме элементов исходной матрицы, расположенных в закрашенной области, определяемой индексами i, j, на рис. 5.
-
Получить действительную матрицу В, каждый элемент bij которой равен сумме элементов исходной матрицы, расположенных в закрашенной области, определяемой индексами i, j, на рис. 6.
-
Получить действительную матрицу В, каждый элемент bij которой равен сумме элементов исходной матрицы, расположенных в закрашенной области, определяемой индексами i, j, на рис. 7.
Рис. 5. Рис. 6. Рис. 7.
C. Задачи повышенной сложности
-
Для заданной квадратной целочисленной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.
-
Для заданной квадратной целочисленной матрицы найти максимум среди сумм элементов диагоналей, параллельных побочной диагонали.
-
Две строки целочисленной матрицы назовём похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк в максимальном множестве попарно непохожих строк заданной матрицы, расположенных подряд.
-
Найти количество строк заданной матрицы размерности 5*10, являющихся перестановкой чисел 1, 2, ..., 10.
-
Изменяя порядок следования строк, рассортировать целочисленную матрицу по возрастанию количества симметричных чисел в строке. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку вставками.
-
Изменяя порядок следования строк, рассортировать целочисленную матрицу по возрастанию максимальной длины серии упорядоченных по возрастанию элементов строки. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку слиянием.
-
По матрице A построить матрицу B того же размера, где элемент bij определяется следующим образом. Через aij проведем в A линии, параллельные сторонам прямоугольника до пересечения с побочной диагональю; bij определяется как максимум среди элементов треугольника в А (рис. 8).
-
По матрице А построить матрицу В того же размера, где bij определяется следующим образом. Через aij проведем в A диагонали, параллельные главной и побочной диагоналям; bij определяется как максимум в закрашенной части матрицы А (рис. 9).
Рис. 8. Рис. 9.
-
Найти сумму элементов, расположенных в закрашенной части квадратной матрицы на рис. 10.
-
Найти произведение ненулевых элементов, расположенных в закрашенной части квадратной матрицы на рис. 11.
Рис. 10. Рис. 11.
-
Начиная с центра, обойти по спирали по часовой стрелке все элементы квадратной матрицы, распечатывая их в порядке обхода.
-
Начиная с центра, обойти по спирали против часовой стрелки все элементы квадратной матрицы, распечатывая их в порядке обхода.
-
Заполнить квадратную матрицу размерности n*n по спирали по часовой стрелке числами 1, 2, 3, …,n*n, начиная с элемента, находящегося в верхнем левом углу.
-
Получить квадратную матрицу порядка n, элементами которой являются заданные действительные числа а1, ..., аnn, расположенные в ней по схеме, которая приведена на рис. 12.
Рис. 12.
Лабораторная работа 4
Тема. Массив указателей на строки.
Требования и общие указания к заданиям:
задания выполнить двумя способами:
-
создать статический массив строк как статический массив указателей на строки (см. § 3);
-
создать динамический массив строк как динамический массив указателей на строки (см. § 5).
Варианты заданий
B. Задачи второго, среднего уровня
В вариантах с чётными номерами использовать сортировку обменом, в вариантах с нечётными номерами — сортировку выбором.
-
Рассортировать слова русского текста по возрастанию отношения количества гласных букв к общему количеству букв в слове.
-
Вывести слова русского текста в алфавитном порядке по первой букве. Слова, начинающиеся с новой буквы, выводить с красной строки.
-
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова в сортировке не должны участвовать.
-
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы расположить в алфавитном порядке.
-
Слова английского текста рассортировать по возрастанию количества гласных букв в слове. Слова с одинаковым количеством таких букв расположить в алфавитном порядке первой по порядку гласной буквы.
-
Ввести текст и список слов. Для каждого слова из заданного списка найти, сколько раз оно встречается в тексте. Рассортировать эти слова по возрастанию найденного количества.
-
Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по первой букве фамилии, затем, если они совпадают, по первой букве имени и, наконец, по первой букве отчества.
-
Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по первой букве имени, затем по возрастанию количества букв в имени.
-
Все имена из заданного списка студентов рассортировать по частоте их встречаемости в этом списке.
-
Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по первой букве имени, затем, если они совпадают, по возрастанию количества букв в фамилии.
-
Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по двум первым буквам фамилии, затем, если первые две буквы фамилии одинаковы, по возрастанию количества букв в фамилии.
-
Создать массив строк и соответствующий ему массив числовых параметров. Рассортировать строки по числовому параметру. Для одинаковых числовых параметров сортировать по алфавиту.
С. Задачи повышенной сложности
Решить те же (см уровень B) задачи, используя в вариантах с чётными номерами сортировку вставками, а в вариантах с нечётными номерами — сортировку простым слиянием.
Лабораторная работа 5
Тема. Динамические матрицы.
Требования и общие указания к заданиям:
-
разработать класс для работы с одной или несколькими матрицами, размерности которых являются полями класса (см. лаб. работу 1). В конструкторе создать динамическую матрицу, а в деструкторе освободить память. Предусмотреть методы для ввода, вывода динамической матрицы и в зависимости от варианта один или несколько методов для её обработки. По усмотрению преподавателя в класс можно включить методы, реализующие задачи из нескольких вариантов;
-
предусмотреть цветной вывод результатов;
-
там, где это можно, желательно использовать указатели для организации циклов. Но при этом надо учитывать, что строки динамической матрицы в памяти располагаются не рядом;
-
перестановки строк матрицы выполнять с помощью указателей.
П р и м е р 1 (+). Сортировка строк целочисленной динамической матрицы по возрастанию максимальных элементов строк. Порядок чисел в каждой строке не меняется.
/* Прототип функции для вывода матрицы D и вектора максимальных элементов строк S. */
void Myprint (int **D, int *S, int, int);
int main()
{
// 1) Объявление и создание динамической матрицы.
int n, m; int **d; randomize();
n=random(5)+2; m=random(5)+2;
d=new int*[n];
for(int i=0;i<n;i++) d[i]=new int [m];
/* 2) Получение элементов динамической матрицы случайным образом. */
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
d[i][j]=random(15)-6;
/* 3) Построение динамического одномерного массива максимальных элементов строк s. Его размерность соответствует количеству строк матрицы. */
int *s,Mymax,Mymin,nmin;
s=new int[n];
for(int i=0;i<n;i++)
{ Mymax=d[i][0];
for(int j=0;j<m;j++)
if (d[i][j]>Mymax) Mymax=d[i][j];
s[i]=Mymax;
}
// 4) Вывод нерассортированной матрицы и вектора.
Myprint(d,s,n,m) ;
// 5) Сортировка.
for(int start=0;start<=n-2;start++)
{
/* Начиная с элемента s[start], находим наименьший элемент Mymin и его номер nmin */
Mymin=s[start]; nmin=start;
for(int i=start;i<n;i++)
if(s[i]<Mymin)
{ Mymin=s[i]; nmin=i; }
/* Переставляем адреса строк матрицы с номерами start и nmin. Эле менты этих строк остаются на старых местах. */
int *p; p=d[start]; d[start]=d[nmin]; d[nmin]=p;
/* Переставляем элементы одномерного массива с номерами start и nmin. */
int t; t=s[start]; s[start]=s[nmin]; s[nmin]=t;
}
// 6) Вывод рассортированной матрицы и вектора.
Myprint(d,s,n,m) ;
getch(); return 0;
}
/* Функция для вывода матрицы D и вектора S. */
void Myprint (int **D, int *S, int N, int M)
{for(int i=0;i<N;i++)
{ printf("\n");
for(int j=0;j<M;j++)
printf("%5d",D[i][j]);
printf(" => %5d",S[i]);
}
printf("\n");
}
П р и м е р 2(+). Создание динамической ”матрицы”. В первой строке резервируем память для одного элемента, во второй строке – для двух и т. д. Другими словами, создаём в памяти нижний треугольник квадратной “матрицы” относительно главной диагонали.
int main()
{
/* Объявляем и вводим только одну размерность квадратной “матрицы”. */
int n1; cout<<"Size1=>";
cin>>n1;
int **arr;
arr= new int*[n1];
for (int i=0;i<n1;i++)
arr[i]=new int[i+1];
/* В i-й строке резервируем память для (i+1) элемента. Дальше работаем, как с обычной матрицей. Например, в каждой строке находим среднее значение элементов, находящихся “левее ” главной диагонали. */
float s;
for (int i=0; i<n1;i++)
{ s=0;
/* Внутренний цикл с помощью указателя и номера элемента (см. § 6 гл. 2). */
for (int *q=arr[i], j=0; q< arr[i]+i+1; q++, j++)
{ *q=(i+1)*(j+1);
s+=*q;
cout.width(6);
cout<< (*q);
}
/* или внутренний цикл с помощью индекса
for (int j=0;j<i+1;j++)
{ arr[i][j]=(i+1)*(j+1);
s+=arr[i][j];
cout.width(6);
cout<<arr[i][j];
} */
/* В этой же строке экрана курсор переводим в позицию с номером (n1+1)*6. */
gotoxy((n1+1)*6, wherey());
cout<<"Average=> "<<s/(i+1)<<endl;
}
/* Удаляем динамическую матрицу так, как в предыдущем примере: */
for (int i=0;i<n1;i++)
delete[]arr[i];
delete[]arr;
getch(); return 0;
}
П р и м е р 3 (+). Создание динамической “матрицы” с различным количеством элементов в строках. В каждой строке резервируем память для количества элементов, которое вводим с экрана.
int main()
{ int n1; cout<<"Size1=>"; cin>>n1; // Количество строк
/*Объявление и создание динамического одномерного массива, в котором будут храниться количество элементов в каждой строке. */
int *arr_of_size;
arr_of_size=new int[n1];
cout<<"Input the size of each row";
for (int i=0;i<n1;i++) cin>>arr_of_size[i];
// Объявление и создание динамической матрицы.
int **arr;
arr= new int*[n1];
for (int i=0;i<n1;i++)
arr[i]=new int[arr_of_size[i]];
/* Количество элементов каждой строки берём из одномерного динамического массива. */
float s;
for (int i=0; i<n1;i++)
{ s=0;
for (int j=0;j<arr_of_size[i];j++)
{
arr[i][j]=(i+1)*(j+1);
s+=arr[i][j];
cout.width(6);
cout<<arr[i][j];
}
gotoxy((arr_of_size[i]+1)*6, wherey());
if (arr_of_size[i]==0)
cout<<"No elements";
else
cout<<"Average=> "<<s/arr_of_size[i]<<endl;
}
//Удаляем матрицу.
for (int i=0;i<n1;i++)
delete[]arr[i];
delete[]arr;
// Удаляем динамический одномерный массив.
delete []arr_of_size;
getch(); return 0;
}
Варианты заданий
A. Задачи первого, простого уровня
Можно использовать любой алгоритм сортировки.
-
Рассортировать строки динамической матрицы с одинаковым количеством элементов в каждой строке по наибольшему элементу строки.
-
Рассортировать строки динамической матрицы с одинаковым количеством элементов в каждой строке по убыванию количества чисел, принадлежащих отрезку [a, b], где a, b – одинаковые для каждой строки, a<=b.
-
Из динамической квадратной матрицы размерности n*n получить одномерный динамический массив, который содержит наименьшие элементы строк.
-
В динамической матрице с одинаковым количеством элементов в каждой строке получить номера строк, элементы каждой из которых образуют монотонно убывающую последовательность.
-
В динамической матрице с одинаковым количеством элементов в каждой строке получить номера строк, все элементы которых четны.
-
В динамической матрице с одинаковым количеством элементов в каждой строке есть только единицы и нули. Найти количество нулевых строк, то есть строк, в которых все нули.
-
В динамической матрице с одинаковым количеством элементов в каждой строке есть только единицы и нули. Найти количество строк, в которых есть хотя бы один нуль.
-
Найти норму заданной динамической матрицы А с одинаковым количеством элементов в каждой строке, определенную как .
-
Создать нижний относительно главной диагонали треугольник динамической квадратной матрицы. Найти наибольший и наименьший элементы этого треугольника.
-
Создать верхний относительно главной диагонали треугольник динамической квадратной матрицы. Найти сумму всех элементов этого треугольника.
-