Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование delphi.doc
Скачиваний:
806
Добавлен:
09.02.2015
Размер:
2.97 Mб
Скачать

4.2. Создание программы «Работа с массивом»

Задача. Необходимо сгенерировать матрицу случайных чисел размерностью 5 на 5 и в соответствии с имеющимся шаблоном сформировать итоговый массив по следующему правилу: если в шаблоне позиция зачернена, то в этой позиции в итоговую матрицу записывается число из той же позиции из исходной матрицы, иначе записывается 0.

Примерный вид окна программы представлен на рис. 4.3.

Процесс создания программы происходит по следующему алгоритму:

  1. Запустить Delphi.

  2. Сохранить проект («work4.dpr» и «main.pas»).

  3. Настроить окно проекта:

        • изменить заголовок окна на «Работа с массивом»  Caption;

        • сформировать изображение шаблона массива:

          • поместить на форму элементфигура (элемент Shape, вкладка Additional, значок );

          • настроить размеры фигуры, чтобы можно было из них построить квадрат размером 5 на 5 фигур. Для этого изменить свойства фигуры Width – ширина и Heightвысота;

          • скопировать элемент в буфер (<Ctrl><С>);

          • сделать 24 копии (<Shift><V>);

          • разместить квадратики в квадрат 55;

          • выделить средний квадрат размером 33 (удерживая <Shift> щелкать на нужных квадратиках) – выделенные квадратики будут отмечены рамочкой ;

          • изменить цвет выделенного квадрата на красный (свойство Shape/Color установить в значение clRed);

  • поместить 2 элемента для хранения массивов:

    • поместить на форму 2 элемента строковая таблица (StringGrid,Additional, ), разместив их слева (начальная матрица) и справа (итоговая матрица) от построенного шаблона;

    • настроить имена этих элементов SGIshod и SGItog для хранения исходного и итогового массивов соответственно (Name);

    • остальные настройки этих двух элементов будут совпадать – выделить эти 2 элемента;

    • настроить размеры таблиц (55 количество квадратиков и заголовки – итого размер 66) (свойства ColCount (количество столбцов) и RowCount (количество строк) установить в значение 6);

    • так как в ячейки будут записаны цифры размером 88 пикселей, изменить размеры ячеек на значение 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);

  • форма готова!

  1. Запрограммировать выход на кнопку BQuit (команда Close).

  2. Запрограммировать свойство формы 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;

  • проанализировать полученный шаблон – в данном случае структура массивов представляет квадрат и легко описывается циклом с параметром;

  • алгоритм обработки массива будет следующим:

    • обнулить массив шаблона;

    • обнулить итоговый массив;

    • заполнить массив шаблона единицами в позициях заданного шаблона (центральный квадрат размером 33);

    • заполнить случайными числами из диапазона 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 написать самостоятельно. Поместить созданный текст алгоритма после строки {Массив ещё не отсортирован}.

  1. Для того чтобы программу можно было запускать на расчет многократно, связать команду onClick кнопки BOk с командой onActivate (в поле команды onClick в Инспекторе объектов выбрать процедуру FormActivate).

  2. Запустить программу <F9>.

  3. Программа готова!