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

Interface

uses

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

Dialogs, Grids, StdCtrls, jpeg, ExtCtrls, Spin;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

StringGrid1: TStringGrid;

Button2: TButton;

Memo1: TMemo;

Button1: TButton;

Label3: TLabel;

Image1: TImage;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

Label4: TLabel;

Label5: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

procedure SpinEdit1Change(Sender: TObject);

procedure SpinEdit2Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Type

TMatr = array[1..10,1..10] of real; // Объявление типа матрицы размером 10 х 10

var

Form1: TForm1;

A : TMatr; // Глобальное объявление матрицы

n, m : integer;

Implementation

{$R *.dfm}

//------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);

//первоначальное формирование интерфейса программы

var i, j: integer;

begin

Memo1.Clear;

SpinEdit1.Text := '4';

SpinEdit2.Text := '4';

With StringGrid1 do begin

RowCount := StrToInt(SpinEdit1.Text)+1;

ColCount := StrToInt(SpinEdit2.Text)+1;

Cells[0, 0] := ' A';

for i := 1 to RowCount do Cells[0,i] := ' i=' + IntToStr(i);

for j := 1 to ColCount do Cells[j,0] := ' j=' + IntToStr(j);

end;

end;

//---------------------------------------------------------------

procedure TForm1.SpinEdit1Change(Sender: TObject);

//изменение Числа строк в таблице

var i:integer;

begin

if SpinEdit1.Text = '' then Exit;

//подготовка таблицы по строкам

With StringGrid1 do begin

RowCount:=StrToInt(SpinEdit1.Text)+1;

for i:=1 to RowCount do Cells[0,i] := ' i=' + IntToStr(i);

end;

end;

//--------------------------------------------------------

procedure TForm1.SpinEdit2Change(Sender: TObject);

//изменение Числа столбцов в таблице

var j : integer;

Begin

if SpinEdit2.Text='' then Exit;

//подготовка таблицы по столбцам

With StringGrid1 do begin

ColCount := StrToInt(SpinEdit2.Text)+1;

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

end;

end;

//--------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);

//выполнить

var

i, j, k, ke : integer;

p, pe : real;

s : string;

begin

{Проверка на заполненность таблицы}

With StringGrid1 do begin

for i := 1 to RowCount-1 do

for j := 1 to ColCount-1 do

if Cells[j, i] = '' then begin

ShowMessage('Надо заполнить все ячейки таблицы !!!');

Exit;

end;

end;

n := StrToInt(SpinEdit1.Text); // число строк матрицы

m := StrToInt(SpinEdit2.Text); // число столбцов матрицы

{Заполнение матрицы А[1..n,1..m] элементами из таблицы StringGrid1}

for i := 1 to n do

for j := 1 to m do

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

{Расчет}

k := 0; ke := 0;

p := 0; pe := 1;

for i := 1 to n do

for j := 1 to m do

if A[i, j] > 0 then begin k := k+1; p := p+A[i, j]; end

else

if (A[i, j] < 0) then begin ke := ke+1; pe := pe * A[i, j]; end;

{формируем обобщеную строку для показа в Мемо1 введенной матрицы }

s:='Введенная матрица:'+#13#10;

for i := 1 to n do begin

for j := 1 to m do

s := s+FloatToStr(A[i, j])+#9;

s:=s+#13#10;

end;

Memo1.Clear;

{показываем в Мемо1 введенную матрицу}

Memo1.Lines.Add(s);

{показываем в Мемо1 результаты расчета}

if k = 0 then Memo1.Lines.Add('Положительных элементов нет !')

else begin

Memo1.Lines.Add('Количество положительных элементов: ' +IntToStr(k));

Memo1.Lines.Add('Сумма положительных элементов: ' + FloatToStr(p));

end;

Memo1.Lines.Add('');

if ke = 0 then Memo1.Lines.Add('Отрицательных элементов нет !')

else begin

Memo1.Lines.Add('Количество отрицательных элементов: ' +IntToStr(ke));

Memo1.Lines.Add('Произведение отрицательных элементов: '+ FloatToStr(pe));

end;

end;

//-------------------------------------------------------------------

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

//ВВОД В StringGrid ДОПУСТИМЫХ СИМВОЛОВ ВЕЩЕСТВЕННОГО ЧИСЛА

//По нажатию Enter курсор перемещается в выбранной строке слева направо.

//Если строка заканчивается, то происходит переход на следующую строку.

//Если курсор доходит до конца таблицы, то он возвращается на 1-ю ячейку.

Begin

With StringGrid1 do begin

if not (Key in ['0'..'9','-',',','.',#8,#13]) then Key:=#0; //разреш.символы

if Key='-' then //минус ввод. только 1-м символом, т.е. когда ячейка пустая

if Length(Cells[Col, Row]) <>0 then Key := Chr(0) ;

if (Key='.') or (Key=',') then begin

if Key='.' then Key:=','; // заменить точку на запятую

if Pos(',' ,Cells[Col,Row])<>0 then Key := Chr(0); //запятая только одна

end;// if

if Key=#13 then begin //Enter

if (Row=RowCount-1) and (Col=ColCount-1) then begin //конец табл.

Row:=1; Col:=1;

end

else

if Col = ColCount-1 then begin //конец строки

Row:=Row+1; Col:=1;

end

else

if Col<ColCount-1 then Col := Col+1; //не конец строки

end; //#13

end; //With

end;

//---------------------------------------------------

end.

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