В строках матрицы с отрицательным элементом на главной диагонали найдите наибольший элемент

nigma

народ помогите найти ошибку в программе. вот само задание:Дана вещественная квадратная матрица. В строках с отрицательным элементом на главной диагонали найдите наибольший элемента вот сам код программы:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  n,m:integer;
  i,j:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.Text);
m:=strtoint(edit2.Text);
stringgrid1.ColCount:=n;
stringgrid1.rowCount:=m;
end;
procedure TForm1.Button2Click(Sender: TObject);
var a:array of array of real;
max:real;
begin
setlength(a,n,m);
for i:=0 to n-1 do begin
for j:=0 to m-1 do begin
a[i,j]:=strtofloat(stringgrid1.cells[j,i]);
end;
for i:=1 to n-1 do
if a[i,i]<0 then  begin
max:=a[i,1];
for j:=1 to m-1 do
if a[i,j]>max then max:=a[i,j];
end;
label1.caption := 'максимальный элемент массива:'+ floatToStr(max)+#13;
end;
end;
end.
если получится.то пожалуйста сделайте до вечера.
8 ответов

nigma

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    StringGrid2: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  i, j, n, max, s, t, k :Integer;
  mas, mes : array[1..100, 1..100] of Integer;
 
  b, c: array[1..100] of Integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
  For i :=1 to n do
  For j :=1 to n do
    Begin
StringGrid1.Cells[i,j] :='';
    End;
 
Randomize;
 
n:=StrToInt(Edit1.Text);
 
For i :=1 to n do
 
For j :=1 to n do
   Begin
 
   Mas[i,j] :=Random(500+500)-500;
 
   StringGrid1.Cells[i,j] :=Inttostr(mas[i,j]);
 
   End;
            For j :=1 to n do
                 Begin
                 if mas[j,j] <0 then
 
                       Begin
                        b[j] :=j;
                        End
 
                       else     b[j] :=0;
 
                  End;
 
                              For j :=1 to n do
                              Begin
                              StringGrid2.Cells[j,0] :=Inttostr(b[j]);
                              End;
 
    k:=0; max:=-1000;   s:=0; t:=0;
 
    For j :=1 to n do
 
       Begin
       k:=b[j];
 
       if k<>0 then
          Begin
           For i :=1 to n do
              Begin
              if mas[k,i] >max  then
 
                 Begin max:=mas[k,i];
 
                 s:=i;
                 t:=k;
 
                 End;
 
               End;
           End;
        End;
 
Memo1.Lines.Add(Inttostr(max)+'='+Inttostr(s)+' : '+Inttostr(t));
 
end;
end.
Очень понравилось задание, но больше онравилось как сделанно , принимай с удовольствием!


nigma

программа понравилась.спасибо большое.только вот не понимаю зачем тут s,k,t?


nigma

Операции с переменными S и T позволяю правильно запомнить номер строки и номер столбца макс значения и в дальнейшем дают возможность вывести результат в данно присере в мемо ! k - Импровизация! поэтому и понравился код проги т.е сам собой остался доволен , еще раз спс за задачу , обращайся !


nigma

сможешь тогда решить еще 2 программы?только на дельфи нужен.


nigma

Попробую , скидывай здесь
только на дельфи нужен.
Так я и на дельфи и пишу


nigma

1-ое Задание:Задание: Создать приложение, реализующее задание в соответствии с вариантом. Перед началом выполнения приложения пользователь должен увидеть сообщение(MessageDlg) с названием лабораторной. Информация выводится в поле вывода. Информация вводится из поля редактирования.Найти сумму n членов геометрической прогрессии, первый член которой равен а, а знаменатель равен q. Найти третий, пятнадцатый и шестнадцатый члены прогрессии2-ое задание:Создать приложение в соответствии с вариантом. Данные должны вводиться в диалоге ввода(InputBox). Если пользователь не ввел данные, то предложение ввода повторяется. Для вывода данных применять окно вывода(ShowMessage).Дано натуральное число. Верно ли, что количество его цифр есть четной число?эти две разные программы.


nigma

Дано натуральное число. Верно ли, что количество его цифр есть четной число? эти две разные программы.
тоесть если ты 10 раз ввел цифры то сказать 10 это четное или нет, да?или простов ведено число и сказать четное или нет
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Chislo: string;
   n: Integer;
 
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 
repeat
 
Chislo := InputBox('Определение на четность не четность','Введите число',' 0');
 
n :=StrtoInt(Chislo); if n=0 then  ShowMessage ('Сказал же ВВЕДИ ЧИСЛО ХХХ !')
 
 until n>0;
 
if (n mod 2=0 ) and (n>0)then ShowMessage ('Четное !') else ShowMessage ('Нечетное !');
 
 end;
end.


nigma

типо так.например вот 123 из них найти четное число.если посчитать то 2-это четное число и всенапример,ты вот написал число 14357.вот из них нужно найти четное число.