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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2008, 12:22   #1
Absent
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 67
Печаль Задача в DELPHI.

Для элементов двух массивов P и B разной длинны составить процедуру, определяющую максимальное значение из элементов этих двух массивов.
В матрице A найти номера строки и столбца , на пересечении которых находится минимальный элемент(один из них, если их несколько). Затем среди элементов, найденных строки и столбца определить максимальный.

DELPHI

Очень прошу помочь

Код:
program zzzzz;
{$APPTYPE CONSOLE}
uses
  SysUtils;

Type
mass=array[1..100] of integer;
matr=array[1..100,1..100] of integer;
Var
p,b:mass;
A:matr;
i,j,n,m:integer;


Procedure MAX(Var max:integer );
Var
i,j,maxb,maxp:integer;
 begin
 maxp:=P[1];
 maxb:=b[1];
 for i:=1 to n do
 if B[i]>maxb then maxb:=B[i];
 for i:=1 to m do
 if P[i]>maxp then maxp:=P[i];
 if maxp>=maxb then max:=maxp
              else max:=maxb;
 end;
Procedure NOMER(var P,B:mass);
var
nj,ni,i,j,min:integer;
 begin
 min:=A[1,1];
 for i:=1 to n do
 for j:=1 to m do
   begin
   if A[i,j]<min then
      begin
      min:=A[i,j];
      nj:=j;
      ni:=i;
      end;
   end;
 for i:=1 to n do
 B[i]:=A[i,nj];
 for i:=1 to m do
 P[i]:=A[ni,i];
 end;


BEGIN
write('n=');readln(n);
write('m=');readln(m);
for i:=1 to n do
for j:=1 to m do
 begin
 write('A[',i,j,']=');readln(A[i,j]);
 end;
NOMER(P,B);
MAX(max);
write('max=',max);
readln;
end.
Absent вне форума Ответить с цитированием
Старый 25.02.2008, 13:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А в чем же проблемы то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.02.2008, 13:31   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проблема в том, что это не компилируется (это для начала), а потом вываливается...
а не компилируется из вот этого "пассажа":
Procedure MAX(Var max:integer );
...
MAX(max);

разумеется переменная с именем max не определена и не может быть определена.
Я уже не говорю о том, что есть фунция MAX в VCL (которая благополучно переопределяется)....

Absent, нельзя использовать и переменную и функцию/процедуру с одним и тем же именем!!!
Вам что, трудно придумать хорошее "говорящее" имя для переменной?!!
Да и вместо процедуры MAX просто просится ФУНКЦИЯ:
function MAXArray : integer;

А потом что то накручено в процедуре
Procedure NOMER(var P,B:mass);
но что именно, не разбирался...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.02.2008, 13:43   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Нашёл косяк в процедуре NOMER: если первый элемент массива A[1,1] минимальный, то NJ, NI заполнены мусором! Нужно их проиницилизировать единицами!

Но вообще я не понимаю условия задачи! Если массивы P и B заданы, то почему они заполняются из массива(матрицы) A ?! И как матрица A связана с массивами P и B ??
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.02.2008, 13:48   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Программа написана не ахти как, но самостоятельно. Поэтому подправил только явные ошибки, не меняя стилистики.

Код:
program zzzzz;
{$APPTYPE CONSOLE}
uses
  SysUtils;
Type
mass=array[1..100] of integer;
matr=array[1..100,1..100] of integer;
Var
a:matr;b,p:mass;
i,j,n,m:integer;
max:integer;
Procedure MAXBP(b,p:mass;Var max:integer );
Var
i,j,maxb,maxp:integer;
 begin
 maxp:=p[1];
 maxb:=b[1];
 for i:=1 to n do
 if b[i]>maxb then maxb:=b[i];
 for j:=1 to m do
 if p[j]>maxp then maxp:=p[j];
 if maxp>=maxb then max:=maxp
              else max:=maxb;
 end;
Procedure NOMER(n,m:integer;a:matr;var p,b:mass);
var
i,j,nj,ni,min:integer;
 begin  
 min:=a[1,1]; nj:=1;ni:=1;
 for i:=1 to n do
 for j:=1 to m do  
   begin
    if A[i,j]<min then
      begin
      min:=A[i,j];
      nj:=j;
      ni:=i;
      end;   
   end;
 for i:=1 to n do
 B[i]:=A[i,nj];
 for j:=1 to m do
 P[j]:=a[ni,j];
 end;
BEGIN
write('n=');readln(n);   
write('m=');readln(m);
randomize;
for i:=1 to n do
    begin
       for j:=1 to m do
          begin
            a[i,j]:=random(20);
            write(a[i,j]:4);
          end;
        writeln;
    end;
readln;
NOMER(n,m,A,B,P);
MAXBP(P,B,max);
writeln('max=',max);
readln;
end.
puporev вне форума Ответить с цитированием
Старый 25.02.2008, 13:52   #6
Absent
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 67
По умолчанию

program zzzzz;
{$APPTYPE CONSOLE}
uses
SysUtils;

Type
mass=array[1..100] of integer;
matr=array[1..100,1..100] of integer;
Var
p,b:mass;
A:matr;
i,j,n,m:integer;


Procedure MAXIMUM(Var max:integer );
Var
i,j,maxb,maxp:integer;
begin
maxp:=P[1];
maxb:=b[1];
for i:=1 to n do
if B[i]>maxb then maxb:=B[i];
for i:=1 to m do
if P[i]>maxp then maxp:=P[i];
if maxp>=maxb then max:=maxp
else max:=maxb;
end;
Procedure NOMER(var P,B:mass);
var
nj,ni,i,j,min:integer;
begin
min:=A[1,1];
nj:=1;
ni:=1;
for i:=1 to n do
for j:=1 to m do
begin
if A[i,j]<min then
begin
min:=A[i,j];
nj:=j;
ni:=i;
end;
end;
for i:=1 to n do
B[i]:=A[i,nj];
for i:=1 to m do
P[i]:=A[ni,i];
end;


BEGIN
write('n=');readln(n);
write('m=');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,j,']=');readln(A[i,j]);
end;
NOMER(P,B);
MAXIMUM(max);
write('max=',max);
readln;
end.



спасибо
исправил но всеравно ошибки вылазят, не работает
Absent вне форума Ответить с цитированием
Старый 25.02.2008, 14:02   #7
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Добавь в раздел Var
max : integer;

Итого:
Код:
Var
p,b:mass;
A:matr;
i,j,n,m:integer;
max : integer;
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 25.02.2008, 14:04   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Посмотри постом выше и исправь. У тебя процедура NOMER(P,B); не знает из чего делать массивы, нужна исходная матрица и ее размеры.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Delphi evrey Общие вопросы Delphi 1 01.06.2008 20:37
Задача в Delphi Oksana11 Помощь студентам 3 22.12.2007 00:12
Задача! (ListBox, Delphi.) Mr.User Помощь студентам 6 16.11.2007 08:39
Задача с матрицей на Delphi POPOV Помощь студентам 28 29.10.2007 06:39
Задача на Delphi Gorinicher Помощь студентам 17 22.10.2007 21:49