Внастоящее время в компьютерном мире существует множество языков программирования

Вид материалаДокументы

Содержание


4.2. Создание программы «работа с массивом»
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   ...   16

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


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

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

Процесс создания программы происходит по следующему алгоритму:
  1. Запустить Delphi;
  2. Сохранить проект («work4.dpr» и «main.pas»);
  3. Настроить окно проекта:
        • Изменить заголовок окна на «Работа с массивом»  Caption;
        • Сформировать изображение шаблона массива:
          • Поместить на форму элемент фигура (элемент Shape, вкладка Additional, значок );
          • Настроить размеры фигуры, чтобы можно было из них построить квадрат размером 5 на 5 фигур. Для этого изменить свойства фигуры Width – ширина и Height – высота;
          • Скопировать элемент в буфер (<Ctrl><Ins>);
          • Сделать 24 копии (<Shift><Ins>);
          • Разместить квадратики в квадрат 5х5;
          • Выделить средний квадрат размером 3х3 (удерживая <Shift> щелкать на нужных квадратиках) – выделенные квадратики будут отмечены рамочкой ;
          • Изменить цвет этого выделенного квадрата на красный (свойство Shape/Color установить в значение clRed);
  • Поместить 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;
  • Поместить элементы для вывода не отсортированного массива и отсортированного:
    • Для не отсортированного массива использовать элемент метка (Label,Standard,);
    • Назвать элемент LSort (Name);
    • Для отсортированного массива использовать элемент строка ввода (Edit,Standard,);
    • Назвать элемент ESort (Name);
  • Поместить метки для подписи всех видимых элементов «Исходный массив», «Итоговый массив», «Шаблон», «Не отсортированный массив» и «Отсортированный массив»(Label, Standard, );
  • Добавить кнопки запуска расчетов и выхода из программы:
    • Добавить 2 элемента Кнопка (Button, Standard,);
    • Назвать один «BOk» (расчет) и «BQuit» (выход) (Name);
  • Форма готова!
  1. Запрограммировать выход на кнопку BQuit (команда Close);
  2. Для отображения первого результата расчета сразу после запуска программы, то есть при её активизации запрограммируем свойство формы 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] и т.д. Эту операцию также легко сделать, используя двойной цикл по параметрам цикла двухмерного массива и внутри цикла изменяя параметр цикла одномерного массива. Текст программы дополниться после строки «{окончание заполнения массива}» следующими строками:

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 в Object Inspector выбрать процедуру FormActivate);
  2. Запустить программу <F9>;
  3. Программа готова!