Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа№4.doc
Скачиваний:
4
Добавлен:
28.08.2019
Размер:
273.92 Кб
Скачать

Форма 2

Шаг 6. Создайте новую форму для ввода количества вершин графа. Для этого в меню File выберите New Form (появиться Форма 2).

Шаг 7. Поместите на эту форму компонент TButton (кнопка) и присвойте ее свойству

ModalResult значение mrOK, чтобы при ее нажатии закрывалось окно, на котором она расположена.

Шаг 8. Поместите на форму компоненту TEdit (окно редактирования) и в ее свойстве Tехт удалите текст.

Шаг 9. Свойсту Caption присвойте значение "Введите кол-во вершин".

Форма 3

Шаг10. Создайте новую форму для ввода количества вершин графа:

  • в меню File выберите New Form (появиться форма3);

  • установите свойство Caption в "Матрица смежности".

Шаг 11. Поместите на эту форму компонент ТStringGrid , он находится на закладке Additional (4-й слева).

Шаг 12. Установите свойство Name в значение MatrGrid (имя таблицы в программе).

Шаг 13. Установите свойство Align в значение alTop (чтобы таблица "прижалась " к верху

формы).

Шаг 14. Установите свойства ColCount (количество столбцов таблицы ) и RowCount (количество строк таблицы ) в значение 10:

Шаг 15. Установите свойства DefaultRowHeight (высота ячеек таблицы) и DefaultColWidth (ширина ячеек таблицы) в значение 20:

Шаг 16. Щелкните на свойстве +Options и установите свойство goEditing в значение true

(чтобы можно было изменять значения в таблице во время работы программы)

Шаг 17. Поместите на форму (внизу) кнопку и установите свойства Caption в значение OK, а значение свойства ModalResult - в значение mrOK.

Шаг 18. Подключите Форму 2 и Форму 3 к Форме 1. Для этого:

  • перейдите к РЕДАКТОРУ КОДА и выберите закладку Unit1.cpp

  • затем в меню File выберите Include Unit Hdr... и в открывшемся окне выберите заголовочные файлы Unit2.h, а затем Unit3.h:

Шаг 19. Выберите в РЕДАКТОРЕ КОДА вкладку Unit1.h и добавьте операторы, объявляющие класс TGraf и производный от него класс TМatrGraf, перед объявлением класса TForm1:

В классе TGraf в части protected объявлена целая переменная topKol - число вершин в графе, а в части public определена функция SetKol () для задания значения topKol. В производном от класса TGraf классе TМatrGraf в части private объявлен двумерный массив целых чисел MatrAjg[30][30] для задания матрицы смежности, а в части рublic функция Matr() для ввода значений матрицы смежности и функция maxTop() для определения вершины с наибольшим суммарным весом смежных ей ребер.

Шаг 20. Создайте обьект класса TМatrGraf в динамической памяти, добавив строку TMatrGraf *MatrGraf1=new TMatrGraf;

перед конструктором класса TForm1 в файле Uint1.cpp:

Таким образом указатель MatrGraf1 на объект класса TМatrGraf является внешним данным и доступен в каждой функции приложения, включая член-функции самого класса TМatrGraf.

Теперь можно написать обработчики событий в соответствие со сценарием. Обратите внимание, что функции класса TМatrGraf еще не определены, а только объявлены. Но этого достаточно, чтобы реализовать сценарий решения задачи.

Шаг 21. Щелкните на Форме 1, затем на пункте меню "кол-во вершин" (появится окно РЕДАКТОРА КОДА с заголовком функции отклика на нажатие этого пункта меню).

Обработка события нажатия пункта меню состоит в показе Формы 2

Form2->ShowModal();

и вызове функции SetKol() класса TМatrGraf, которой необходимо передать в качестве аргумента целое число - количество вершин графа:

MatrGraf1->SetKol(StrToIntDef(Form2->Edit1->Text,0));

Символьная строка, соответствующая количеству вершин графа, должна быть введена из поля компоненты Edit1 Формы 2 и преобразована к целому числу. В этом случае удобно пользоваться функцией StrToIntDef(), которая при отсутствие символов в поле компоненты Edit1 передаст нулевое значение.

Шаг 22. Щелкните на Форме 1 , затем на пункте меню "матрица" (появится окно РЕДАКТОРА КОДА с заголовком функции отклика на нажатие этого пункта меню). Обработка события нажатия пункта меню состоит в показе Формы 3 и задание значений элементов матрицы смежности в соответствие со значениями ячеек компоненты TstringGrid. Такие действия должны быть предусмотрены в функции Matr() класса TМatrGraf, поэтому обработчик события выбора пункта меню "матрица" состоит в вызове этой функции:

Шаг 25. Щелкните на Форме 1, затем на пункте меню "max вершина" (появится окно РЕДАКТОРА КОДА с заголовком функции отклика на нажатие этого пункта меню). Обработка события нажатия пункта меню состоит в определении вершины с наибольшим суммарным весом смежных ей ребер, т.е. вызову функции maxTop() класса TМatrGraf:

Шаг 26. Обратите внимание, что для двух других форм нет необходимости в обработчиках событий нажатия кнопок, т.к. отклик на эти события состоит в закрытии форм, а он уже определен свойством этих компонент ModalResult= goEditing при выполнении шагов 16 и 17.

Шаг 27. Теперь перейдите к реализации функций класса TМatrGraf. Добавьте эти функции после функций отклика в файле Uint1.cpp:

Добавьте операторы функции Matr():

Шаг 27. Рассмотрите подробно процесс разработки функции Matr().

  • Прежде всего установите количество столбцов и строк компоненты MatrGrid, задав значения свойствам ColCount и RowCount, равное значению, на единицу большему, чем количество вершин графа:

Form3->MatrGrid->ColCount=topKol+1; //Устанавливает кол-во столбцов

Form3->MatrGrid->RowCount=topKol+1; //Устанавливает кол-во строк

  • Затем организуйте цикл, в котором ячейкам первой строки и первого столбца компоненты MatrGrid установите значения, соответствующие номерам вершин. Для этого необходимо преобразовать значение номера вершины (целое число) к символьной строке и присвоить ее свойству типа массив Cells[i][j] компоненты MatrGrid:

for(int i=1; i<topKol+1; i++)

{

Form3->MatrGrid->Cells[0][i]=IntToStr(i); // нумерует нулевую колонку

Form3->MatrGrid->Cells[i][0]=IntToStr(i); // нумерует нулевую строку

}

  • Установите начальные значения ячеек таблицы, равные значениям элементов матрицы смежности. При первом показе таблицы в ячейках будут показаны нулевые значения, т.к. член-данные объекта класса TМatrGraf, созданного в динамической памяти на шаге 20 как внешнее данное, по умолчанию инициализируются нулевыми значаниями:

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

for(int j=i;j<topKol;j++)

{

Form3->MatrGrid->Cells[i+1][j+1]=IntToStr(MatrAjg[i][j]);

Form3->MatrGrid->Cells[j+1][i+1]=IntToStr(MatrAjg[j][i]);

}

  • Теперь можно показать Форму 2 в модальном режиме вызовом функции (метода) формы ShowModal():

Form3->ShowModal(); // показать таблицу в модальном режиме

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

  • После того, как Форма 2 будет закрыта, необходимо переписать значения весов ребер из ячеек таблицы в элементы массива MatrAjg. При этом достаточно переписать в массив только ячейки, расположенные выше главной диагонали, а элементам массива, расположенным ниже главной диагонали, можно просто присвоить значения симметричных элементов:

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

for(int j=i;j<topKol;j++)

{

MatrAjg[i][j]=StrToInt(Form3->MatrGrid->Cells[j+1][i+1]);

MatrAjg[j][i]=MatrAjg[i][j];

}

Шаг 28. Добавьте функцию maxTop() класса TМatrGraf:

Шаг 29. Разберитесь с работой функции maxTop(). Функция достаточно простая. Отметим только, что она определяет номер i-ой строки массива MatrAjg с наибольшим суммарным значением элементов и присваивает его значение переменной MaxTop. Оператор

Form1->Edit1->Text=IntToStr(MaxTop+1);

выводит значение номера вершины в поле компоненты Edit1 Формы 1.

Шаг 30. Сохраните проект, выбрав пункт File / Save Project As.

Шаг 31. Запустите проект на выполнение

Постановка задачи:

С рассмотренных компонентов реализовать следующие задачи:

Вариант 1

Дана целочисленная прямоугольная матрица. Определить:

  1. количество строк, не содержащих ни одного нулевого элемента;

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

Вариант 2

Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента.

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

Вариант 3

Дана целочисленная прямоугольная матрица. Определить:

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

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

Вариант 4

Дана целочисленная квадратная матрица. Определить:

  1. произведение элементов в тех строках, которые не содержат отрицательных элементов;

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

Вариант 5

Дана целочисленная квадратная матрица. Определить:

  1. сумму элементов в тех столбцах, которые не содержат отрицательных элементов;

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

Вариант 6

Дана целочисленная прямоугольная матрица. Определить:

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

  2. номера строк и столбцов всех седловых точек матрицы.

ПРИМЕЧАНИЕ -

Матрица А имеет седловую точку Аij, если Aij является минимальным элементом i строке и максимальным в j-м столбце.

Вариант 7

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

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

Вариант 8

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

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

Вариант 9

Соседями элемента Аij в матрице назовем элементы Akl c i-1≤k≤i+1, j-1≤l≤j+1, (k,l)(i,j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером 10 на 10. В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали.

Вариант 10

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

Вариант 11

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

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

Вариант 12

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

Вариант 13

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

Вариант 14

Осуществить циклический сдвиг элементов квадратной матрицы размерности MxN вправо на k элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него — в последнюю строку справа налево, из нее — в первый столбец снизу вверх, из него — в первую строку; для остальных элементов — аналогично.

Вариант 15

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

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

Вариант 16

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

Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.

Вариант 17

Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2,2), следующий по величине — в позиции (3,3) и т. д., заполнив таким образом всю главную диагональ.

Найти номер первой из строк, не содержащих ни одного положительного элемента.

Вариант 18

Дана целочисленная прямоугольная матрица. Определить:

  1. количество строк, содержащих хотя бы один нулевой элемент;

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

Вариант 19

Дана целочисленная квадратная матрица. Определить:

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

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

Вариант 20

Дана целочисленная прямоугольная матрица. Определить:

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

  2. номера строк и столбцов всех седловых точек матрицы.

ПРИМЕЧАНИЕ -

Матрица А имеет седловую точку Аij, если Aij является минимальным элементом i строке и максимальным в j-м столбце.