72732

Изучение компонентов среды С++ Builder 6: TStringGrid (таблица строк), TMainMenu. Работа с массивами данных

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

Информатика, кибернетика и программирование

Получение навыков работы с компонентами TStringGrid (таблица строк), TMainMenu (главное меню), программирования ввода матрицы смежности графа с помощью компоненты TStringGrid, разработки классов для решения задач на графах.

Русский

2014-11-27

264 KB

3 чел.

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

«Изучение  компонентов среды С++ Builder  6: TStringGrid (таблица строк),  TMainMenu. Работа с массивами данных»

Цель работы

Получение навыков работы с компонентами TStringGrid (таблица строк),  TMainMenu              ( главное меню), программирования ввода матрицы смежности графа с помощью компоненты TStringGrid, разработки классов для решения задач на графах.

Порядок выполнения работы

Работа выполняется на примере решения задачи определения в графе вершины с наибольшим суммарным весом смежных c ней ребер.  Рассмотрим сценарий решения задачи. Проект должен содержать три формы:

  1.  главная форма

2) форма для ввода количества вершин графа

3) форма для вывода матрицы смежности графа.

  •  Главная форма содержит следующие компоненты:

TMainMenu  - главное меню с пунктами  :

                  кол-во вершин  -    для ввода количества вершин графа;

                матрица             -  для вывода матрицы смежности на экран ( форма 3);

max вершина     -   для поиска и вывода на экран вершины с
                               максимальным  весом  смежных с ней ребер.

        TEdit             - окно редактирования для вывода номера вершины с максимальным
                                       весом  смежных с ней ребер.   

TLabel           - метка, для отображения  текста, поясняющего поле TEdit: max вершина .  

  •  Форма для ввода количества вершин графа содержит компоненты:

TEdit       - окно редактирования для ввода количества вершин графа;

     TButton  - кнопку надписью OK.

  •   Форма для ввода-вывода матрицы смежности графа содержит компоненты:

StringGrid  -   таблица для ввода-вывода матрицы смежности графа;

 TButton      - кнопку надписью OK.

Создание проекта 

ФОРМА 1

Шаг 1.  В меню File  выберите пункт  New Аpplication (новое приложение). Появившаяся     форма  Form1 является   главной формой приложения.

Шаг 2.  Поместите на форму компонент TЕdit (окно редактирования ). Для этого:

  •  на вкладке Standard ПАЛИТРЫ КОМПОНЕНТ выберите компонент ТEdit (4-й слева)
  •  в ИНСПЕКТОРЕ ОБЪЕКТОВ выберите свойство Text этой компоненты и удалите в его поле текст.

Шаг 3.  Поместите на форму компонент TLabel  (метка ).  Для этого:

  •  на вкладке Standard ПАЛИТРЫ КОМПОНЕНТ выберите компонент ТLabel (3-й слева);
  •  свойство Caption этого компонента установите в "max вершина".

Шаг 4.  Поместите на форму главное меню.  Для этого:

  •  на вкладке Standard выберите компонент TMainMenu (1-й слева) и перетащите его на форму;
  •  щелкните на нем (появится окно Дизайнера Меню);
  •  щелкните на первой пустой рамке (первый пункт меню) и установите его свойство Caption в "кол-во вершин"
  •  щелкните на пустой рамке (нового пункта) справа и установите его свойство Сaption в значение  "матрица", а свойство GroupIndex в 2 (любое значение, большее чем у   предыдущего   пункта меню);
  •  щелкните на пустой рамке (нового пункта) справа и установите свойство Сaption в

             "max вершина", а свойство GroupIndex в 5 (любое значение, большее чем у

                  предыдущего  пункта меню).

 Шаг 5.  Закройте окно Дизайнера Меню .

ФОРМА 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≤ki+1, j-1≤lj+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.  количество строк, содержащих хотя бы один нулевой элемент;

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

Вариант 19

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

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

Вариант 20

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

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

ПРИМЕЧАНИЕ -

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


 

А также другие работы, которые могут Вас заинтересовать

59726. Інсценізація казки: Пан Коцький 40.5 KB
  На дворі на лавочці біля хати сидить дід та баба а біля її ніг лежить кіт. Залишив кота під дубом Кіт сидить сумує Коли дивиться лисички весело мандрують. Що тут робиш поробляєш куди шлях ти держиш Кіт.
59728. Біблійні мотиви і пророцтво майбутнього у творчості Тараса Шевченка 74 KB
  Тарас Шевченко виріс у патріархальній українській родині де любов до Бога була неодмінною умовою життя. Українці свято вірили в Бога і ревно молилися а жорстоку панщину сприймали як замах на їхню віру переконання...
59729. День вчителя 36 KB
  Дитина: Вчитель Скільки сили треба Щоб навчити нас усіх І терпіння і бажання Дитина: І надій і сподівання. Дитина: Якби не було вчителя То не було напевне Ні поета ні мислителя Ні Шекспира ні Коперника І понині напевне Якби б не було учителя Невідкритими залишилися б Береги Америки.
59730. Конкурс на тему: Зачаровані казкою 51.5 KB
  Конкурс проходив у двох вікових рівнях у категорії €œІлюстрація до улюбленої казки учні €œ0 та І класів та Як уважно вміємо читати казки учні 2 та 3 класів і вимагав ознайомлення учасників зі змістом слідуючих українських народних казок: а Перша група кл.
59731. Державні символи України 53 KB
  Мета: 1 закцентувати увагу на державних символах; 2 повторити документи які узаконюють державність; 3 показати відображення питань української символіки в літературі та мистецтві; 4 виховання патріотичних почуттів у підростаючого покоління.
59732. Кривенька качечка 40.5 KB
  Нічого я ще не знаю, бабуся миленька. Давай підемо по грибки, ти моя старенька. Бери козуб і корзину, я візьму відерце, Наберемо ще води ми з чистого джерельця, Назбираємо грибочків, ягідок нарвемо, Зваримо юшки із грибами, млинців напечемо.
59733. Свято весни. Методична розробка уроку 40.5 KB
  Здрастуй день і здрастуй сонце ясне Промені червоні вище підіймай Хай земля всміхається прекрасна Виграє веселкою весна. В сиву давнину пора року весна відзначалась великою кількістю розмаїтих обрядів ігор пісень.
59734. Інсценівка для дітей. На лісовій галявині 40.5 KB
  На сцені розкладені вирізані з паперу квіти, на кожній квіточці — цукерка. Це галявина. На галявину вибігає дівчинка, одягнена в одяг жовто-брунатного кольору, на голові великий жовтий бант. Це — Бджілка. В руці кошик. Вона побачила квіти і (почала збирати цукерки-нектар).