Читайте также: |
|
Цель работы: приобретение навыков построения вложенных циклических алгоритмов и реализация с их помощью управляющих конструкций повторения.
Задание:
1. задать массив M*N, ввод которого осуществляется вручную, и найти столбец с наибольшей суммой;
2. задать таблицу M*N, ввод данных в которую осуществляется вручную, найти наибольший элемент и указать его положение.
Листинг программы, соответствующей заданию 1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Var M, N:integer; Mas: array of array of integer;
procedure Inp_Real1(Var Symb: Char; Str_Ed: string);
{Var Symb - формальный параметр-переменная обеспечит передачу введенного символа из процедуры Inp_Real1 в вызывающую процедуру; Str_Ed - значение строки отображаемой в поле ввода, параметр-значение, при вызове процедуры будет подставлено фактическое имя поля}
begin
case Symb of
'0'..'9':; // допустимые символы
',','.': // введена точка или запятая
begin
if Symb='.' // введена точка
then Symb:=','; // подмена точки запятой
if Pos(',',Str_Ed)<>0 // строка Str_Ed уже содержит запятую
then Symb:=Char(0); // подмена запятой пустым символом
end;
#8:; // <Backspace>
' ':;
else Symb:=Chr(0); // подмена недопустимого символа пустым
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Real1(Key, Edit1.Text);
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Real1(Key, Edit2.Text);
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Real1(Key, Edit3.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
Var Cod, i, j, k, l, i1,j1: Integer; S: String; {i - счётчик числового массива, j - счётчик элементов текстовой строки}
begin
Val (Edit2.Text,M,cod);
Val (Edit3.Text,N,cod);
SetLength (Mas,M);
For i:=0 to M-1 do
SetLength (Mas[i],N);
begin
i:=0; j:=0; //обнуление счётчиков
k:=0; l:=0;
Label4.Caption:=''; //очистка метки вывода
Repeat
inc(j); //увеличивает j на 1, при первом вхождении j=1
S:=''; //очистка вспомогательной строки
While (Edit1.Text[j] <> ' ') and (j <= Length(Edit1.Text)) do
begin
S:= S + Edit1.Text[j];
Inc(j); //j увеличился на 1, переход на новый виток цикла While
end;
k:=i div N;
l:=i mod N;
Val(S, Mas[k,l], Cod);
inc(i);//увеличивает i на 1
Until (i>M*N) or (j> Length(Edit1.Text));
For i1:=0 to M-1 do begin
For j1:=0 to N-1 do begin
Label4.Caption:=Label4.Caption+IntToStr(Mas[i1,j1])+#9
end;
Label4.Caption:=Label4.Caption+#13
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var Sum, maxSum, maxStb, i, j: integer;
begin
maxSum:=0; maxStb:=0;
For i:=0 to M-1 do begin
maxSum:= maxSum + Mas[i,0];
end;
For j:=0 to N-1 do begin
Sum:=0;
For i:=0 to M-1 do begin
Sum:=Sum + Mas[i,j]
end;
If Sum > maxSum then
begin
MaxSum:=Sum;
maxStb:=j;
end;
end;
Label5.Caption:= IntToStr(j);
end;
end.
Листинг программы, соответствующей заданию 2:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
Button3: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMas = array of array of integer;
var
Form1: TForm1;
implementation
{$R *.dfm}
Var M, N: Integer; Mas: TMas;
procedure Inp_Real1(Var Symb: Char; Str_Ed: string);
begin
case Symb of
'0'..'9':; // допустимые символы
#8:; // <Backspace>
else Symb:=Chr(0); // подмена недопустимого символа пустым
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Real1(Key, Edit2.Text);
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Real1(Key, Edit3.Text);
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 Cod: Integer;
begin
if Edit2.Text <> '' // Проверка поля ввода M на пустое значение
then M:=StrToInt(Edit2.Text) // M преобразовано в число
else begin ShowMessage('введите M!');
exit;
end;
if Edit3.Text <> '' // Проверка поля ввода N на пустое значение
then N:=StrToInt(Edit3.Text) // N преобразовано в число
else begin ShowMessage('введите N!');
exit;
end;
Val(Edit2.Text, M, Cod);
Val(Edit3.Text, N, Cod);
if (Cod<>0) then
begin
ShowMessage('Ошибка ввода данных');
exit;
end;
StringGrid1.Rowcount:=N;
StringGrid1.Colcount:=M;
StringGrid1.Visible:=True;
for N:=0 to StringGrid1.Rowcount-1 do
for M:=0 to StringGrid1.Colcount-1 do StringGrid1.Cells[M,N]:='0';
end;
procedure TForm1.Button2Click(Sender: TObject);
Var i, j: Integer;
begin
M:=StringGrid1.Colcount;
N:=StringGrid1.Rowcount;
SetLength(Mas,M); // Значение первого индека массива
for i:=0 to M-1 do SetLength(Mas[i],N); // Значение второго индекса массива
for i:=0 to M-1 do for j:=0 to N-1 do
Mas[i,j]:=StrToInt(StringGrid1.Cells[i,j]); // Копироваие всех ячеек
Label1.Caption:='';
for i:=0 to N-1 do begin
for j:=0 to M-1 do Label1.Caption:=Label1.Caption+inttostr(Mas[j,i])+#9;
Label1.Caption:=Label1.Caption+#13;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
Var i, j, max, strok, stolb: Integer;
begin
strok:=0;
stolb:=0;
max:=Mas[0,0];
for i:=0 to M-1 do
begin
for j:=0 to N-1 do
if Mas[i,j]>=max then
begin
strok:=j;
stolb:=i;
max:=Mas[i,j];
end;
end;
ShowMessage('номер строки: '+IntToStr(strok+1)+','+' номер столбца: '+IntToStr(stolb+1)+','+' значение: '+IntToStr(max));
end;
end.
Дата добавления: 2015-10-02; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Строк повноважень державної кваліфікаційної комісії – до одного року. | | | Производственные экскурсии |