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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 11:01   #1
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию Создать функцию, меняющую местами в матрице наибольший и наименьший элементы.

Получилось сделать процедуру:
Код:
Procedure MES(x:TArray; row,col:Byte);
Var max,min,smi,stmi,sma,stma,buf:integer; i,j:Byte;
Begin
min:=x[i,1];
max:=x[i,1];
for i:=1 to row do begin
for j:=1 to col do begin
if min>x[i,j] then
begin
min:=x[i,j]; smi:=i; stmi:=j;
end;
if max<x[i,j] then
begin
max:=x[i,j]; sma:=i; stma:=j;
end;
end;
end;
buf:=min;
x[smi,stmi]:=max;
x[sma,stma]:=buf;
Writeln ('Min=',min,' ','Max=',max);
For i:=1 to row do Begin
For j:=1 to col do Begin
Write(x[i,j]:7,' ');
end;
Writeln;
end;
End;
max - максимальный эл-т;
min - минимальный эл-т;
smi, stmi - индексы минимального эл-та;
smа, stmа - индексы максимального элемента;
buf - буферная переменная для сохранения значения;
Помогите преобразовать в функцию и как обеспечить её вызов в самой программе?

Последний раз редактировалось Volk_xD; 29.12.2010 в 11:52.
Volk_xD вне форума Ответить с цитированием
Старый 29.12.2010, 11:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Получилось сдлеать процедуру:
Цитата:
Помогите преобразовать в процедуру
Извиняюсь а в чем прикол?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2010, 11:52   #3
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Извиняюсь а в чем прикол?
Спасибо, торопился
В функцию нужно преобразовать
Volk_xD вне форума Ответить с цитированием
Старый 29.12.2010, 12:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не проверял, паскаля нет, но примерно так:
Код:
function MES(x:TArray; row,col:Byte):TArray;
Var max,min,smi,stmi,sma,stma,buf:integer; i,j:Byte;
Begin
min:=x[i,1];
max:=x[i,1];
for i:=1 to row do begin
for j:=1 to col do begin
if min>x[i,j] then
begin
min:=x[i,j]; smi:=i; stmi:=j;
end;
if max<x[i,j] then
begin
max:=x[i,j]; sma:=i; stma:=j;
end;
end;
end;
buf:=min;
x[smi,stmi]:=max;
x[sma,stma]:=buf;
Writeln ('Min=',min,' ','Max=',max);
For i:=1 to row do Begin
For j:=1 to col do Begin
Write(x[i,j]:7,' ');
end;
Writeln;
end;
 MES:=x;
End;

var a:TArray;
begin
 MES(a,2,4);
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2010, 12:51   #5
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию

Выдаёт ошибку:
Invalid function result type. Что можно исправить?
Volk_xD вне форума Ответить с цитированием
Старый 29.12.2010, 13:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

попробуй
Код:
A:=MES(a,2,4);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2010, 13:16   #7
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию

Ту же ошибку выдаёт... Вообще, хочется узнать, можно ли использовать функцию для подобной операции, думал, что функции используют для расчёта какого-то конкретного значения, ведь она должна возвращать значение?
Вот рабочая программа с этой процедурой:
Код:
Program Maxmin;
Uses Crt;
Type TArray=Array[1..10,1..10] of integer;
Var a, b:TArray; n,m,k,l :Byte; max,min: real;
Procedure InMatr2(Var x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
Randomize;
For i:=1 to row do Begin
For j:=1 to col do Begin
x[i,j]:=-100+random(200);
Write(x[i,j]:7,' ');
End;
Writeln;
End;
End;
Procedure MES(x:TArray; row,col:Byte);
Var max,min,smi,stmi,sma,stma,buf:integer; i,j:Byte;
Begin
min:=x[i,1];
max:=x[i,1];
for i:=1 to row do begin
for j:=1 to col do begin
if min>x[i,j] then
begin
min:=x[i,j]; smi:=i; stmi:=j;
end;
if max<x[i,j] then
begin
max:=x[i,j]; sma:=i; stma:=j;
end;
end;
end;
buf:=min;
x[smi,stmi]:=max;
x[sma,stma]:=buf;
Writeln ('Min=',min,' ','Max=',max);
For i:=1 to row do Begin
For j:=1 to col do Begin
Write(x[i,j]:7,' ');
end;
Writeln;
end;
End;
BEGIN
Clrscr;
Writeln('Vveite razmernost 1-oi matrici (menee 10) ');
Readln(n,m);
InMatr2(a,n,m);
Writeln('Vveite razmernost 2-oi matrici (menee 10) ');
Readln(k,l);
InMatr2(b,k,l);
Writeln;
MES(a,n,m);
Writeln;
MES(b,k,l);
Readkey;
End.
В исправленной программе нужно ещё вывести на экран минимальный и максимальный элементы, может это упростит задачу

Последний раз редактировалось Volk_xD; 29.12.2010 в 13:20.
Volk_xD вне форума Ответить с цитированием
Старый 29.12.2010, 13:35   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно ли использовать функцию для подобной операции
Увы паскаля нет под рукой, я точно не помню можно ли результатом функции массив описывать, но думаю что должна быть и такая возможность.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2010, 14:17   #9
k0tone
Пользователь
 
Аватар для k0tone
 
Регистрация: 09.11.2010
Сообщений: 99
По умолчанию

Зацени такой вариантик:
Код:
Program Maxmin;
Uses Crt;
Type TArray=Array[1..64,1..64] of integer;
Var a,b:TArray;
    n,m,k,l:Byte;
    max,min:real;
    
Procedure InMatr2(Var x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
Randomize;
For i:=1 to row do
  Begin
    For j:=1 to col do
      Begin
        x[i,j]:=-100+random(200);
        Write(x[i,j]:7,' ');
      End;
    Writeln;
  End;
End;

function MES(x:TArray; row,col:Byte):integer;
Var max,min,smi,stmi,sma,stma,buf:integer;
    i,j:Byte;
Begin
min:=x[i,1];
max:=x[i,1];
for i:=1 to row do
  begin
    for j:=1 to col do
      begin
        if min>x[i,j] then
          begin
            min:=x[i,j]; smi:=i; stmi:=j;
          end;
        if max<x[i,j] then
          begin
            max:=x[i,j]; sma:=i; stma:=j;
          end;
      end;
  end;
buf:=min;
x[smi,stmi]:=max;
x[sma,stma]:=buf;
Writeln ('Min=',min,' ','Max=',max);
For i:=1 to row do
  Begin
    For j:=1 to col do
      Begin
        Write(x[i,j]:7,' ');
      end;
    Writeln;
  end;
for i:=1 to n do
for j:=1 to n do
MES:=x[i,j];
End;

begin
clrscr;
write('Vvedite razmernost 1:');
readln(n,m);
inmatr2(a,n,m);
write('Vvedite razmernost 2:');
readln(k,l);
inmatr2(b,k,l);
MES(a,n,m);
writeln;
MES(b,k,l);
readln;
end.
P.S. Паскаля под рукой не было, так что проверять тебе).
Если я вам помог - нажмите на весы пот аватаркой!

Последний раз редактировалось k0tone; 29.12.2010 в 14:35.
k0tone вне форума Ответить с цитированием
Старый 29.12.2010, 15:29   #10
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию

Спасибо большое, работает
Volk_xD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Поменять местами наименьший и второй по величине элементы StudeHt Помощь студентам 2 10.06.2009 23:33
Динамика. Поменять местами наименьший и второй по величине элементы StudeHt Паскаль, Turbo Pascal, PascalABC.NET 3 27.05.2009 02:20
найти наибольший и наименьший элемент матрицы B(N x M) и поменять их местами поЛотЕнчик_просТо Общие вопросы C/C++ 2 13.05.2009 12:17
В массиве Р(10) введенном с клавиатуры поменять местами наибольший и наименьший элементы. Делфи. Lerika Помощь студентам 6 23.01.2009 11:52
Задача по матрицам. Поменять местами наименьший и второй по величине элементы Иван 883 Паскаль, Turbo Pascal, PascalABC.NET 5 03.01.2009 16:04