
- •История языков программирования
- •Понятия программного обеспечения
- •2. История языков программирования
- •Классификация языков программирования
- •Понятие системы программирования
- •Технологии программирования
- •Понятие системы программирования
- •2.Технологии программирования
- •2.1. Структурное программирование
- •2. Модульное программирование
- •2. 3. Объектно-ориентированное программирование (ооп)
- •Формы записей алгоритмов. Общие принципы построения
- •Тема: Основные алгоритмические конструкции. Сложность алгоритмов.
- •Базовые принципы ооп
- •1.Общие свойства компонентов
- •2.События компонентов
- •Общие свойства компонентов
- •Свойство Align
- •Свойство Color
- •1.Структура проекта
- •2.Структура модуля
- •Лекция10
- •Лекция11
- •Лекция12
- •Лекция13
- •Лекция14
- •Лекция15
- •Лекция16
- •Лекция17 Стандартные диалоговые окна: назначение, свойства, события.TOpenDialog, tSaveDialog, tColorDialog, tOpenPictureDialog, tSavePictureDialogTPrinterSetupDialog, tPrinterDialog
- •1.Правила использования диалоговых панелей
- •П3.3.Символьный тип
- •П3.4. Перечисляемый тип
- •Пз.6. Тип дата-время
- •Приложение 5. Математические формулы
- •Многомерные массивы
- •Листинг 5.11. Инициализация таблицы
- •Листинг 5.12. Обработка двумерного массива
- •Ошибки при использовании массивов
Листинг 5.11. Инициализация таблицы
procedure TForml.FormActivate(Sender: TObject); begin
tabl.Cells[0,0] ='Страна';
tabl.Cells[1,0] ='Золотых';
tabl.Cells[2,0] ='Серебряных';
tabl.Cells[3,0] ='Бронзовых';
tabl.Cells[4,0] ='Bcero';
tabl.Cells[5,0] ='Баллов';
tabl.Cells[0,1] ='Австралия';
tabl.Cells[0,2] ='Белоруссия';
tabl.Cells[0,3] ='Великобритания';
tabl.Cells[0,4] ='Германия';
tabl.Cells[0,5] ='Италия';
tabl.Cells[0,6] ='Китай';
tabl.Cells[0,7] ='Корея';
tabl.Cells[0,8] ='Куба';
tabl.Cells[0,9] ='Нидерланды';
tabl.Cells[0,10]— 'Россия';
tabl.Cells[0,ll]:='США';
tabl,Cells[0,12]:='Франция';
tabl.Cells[0,13]:='Япония'; end;
Программа обработки исходной таблицы (листинг 5.12) запускается щелчком мыши на командной кнопке Итоги (Buttoni).
Листинг 5.12. Обработка двумерного массива
procedure TForml.ButtonlClick(Sender: TObject);
var
c,r:integer; // номер колонки и строки таблицы
s:integer; // всего медалей у команды
р:integer; // очков у команды
m:integer; // номер строки с максимальным количеством очков
buf:array[0..5] of string; // буфер для обмена строк
i:integer; // номер строки. Используется во время сортировки
begin
for r:=l to tab1.rowcount do // обработать все строки
begin s:=0;
// вычисляем общее кол-во медалей
for c:=l to 3 do
if tabl.cells[c,r] <>''
then s:=s+StrToInt(tab1.cells[c,r])
else tabl.cells[c,r]:='0'; // вычисляем количество очков
p:=7*StrToInt(tab1.cells[l,r])+
6*StrToInt(tabl.cells[2, r] )
+ 5*StrToInt(tabl.cells[3,r]};
// вывод результата
tabl.cells[4,r]:=IntToStr(s); // всего медалей
tabl.cells[5,r]:=IntToStr(p); // очков
end;
// сортировка таблицы по убыванию в соответствии
// с количеством баллов (по содержимому 5-го столбца)
// сортировка методом выбора
for r:=l to tab1.rowcount-1 do
begin
m:=r; // максимальный элемент — в r-й строке
for i:=r to tabl.rowcount-1 do
if StrToInt(tabl.cells[5,i])>StrToInt(tabl.cells[5,m])
then m:=i;
if r <> m then
begin // обменяем г-ю и m-ю строки таблицы
for c:=0 to 5 do begin
buf[с]:=tab1.Cells[c,r];
tab1.Cells[c,r]:=tabl.Cells[c,m];
tab1.Cells[c,m]:=buf[c];
end;
end;
end;
end;
Сначала для каждой страны программа вычисляет общее количество медалей и соответствующее количество очков. Затем, используя метод простого выбора, программа выполняет сортировку таблицы по убыванию количества набранных очков. Во время сортировки для обмена строк таблицы используется строковый массив buf, индекс которого, как и индекс столбца таблицы, меняется от нуля до пяти (см. инструкцию объявления массива в тексте программы). Такой прием позволяет наиболее просто выполнить копирование замещаемой строки в буфер и замещение строки содержимым буфера.
На рис. 5.21 приведено диалоговое окно программы после завершения процесса обработки массива.
Рис. 5.21. Окно программы Итоги олимпиады
Ошибки при использовании массивов
При использовании массивов наиболее распространенной ошибкой является выход значения индексного выражения за допустимые границы, указанные при объявлении массива.
Если в качестве индекса используется константа, и ее значение выходит за допустимые границы, то такая ошибка обнаруживается на этапе компиляции программы. Например, если в программе объявлен массив
day : array[0..6] of string[ll],
то во время компиляции программы инструкция
day [7] := 'Воскресенье';
будет помечена как ошибочная.
Если для доступа к элементу массива в качестве индекса используется переменная или выражение, то возможно возникновение ошибки (исключения) времени выполнения программы. Например, если в программе объявлен массив
tab1: array [1..N] of integer;
то инструкция
for i:=0 to N do tab1[i] := 5;
формально является верной, и ее компиляция будет успешно выполнена.
Однако во время выполнения программы, при попытке присвоить значение несуществующему нулевому элементу массива tab, на экран будет выведено сообщение об ошибке. Вид окна и текст сообщения зависит от того, откуда запущена программа.
При запуске рассматриваемой программы из Delphi возникает исключение, и сообщение имеет вид, приведенный на рис. 5.22.
Рис. 5.22. Сообщение об ошибке при обращении к несуществующему элементу массива (программа запущена из Delphi)
Если программа запущена из Windows, то при попытке присвоить значение несуществующему элементу массива на экран будет выведено сообщение Range check error (ошибка контроля диапазона). В заголовке окна будет указано имя приложения, в процессе выполнения которого произошла ошибка (рис. 5.23).
Рис. 5.23. Сообщение об ошибке при обращении к несуществующему элементу массива (программа запущена из Windows)
Поведение программы при выходе индексного выражения за границы диапазона допустимых значений определяется настройкой компилятора.
Для того чтобы программа контролировала значения индексных выражений (в этом случае Delphi добавляет в выполняемую программу инструкции, обеспечивающие этот контроль), необходимо на вкладке Compiler диалогового окна Project Options, которое открывается выбором из меню Project команды Options, установить флажок Range checking (Контроль диапазона), находящийся в группе Runtime errors (Ошибки времени выполнения) (рис. 5.24).
Рис. 5.24. Вкладка Compiler диалогового окна Project Options