Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яву_кисо_delphi(1)(1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.26 Mб
Скачать

Лабораторная работа №7 Обработка одномерных массивов

  1. Цель лабораторной работы

Целью лабораторной работы является приобретение практических навыков программирования обработки одномерных массивов.

  1. Условия: даны целые числа А1,….,Аn. Получить все числа, которые входят в данную последовательность по одному разу.

  2. Используемые компоненты и их свойства

Имя компонента

Настраиваемые свойства

Значения

Комментарии

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. Тренировочные вопросы и защите:

  1. В чем функциональное назначение компонента ListBox?

  2. Какое свойство компонента ListBox содержит список выбора?

  3. Что содержит свойство ItemIndex компонента ListBox?

  4. Как можно определить в компоненте ListBox индекс первого видимого в окне элемента.

  5. В чем функциональное назначение компонента StaticText?

  6. Какое значение свойства BorderStyle создает для компонента StaticText эффект «вдавленности»?