Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2007, 14:11   #1
Nata!!!@
 
Регистрация: 04.12.2007
Сообщений: 9
По умолчанию Двумерные массивы

Дана действительная квадратная матрица порядка n. В строках с отрицательным элементом на главной диагонали найти наибольший из всех элементов.
Помогите дальше:
procedure TForm1.Button1Click(Sender: TObject);
var A: array of array of real;
i, j , m,n : integer;
max:real;
begin
randomize;
n:= Strtoint(Inputbox('Окно ввода', 'Введите порядок матрицы', '1'));
Setlength(A,n,n);
SG.ColCount:=n;
SG.RowCount:=n;

for i := low(A) to high(A) do
for j := low(A) to high(A) do
begin
A[i,j] := random*101-50;
SG.Cells[j,i]:= floattostrf(A[i,j],ffFixed,5,2);
end;

for i := low(A) to high(A) do
for j := low(A) to high(A) do
begin
if (j=i) and (A[i,j]<0) then

begin .........
Как из отообранных элементов найти наибольший???
Nata!!!@ вне форума Ответить с цитированием
Старый 04.12.2007, 14:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тут надо сначала в первом цикле смотреть на a[i,i]
а во втором цикле уже искать максимум
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.12.2007, 14:29   #3
Nata!!!@
 
Регистрация: 04.12.2007
Сообщений: 9
По умолчанию

Программа уже нашла эти элементы, осталось из них выбрать максимальный!
Nata!!!@ вне форума Ответить с цитированием
Старый 04.12.2007, 16:03   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вставь этот кусок кода:
Код:
for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     if (i=j) and (a[i,j]<0) then
       begin
         max:=a[i,1];
         for k:=2 to n do
           begin
             if a[i,k]>max then
               begin
                 max:=a[i,k];
               end;
           end;
         writeln('max v str',i,'=',max);//вместо этого напиши куда выводишь
       end;
   end;
end;
Вот это у тебя тоже вряд ли выйдет.
Цитата:
A[i,j] := random*101-50;
Напиши например A[i,j] := random(101)-50;

Последний раз редактировалось puporev; 04.12.2007 в 16:23.
puporev вне форума Ответить с цитированием
Старый 04.12.2007, 16:04   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код:
max:=-50;
for i:=low(A) to high(A) do
  if A[i,i] < 0 then
    for j:=low(A) to high(A) do
      if A[i,j] > max then max:=A[i,j];
_Dmitry вне форума Ответить с цитированием
Старый 04.12.2007, 18:03   #6
Nata!!!@
 
Регистрация: 04.12.2007
Сообщений: 9
По умолчанию

puporev ! Спасибо огромное! Только программа выбирает максимальный элемент из последней строки, в которой отрицательный элемент на главной диагонали. А надо чтобы он был максимальным из всех таких строк. ((
Nata!!!@ вне форума Ответить с цитированием
Старый 04.12.2007, 21:30   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ты что-то неправильно написала при выводе, у меня это в Паскале работает нормально, выдает max по всем строчкам, где a[i,i]<0.
Покажи свой код.

Последний раз редактировалось puporev; 04.12.2007 в 22:19.
puporev вне форума Ответить с цитированием
Старый 05.12.2007, 14:14   #8
Nata!!!@
 
Регистрация: 04.12.2007
Сообщений: 9
По умолчанию

procedure TForm1.Button1Click(Sender: TObject);
var A: array of array of real;
k,i,j,m,n : integer;
max:real;
begin
randomize;
n:= Strtoint(Inputbox('Окно ввода', 'Введите порядок матрицы', '1'));
Setlength(A,n,n);
SG.ColCount:=n;
SG.RowCount:=n;

for i := low(A) to high(A) do
for j := low(A) to high(A) do
begin
A[i,j] := random*101-50;
SG.Cells[j,i]:= floattostrf(A[i,j],ffFixed,8,2);
end;

for i := low(A) to high(A) do
for j := low(A) to high(A) do
begin
if (j=i) and (A[i,j]<0) then
begin
max:=A[i,0];
for k:=1 to n do
begin
if A[i,k]>max then
begin
max:=a[i,k];
end;
end;
label1.Caption:=floattostr(max);

end;
end;
finalize(A);
end;
Nata!!!@ вне форума Ответить с цитированием
Старый 05.12.2007, 14:42   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Случаем ни здесь ошибка:
Код:
for k:=1 to n do
Массив с 0 нумеруется

ЗЫ: Заключайте, пожалуйста, код в теги [СODE][/СODE] или используйте кнопочку #.
Sibedir вне форума Ответить с цитированием
Старый 05.12.2007, 14:56   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Зачем
Код:
max:=A[i,0];
ведь нужен максимум во всей матрице
Код:
  max := -50;
  for i := low(A) to high(A) do
    for j := low(A) to high(A) do begin
      if (j=i) and (A[i,j]<0) then begin
        for k:=0 to n-1 do begin
          if A[i,k]>max then begin
            max:=a[i,k];
          end;
        end;
        label1.Caption:=floattostr(max);
      end;
    end;
Но лучше все-таки так:
Код:
  max := -100;
  for i:=low(A) to high(A) do
    if A[i,i] < 0 then
      for j:=low(A) to high(A) do
        if A[i,j] > max then max:=A[i,j];

  if max = -100 then label1.Caption := 'На главной диагонале нет отрицательных элементов'
  else label1.Caption := floattostr(max);
Судите сами.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы в Си. necky Помощь студентам 2 17.05.2009 19:35
Двумерные массивы Lioness Помощь студентам 2 06.01.2008 12:39
C++ Двумерные массивы АНЮТКА555 Помощь студентам 1 10.12.2007 12:42