Внастоящее время в компьютерном мире существует множество языков программирования
Вид материала | Документы |
Содержание4.2. Создание программы «работа с массивом» |
- Календарный план учебных занятий по дисциплине «Языки и технология программирования», 43.35kb.
- Лекция №3. Состав и работа системы программирования Турбо Паскаль Язык программирования, 84.43kb.
- Лекция 3 Инструментальное по. Классификация языков программирования, 90.16kb.
- Внастоящее время существует большой социальный заказ на психологические методы профилактики, 117.85kb.
- Методические указания для выполнения лабораторных работ и курсовой работы содержание, 1317.09kb.
- Программа дисциплины Языки и технологии программирования Семестры, 20.19kb.
- Теория автоматов и формальных языков составил доцент А. А. Мальцев, 38.01kb.
- Внастоящее время в мире повсеместно и во все более разрастающихся масштабах происходит, 373.75kb.
- Вмире существует множество замечательных повестей, романов, рассказов и стихов, главными, 21kb.
- Пояснительная записка, 185.11kb.
4.2. Создание программы «работа с массивом»
Задача: Необходимо сгенерировать матрицу случайных чисел размерностью 5 на 5 и в соответствии с имеющимся шаблоном сформировать итоговый массив по следующему правилу: если в шаблоне позиция зачернена, то в этой позиции в итоговую матрицу записывается число из той же позиции из исходной матрицы, иначе записывается 0.
Примерный вид окна программы представлен на рис.4.3.
Процесс создания программы происходит по следующему алгоритму:
- Запустить Delphi;
- Сохранить проект («work4.dpr» и «main.pas»);
- Настроить окно проекта:
- Изменить заголовок окна на «Работа с массивом» Caption;
- Сформировать изображение шаблона массива:
- Поместить на форму элемент фигура (элемент Shape, вкладка Additional, значок );
- Настроить размеры фигуры, чтобы можно было из них построить квадрат размером 5 на 5 фигур. Для этого изменить свойства фигуры Width – ширина и Height – высота;
- Скопировать элемент в буфер (<Ctrl><Ins>);
- Сделать 24 копии (<Shift><Ins>);
- Разместить квадратики в квадрат 5х5;
- Выделить средний квадрат размером 3х3 (удерживая <Shift> щелкать на нужных квадратиках) – выделенные квадратики будут отмечены рамочкой ;
- Изменить цвет этого выделенного квадрата на красный (свойство Shape/Color установить в значение clRed);
- Поместить на форму элемент фигура (элемент Shape, вкладка Additional, значок );
- Поместить 2 элемента для хранения массивов:
- Поместить на форму 2 элемента строковая таблица (StringGrid,Additional, ), разместив их слева (начальная матрица) и справа (итоговая матрица) от построенного шаблона;
- Настроить имена этих элементов SGIshod и SGItog для хранения исходного и итогового массива соответственно (Name);
- Остальные настройки этих двух элементов будут совпадать – выделить эти два элемента;
- Н
астроить размеры таблиц (5х5 количество квадратиков и заголовки - итого размер 6х6) (свойства ColCount (количество столбцов) и RowCount (количество строк) установить в значение 6);
- Так как, в ячейки будут записаны цифры размером 8х8 пикселей изменить размеры ячеек на значение 16 ширину (DefaultColWidth) и высоту (DefaultColHeight);
- Изменить размеры (свойства Width и Height установить в значение 110);
- Каждая табличка имеет заголовок строк и столбцов. Для их выделения можно использовать цвет, например «ярко голубой» (FixedColor установить в clAqua);
- Изменить размер шрифта, используемого в табличках, на 8 (Font/Size);
- Для того, чтобы при выводе цифр не появлялся скроллер изменить свойство ScrollBars на ssNone;
- Поместить на форму 2 элемента строковая таблица (StringGrid,Additional, ), разместив их слева (начальная матрица) и справа (итоговая матрица) от построенного шаблона;
- Поместить элементы для вывода не отсортированного массива и отсортированного:
- Для не отсортированного массива использовать элемент метка (Label,Standard,);
- Назвать элемент LSort (Name);
- Для отсортированного массива использовать элемент строка ввода (Edit,Standard,);
- Назвать элемент ESort (Name);
- Для не отсортированного массива использовать элемент метка (Label,Standard,);
- Поместить метки для подписи всех видимых элементов «Исходный массив», «Итоговый массив», «Шаблон», «Не отсортированный массив» и «Отсортированный массив»(Label, Standard, );
- Добавить кнопки запуска расчетов и выхода из программы:
- Добавить 2 элемента Кнопка (Button, Standard,);
- Назвать один «BOk» (расчет) и «BQuit» (выход) (Name);
- Добавить 2 элемента Кнопка (Button, Standard,);
- Форма готова!
- Запрограммировать выход на кнопку BQuit (команда Close);
- Для отображения первого результата расчета сразу после запуска программы, то есть при её активизации запрограммируем свойство формы onActivate:
- Сделать активной форму – щелкнуть на окне на свободном от элементов месте;
- Выбрать в Object Inspector на вкладке 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, причем нулевые элементы это элементы заголовков; первый индекс – это столбец, второй строка; После выполнения пунктов «e» и «f», текст программы будет следующим:
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;
- Проанализировать полученный шаблон – в нашем случае структура массивов представляет квадрат и легко описывается циклом с параметром;
- Алгоритм обработки массива будет следующим:
- Обнуление массива шаблона;
- Обнуление итогового массива;
- Заполнение массива шаблона единицами в позициях заданного шаблона (центральный квадрат размером 3х3);
- Заполнение случайными числами исходного массива. Для этого будем использовать оператор 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] и т.д. Эту операцию также легко сделать, используя двойной цикл по параметрам цикла двухмерного массива и внутри цикла изменяя параметр цикла одномерного массива. Текст программы дополниться после строки «{окончание заполнения массива}» следующими строками:
- Перевести двухмерный массив в одномерный – пусть элемент с индексом [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 в Object Inspector выбрать процедуру FormActivate);
- Запустить программу <F9>;
- Программа готова!