Студопедия — Вывод табличных данных
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Вывод табличных данных






 

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

Цель работы - создать программу, рассчитывающую суммы по столбцам и строкам вводимых чисел.

 


1. Добавить на форму сетку – компонент StringGrid. Этот компонент служит для ввода и вывода табличных данных.

2. Необходимо ввести данные и описать событие реагирования на их ввод. В свойстве Options установите пункт Editing, иначе сетка будет доступной только для чтения. Теперь при запуске программы можно вводить текст.

3. Щелкнув мышкой в Инспекторе Объектов, описать обработчик события OnSelectCell, которое возникает, когда пользователь выбирает какую-либо ячейку для редактирования.

4. Теперь при запуске программы и выборе ячейки в заголовке формы отображается информация о столбце и строке ввода.

5. Таким образом, в разделе uses возникла ссылка на модуль Grids, в котором описаны компоненты сеток. В описании класса формы добавилась переменная – ссылка на компонент сетки, а также описание метода – обработчика события. Сам обработчик описан уже в разделе implementation.

6. Обработать событие, возникающее, когда пользователь пытается выделить какую-нибудь ячейку.

procedure Tform1.StringGrid1SelectCell(Sender: Tobject; Acol, Arow: Integer;

var CanSelect: Boolean);

Begin

Caption:= ‘Выделена клетка (‘ + IntToStr(Acol) + ‘:’ + IntToStr(Arow) + ‘) ‘;

End;

 

В качестве параметров обработчик получает (кроме Sender) номер столбца, номер строки и переменную CanSelect, которую можно изменить внутри обработчика, так как она передается как var.

 

 


Можно, например, запретить выделение ячеек третьего столбца. Для этого вставьте в этот обработчик еще строчку: CanSelect:= (Acol <> 3);

В этом случае CanSelect будет равен false, если Acol = 3.

7. Настроить сетку в зависимости от значения констант, которые надо объявить в interface. Теперь при запуске программы сетка имеет размер, заданный в константе, и выглядит значительно аккуратнее. Если изменить значение константы, то при запуске и размер сетки будет соответствующим.

8. Установить размер сетки согласно значению констант Num и сSize, объявленных в interface:

const Num = 4;
cSize = 30;

……

procedure Tform1.FormCreate(Sender: Tobject);
begin
MyGrid.DefaultColWidth:= cSize;
MyGrid.DefaultRowHeight:= cSize;
MyGrid.ColCount:= Num;
MyGrid.RowCount:= Num;
MyGrid.Width:= Num * (cSize + 1) + 3;
MyGrid.Height:= Num * (cSize + 1) + 3;
MyGrid.Font.Size:= cSize div 2;
end;

 


В приведенном участке кода изменяются ширина и высота сетки, установленные по умолчанию, а также количество строк и столбцов сетки. Добавление единицы к ширине каждой ячейки связано с наличием линий между ячейками, а добавление тройки ко всей сумме – наличием бордюра вокруг сетки. В последней строчке устанавливается соответствующий величине клетки размер шрифта.

9. Для расчета суммы по столбцам и строкам вводимых чисел написать собственную процедуру и две функции.

Функции будут рассчитывать сумму в строке и столбце, получая их номер в качестве параметра. Процедура будет в цикле вызывать эти функции и соответствующим образом заполнять клетки.

Теперь надо создать обработчик для нажатия на саму форму и описать в нем вызов расчета. Собственная процедура стоит в коде раньше, чем обработчик, из которого она вызывается. Когда описывается собственная процедура, нужно обращаться к компонентам через форму.

При запуске программы требуется ввести числа в сетку и кликнуть на саму форму.

Function ColSum(n: integer): integer;
var
i: integer;
begin
Result:= 0;
for I:= 1 to Num – 1 do Result:= Result + StrToInt (Form1.MyGrid.Cells[n, i]);
end;

function RowSum(n: integer): integer;
var
i: integer;
begin
Result:= 0;
for I:= 1 to Num – 1 do Result:= Result + StrToInt(Form1.MyGrid.Cells[I, n]);
end;

procedure Calculate;
var i: integer;
begin
for I:= 1 to Num – 1 do
begin
Form1.MyGrid.Cells[I, 0]:= IntToStr(ColSum(i));
Form1.MyGrid.Cells[0, i]:= IntToStr(RowSum(i));
end;
end;

В данной программе используется свойство Cells, компонента сетки. Это свойство имеет тип двумерного массива строк. Счет в этом массиве начинается с нуля. Фиксированные (серые) клетки, с точки зрения индексирования массива, ничем не отличаются от прочих. В нашем случае фиксированы первая строка и первый столбец (в массиве они имеют соответствующие нулевые координаты). Поэтому при расчете суммы проходят от 1 (а не от 0) до Num – 1 (при индексировании с нуля последний столбец/строка имеют, понятно, номер Num – 1).

Однако, если произойдет ввод какой-нибудь буквы, сразу возникнет исключительная ситуация. Она, очевидно, возникает из-за невозможности перевода буквы в число в функции StrToInt. Если нежелательно, чтобы при возникновении исключительной ситуации программа в Delphi переходила в режим отладки, можно отключить флажок Menu => Tools => Debugger Options => Language Exceptions => Stop on Delphi Exceptions. Теперь программа будет выполняться так, как если бы она выполнялась из-под Windows. Теперь каждый раз, когда вводится нечисловой символ, программа не останавливается, а только появляется стандартное окно Windows с сообщением об ошибке.

С помощью обработки исключений можно избежать появления этого окна. Для этого надо добавить в функцию конструкцию try..except. Таким образом «опасная» команда (или целый блок) помещается внутрь конструкции try..except..end или try..finally..end:

function StrToVal(s: string): integer;
begin
if S = ‘’ then Result:= 0 else
try
Result:= StrToInt(s);
except
Result:= 0;
Form1.Caption:= ‘Вводить надо числа!’;
end;
end;

Если возникает исключительная ситуация, т.е. введено нечисловое значение, считается, что введен ноль, а также выводится сообщение об этом пользователю. Еще нужно добавить вывод информации, что все в порядке. А также удалить код внутри обработчика Click формы. В результате, если введено неправильное значение, то окно ошибки не появляется, а в Caption формы выводится напоминание.








Дата добавления: 2015-09-04; просмотров: 412. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия