Лабораторная работа № 16.
Обработка массивов данных

Время выполнения

6 часов

Цель работы

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

Задачи лабораторной работы

После выполнения работы студент должен уметь:
  • оформлять консольное приложение;
  • применять правила использования в структуре программы управляющего элемента StringGrid при обработке массивов данных;
  • обрабатывать массивы данных.

Перечень обеспечивающих средств

Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система семейства Windows и С++Builder v.6.0.

Общие теоретические сведения

Консольное приложение в среде C++ Builder 
Консоль – это монитор и клавиатура, рассматриваемые как единое устройство. Консольное приложение – программа, предназначенная для работы в операционной системе MS-DOS (или командной строке Windows), для которой устройством ввода является клавиатура, а устройством вывода  монитор, работающий в режиме отображения символьной информации (буквы, цифры и специальные знаки). 
Консольные приложения удобны как иллюстрации при рассмотрении общих вопросов программирования, когда надо сосредоточиться на сути проблемы, а также как небольшие утилиты "для внутреннего потребления". 
Для создания консольной программы в среде C++Builder 6.0 необходимо выполнить команду File/New/Other (рис.1) 
 Рисунок 1. Создание нового проекта

В появившемся окне (рис. 2) выбрать Console Wizard.
 
Рисунок 2. Создание консольного проекта

Далее необходимо настроить проект (рис. 3). 
 
Рисунок 3. Настройки проекта Console Wizard

После нажатия на кнопку OK появится окно (рис. 4) с заготовкой функции main(). 
 Рисунок 4. Заготовка функции main()

Если программа будет запускаться с параметрами, то следует использовать предложенную заготовку функции main(). Если параметры запуска программы использовать не планируется, то можно полностью очистить окно программного кода и начать писать программу с «чистого листа». 

Изучение управляющего элемента StringGrid

Компонент StringGrid представляет собой таблицу, содержащую строки. Данные таблицы могут быть только для чтения или редактируемыми. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Каждой ячейке таблицы может быть поставлен в соответствие некоторый объект. 
Компонент StringGrid  находится на вкладке Additional панели компонентов.
Таблица StringGrid состоит из выделенных серым FixedCols и FixedRows - зафиксированных ячеек-заголовков, и обычных, белых ячеек. Содержимое Fixed ячеек недоступно для редактирования, и меняется только программно. Для установки количества фиксированных ячеек можно изменить значение свойств FixedCols и FixedRows в окне свойств Object Inspector. Или поменять количество фиксированных строк и столбцов программно, написав в коде программы следующие команды:

StringGrid1-> FixedCols=1; // устанавливает 1 фиксированный столбец
StringGrid1-> FixedRows=1; // устанавливает 1 фиксированную строку

Общее количество строк и столбцов  в таблице можно установить вручную в окне Object Inspector, отредактировав свойства RowCount и ColCount, а можно изменить программно в ходе выполнения программного кода, написав следующие команды:

StringGrid1->RowCount=5 //устанавливаем общее кол-во строк равное 5
StringGrid1->ColCount=7 //устанавливаем общее кол-во столбцов равное 7

Эти свойства доступны как для записи (при установке количества строк и столбцов), так и для чтения (при проверке размер таблицы).
За многие свойства компонента StringGrid отвечает свойство Options. В Инспекторе Объектов Options - это раскрывающийся список, представляющий собой элементы данного множества. Если значение элемента равно True, то он присутствует в множестве, если False - то нет.

 Свойство  Значение
 goFixedVertLine  Наличие вертикальных разделительных линий между "фиксированными" ячейками
 goFixedHorzLine  Наличие горизонтальных разделительных линий между "фиксированными" ячейками
 goVertLine  Наличие вертикальных разделительных линий между "обычными" ячейками
 goHorzLine  Наличие горизонтальных разделительных линий между "обычными" ячейками
 goRangeSelect  Возможность выделить диапазон ячеек
 goDrawFocusSelected  Закрашивание ячейки с фокусом ввода
 goRowSizing  Возможность менять высоту строк мышкой
 goColSizing  Возможность менять ширину столбцов мышкой
 goRowMoving  Возможность менять номер строки, то есть перемещать её, мышкой
 goColMoving  Возможность менять номер столбца, то есть перемещать его, мышкой
 goEditing  Возможность редактировать содержимое ячейки с клавиатуры
 goTabs  При значении True фокус смещается на следующую ячейку в таблице, False - на следующий компонент
 goRowSelect  Выделяется вся строка с "фокусированной" ячейкой
 goAlwaysShowEditor  При значении True содержимое ячейки при получении фокуса сразу доступно редактированию, False - сначала необходимо щёлкнуть по ней мышкой (прим.: не действует при goRowSelect=True)
 goThumbTracking  При значении True перемещение "бегунка" прокрутки мышкой вызывает немедленное перемещение ячеек, False - ячейки перемещаются только при отпускании "бегунка"
Как следует из таблицы, за возможность редактировать содержимое ячеек с клавиатуры отвечает элемент goEditing свойства-множества Options. В Инспекторе Объектов установите его значение в True. Чтобы управлять этой возможностью программно, нужно включить или исключить из множества данный элемент:

StringGrid1->Options<<goEditing;  //Включаем редактирование, другие 
  //элементы не трогаем
StringGrid1->Options>>goEditing;  //Выключаем редактирование, другие 
  //элементы не трогаем

Компонент StringGrid имеет возможность адресации каждой отдельной ячейки по номеру столбца и строки. 
Содержимое ячейки (i, j), где где i - номер столбца, j - номер строки, имеет вид: StringGrid1->Cells[i][j] и доступно как для чтения, так и для записи. 
Например: 
StringGrid1->Cells[i][j]=”Hello”; - записывает слово в ячейку с координатами i и j.
a=StringGrid1->Cells[i][j]; - считывает содержимое ячейки с координатами i и j в переменную a.
Номера столбцов (i) и строк (j) отсчитываются от нуля.
Выделенная ячейка таблицы имеет: 
номер столбца:  StringGrid1->Col
номер строки:   StringGrid1->Row,
поэтому содержимое выделенной ячейки будет адресоваться так:
S=StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row];
У таблицы StringGrid также есть свойство и для управления размером ячеек. Для всех ячеек
DefaultRowHeight - высота строк по умолчанию
DefaultColWidth   - ширина столбцов по умолчанию
Эти значения ширины и высоты принимают все новые ячейки. При необходимости индивидуально установить ширину и высоту столбцов и строк соответственно, пользуемся свойствами
RowHeights[i] - массив, содержащий высоты строк с номером i
ColWidths[i] - массив, содержащий ширины столбцов с номером i
Ширину, а также надписи заголовков, располагающиеся в строках и столбцах "фиксированной" зоны таблицы можно настроить в обработчике события OnCreate формы или в функции: 
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
В результате таблица появляется уже в "настроенном" виде.