Тема: Масив (парність та непарність)

Добрий день, є процедура на кнопці

Код Delphi
Код:

procedure TForm1.Button3Click(Sender: TObject);
begin
For i:=1 To 4 Do
For j:=1 To 5 Do
If (StringGrid1.Cells[j-1,i-1]='') Then
SG1[i,j] := 0
Else
SG1[i,j] := StrToFloat(StringGrid1.Cells[j-1,i-1]);
For i:=1 To 4 Do
Begin
max := SG1[i,1];
For j:=2 To 5 Do
If (SG1[i,j] > max) then
max := SG1[i,j];
SG2[i] := max;
End;
For i:=1 To 4 Do
StringGrid2.Cells[0,i-1] := FloatToStr(SG2[i])
end;

Зараз вона виконує - значень елементів максимальних значень елементів ряду двомірного масиву.
Потрібно зробити що б вона виводила - значення елементів одновимірного масиву складаються з максимальних значень елементів строк двовимірного масиву.

Post's attachments

Безымянный4.png 9.06 kb, 180 downloads since 2013-06-11 

2 Востаннє редагувалося vovakalypov18 (11.06.2013 15:35:25)

Re: Масив (парність та непарність)

Проблема в тому, є робоча программа, а підставити своє значення в процедуру не можу, не можу зрозуміти, що до чого...  Можу дати повний код програми

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DB, ADODB;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    StringGrid2: TStringGrid;
    Label4: TLabel;
    Button6: TButton;
    Button7: TButton;
    ADOTable1: TADOTable;
    ADOConnection1: TADOConnection;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SG1 : Array[1..4,1..5] Of Real;
  SG2 : Array[1..4] Of Real;
  i, j, k, buf : Integer;
  max : Real;
  f:Text;
implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
  k := 1;
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    Begin
      If ((k Mod 2) <> 0) Then
        StringGrid1.Cells[j-1,i-1] := FloatToStr(k - 1)
      Else
        StringGrid1.Cells[j-1,i-1] := FloatToStr(k + 1);
      k := k + 1;
    End;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Randomize;
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    StringGrid1.Cells[j-1,i-1] := FloatToStr(50 - Random(101));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    If  (StringGrid1.Cells[j-1,i-1]='') Then
      SG1[i,j] := 0
    Else
      SG1[i,j] := StrToFloat(StringGrid1.Cells[j-1,i-1]);
  For i:=1 To 4 Do
    Begin
      max := SG1[i,1];
      For j:=2 To 5 Do
        If (SG1[i,j] > max) then
          max := SG1[i,j];
      SG2[i] := max;
    End;
  For i:=1 To 4 Do
    StringGrid2.Cells[0,i-1] := FloatToStr(SG2[i])
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    StringGrid1.Cells[j-1,i-1] := ' ';

  For i:=1 To 4 Do
    Begin
      StringGrid2.Cells[0,i-1] := ' ';
      SG2[i] := 0;
    End;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  Close
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  AssignFile(f,GetCurrentDir+'\F.txt');
  Reset(f);
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    Begin
      Read(f,buf);
      StringGrid1.Cells[j-1,i-1] := IntToStr(buf);
    End;
   CloseFile(f);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  With ADOTable1 Do
    Begin
      Active:=True;
      First;
      For i:=1 To 4 Do
      For j:=1 To 5 Do
        begin
          StringGrid1.Cells[j-1,i-1] := IntToStr(Integer(FieldValues['chislo']));
          Next;
        End;
    end;
  AdoConnection1.Close;
end;

end.

3

Re: Масив (парність та непарність)

А з чим у вас виникли труднощі? Взагалі умову ви в першому пості якось сумбурно написали, важко зрозуміти.

4 Востаннє редагувалося vovakalypov18 (12.06.2013 09:42:25)

Re: Масив (парність та непарність)

Replace написав:

А з чим у вас виникли труднощі? Взагалі умову ви в першому пості якось сумбурно написали, важко зрозуміти.

Труднощі виникли з тим, що не можу зрозуміти, завдання, яке показано на картинці, переробити у формулу та вставити її у код программи. Це мое друге завдання, з 1-м мені допомогли, а з цим я намагався розібратися, але все марно... Якщо коротко, то потрібно значення непарного та парного масиву внести у процедуру "procedure TForm1.Button3Click(Sender: TObject);" і щоб на виході масиву отримати - Значення елементів одновимірного масиву складаються з максимальних значень елементів строк двовимірного масиву.

5

Re: Масив (парність та непарність)

vovakalypov18 написав:

значення елементів одновимірного масиву складаються з максимальних значень елементів строк двовимірного масиву.

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

For i:=1 To 4 Do
Begin
max := SG1[i,1];
For j:=2 To 5 Do
If (SG1[i,j] > max) then
max := SG1[i,j];
SG2[i] := max;
End;

6 Востаннє редагувалося vovakalypov18 (12.06.2013 16:06:58)

Re: Масив (парність та непарність)

Ось тут ви щось подібне робите для першого рядка, а треба для усіх:

For i:=1 To 4 Do
Begin
max := SG1[i,1];
For j:=2 To 5 Do
If (SG1[i,j] > max) then
max := SG1[i,j];
SG2[i] := max;
End;

Дякую за підсказку, буду намагатися зробити! Тільки я не можу зрозуміти, куди підставлять значення непарного  та парного елементу? Якщо нічого не вийде, зможете допомогти???

7

Re: Масив (парність та непарність)

Тільки я не можу зрозуміти, куди підставлять значення непарного  та парного елементу?

Я також, бо ви про це докладно не писали.

8 Востаннє редагувалося vovakalypov18 (12.06.2013 18:48:29)

Re: Масив (парність та непарність)

Torbins написав:

Тільки я не можу зрозуміти, куди підставлять значення непарного  та парного елементу?

Я також, бо ви про це докладно не писали.

Я би написав докладно, що куди, але вчитель дав на індивідуальне опрацювання і більше нічого не пояснив...

В мене є схожий код ,можливо він чимось допоможе, там все показано, але я не можу все це скласти до купи...

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DB, ADODB;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    StringGrid2: TStringGrid;
    Label4: TLabel;
    Button6: TButton;
    Button7: TButton;
    ADOTable1: TADOTable;
    ADOConnection1: TADOConnection;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SG1 : Array[1..4,1..5] Of Real;
  SG2 : Array[1..4] Of Real;
  i, j, k, buf : Integer;
  max : Real;
  f:Text;
implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
  k := 1;
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    Begin
      If ((k Mod 2) <> 0) Then
        StringGrid1.Cells[j-1,i-1] := FloatToStr(k - 1)
      Else
        StringGrid1.Cells[j-1,i-1] := FloatToStr(k + 1);
      k := k + 1;
    End;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Randomize;
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    StringGrid1.Cells[j-1,i-1] := FloatToStr(50 - Random(101));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i, j, k, p, index : Integer;
  res : Real;
begin
  for i := 1 to 4 do {столбцы}
    for j := 1 to 5 do { строки }
      if  StringGrid1.Cells[j - 1, i - 1] = '' then  {  StringGrid1.Cells[строка,столбец]}
        SG1[i, j] := 0  { SG1[столбец,строка] }
      else
        SG1[i, j] := StrToFloat(StringGrid1.Cells[j - 1, i - 1]);
 
  for i := 1 to 4 do {столбцы}
  begin
    SG2[i] := 1;
    for j := 1 to 5 do { строки }
    begin
      p := -1; { парность неопределена}
      index := j; {фиксируем index}
      for k := 1 to 5 do
      begin
        if k <> index then
        begin
          if SG1[i, k] = SG1[i, index] then
            p := 1 {элемент парный}
          else
            p := 0; {элемент непарный}
        end;
      end;
 
      if p = 1 then
        res := 3.2 + SG1[i, j] { непарный 3.2+i }
      else
      begin
        if p = 0 then
          res := 6.4 - SG1[i, j]; { парный 6.4+i }
          { else ошибка}
      end;
      { значения элементов одномерного массива StringGrid2.Cells
        состоят из произведения положительных значений элементов
        столбцов двухмерного массива }
      if res > 0 then
      begin
        SG2[i] := SG2[i] * res;
      end;
    end;
  end;
 
  for i := 1 to 4 do
    StringGrid2.Cells[0, i - 1] := FloatToStr(SG2[i]);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    StringGrid1.Cells[j-1,i-1] := ' ';

  For i:=1 To 4 Do
    Begin
      StringGrid2.Cells[0,i-1] := ' ';
      SG2[i] := 0;
    End;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  Close
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  AssignFile(f,GetCurrentDir+'\F.txt');
  Reset(f);
  For i:=1 To 4 Do
  For j:=1 To 5 Do
    Begin
      Read(f,buf);
      StringGrid1.Cells[j-1,i-1] := IntToStr(buf);
    End;
   CloseFile(f);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  With ADOTable1 Do
    Begin
      Active:=True;
      First;
      For i:=1 To 4 Do
      For j:=1 To 5 Do
        begin
          StringGrid1.Cells[j-1,i-1] := IntToStr(Integer(FieldValues['chislo']));
          Next;
        End;
    end;
  AdoConnection1.Close;
end;

end.

9

Re: Масив (парність та непарність)

Якщо ви не розумієте завдання, то попросіть вчителя вам його пояснити.