Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2Сем.doc
Скачиваний:
14
Добавлен:
29.02.2016
Размер:
603.65 Кб
Скачать
        1. Задачи первого, простого уровня

  1. Найти произведение вектор-строки (одномерного массива) на матрицу.

  2. Найти норму заданной матрицы следующим образом. В каждой строке находим сумму модулей всех элементов. Среди этих сумм определяем максимальную сумму.

  3. Определить, явля­ется ли матрица симметричной относительно главной диагонали.

  4. Определить, есть ли в матрице хотя бы одна строка, состоящая только из нулевых элементов. Если есть, найти номер последней такой строки.

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

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

  7. Найти сумму положительных элементов, расположенных в закрашенной части матрицы, не включая диагональные элементы, на рис. 2.

  8. Найти произведение ненулевых элементов, расположенных в закрашенной части матрицы, включая диагональные элементы, на рис. 3.

  9. Найти количество ненулевых элементов, расположенных в закрашенной части матрицы, не включая диагональные элементы, на рис. 4.

Рис. 1. Рис. 2. Рис. 3. Рис. 4.

  1. В квадратной матрице найти разность между наибольшим и наименьшим значениями побочной диагонали.

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

В. Задачи второго, среднего уровня

  1. Найти максимальное из чисел, встречающихся в матрице более одного раза.

  2. Седловой точкой матрицы назовём такой элемент, который является одновременно максимальным в столбце и минимальным в строке. Найти одну, любую седловую точку заданной матрицы.

  3. Для заданной квадратной матрицы найти такие k, что к-я строка совпадает с к-м столбцом.

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

  5. Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Найти количество локальных минимумов заданной матрицы.

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

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

  8. Расстояние между k-й и m-й строками матрицы a определяется как , где n2 — количество элементов в строке матрицы. Указать номер строки, максимально удаленной от первой строки заданной матрицы.

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

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

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

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

  13. Изменяя порядок следования строк, рассортировать матрицу по возрастанию суммы модулей элементов строк. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку обменом (алгоритм “пузырька”).

  14. Изменяя порядок следования строк, рассортировать матрицу по возрастанию наименьших элементов строк. Элементы каждой строки должны остаться без изменений в том же порядке, в котором были до сортировки. Использовать сортировку обменом (алгоритм “пузырька”).

  15. Получить действительную матрицу B, каждый элемент bij  которой ра­вен сумме элементов исходной матрицы, расположенных в закрашенной области, определяемой индексами i, j, на рис. 5.

  16. Получить действительную матрицу В, каждый элемент bij  которой ра­вен сумме элементов исходной матрицы, расположенных в закрашенной области, определяемой индексами i, j, на рис. 6.

  17. Получить действительную матрицу В, каждый элемент bij  которой ра­вен сумме элементов исходной матрицы, расположенных в закрашенной области, определяемой индексами i, j, на рис. 7.

Рис. 5. Рис. 6. Рис. 7.

C. Задачи повышенной сложности

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

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

  3. Две строки целочисленной матрицы назовём похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк в максимальном множестве попарно непохожих строк заданной матрицы, расположенных подряд.

  4. Найти количество строк заданной матрицы размерности 5*10, являющихся перестановкой чисел 1, 2, ..., 10.

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

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

  7. По матрице A построить матрицу B того же размера, где элемент bij определяется следующим образом. Через aij проведем в A линии, параллельные сторонам прямоугольника до пересечения с побочной диагональю; bij определяется как максимум среди элементов треугольника в А (рис. 8).

  8. По матрице А построить матрицу В того же размера, где bij определяется следующим образом. Через aij проведем в A диагонали, параллельные главной и побочной диагоналям; bij определяется как максимум в закрашенной части матрицы А (рис. 9).

Рис. 8. Рис. 9.

  1. Найти сум­му элементов, расположенных в закрашенной части квадратной матрицы на рис. 10.

  2. Найти произведение ненулевых элементов, расположенных в закрашенной части квадратной матрицы на рис. 11.

Рис. 10. Рис. 11.

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

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

  3. Заполнить квадратную матрицу размерности n*n по спирали по часовой стрелке числами 1, 2, 3, …,n*n, начиная с элемента, находящегося в верхнем левом углу.

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

Рис. 12.

Лабораторная работа 4

Тема. Массив указателей на строки.

Требования и общие указания к заданиям:

задания выполнить двумя способами:

    • создать статический массив строк как статический массив указателей на строки (см. § 3);

    • создать динамический массив строк как динамический массив указателей на строки (см. § 5).

Варианты заданий

B. Задачи второго, среднего уровня

В вариантах с чётными номерами использовать сортировку обменом, в вариантах с нечётными номерами — сортировку выбором.

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

  2. Вывести слова русского текста в алфавитном порядке по первой букве. Слова, начинающиеся с новой буквы, выводить с красной строки.

  3. Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова в сортировке не должны участвовать.

  4. Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы расположить в алфавитном порядке.

  5. Слова английского текста рассортировать по возрастанию количества гласных букв в слове. Слова с одинаковым количеством таких букв расположить в алфавитном порядке первой по порядку гласной буквы.

  6. Ввести текст и список слов. Для каждого слова из заданного списка найти, сколько раз оно встречается в тексте. Рассортировать эти слова по возрастанию найденного количества.

  7. Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по первой букве фамилии, затем, если они совпадают, по первой букве имени и, наконец, по первой букве отчества.

  8. Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по первой букве имени, затем по возрастанию количества букв в имени.

  9. Все имена из заданного списка студентов рассортировать по частоте их встречаемости в этом списке.

  10. Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по первой букве имени, затем, если они совпадают, по возрастанию количества букв в фамилии.

  11. Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по двум первым буквам фамилии, затем, если первые две буквы фамилии одинаковы, по возрастанию количества букв в фамилии.

  12. Создать массив строк и соответствующий ему массив числовых параметров. Рассортировать строки по числовому параметру. Для одинаковых числовых параметров сортировать по алфавиту.

С. Задачи повышенной сложности

Решить те же (см уровень 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. Задачи первого, простого уровня

Можно использовать любой алгоритм сортировки.

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

  2. Рассортировать строки динамической матрицы с одинаковым количеством элементов в каждой строке по убыванию количества чисел, принадлежащих отрезку [a, b], где a, b – одинаковые для каждой строки, a<=b.

    1. Из динамической квадратной матрицы размерности n*n получить одномерный динамический массив, который содержит наименьшие элементы строк.

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

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

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

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

    6. Найти норму заданной динамической матрицы А с одинаковым количеством элементов в каждой строке, определенную как .

    7. Создать нижний относительно главной диагонали треугольник динамической квадратной матрицы. Найти наибольший и наименьший элементы этого треугольника.

    8. Создать верхний относительно главной диагонали треугольник динамической квадратной матрицы. Найти сумму всех элементов этого треугольника.