Задание к лабораторной работе




Работа со структурами данных типа массив

Объекты: Form, StringGrid, Button, кнопка BitBtn

Теоретические сведения.

Таблица строк StringGrid.

Для ввода и вывода массивов удобно использовать компонент StringGrid. Этот компонент находится на вкладке Additional.

В таблице StringGrid может находиться произвольное число строк и столбцов. Если зафиксировать необходимое количество первых строк и столбцов, то можно задать заголовки строк и столбцов, постоянно присутствующие в окне компонента, в том числе при горизонтальном и вертикальном скролинге.

На пересечении строк и столбцов находятся ячейки. Каждая ячейка может содержать символьную строку или произвольный объект, ассоциируемый с ячейкой. Чаще всего таким объектом является некоторый рисунок. Если для ячеек задан режим редактирования, то на этапе выполнения программы разрешается вводить и редактировать, данные находящиеся в ячейке.

Нумерация строк и столбцов таблицы начинается с нуля. Координаты каждой ячейки таблицы задаются парой чисел, первое из которых является номером столбца, а второе – номером строки. Например, ячейка Cells[3, 5] расположена в четвертом столбце ишестойстроке.

Свойство Описание свойства
Name Имя компонента. Используется в программе для доступа к свойствам компонента
Cells Соответствующий таблице двумерный строковый массив. Если строки и столбцы таблицы нумеровать с нуля, то ячейке (Cell) таблицы, находящейся на пересечении i-й колонки и j-й строки соответствует Cells[i,j] элемент массива
ColCount Задает число столбцов в таблице
RowCount Задает число строк в таблице
FixedCols Задает число фиксированных столбцов таблице, которые не прокручиваются слева. По умолчанию задается один фиксированный столбец
FixedRows Задает число фиксированных строк таблице, которые не прокручиваются вверх. По умолчанию задается одна фиксированная строка.
Options Свойство является множеством, определяющим многие свойства таблицы.
Options.goEditing Признак допустимого редактирования содержимого ячеек таблицы
Options.goColSizing, Options.goRowSizing Возможность для пользователя изменять с помощью мыши размеры столбцов и строк
DefaultColWidth Ширина колонок
DefaultRowHeight Высота строк
GridLineWidth Ширина линий ограничивающих ячейки таблицы
Left Расстояние от левой границы поля таблицы до левой границы формы  
Top Расстояние от верхней границы поля таблицы до верхней границы формы  
Height Высота поля таблицы
Width Ширина поля таблицы
Font Шрифт, используемый для отображения содержимого ячеек

Компонент BitBtn – кнопка с рисунком и определенным типом действия. Стандартный набор файлов с рисунками для кнопок находится в папке C:\Program Files\Borland\Images\Buttons. Этот компонент обладает такими свойствами:

Свойство Описание свойства Примеры значении
Glyph Рисунок из файла на кнопке Адрес файла задается в диалоговом окне
Kind Тип стандартного действия bkClose (закрывает окно), bkCancel (кнопка "Отменить" диалогового окна), bkNo (кнопка "Нет" диалогового окна)

Далее приведен пример работы с компонентом StringGrid. Задание на лабораторную работу притведено после примера.

Ход работы

1. Для создания нового проекта можно воспользоваться командой главного меню File New | Application либо, если вы только что загрузили среду Delphi, можно, сразу приступать, к созданию нового проекта.

2. Откажитесь от возможности изменять окна программы, указав значение свойства формы BorderStyle на bsDilog. При запуске программы обратите внимание на отсутствие кнопок для минимизации максимизации окна. Рассмотрите другие свойства и чем они отличаются.

3. Свойству Caption для Form1 задайте значение – Лабораторная работа №5. Работа с массивами.

4. Со вкладки Additional на Form1 поместим три компонента StringGrid.

Зададим следующие значения

Свойство Значение
StringGrid1 StringGrid2 StringGrid3
Name SG1 SG2 SG3
ColCount      
RowCount      
FixedCols      
FixedRows      
DefaultColWidth      
Options.goEditing (возможность редактировать) True (имеется) True (имеется) False (отсутствует)

Замечание. Чтобы открыть список свойства Options (Параметры) объекта, надо дважды щелкнуть на этом слове в окне Object Inspector данного объекта.

5. Со вкладки Standard на Form1 поместим два компонента Button. Свойству Caption для Button1 задайте значение – &Вычислить. Свойству Caption для Button2 задайте значение – &Очистить.

Замечание. Символ & в заголовке кнопки указывает на то, что эту кнопку можно нажать также с помощью «горячей» комбинации клавиш Alt + Shift+ буква заголовка, перед которой стоит этот символ (т.е. в нашем случае Alt +Shift + 3).

6. Со вкладки Additional на Form1 поместим командную кнопку BitBtn. Кнопки такого типа владеют свойством Kind (стандартное действие) с возможными значениями bkClose (Закрыть), bkCancel (Отменить), bkYes (Да), bkNo (Нет), bkHelp (Помощь) и другими. На них также могут быть расположены пиктограммы. Если задать стандартное действие, то данную кнопку программировать не нужно. Задайте следующие свойства для вставленного объекта:

Свойство Значение
Kind bkClose
Caption &3акрыть

7. Сохраним проект в отдельной папке.

8. Ячейки первой, зафиксированной, строки и первого, зафиксированного, столбца таблицы используются в качестве заголовков колонок и строк таблиц. Во время создания (проектирования) формы приложения установить значения элементов массива Cells нельзя, так как элементы массива доступны только во время работы программы. Поэтому значения элементов массива Cells, соответствующих первой строке и первому столбцу таблиц, устанавливает процедура обработки события onActivate, которое происходит во время обработки формы приложения. Кроме этого процедура вписывает в первые строки и первые столбцы таблиц их заголовки.

Запрограммируем процедуру onActivate

Для того чтобы запрограммировать процедуру обработки события onActivateнеобходимо чтобы в Object Inspector в списке компонент текущей формы стояла надпись:

Form1   TForm1  

Тогда на вкладке Events в столбце названий событий находим событие onActivate. Этому стандартному событию соответствует название метода (FormActivate), которое появится после двойного щелчка мыши в правом столбце (столбец названий обработчиков событий). В этот момент в окно текста программы добавляется шаблон базового кода (процедуры) для этого метода. Шаблон необходимо заполнить соответствующими командами.

procedure TForm1.FormActivate(Sender: TObject);

var I:byte;

begin

//Для SG1

//Записываем символ X в ячейку находящуюся

//в первом столбике и первой строке ячейка - Cells [0,0]

SG1.Cells[0,0]:=' X ';

//Ячейка Cells[0,l] указывает на количество строк

//т.е. массив одномерный

SG1.Cells[0,1]:='Row N 1';

//Заполняются заголовки столбцов

For i:=1 to SG1.ColCount-1 do

SG1.Cells[i,0]:='Col N'+IntToStr(i);

//Для SG2

SG2.Cells[0,0]:=' Y ';

SG2.Cells[0,1]:='Row N 1';

For i:=1 to SG2.ColCount-1 do

SG2.Cells[i,0]:='Col N'+IntToStr(i);

//Для SG3

SG3.Cells[0,0]:=' X+Y ';

//Заполняются заголовки столбцов

fOR i:=1 to SG3.ColCount-1 do

SG3.Cells[i,0]:='Col N'+IntToStr(i);

//Заполняются заголовки строк

fOR i:=1 to SG3.RowCount-1 do

SG3.Cells[0,i]:='Row N'+IntToStr(i);

end;

9. Запрограммируем кнопку «В ычислить».

procedure TForm1.Button1Click(Sender: TObject);

Const N=6;M=4;

var i,j:byte;

x:array [1..N]of integer;

y:array [1..M]of integer;

z:array [1..N,1..M]of integer;

begin

//Заполняем первую таблицу SG1 - массив Х

fOR i:=1 to SG1.ColCount-1 do

x[i]:=StrToInt(SG1.Cells[i,1]);

//Заполняем первую таблицу SG2 - массив У

fOR j:=1 to SG2.ColCount-1 do

y[j]:=StrToInt(SG2.Cells[j,1]);

//Вычисляем сумму двух векторов

fOR i:=1 to N do

fOR j:=1 to M do

begin

z[i,j]:=x[i]+y[j];

SG3.Cells[j,i]:=IntToStr(z[i,j]);

end;

end;

Для решения этой задачи можно было не использовать промежуточные массивы, а работать прямо с ячейками таблиц:

fOR i:=1 to SG1.ColCount-1 do

fOR j:=1 to SG2.ColCount-1 do

SG3.Cells[j,i]:=IntToStr(StrToInt(SG1.Cells[i,1])+StrToInt(SG2.Cells[j,1]));

10. Запрограммируем кнопу «О чистить». Необходимо очистить ячейки всех трех таблиц.

procedure TForm1.Button2Click(Sender: TObject);

var i,j:byte;

begin

with SG1 do

for i:=1 to ColCount do Cells[i,1]:=' ';

with SG2 do

for i:=1 to ColCount do Cells[i,1]:=' ';

with SG3 do

for i:=1 to RowCount do

for j:=1 to ColCount do Cells[j,i]:=' ';end;

 
 

 

Задание к лабораторной работе

Разместить на форме четыре таблицы StringGrid –две матрицы (до и после сортировки) и два одномерных массива, которые строятся по заданному правилу из элементов матрицы (до и после сортировки). Типы и количество кнопок аналогично описанной выше задаче.

Ввести матрицу с использованием генератора случайных чисел. Отобразить числа в первой таблице StringGrid.

Выполнить сортировку матрицы по заданному условию и результат вывести в четвертую таблицу StringGrid. В таблицах запретить возможность редактирования ячеек.

Промежуточные результаты (одномерные массивы) в таблицах два и три.

Случайные числа

В системе генерации случайных чисел используются процедура Randomize и функция Random.

Процедура Randomize инициализирует генератор случайных чисел. Синтаксис вызова имеет следующий вид:

Randomize;

Эта процедура читает значение системных часов и применяет его в качестве стартового значения, задающего всю дальнейшую последовательность случайных чисел. Эта процедура позволяет при последовательных запусках программы получать различные случайные последовательности. Таким образом происходит переустановка базы генерации случайных чисел.

Строго говоря, последовательность чисел является не случайной, а псевдослучайной, так как, начав с того же стартового значения, можно повторить всю последовательность случайных чисел.

Для получения псевдослучайных чисел используется функция Random. Синтаксис ее вызова имеет следующий вид:

случайное_число:= Random(верхняя_граница);

Этот оператор присвативает переменной случайное_число равномерно распределенное случайное значение типа Integer, находящееся в диапазоне от нуля до верхняя_граница, т.е. [0, верхняя_граница).

Параметр верхняя_граница необязателен. В этом случае генератор полагает, что верхняя_граница равна 1, т.е. функция возвращает случайное вещественное число из промежутка [0, 1).

Случайные целые числа, принадлежащие отрезку [ а, b ], вычисляют по формуле а + Random(ba + 1).

Замечание. Не комбинируйте вызов процедуры Randomize в циклах вместе с обращением к функции Random. Обычно процедура Randomize вызывается только один раз до вызова функции Random (т.е. до цикла).

Сортировка массивов

Сортировка массива – это перерасположение элементов массива в заданном порядке.

При решении задачи сортировки обычно выдвигается требование минимального использования дополнительной памяти, из которого вытекает недопустимость применения дополнительных массивов.

Для оценки быстродействия алгоритмов различных методов сортировки, как правило, используют два показателя:

- количество присваиваний;

- количество сравнений.

Все методы сортировки можно разделить на две большие группы:'

- прямые методы сортировки;

- улучшенные методы сортировки.

Прямые методы сортировки по принципу, лежащему в основе метода, в свою очередь разделяются на три подгруппы:

1) сортировка вставкой (включением);

2) сортировка выбором (выделением);

3) сортировка обменом ("пузырьковая" сортировка).

Улучшенные методы сортировки основываются на тех же принципах, что и прямые, но используют некоторые оригинальные идеи для ускорения процесса сортировки. Прямые методы на практике используются довольно редко, так как имеют относительно низкое быстродействие. Однако они хорошо показывают суть основанных на них улучшенных методов. Кроме того, в некоторых случаях (как правило, при небольшой длине массива и/или особом исходном расположении элементов массива) некоторые из прямых методов могут даже превзойти улучшенные методы.

Сортировка вставкой

Принцип метода:

Массив разделяется на две части: отсортированную и неотсортированную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве неотсортированной части – все остальные элементы

Таким образом, алгоритм будет состоять из n-1-го прохода (n – размерность массива), каждый из которых будет включать четыре действия:

- взятие очередного i-го неотсортированного элемента и сохранение его в дополнительной переменной,

- поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов;

- сдвиг элементов массива от i-1-гo до j-го вправо, чтобы освободить найденную позицию вставки;

- вставка взятого элемента в найденную j-ю позицию.

Для реализации данного метода можно предложить несколько алгоритмов, которые будут отличаться способом поиска позиции вставки. Наиболее оптимальным является алгоритм, объединяющий в одном цикле поиск позиции вставки и сдвиг элементов.

Сортировка выбором

Принцип метода:

Находим (выбираем) в массиве элемент с минимальным значением на интервале от 1-го элемента, до n-го (последнего) элемента и меняем его местами с первым элементом. На втором шаге находим элемент с минимальным значением на интервале от 2-го до n-го элемента и меняем его местами со вторым элементом.

И так далее для всех элементов до n-1-го.

Сортировка обменом ("пузырьковая" сортировка)

Принцип метода:

Слева направо поочередно сравниваются два соседних элемента, и если их взаиморасположение не соответствует заданному условию упорядоченности, то они меняются местами. Далее берутся два следующих соседних элемента и так далее до конца массива.

После одного такого прохода на последней n-ой позиции массива будет стоять максимальный элемент ("всплыл" первый "пузырек") Поскольку максимальный элемент уже стоит на своей последней позиции, то второй проход обменов выполняется до n-1-ro элемента. И так далее. Всего требуется n-1 проход.

 


Варианты заданий к лабораторной работе №5

1. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. Использовать сортировку обменами.

2. Сортировка простыми вставками. Дана действительная матрица размера п ´ m (). Упорядoчить (переставить) элементы строки матрицы по неубыванию значений.

3. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположитьих в соответствии с неубыванием характеристик. Использовать сортировку выбором.

4. Сортировка обменами. Дана действительная матрица размера п ´ m (). Упорядoчить (переставить) элементы столбца матрицы по невозрастанию значений.

5. Дана целочисленная прямоугольная матрица. Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположитьих в соответствии с ростом характеристик. Использовать сортировку простыми вставками.

6. Сортировка обменами. Дана действительная матрица размера п ´ m. Упорядoчить (переставить) строки матрицы по неубыванию значений последних элементов строк.

7. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем модуль суммы ее отрицательных элементов. Переставляя строки заданной матрицы, расположитьих в соответствии с невозрастанием характеристик. Использовать сортировку выбором.

8. Сортировка обменами. Дана действительная матрица размера п ´ m. Упорядoчить (переставить) строки матрицы по невозрастанию значений первых элементов столбцов.

9. Сортировка простыми вставками. Дана действительная матрица размера п ´ m. Упорядoчить (переставить) строки матрицы по невозрастанию сумм элементов строк.

10. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем среднее арифметическое значение ее элементов. Переставляя строки заданной матрицы, расположитьих в соответствии с убыванием характеристик. Использовать сортировку выбором.

11. Сортировка обменами. Дана действительная матрица размера п ´ m. Упорядoчить (переставить) строки матрицы по неубыванию значений наименьших элементов строк.

12. Сортировка простыми вставками. Дана действительная матрица размера п ´ m. Упорядoчить (переставить) строки матрицы по невозрастанию значений наибольших элементов строк.

13. Сортировка обменами. Дана действительная матрица размера п ´ m. Упорядoчить (переставить) строки матрицы по неубыванию значений разности максимальных минимальных элементов строк.


Варианты заданий к лабораторной работе №5 (иностранные студенты)

1. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Составить одномерный массив характеристик.

 

2. Дана действительная матрица размера п ´ m ().Составить одномерный массив характеристик - элементов строки матрицы.

 

3. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Составить одномерный массив характеристик.

 

4. Дана действительная матрица размера п ´ m ().Составить одномерный массив характеристик - элементы столбца матрицы.

 

5. Дана целочисленная прямоугольная матрица. Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Составить одномерный массив характеристик.

 

6. Дана действительная матрица размера п ´ m. Составить одномерный массив характеристик - значений последних элементов строк.

 

7. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем модуль суммы ее отрицательных элементов. Составить одномерный массив характеристик.

 

8. Дана действительная матрица размера п ´ m. Составить одномерный массив характеристик - значений первых элементов столбцов.

 

9. Дана действительная матрица размера п ´ m. Составить одномерный массив характеристик - сумм элементов строк.

 

10. Дана целочисленная прямоугольная матрица. Характеристикой строки целочисленной матрицы назовем среднее арифметическое значение ее элементов. Составить одномерный массив характеристик.

 

11. Дана действительная матрица размера п ´ m. Составить одномерный массив характеристик - значений наименьших элементов строк.

 

12. Дана действительная матрица размера п ´ m. Составить одномерный массив характеристик - значений наибольших элементов строк.

 

13. Дана действительная матрица размера п ´ m. Составить одномерный массив характеристик - значений разности максимальных минимальных элементов строк.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: