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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2009, 17:09   #1
hoangvu2005
 
Регистрация: 14.02.2009
Сообщений: 8
По умолчанию Работа с массивами. Паскаль

Ввести двумерный массив А(N,M), вывести его.Найти максимум в массиве и далее найти минимум среди элементов той строки и того столбца,где содержится найденный максимум. Поменять пару найденных элементов местами.
Сделать эту задачку с помощью подпрограмм!
Я как то сделал, но не получается. У меня не правильно выводится строки и столбцы, и в матрице макс. элемент не меняет местами с миним.
Помогите исправить


Вот программа
Код:
program PP;
uses crt;
type mtx=array[1..10,1..15] of integer;
var
A:mtx; N,M:byte;
max,min,imax,imin,jmax,jmin,i,j: integer;
procedure vvod(VAR A:mtx; var N,M:byte; d:char);
begin
write('N=');readln(N);
write('M=');readln(M);
for i:=1 to N do
 for j:=1 to M do
 begin
 write(d,'[',i,',',j,']='); readln(A[i,j]);
 end;
 end;
 
 function poisk_max_element(A:mtx; N,M:byte):integer;
 var
 max,jmax,imax:integer;
 begin

 max:=A[1,1];
    imax:=1;
    jmax:=1 ;
for i:=1 to N do
 for j:=1 to M do
   if A[i,j]>max then
   max:=A[i,j];
   poisk_max_element:=max;
   end;
   function poisk_imax_element(A:mtx; N,M:byte):integer;
   var max,imax:integer;

   begin
   imax:=i;
   poisk_imax_element:=imax;
   end;
   function poisk_jmax_element(A:mtx; N,M:byte):integer;
   var jmax:integer;

   begin
 jmax:=j;
   poisk_jmax_element:=jmax;
   end;


   


Function poisk_min_element(A:mtx; N,M:byte):integer;
 var
 min,jmin,imin:integer;
  begin
  min:=A[1,jmax];
  imin:=1;
  jmin:=jmax;
  for i:=1 to N do
   if A[i,jmax]<min then
min:=A[i,jmax];
poisk_min_element:=min;
end;
   Function poisk_imin_element(A:mtx; N,M:byte):integer;
   var imin:integer  ;
   begin
   imin:=i;
   poisk_imin_element:=imin;
   end;
   Function poisk_jmin_element(A:mtx; N,M:byte):integer;
   var jmin:integer;
   begin
   jmin:=jmax;
   poisk_jmin_element:=jmin ;
   end;
    Function min_element(A:mtx; N,M:byte):integer;
    var min,imin,jmin:integer    ;
   begin
  for j:=1 to M do
   if A[imax,j]<min then
   min:=A[imax,j];
   imin:=imax;
   jmin:=j;

   end;
procedure vivod (A:mtx; var N,M:byte; d:char);
begin
  A[imax,jmax]:=min;
  A[imin,jmin]:=max;
  for i:=1 to N do
  begin
  for j:=1 to M do
  Write(A[i,j]:3);
  writeln
  end;
  end;

  Begin
  vvod(A,N,M,'A');
  max:=poisk_max_element(A,N,M);
  jmax:=poisk_jmax_element(A,N,M);
  imax:=poisk_imax_element(A,N,M);
  writeln('max=',max);
  writeln('imax=',imax);
  writeln('jmax=',jmax);
  min:=poisk_min_element(A,N,M);
  imin:=poisk_imin_element(A,N,M);
  jmin:=poisk_jmin_element(A,N,M);

  writeln('min=',min);
  writeln('imin=',imin);
  writeln('jmin=',jmin);
  vivod(A,N,M,'A');
  End.
hoangvu2005 вне форума Ответить с цитированием
Старый 10.04.2009, 17:39   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
program PP;
uses crt;
type mtx=array[1..10,1..15] of integer;
var A:mtx; N,M:byte;
    max,min,imax,imin,jmax,jmin,i,j: integer;


procedure vvod(VAR A:mtx; var N,M:byte; d:char);
begin
write('N=');readln(N);
write('M=');readln(M);
for i:=1 to N do
 for j:=1 to M do
 begin
 write(d,'[',i,',',j,']='); readln(A[i,j]);
 end;
 end;


 function poisk_max_element(A:mtx; N,M:byte):integer;
 begin
    imax:=1;
    jmax:=1 ;
for i:=1 to N do
 for j:=1 to M do
   if A[i,j]>a[imax,jmax] then
    begin
      imax:=i;
      jmax:=j;
    end;
   poisk_max_element:=a[imax,jmax];
   end;
   
Function poisk_min_element(A:mtx; N,M:byte):integer;
  begin
  imin:=1;
  jmin:=1;
  for i:=1 to N do
   for j:=1 to M do
   if A[i,j]<a[imin,jmin] then
    begin
     imin:=i;
     jmin:=j;
    end;
    poisk_min_element:=a[imin,jmin];
end;


   
procedure vivod (A:mtx; var N,M:byte; d:char);
begin
  A[imax,jmax]:=min;
  A[imin,jmin]:=max;
  for i:=1 to N do
  begin
  for j:=1 to M do
  Write(A[i,j]:3);
  writeln
  end;
  end;

  Begin
  vvod(A,N,M,'A');
  max:=poisk_max_element(A,N,M);
  writeln('max=',max);
  write('imax=',imax);
  write('jmax=',jmax);
  min:=poisk_min_element(A,N,M);
  writeln;
  writeln('min=',min);
  write('imin=',imin);
  write('jmin=',jmin);
  writeln;
  vivod(A,N,M,'A');
  End.
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 10.04.2009 в 23:03.
alex_fcsm вне форума Ответить с цитированием
Старый 10.04.2009, 20:12   #3
hoangvu2005
 
Регистрация: 14.02.2009
Сообщений: 8
По умолчанию

Немного не так! сделайте так чтобы я могу напечатать элементы из матрицы!
Из этой матрицы:
2 -6 9
0 1 -10
У меня получился max=9, но как то imax=2,jmax=3, и точно также min=-10 imin=2 jmin=3.
9 и -10 должны поменяться местами, а не поменялись!
Помогите..........
hoangvu2005 вне форума Ответить с цитированием
Старый 10.04.2009, 23:05   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Поправил ввод. Я запускаю у меня все ОК
(N=2,M=3)
2 -6 9
0 1 -10


2 -6 -10
0 1 -9
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 10.04.2009 в 23:07.
alex_fcsm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Работа с массивами NightFire Помощь студентам 3 28.03.2009 22:25
Паскаль. Работа с массивами... deceiver Помощь студентам 5 24.03.2009 04:27
Паскаль. Задачи с массивами. 1cheater1 Помощь студентам 1 12.03.2009 12:37
Паскаль. Задачка с массивами. ProPaL Помощь студентам 4 11.11.2007 18:58