
- •Курск - 2003
- •Интегрированная среда Delphi
- •Цель лабораторной работы
- •Информационные материалы
- •Главное окно
- •Окно редактора кода
- •Окно дерева объектов
- •Окно браузера
- •Лабораторная работа №2 Основы визуального программирования
- •Лабораторная работа №3 Линейные вычислительные процессы
- •Лабораторная работа №4 Итерационные вычислительные процессы
- •Лабораторная работа №5 Циклические вычислительные процессы
- •Лабораторная работа №6 Обработка строковых данных
- •Лабораторная работа №7 Обработка одномерных массивов
- •Лабораторная работа №8 Обработка матриц
- •Лабораторная работа № 9 Программирование операций с матрицами
- •Лабораторная работа №10 Программирование файловых операций
- •Лабораторная работа №11 Графические средства Delphi
- •Библиография
Лабораторная работа №7 Обработка одномерных массивов
Цель лабораторной работы
Целью лабораторной работы является приобретение практических навыков программирования обработки одномерных массивов.
Условия: даны целые числа А1,….,Аn. Получить все числа, которые входят в данную последовательность по одному разу.
Используемые компоненты и их свойства
№ |
Имя компонента |
Настраиваемые свойства |
Значения |
Комментарии |
1 |
2 |
3 |
4 |
5 |
1 |
Form1 (форма)
|
Caption Menu
|
Massive11 MainMenu1
|
Заголовок формы Главное меню формы |
2 |
Label1 (метка) |
Caption
|
Выберите длину массива |
Надпись
|
3 |
Label2 (метка)
|
Caption
|
Введите последовательность целых чисел |
Надпись
|
4 |
BRun (кнопка, Button) |
Name Caption OnClick (cтр. Events) |
BRun Выполнить BRunClick
|
Имя компонента Надпись Событие (щелчок)
|
5 |
BСlose (кнопка, Button) |
Name Caption OnClick (стр.Events) |
BClose Выход BCloseClick
|
Имя Надпись Событие (щелчок)
|
6 |
Button (кнопка)
|
Caption Onclick (стр.Events) |
Очистка Button1Click
|
Надпись Событие (щелчок)
|
7 |
StringGrid1 (таблица строк)
|
ColCount
RowCount ScrollBars
Option
OnKeyPress (стр. Events)
|
4
1 ssNone
{goTabs, gо- Editing}
StringGrid1 Key Press |
Количество столбцов Количество рядов Полосы прокрутки нет Перемещение по ячейкам таблицы по TAB (Shift+TAB), разрешено редакти- рование ячеек (gоEditing) Событие (нажатие алфавитно– цифровой клавиши) |
8 |
StringGrid2 (таблица строк)
|
ColCount
RowCount ScrollBars
|
4
1 ssNone
|
Начальное значение количества столбцов количество рядов Полосы прокрутки– нет |
9 |
ListBox1 (список выбора)
|
Items
On Click |
4 5 6 7 8 9 10 11 12 13
ListBox1Click
|
Показывает набор строк, представляемых в компоненте Событие (щелчок на элементе списка) |
10 |
StaticText1 (метка для отображения текста) |
Caption BorderStyle
|
4 SbsSunken
|
Надпись “Вдавленный” на форме компонент |
11 |
Image1 (отображение картинок)
|
AutoSize
Picture
|
True
{Hex - massiv} |
Не допускается изменение картинки при изменении формы Контейнер изображения. При двойном щелчке мышью вызывается Picture Editor. Можно загрузить картинку. |
12 |
MainMenu1 |
- |
|
Главное меню см. лаб. раб. №3 |
Компонент ListBox1 – список выбора, с помощью которого можно выбрать один или несколько элементов выбора. Свойство ItemIndex содержит индекс сфокусированного элемента. Свойство Items содержит набор строк, показываемых в компоненте. Список можно сформировать, дважды щелкнув в инспекторе объектов на странице свойств в левой части поля Items. Можно свойством TopIndex определить индекс первого видимого в окне элемента. Количество строк в компоненте содержит свойство Count.
Компонент StaticText1 – во всем подобен компоненту TLabel. Особенности в том, что он имеет Windows – окно. Это обстоятельство может быть необходимым условием правильности взаимодействия со связанным свойством FocusControl управляющим элементом, если это внешний для Delphi элемент ActiveX. Вторая особенность – добавлено значение SbsSunken, создающее иллюзию «вдавленности» компонента.
Компонент TImage служит для размещения на форме одного из трех поддерживаемых Delphi типов изображений: растровой картинки, пиктограммы или метафайла. Содержится изображение в свойстве Picture. Например, фрагмент кода для загрузки картинки из файла:
If OpenPictureDialog1.Execute then
Begin
Image1.Picture.LoadFromFile (OpenPicture
Dialog1.FileName);
Image1.Stretch :=true;
end;
Оператор Image1.Stretch масштабирует изображение так, чтобы оно занимало всю рабочую область TImage.
4.Форма задания
5.Текст программы.
unit UMain7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Grids, ExtCtrls, Menus;
type
TForm1 = class(TForm)
BRun: TButton;
BClose: TButton;
StringGrid1: TStringGrid;
ListBox1: TListBox;
Label1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
MRun: TMenuItem;
N3: TMenuItem;
MClose: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Image1: TImage;
Label2: TLabel;
StaticText1: TStaticText;
Button1: TButton;
StringGrid2: TStringGrid;
procedure BCloseClick(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure BRunClick(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure N6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
L : integer = 4;
W : array [4..13]of integer = (150,184,223,256,291,330,365,400,435,471);
H : array [4..13]of integer = (175,157,146,128,110,92,74,56,38,20);
procedure TForm1.BCloseClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
L :=ListBox1.ItemIndex+4;
StringGrid1.ColCount:=L;
StringGrid1.Width:=W[L];
StringGrid1.Left:=H[L];
StringGrid2.ColCount:=L;
StringGrid2.Width:=W[L];
StringGrid2.Left:=H[L];
StaticText1.Caption:=IntToStr(L);
end;
procedure TForm1.BRunClick(Sender: TObject);
var
i : integer;
j : integer;
min : integer;
A : array[1..13] of integer;
begin
// Ввод массива
for i:=1 to L do
if (Length(StringGrid1.Cells[i-1,0]))<>0
then A[i]:=StrToInt(StringGrid1.Cells[i-1,0])
else A[i]:=0;
// Поиск
for i:=1 to L do
begin
min:=A[i];
StringGrid2.Cells[i-1,0]:=StringGrid1.Cells[i-1,0];
for j:=1 to L do
if i<>j then
if min=A[j]
then StringGrid2.Cells[i-1,0]:='';
end;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
// Допустимый ввод соответствующих символов
case Key of
'0'..'9','-',#8:;
#13 :
if StringGrid1.Col < StringGrid1.ColCount - 1 then
StringGrid1.Col:=StringGrid1.Col+1;
else
Key:=Chr(0);
end;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
ShowMessage('Даны целые числа А1..Аn . Получить все числа,
которые входят'+
' в последовательность по одному разу !');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 13 do
begin
StringGrid1.Cells[i,0]:='';
StringGrid2.Cells[i,0]:='';
end;
end;
end.
6. Комментарии к тексту программы
Процедура BCloseClick закрывает форму.
Процедура ListBox1Click реализует выбор значения из списка. В соответствии с размером массива формируется длина компонента StringGrid1, StringGrid2 (количество ячеек). Выбранное значение из списка дублируется в компоненте StaticText1. (StaticText1.Caption:=IntToStr(L); свойство ItemIndex определяет индекс сфокусированного элемента списка.
Процедура StringGrid1KeyPress форматирует вводимую информацию, отображая в ячейках таблицы только цифры, знак числа. При завершении ввода числа в ячейке и нажатии клавиши ENTER указатель ввода перемещается в следующую по порядку ячейку.
Процедура N6Click инициирует вывод сообщения об условиях задачи, ( процедура запускается на выполнение при выборе соответствующей опции меню).
Процедура Button1Click «очищает» ячейки обеих таблиц ( кнопка «Очистка»).
Процедура BRunClick реализует действия, определенные заданием. Организуется ввод элементов массива А, затем его просмотр и анализ элементов в соответствии с заданием.
7. Содержание отчета
- задание;
- описание свойств используемых компонентов и форм;
- текст программы с комментариями;
- результаты вычислений.
8. Тренировочные вопросы и защите:
В чем функциональное назначение компонента ListBox?
Какое свойство компонента ListBox содержит список выбора?
Что содержит свойство ItemIndex компонента ListBox?
Как можно определить в компоненте ListBox индекс первого видимого в окне элемента.
В чем функциональное назначение компонента StaticText?
Какое значение свойства BorderStyle создает для компонента StaticText эффект «вдавленности»?