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

Тема. Связь указателей и статических матриц.

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

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

· предусмотреть цветной вывод результатов. Например, в задачах А.6 — А.9 элементы матрицы из заштрихованной области вывести другим цветом;

· при работе с матрицами надо обязательно использовать указатели. При этом должны быть приведены различные (не менее трёх) способы организации циклов с использованием указателей (см. 4.1, 4.2, 4.3);

· результаты из функций должны возвращаться с помощью указателей, а не с помощью ссылочного типа. Функции, отличные от типа void, не использовать;

· для перестановки строк матрицы, если их надо выполнять по условию задачи, использовать указатели, как это было показано в §6;

Пример. (+)

Составить класс для работы с целочисленной матрицей, включив в него матрицу, конкретные текущие размерности и следующие методы: конструктор для ввода и проверки текущих размерностей матрицы; ввод матрицы; вывод матрицы; поиск наибольшего и наименьшего значений матрицы, номера одной строки, где находится максимальный и номера одной строки, где находится минимальный элементы всей матрицы; цветной вывод матрицы, в результате которого все элементы найденных в предыдущей функции строк при выводе выделяются другими цветами. В функции main ввести размерности матрицы, создать объект и проверить составленные методы.

const n1max=10, n2max=10;

class ClMatr

{ int a[n1max][n2max], n1, n2;

public:

ClMatr(int size1=5, int size2=3)

{ if (size1>0 && size1<n1max)

n1=size1; else n1=5;

if (size2>0 && size2<n2max)

n2=size2; else n2=3;

}

void MyInp();

void MyOut();

void MaxMin(int *, int *, int *, int *);

void MyColorOut(unsigned, unsigned,unsigned, unsigned, unsigned);

};

void ClMatr::MyInp()

{ int x, y=1;

for (int i=0; i<n1; i++)

{ y++; x=-14;

for (int j=0; j<n2; j++)

{ x+=16; gotoxy(x,y);

cout<<"a["<<i<<","<<j<<"]"<<" ";

scanf("%d", a[i]+j);

}

}

};

void ClMatr::MyOut()

{ int x, y=wherey()+1; int *p1, *p2;

for (p1=a[0]; p1<=a[n1-1]; p1+=n2max, y++)

for (x=1, p2=p1; p2<p1+n2; p2++, x+=5)

{

gotoxy(x,y);

printf("%5d", *p2);

}

cout<<endl;

}

void ClMatr::MyColorOut(unsigned i1, unsigned i2,

unsigned col1, unsigned col2, unsigned col3)

{ int x,i=0, y=wherey()+1; int *p1, *p2;

for (p1=a[0]; p1<=a[n1-1]; p1+=n2max, y++, i++)

{ if (i==i1) textcolor(col1); else if (i==i2) textcolor(col2);

else textcolor(col3);

for (x=1, p2=p1; p2<p1+n2; p2++, x+=5)

{ gotoxy(x,y); cprintf("%5d", *p2);

}

}

cout<<endl;

}

void ClMatr::MaxMin(int *max, int *Nmax, int *min, int *Nmin)

{ *max=*min=a[0][0]; *Nmax=*Nmin=0;

for (int i=0;i<n1;i++)

for (int j=0;j<n2;j++)

{ int el=*(a[0]+n2max*i+j);

if (*max<el)

{ *max=el; *Nmax=i;

}

else if (*min>el)

{ *min=el; *Nmin=i;

}

}

}

int main()

{ int n1, n2, Nmax, Nmin, max, min; clrscr();

cout<<"\nn1="; cin>>n1; cout<<" n2="; cin>>n2;

ClMatr ob(n1,n2); clrscr();

ob.MyInp(); cout<<endl; ob.MyOut();

ob.MaxMin(&max,&Nmax,&min,&Nmin);

textcolor(10);

cprintf("Max element=%d in %d row\r\n",max, Nmax+1);

textcolor(11);

cprintf("Min element=%d in %d row\r\n",min, Nmin+1);

if (Nmax!=Nmin)

ob.MyColorOut(Nmax, Nmin, 10,11, 15);

getch(); return 0;

}

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

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

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

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

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

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

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

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

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

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

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

               
       
 


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

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

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

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

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.

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

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.

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

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

 
 


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

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

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

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

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

 
 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: