Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Praktikum_2008

.pdf
Скачиваний:
292
Добавлен:
06.06.2015
Размер:
8.23 Mб
Скачать

B = X12 + X 22 +... + X N2

для N — чисел. N — произвольное число, но не более 100. (Указание N A = A1/ N ).

В программе предусмотреть следующие запросы при вводе: КОЛИЧЕСТВО ЧИСЕЛ=

X1=

X2=

и т.д. для всех чисел.

Форма вывода результатов:

СРЕДНЕЕ АРИФМЕТИЧЕСКОЕ=значение СРЕДНЕЕ ГЕОМЕТРИЧЕСКОЕ= значение СРЕДНЕЕ ГАРМОНИЧЕСКОЕ= значение СРЕДНЕЕ КВАДРАТИЧНОЕ= значение

№ 5.14. Написать программу для вычисления средних арифметических:

 

 

 

 

 

 

1

 

 

N

 

 

 

 

 

 

1

 

N

 

 

 

 

 

 

P =

 

 

 

 

X

 

P

 

=

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

N i=1

1i, 2

 

 

N i=1

 

2i

 

и средних квадратических отклонений

 

 

 

 

 

 

 

σ

1

= X 2

P

2

,σ

2

= X 2

P

2 .

Где

 

 

 

1

1

 

 

 

 

 

 

2

 

2

 

 

 

 

1

 

 

N

 

 

 

 

 

 

 

 

1 N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X12

=

 

 

 

 

X12i , X 22 =

 

 

 

X 22i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N i=1

 

 

 

 

 

 

 

N i =1

 

 

для двух массивов чисел, а также коэффициента корреляции между этими массивами:

r= X1X 2 P1P2 ,

σ1σ2

где

1 N

X1X 2 = N i=1X1i X 2i .

№ 5.15. Написать программу для вычисления суммарной площади четырех прямоугольных участков (рис. 6.5) по заданным значениям их диагоналей Li (в метрах) и углов между диагоналями и основаниями αi. Формула для определения площади i-го участка:

Si = L2i sinαi cosαi

381

α4 L1

L4 α1

α3

α2 L2

L3

Рис. 6.5

В программе предусмотреть следующую форму запросов при вводе исходных данных:

1–Й УЧАСТОК: ДИАГОНАЛЬ= УГОЛ В ГР., МИН., СЕК.= 2–Й УЧАСТОК: ДИАГОНАЛЬ=

УГОЛ В ГР., МИН., СЕК.= 3–Й УЧАСТОК: ДИАГОНАЛЬ= УГОЛ В ГР., МИН., СЕК.= 4–Й УЧАСТОК: ДИАГОНАЛЬ=

УГОЛ В ГР., МИН., СЕК.= Форма вывода результата:

ОБЩАЯ ПЛОЩАДЬ= значение суммарной площади (в га). № 5.16. Написать программу для определения суммы горизонтальных проложений между точками с указанными координатами:

S = N1

(X

i+1

X

1

)2 +(Y

Y )2 .

i=1

 

 

i+1

1

 

 

 

 

 

 

Общее количество точек произвольно, но не более 20.

В программе предусмотреть следующую форму запросов при вводе исходных данных:

КОЛИЧЕСТВО ТОЧЕК=

382

X1=

X2=

и т.д. для всех точек. Форма вывода результата:

CУММА ГОРИЗОНТАЛЬНЫХ ПРОЛОЖЕНИЙ= значение S. № 5.17. Написать программу для определения суммарного расстояния между точками с заданными координатами и значениями вертикального угла, под которым из данной точки видна следующая точка:

N 1 (X

i+1

X

)2 +

(Y

Y )2

 

S =

i

 

i+1

i

.

 

cosαi

 

 

i=1

 

 

 

 

Общее количество точек произвольно, но не более 25.

В программе предусмотреть следующую форму запросов при вводе исходных данных:

КОЛИЧЕСТВО ТОЧЕК= КООРДИНАТЫ ТОЧКИ 1: X, Y=

ВЕРТИК. УГОЛ ИЗ ТОЧКИ 1 НА ТОЧКУ 2: ГР., МИН., СЕК.= КООРДИНАТЫ ТОЧКИ 1: X, Y=

ВЕРТИК. УГОЛ ИЗ ТОЧКИ 1 НА ТОЧКУ 2: ГР., МИН., СЕК.= и т.д. до предпоследней точки.

КООРДИНАТЫ ТОЧКИ номер последней точки: X, Y= Форма вывода результата:

СУММАРНОЕ РАССТОЯНИЕ=значение S.

5.18. Дана информация о багаже нескольких пассажиров. Багаж каждого пассажира характеризуется двумя числами: количеством вещей и общим весом вещей. Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров и по числу вещей, и по весу.

5.19. Дана информация о багаже нескольких пассажиров. Багаж каждого пассажира характеризуется двумя числами: количеством вещей и общим весом вещей. Определить, имеются ли два пассажира, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0,5 кг.

5.20. Дана информация о багаже нескольких пассажиров. Багаж каждого пассажира характеризуется двумя числами: количеством вещей и общим весом вещей. Выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом не менее 30 кг.

383

§ 6. Разработка многооконных проектов.

Двумерные массивы. Компонент StringGrid

В данном параграфе рассматриваются следующие вопро-

сы: компонент StringGrid, технология разработки многооконных проектов, ввод и вывод двумерных массивов с помощью компо-

нента StringGrid.

Теория

Определение двумерного массива было дано в предыдущем параграфе.

Компонент StringGrid

Находится на вкладке Additional.

TStringGrid — служит для представления текстовых данных в виде таблицы. Очень удобен для ввода и вывода массивов (одномерных и двухмерных). Доступ к каждому элементу таблицы происходит через свойство Cells. Наиболее важными для нас

являются следующие свойства компонента StringGrid.

Свойство

Назначение

 

 

 

Name

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

 

 

ColCount

Количество колонок таблицы

RowCount

Количество строк таблицы

Cells

Соответствующий

таблице

 

двумерный

массив.

Ячейка

 

таблицы, находящаяся на пе-

 

ресечении столбца номер col и

 

строки номер row определяет-

 

ся элементом cells[col, row]

FixedCols

Количество зафиксированных

 

слева колонок таблицы. За-

 

фиксированные колонки

вы-

 

деляются цветом и при гори-

 

зонтальной

прокрутке

оста-

 

ются на месте

 

 

FixedRows

Количество зафиксированных

 

384

 

 

 

 

сверху строк таблицы. Зафик-

 

сированные строки

выделя-

 

ются цветом и при вертикаль-

 

ной прокрутке таблицы оста-

 

ются на месте

 

 

Options.goEditing

Признак допустимости редак-

 

тирования содержимого ячеек

 

таблицы.True ― редактирова-

 

ние разрешено. False ― за-

 

прещено

 

 

 

Options.goTabs

Разрешает (True) или запре-

 

щает (False)

использование

 

клавиши <Tab> для переме-

 

щения курсора в следующую

 

ячейку таблицы

 

 

Options.goAlwaysShowEditor

Признак

нахождения

компо-

 

нента в режиме редактирова-

 

ния. Если значение свойства

 

False, то для того, чтобы в

 

ячейке появился курсор, надо

 

начать набирать текст, нажать

 

клавишу

<F2>

или

сделать

 

щелчок мышью

 

 

Технология создания многооконных проектов

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

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

Добавление новой формы в проект. Можно с помощью команды FileNew New Form

385

Вывод списка форм проекта

Вывод списка модулей проекта

Вместе с формой в проект добавляется связанный с ней модуль. Например, для формы Form2 добавится модуль Unit2.

Основная программа обычно записывается в главном модуле, связанном с главной формой. К главному модулю нужно подключить модули дочерних форм, т. е. в раздел Uses дописать названия дочерних модулей. Например,

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, Unit2, Unit3;

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

Show (показать). Например,

Form2.Show;

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

Если в родительском модуле используются компоненты из дочерних форм, перед их названием пишется имя формы, где они находятся. Например, Form2.StringGrid1.

Ввод и вывод двумерных массивов c помощью компонента

StringGrid

После создания на форме строковой таблицы (компонент StringGrid) и задания с помощью Инспектора Объектов ее свойств, в программе нужно записать группу операторов для подписи строк и столбцов таблицы, чтобы пользователю программы было понятно, как вводить данные. Их можно записать в отдельной процедуре, связанной с событием выход (Exit) из компонента Edit, где вводится размерность массива, или в процедуре, связанной с событием создания формы (FormCreate).

{Процедура подготовки таблицы на форме для ввода квадратной матрицы, которая выполняется при выходе из поля ввода размерности матрицы.}

procedure TForm1.Edit1Exit(Sender: TObject);

Var i,j:Integer;// номера строки столбца квадратной матрицы begin

// порядок матрицы получает свое значение из поля ввода

N:=StrToInt(Edit1.Text);

// свойство количество строк компонента StringGrid

386

//получает значение: порядок +1 StringGrid1.RowCount:=N+1;

//свойство количество столбцов компонента StringGrid

//получает значение порядок: +1 StringGrid1.ColCount:=N+1; //подпись заголовка таблицы

For i:=1 to StringGrid1.RowCount do StringGrid1.Cells[i,0]:= IntToStr(i); // подпись строк таблицы

For j:=1 to StringGrid1.ColCount do StringGrid1.Cells[0,j]:= IntToStr(j);

// добавление в свойства таблицы признака //допустимости редактирования содержимого ячеек таблицы

StringGrid1.Options:= StringGrid1.Options +[goEditing]; end;

Замечание

Напоминаем, что для создания процедуры, связанной с какимто событием, произошедшим с компонентом, нужно перейти на вкладку Events (события), найти нужное событие в строке, например OnCreate, и справа вписать название события (в данном примере Create). В модуле автоматически будет создана заготовка процедуры создания формы:

procedure TForm1.FormCreate(Sender: TObject); begin

end;

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

procedure TForm1.Edit1Change(Sender: TObject); begin

end;

Нужно изменить событие Change (изменить) на событие Exit (выход). Для этого обязательно перейти на вкладку события (Events) в инспекторе объектов. В строке OnExit раскрыть список, выбрать название Edit1Change и заменить Change на Exit.

Для ввода двумерного массива из StrigGrid необходимо запи-

сать операторы, подобные этим:

387

For i:=1 to StringGrid1.RowCount-1 do For j:=1 to StringGrid1.ColCount-1 do begin

Massiv[i,j]:=StrToFloat(StringGrid1.Cells[j,i]); end; {в данном случае begin и end можно опустить}

Для вывода:

For i:=1 to StringGrid1.ColCount-1 do For j:=1 to StringGrid1.RowCount-1 do

StringGrid1.Cells[j,i]:=FloatToStr(Massiv[i,j]);

Понятие о классах в Delphi

В языке объектно-ориентированного программирования Delphi дается возможность определять так называемые классы. Класс — это сложная структура, включающая помимо описания данных, описание процедур и функций, которые могут быть выполнены над представителем класса — объектом.

Система Delphi всегда сама генерирует свои классы во время проектирования приложения.Описание сформированного класса находится в разделе type интерфейсной части модуля. Например, в программе про бак для летнего душа из темы 1 описание класса выглядит так:

type

TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Label5: TLabel; Label6: TLabel; Button4: TButton;

procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject);

388

procedure Button4Click(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

Как мы видим, в класс включены компоненты (данные) и методы их обработки (процедуры). В секции private (закрытые) объявляются элементы класса, которые должны быть недоступны в других модулях. В секции public (открытые) помещаются элементы, доступные в других модулях.

Практика

Задача

Составить программу для транспонирования квадратной матрицы порядка N и определения следа матрицы.

Транспонированной матрицей к исходной является такая матрица, у которой элементы строк исходной матрицы расставлены в столбцы, а элементы столбцов исходной в строки.

Следом матрицы называется сумма главных диагональных элементов.

Компоненты

Имя

Свойства

Значение

Назначение

 

компонента

компонента

 

 

Заголовок главной

Form1

Caption

Матрица

 

 

 

 

 

формы

 

Label1

Caption

Программа

пред-

Справочная

ин-

 

 

назначена

для

формация

для

 

 

преобразования

пользователя про-

 

 

квадратной

мат-

граммы

 

 

 

рицы (количество

 

 

 

 

строк равно коли-

 

 

 

 

честву столбцов)

Подсказка пользо-

Label2

Caption

Размерность

мат-

 

 

рицы

 

вателю

 

Edit1

Text

…..

 

Поле для

ввода

 

 

 

 

размерности

мат-

 

 

 

 

рицы

 

Form1.StringGrid1

ColCount

5

 

Количество столб-

 

 

 

 

цов по умолчанию

 

FixedCol

1

 

Количество

фик-

 

 

 

 

сированных

слева

389

 

 

 

столбцов

 

 

 

 

FixedRow

1

Количество

 

фик-

 

 

 

сированных

 

свер-

 

 

 

ху строк

 

 

 

 

Options:

 

Опции:

 

 

 

 

goFixedVertLine

True

Разметка

 

зафик-

 

 

 

сированных

 

вер-

 

 

 

тикальных линий

 

goFixedHorzLine

True

Разметка

 

зафик-

 

 

 

сированных

 

гори-

 

 

 

зонтальных линий

 

goVertLine

True

Разметка

 

верти-

 

 

 

 

 

 

кальных

 

линий

 

goHorzLine

 

внутри таблицы

 

True

Разметка

горизон-

 

 

 

 

 

тальных

 

линий

 

goTabs

 

внутри таблицы

 

True

Разрешает

 

ис-

 

 

 

 

 

 

пользование

кла-

 

 

 

виши Tab для пе-

 

 

 

ремещения в дру-

 

 

 

гую ячейку

 

 

 

goAlwaysShowE-

 

Признак

нахожде-

 

ditor

True

ния компонента в

 

 

 

режиме

редакти-

 

 

 

рования

 

 

 

Form1.Button1

Caption

Транспонирован-

Кнопка

для

вы-

 

 

ная матрица

полнения

 

транс-

 

 

 

понирования

и

 

 

 

вывода

в

новое

 

 

 

окно

 

 

 

 

Form1.Button2

Caption

След матрицы

Кнопка для вычис-

 

 

 

ления

следа

мат-

 

 

 

рицы

и вывода в

 

 

 

новое окно

 

 

Form1.Button3

Caption

Выход

Кнопка

для

за-

 

 

 

вершения работы

 

 

 

программы

 

 

Form2

Caption

Транспонирован-

Заголовок формы

 

 

ная матрица

Количество столб-

Form2.StringGrid1

ColCount

5

 

 

 

цов по умолчанию

 

 

 

 

 

 

 

 

390

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]