Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Разработка схемы интерфейса.

Поиск

 

Создадим для нашего модуля форму (рис.3.1). На нее добавим:

1. Поле Memo – для вывода содержимого файла, и для возможности последующего изменения исходных данных.

2. Opendialog – для открытия файла.

3. Savedialog – для сохранения результатов.

4. 2 Метки (label) – на первой выведем результат выполнения задания 1.а, а на второй – 1.б.

5. 3 Кнопки (button) – в событие onClick первой мы запишем процедуру “TForm1.open”, для второй - “TForm1.save” и для третьей - “TForm1.button3click”

Рис.3.1 Форма на этапе разработки.

3.4. Листинг кода программы.

 

unit Unit1;

 

interface

 

uses

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

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Memo1: TMemo;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Memo1Change(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

n:integer; p,sum:real;

implementation

 

{$R *.dfm}

procedure Schet;

var i,imax,imin,max,min:integer;

a:array[1..100] of integer;

begin

n:=strToInt(form1.memo1.Lines[0]); // размер массива

for i:=1 to n do

a[i]:=strToInt(form1.memo1.Lines[i]); // берем данные из файла в массив

sum:=0; // Задание 1-А: ищем сумму отрицательных элементов массива

for i:=1 to n do

if a[i]<0 then sum:=sum+a[i];

form1.label1.Visible:=true;

form1.label1.Caption:= 'Сумма отрицательных элементов массива = '+Floattostr(sum)+'.';

imax:=1; // Задание 1-B: ищем произведение элементов массива, расположенных между его максимальным и минимальным элементами

imin:=1;

max:=a[1];

min:=a[1];

for i:=2 to n do

begin

if a[i]>max then

begin max:=a[i]; imax:=i; end;

if a[i]<min then

begin min:=a[i]; imin:=i; end;

end;

if imin>imax then

begin i:=imin; imin:=imax; imax:=i; end;

p:=1;

for i:=imin to imax do

p:=p*a[i];

form1.label2.Visible:=true;

form1.label2.Caption:= 'Произведение элементов массива, расположенных между его максимальным и минимальным элементами, = '+Floattostr(p)+'.';

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

if opendialog1.Execute

then memo1.Lines.LoadFromFile(opendialog1.FileName);

Schet;

end;

 

procedure TForm1.Memo1Change(Sender: TObject);

begin

Schet;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

memo1.Lines[n+1]:= 'Сумма отрицательных элементов массива = '+Floattostr(sum)+'.';

memo1.Lines[n+2]:= 'Произведение элементов массива, расположенных между его максимальным и минимальным элементами, = '+Floattostr(p)+'.';

if savedialog1.Execute

then memo1.Lines.SaveToFile(savedialog1.FileName);

end;

end.

 

3.5. Постановка задачи 2.

Дана целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента.

3.6. Анализ задачи составление блок-схем.

Для решения поставленной задачи нам потребуется поля для ввода размерности матрицы, две табличные области (например, StringGrid), куда бы мы записали элементы матрицы и результат вычислений, и процедура, которая бы с помощью определенных циклов и условий выполняла необходимые вычисления. Все это можно реализовать с помощью модуля. Блок-схемы основной программы и необходимых процедур представлены ниже.

       
 
   
 

 


 

           
 
StringGrid2.Top:=StringGrid1.Top+24* *m+60
 
   
StringGrid2.Visible:=true
 
   
label3.Top:=stringgrid1.Top+24*m+25

 

 

           
 
   
 
 
   

 

 


3.7. Разработка схемы интерфейса.

Создадим для нашего модуля форму (рис.3.2). На нее добавим:

1. Три метки (label) – на первой напишем «число строк», а на второй – «число столбцов», на третьей – «сумма элементов в столбцах, не содержащих отрицательные элемен­ты».

2. Два поля для ввода (Edit) – первый для ввода строк, второго – столбцов. В события Onchange для первого запишем процедуру «TForm1.Edit1Change», для второго – «TForm1.Edit2Change». Также в события onKeyPress запишем процедуры «edit1KeyPress» и «edit2KeyPress», для первого и второго полей соответственно, так как здесь нам нужны только цифры.

3. Две табличные области (Stringgrid) – в первую запишем исходную матрицу, а вторую – результаты расчетов. В событие onKeyPress для первой запишем процедуру «StringGrid1KeyPress», так как нам нужны только цифры.

4. Одну кнопку, в событие OnClick которой запишем процедуру «Schet».

Рис.3.2 Форма на этапе разработки.

3.8. Листинг кода программы

 

unit Unit1;

 

interface

 

uses

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

Dialogs, StdCtrls, Grids;

 

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

StringGrid2: TStringGrid;

Button1: TButton;

Label3: TLabel;

procedure Edit1Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

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

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

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

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

m,n:integer;

a:array[1..20,1..20] of integer;

b:array[1..20] of integer;

implementation

 

{$R *.dfm}

 

procedure TForm1.Edit1Change(Sender: TObject);

var i:integer;

begin

m:=strToInt(edit1.Text);

StringGrid1.RowCount:=m;

StringGrid1.Height:=24*m+15;

StringGrid1.Visible:=true;

StringGrid2.Top:=StringGrid1.Top+24*m+25;

for i:=0 to m-1 do StringGrid1.Cells[0,i]:='0';

end;

 

procedure TForm1.Edit2Change(Sender: TObject);

var i,j:integer;

begin

n:=strToInt(edit2.Text);

StringGrid1.ColCount:=n;

StringGrid2.ColCount:=n;

StringGrid1.Width:=64*n+10;

StringGrid2.Width:=StringGrid1.Width;

StringGrid1.Visible:=true;

for i:=0 to m-1 do

for j:=0 to n-1 do StringGrid1.Cells[j,i]:='0';

end;

 

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

begin

if not (key in ['0'..'9',#8]) then key:=#0;

end;

 

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

begin

if not (key in ['0'..'9',#8]) then key:=#0;

end;

 

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

begin

if not (key in ['0'..'9',#8]) then key:=#0;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k:integer;

begin

for i:=1 to m do

for j:=1 to n do

a[i,j]:=strToInT(stringgrid1.Cells[j-1,i-1]);

for i:=1 to m do b[i]:=0;

for j:=1 to n do

for i:=1 to m do

if a[i,j]=0 then b[i]:=1;

k:=0;

for i:=1 to n do

begin

if b[i]=0 then k:=k+1;

stringgrid2.Cells[i-1,0]:=InTTostr(b[i]);

end;

label3.Caption:='Количество ненулевых строк - '+IntToStr(k)+'.';

end;

 

end.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 117; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.119.34 (0.006 с.)