Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met_2011.doc
Скачиваний:
125
Добавлен:
13.11.2019
Размер:
2.46 Mб
Скачать

5.3. Пример выполнения задания

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

где А – квадратная матрица размерностью n x n,

а Y, B – одномерные массивы размерностью n элементов.

Элементы вектора Y определяются по формуле .

Следует значения n вводить в компонент TEdit, А и B – в компонент TStringGrid. Результат, после нажатия кнопки типа TButton, вывести в компонент TStringGrid.

Панель диалога приведена на рис. 5.1.

5.3.1. Настройка компонента tStringGrid

  1. Установите на форму три компонента типа TStringGrid: StringGrid1, StringGrid2 и StringGrid3 (вкладка Additional, ЛКМ по пиктограмме и ЛКМ в нужном месте формы).

  2. Захватывая кромки компонентов, отрегулируйте их размер.

  3. В инспекторе объектов установите значения свойств StringGrid1:

ColCount равным 2 (два столбца),

RowCount равным 2 (две строки),

FixedCols1 (один столбец с фиксированной зоной для подписи номеров строк),

FixedRows1 (одна строка с фиксированной зоной для подписи индексов столбцов).

Установите значения свойств StringGrid2 и StringGrid3:

ColCount равным 1 (один столбец),

RowCount равным 2 (две строки),

FixedCols0 (нет столбца с фиксированной зоной),

FixedRows1 (одна строка с фиксированной зоной для подписи имени массива).

  1. Раскройте раздел Options (нажав на знак “+”, стоящий слева от Options) и установите свойство goEditing в положение True для компонентов StringGrid1, StringGrid2 и StringGrid3 (по умолчанию в компонент TStringGrid запрещен ввод информации с клавиатуры).

Панель диалога приведена на рис. 5.1.

5.3.2. Код программы

unit Unit1;

interface

u ses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Const

Nmax=10;

Type // Объявление типа

Mas2 = Array[1..Nmax,1..Nmax] Of Extended; // двумерного массива и

Mas1 = Array[1..Nmax] Of Extended; // одномерного массива

Var

Form1: TForm1;

A : Mas2; // Объявление двумерного массива

B, Y : Mas1; // Объявление одномерных массивов

n, i, j : Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

n:=3; // Размерность массива

Edit1.Text:= IntToStr(n);

StringGrid1.ColCount:=n+1; //Задание числа столбцов и

StringGrid1.RowCount:= n +1; // строк в таблицах,

StringGrid2.RowCount:= n +1;// включая фиксированную зону (+1) для подписей

StringGrid3.RowCount:= n +1;

StringGrid1.Cells[0,0]:='Массив A:'; // Ввод в левую верхнюю ячейку

StringGrid2.Cells[0,0]:='Массив B:'; // таблицы названия массива

StringGrid3.Cells[0,0]:='Массив Y:';

For i:=1 To n Do Begin // Заполнение таблицы поясняющими подписями:

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i); //ввод номера строки

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i); // ввод номера столбца

End;

end;

procedure TForm1.Button1Click(Sender: TObject); //Изменить размерность

begin

n:=StrToInt(Edit1.Text);

StringGrid1.ColCount:= n +1; // Задание числа столбцов и

StringGrid1.RowCount:= n +1; // строк в таблицах, включая

StringGrid2.RowCount:= n +1; // фиксированную зону (+1) для подписей

StringGrid3.RowCount:= n +1;

For i:=1 To n Do Begin // Ввод поясняющих подписей:

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i); // номера строки

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i); // номера столбца

End;

end;

procedure TForm1.Button2Click(Sender: TObject); // Вычислить

Var

s: Extended;

begin

For i:=1 To n Do // Заполнение массива А элементами из таблицы StringGrid1

For j:=1 To n Do

A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

For i:=1 To n Do // Заполнение массива B элементами из таблицы StringGrid2

B[i]:=StrToFloat(StringGrid2.Cells[0,i]);

For i:=1 To n Do Begin // Умножение массива А на массив В

s:=0;

For j:=1 To n Do

s:=s+A[i,j]*B[j];

Y[i]:=s;

StringGrid3.Cells[0,i]:=FloatToStrf(Y[i],ffFixed,6,2); // Вывод результата

End;

End;

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