72732

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

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

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

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

Русский

2014-11-27

264 KB

4 чел.

Лабораторная работа №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-м столбце.


 

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

40243. Понятие собственного капитала организации‚ характеристика его элементов 29 KB
  Собственный капитал состоит из уставного капитала добавочного капитала резервного капитала нераспределенной прибыли целевого финансирования. В настоящее время для характеристики той части собственного капитала размер которой указывается в учредительных документах используют понятия Уставной капитал Складочный капитал Уставной фонд паевой фонд. Уставной капитал совокупность в денежном выражении вкладов долей акций по номинальной стоимости учредителей участников в имущество организации при её создании для обеспечения...
40244. Понятие состав и структура внеоборотных активов 39 KB
  Вложения во внеоборотные активы подразделяются на затраты связанные: с созданием объектов основных средств путем осуществления капитального строительства в форме нового строительства а также реконструкции расширения и технического перевооружения действующих объектов производственной и непроизводственной сферы; с приобретением земельных участков объектов природопользования и отдельных объектов основных средств зданий сооружений оборудования транспортных средств и других отдельных объектов основных средств или их частей; с...
40245. Понятие состав и структура, оборотных активов и учет производственных запасов 63.5 KB
  К бухгалтерскому учету в качестве МПЗ принимаются активы: используемые для продажи включая готовую продукцию и товары; используемые в качестве сырья материалов и т. Счет 10 Материалы предназначен для обобщения информации о наличии и движении сырья материалов топлива запасных частей инвентаря и хозяйственных принадлежностей тары и тому подобных ценностей организации в том числе находящихся в пути и переработке. Оприходование материалов фактически поступивших в организацию отражается записью по дебету счета 10 Материалы и...
40246. Понятие существенности в процессе аудит.проверки 39.5 KB
  проверки Существенность это вероятность того что применяемые аудиторские процедуры позволяют определить наличие ошибки в отчетности экономического субъекта и оценить их влияние на принятие соответствующих решений ее пользователями. Информация об отдельных активах обязательствах доходах расходах и хозяйственных операциях а также составляющих капитала считается существенной если ее искажение может повлиять на экономические решения пользователей принятые на основе финансовой бухгалтерской отчетности. Аудитор не может выразить мнение о...
40247. Понятие учетной политики. Задачи учетной политики 30.5 KB
  Задачи учетной политики. В ряде случаев законные и обоснованные положения приказа об учетной политике более весомы нежели письма и разъяснения Минфина РФ МНС России территориальных налоговых инспекций. Согласно Положению под учетной политикой организации понимается принятая ею совокупность способов ведения бухгалтерского учета первичного наблюдения стоимостного измерения текущей группировки и итогового обобщения фактов хозяйственной деятельности.
40248. Понятие, состав и источники формирования финансовых ресурсов 31.5 KB
  В учебной литературе так же даются различные толкования финансовых ресурсов. Впервые оно было введено при составлении первого 5 летнего плана СССР когда был составлен баланс финансовых ресурсов страны.Признаки финансовых ресурсов:1.
40249. Понятие‚ классификация и учет финансовых вложений 56 KB
  государственные м муниципальные ценные бумаги ценные бумаги других организаций в том числе долговые ценные бумаги в которых дата и стоимость погашения определена облигации векселя; 2. Это инвестиции в ценные бумаги. По видам финансовые вложения подразделяются на: взносы в уставные капиталы других организаций доли паи и приобретение акций акционерных обществ пакеты ценных бумаг; инвестиции в долговые ценные бумаги; займы предоставленные другим юридическим и физическим лицам; вклады в общее имущество по договору простого...
40250. Порядок исчисления и уплаты налога на имущество организаций 38 KB
  Объектом налогообложения для российских организаций признается движимое и недвижимое имущество включая имущество переданное во временное владение пользование распоряжение или доверительное управление внесенное в совместную деятельность учитываемое на балансе в качестве объектов основных средств в соответствии с установленным порядком ведения бухгалтерского учета Налоговая база определяется как среднегодовая стоимость имущества признаваемого объектом налогообложения. Среднегодовая стоимость имущества определяется путем деления на четыре...
40251. Порядок исчисления и уплаты налога на прибыль организаций 35 KB
  Не являются плательщиками налога на прибыль: 1.организации перешедшие на уплату единого налога на вмененный доход для определенных видов деятельности; 2. Указанные организации не освобождаются от исполнения обязанностей налогового агента и удержания сумм налога с доходов у источника выплат в соответствии с 25 главой НК.