русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Лабораторная работа 5.


Дата добавления: 2015-06-12; просмотров: 770; Нарушение авторских прав


Тема. Динамические матрицы.

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

· разработать класс для работы с одной или несколькими матрицами, размерности которых являются полями класса (см. лаб. работу 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;

// Внутренний цикл с помощью указателя и номера элемента

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;

}

/* Замечание. Этапы 2) – 6) не отличаются от работы со статической матрицей фиксированной размерности.*/

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

3.Среди наименьших элементов динамической матрицы с одинаковым количеством элементов в каждой строке найти наибольший.

4.Сколько различных чисел в каждой строке динамической матрицы с одинаковым количеством элементов в каждой строке?

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

6. Создать нижний относительно главной диагонали треугольник динамической квадратной матрицы. Рассортировать строки матрицы по возрастанию наибольших элементов строк.

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

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

9. Создать верхний относительно побочной диагонали треугольник динамической квадратной матрицы. Рассортировать строки матрицы по возрастанию их средних значений.

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

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

12. Создать динамическую матрицу с разным количеством текущих оценок в строках. Рассортировать строки следующим образом: сначала должны быть строки с оценками отличников (9, 10), затем те, в которых наименьшая оценка >=6 (хорошисты) и т.д.

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

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

 



<== предыдущая лекция | следующая лекция ==>
Лабораторная работа 4. | С. Задачи повышенной сложности.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.757 сек.