- •Введение
- •1. Знакомство со средой программирования BorlandDelphi
- •Некоторые команды редактора. При написании программы можно использовать следующие комбинации клавиш для упрощения набора текста:
- •1.2. Создание программы «Моя первая программа»
- •2. Условные операторы
- •2.1. Теоретические сведения
- •Условные операторы. Условный оператор позволяет выбирать одно из двух действий, причем выбор осуществляется во время выполнения программы. Существует 2 вида условных операторов:
- •2.2. Создание программы «Попадание точки в фигуру»
- •Индивидуальное задание
- •3. Операторы цикла
- •3.1. Теоретические сведения Стандартные функции. Для выполнения часто встречающихся вычислений и преобразования данных в Object Pascal существуют стандартные функции.
- •Отладка программы. При построении сложных программ могут возникать ошибки. Их принято делить на 3 группы:
- •3.2. Создание программы «Степенные ряды»
- •Индивидуальное задание
- •4. Тип данных массив
- •4.1. Теоретические сведения
- •Типичные действия с массивом. Вывод массива; ввод массива; поиск максимального или минимального элемента массива; поиск в массиве заданного элемента; сортировка массива.
- •4.2. Создание программы «Работа с массивом»
- •Индивидуальное задание
- •5. Графические примитивы
- •5.2. Создание программы «Графические примитивы»
- •Индивидуальное задание
- •Стандартные диалоговые окна. Для вывода различных сообщений можно использовать стандартные диалоговые окна Delphi. Диалоговые окна запускаются командой:
- •6.2. Создание программы «Редактор текста»
- •Индивидуальное задание
- •7. Работа с базами данных
- •7.1. Теоретические сведения
- •7.2. Создание программы «Список студентов»
- •Индивидуальное задание
- •8. Выполнение курсового проекта
- •8.1. Варианты курсовых работ
- •Заключение
- •Список рекомендуемой литературы
4.2. Создание программы «Работа с массивом»
Задача. Необходимо сгенерировать матрицу случайных чисел размерностью 5 на 5 и в соответствии с имеющимся шаблоном сформировать итоговый массив по следующему правилу: если в шаблоне позиция зачернена, то в этой позиции в итоговую матрицу записывается число из той же позиции из исходной матрицы, иначе записывается 0.
Примерный вид окна программы представлен на рис. 4.3.
Процесс создания программы происходит по следующему алгоритму:
Запустить Delphi.
Сохранить проект («work4.dpr» и «main.pas»).
Настроить окно проекта:
изменить заголовок окна на «Работа с массивом» Caption;
сформировать изображение шаблона массива:
поместить на форму элементфигура (элемент Shape, вкладка Additional, значок );
настроить размеры фигуры, чтобы можно было из них построить квадрат размером 5 на 5 фигур. Для этого изменить свойства фигуры Width – ширина и Height – высота;
скопировать элемент в буфер (<Ctrl><С>);
сделать 24 копии (<Shift><V>);
разместить квадратики в квадрат 55;
выделить средний квадрат размером 33 (удерживая <Shift> щелкать на нужных квадратиках) – выделенные квадратики будут отмечены рамочкой ;
изменить цвет выделенного квадрата на красный (свойство Shape/Color установить в значение clRed);
поместить 2 элемента для хранения массивов:
поместить на форму 2 элемента строковая таблица (StringGrid,Additional, ), разместив их слева (начальная матрица) и справа (итоговая матрица) от построенного шаблона;
настроить имена этих элементов SGIshod и SGItog для хранения исходного и итогового массивов соответственно (Name);
остальные настройки этих двух элементов будут совпадать – выделить эти 2 элемента;
настроить размеры таблиц (55 количество квадратиков и заголовки – итого размер 66) (свойства ColCount (количество столбцов) и RowCount (количество строк) установить в значение 6);
так как в ячейки будут записаны цифры размером 88 пикселей, изменить размеры ячеек на значение 16 (ширину (DefaultColWidth) и высоту (DefaultColHeight));
изменить размеры (свойства Width и Height установить в значение 110);
настроить заголовок строк и столбцов каждой таблицы. Для их выделения можно использовать цвет, например «ярко-голубой» (FixedColor установить в clAqua);
изменить размер шрифта, используемого в таблицах, на 8 (Font/Size);
изменить свойство ScrollBars на ssNone, для того чтобы при выводе цифр не появлялся скроллер;
поместить на форму элементы для вывода неотсортированного и отсортированного массивов:
для неотсортированного массива использовать элемент метка (Label,Standard,);
назвать элемент LSort (Name);
для отсортированного массива использовать элемент строка ввода (Edit,Standard,);
назвать элемент ESort (Name);
поместить метки для подписи всех видимых элементов: «Исходный массив», «Итоговый массив», «Шаблон», «Неотсортированный массив» и «Отсортированный массив» (Label, Standard, );
добавить кнопки запуска расчетов и выхода из программы:
добавить 2 элемента Кнопка (Button, Standard,);
назвать один «BOk» (расчет) и «BQuit» (выход) (Name);
форма готова!
Запрограммировать выход на кнопку BQuit (команда Close).
Запрограммировать свойство формы onActivate для отображения первого результата расчета сразу после запуска программы, т. е. при её активизации:
сделать активной форму – щелкнуть на окне на свободном от элементов месте;
выбрать в Инспекторе объектов на вкладке Events свойство onActivate;
дважды щелкнуть на нем для начала ввода текста программы;
ввести раздел переменных и сами переменные: параметры цикла I,J,K; массивы –исходный MIs, итоговый MIt, для описания шаблона MSh (элементы, отмеченные цветом, будут иметь значение 1, остальные 0), одномерный массив для сортировки Mass. Необходимо ввести следующие строки перед оператором begin:
Var
I,J,K : Integer;
MIs, MIt, MSh : array [1..5,1..5] of Integer;
Mass : array [1..25] of Integer;
перед заполнением массива запустить генератор псевдослучайных чисел – после слова begin –добавить оператор Randomize;
пронумеровать заголовки строк и столбцов цифрами от 1 до 5. Для этих целей удобно использовать цикл с параметром. При обращении к элементам таблицы (StringGrid) необходимо указать через точку свойство Cells. Это свойство является двухмерным массивом и позволяет хранить значения используемого массива. Нумерация индексов массива Cells начинается с 0, причем нулевые элементы – это элементы заголовков; первый индекс – это столбец, второй – строка. Текст программы будет следующим:
Randomize;
For I := 1 to 5 do
begin
{Элемент таблицы «строка» – требуется преобразование типов}
SGIshod.Cells[0,I] := IntToStr(I); {Пронумеровали строки}
SGIshod.Cells[I,0] := IntToStr(I); {Пронумеровали столбцы}
SGItog.Cells[0,I] := IntToStr(I); {Пронумеровали строки}
SGItog.Cells[I,0] := IntToStr(I); {Пронумеровали столбцы}
end;
проанализировать полученный шаблон – в данном случае структура массивов представляет квадрат и легко описывается циклом с параметром;
алгоритм обработки массива будет следующим:
обнулить массив шаблона;
обнулить итоговый массив;
заполнить массив шаблона единицами в позициях заданного шаблона (центральный квадрат размером 33);
заполнить случайными числами из диапазона 1…9 исходный массив, используя оператор Random, но так как он возвращает числа, начиная от 0, необходимо к сгенерированному числу прибавлять 1 – команда «Random(9)+1» как раз и будет генерировать числа от 1 до 9;
просматривая исходный массив, в соответствии с правилом заполнить итоговый массив;
отобразить полученный итоговый массив в элементе SGItog;
выполнив эти пункты, получим следующий текст программы:
{Обнуляем итоговый массив и массив шаблона}
For I := 1 to 5 do
For J := 1 to 5 do
begin
MSh[I,J] := 0;
MIt[I,J] := 0;
end;
{Заполняем массив шаблона}
For I := 2 to 4 do
For J := 2 to 4 do
MSh[I,J] := 1;
{Заполняем итоговый массив и отображаем его}
For I := 1 to 5 do
For J := 1 to 5 do
begin
MIs[I,J] := Random(9)+1;
SGIshod.Cells[I,J] := IntToStr(MIs[I,J]);
end;
{Заполняем по шаблону итоговый массив и отображаем его}
For I := 1 to 5 do
For J := 1 to 5 do
begin
If MSh[I,J] = 1 then MIt[I,J] := MIs[I,J];
SGItog.Cells[I,J] := IntToStr(MIt[I,J]);
end;
{Окончание заполнения массива}
для реализации алгоритма сортировки массива необходимо:
перевести двухмерный массив в одномерный – пусть элемент с индексом [1,1] будет иметь индекс [1], [1,2] – [2], [1,3] – [3], [1,4] – [4], [1,5] – [5], [2,1] – [6], [2,2] – [7] и т. д. Эту операцию также легко выполнить, используя двойной цикл по параметрам цикла двухмерного массива и внутри цикла изменяя параметр цикла одномерного массива. Текст программы дополнится после строки «{Окончание заполнения массива}» следующими строками:
k := 0;
For I := 1 to 5 do
For J := 1 to 5 do
begin
Inc(k);
Mass[k] := MIs[J,I];
end;
вывести массив в поле вывода, задаваемое меткой LSort (сначала строку сделать «пустой», а затем, чтобы цифры при выводе не сливались, добавить после каждой цифры пробел):
Lsort.Caption := ‘’;
For I:=1 to 25 do LSort.Caption := LSort.Caption+IntToStr(Mass[I])+ ‘ ’;
{Массив ещё не отсортирован}
алгоритм сортировки массива Mass написать самостоятельно. Поместить созданный текст алгоритма после строки {Массив ещё не отсортирован}.
Для того чтобы программу можно было запускать на расчет многократно, связать команду onClick кнопки BOk с командой onActivate (в поле команды onClick в Инспекторе объектов выбрать процедуру FormActivate).
Запустить программу <F9>.
Программа готова!