• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Преобразовать матрицу

  • Автор темы Автор темы hamer
  • Дата начала Дата начала

hamer

Ученик
Регистрация
31 Окт 2010
Сообщения
5
Реакции
0
Баллы
0
Преобразовать матрицу

Здраствуйте помогите плиз решить задачку.

Дана матрица размера 5 x 10. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой столбце (Оформить процедурами основное решение задачи, ввод-вывод оформить в главной программе)
 
Вам нужна программа? Тогда почему язык не указываете?
 
на языке паскаль
 
Сами пробовали что-либо делать? Задача элементарная, учиться на чем-то надо. Предлагаю вам сделать процедуру по поиску минимального и максимального элемента в столбце, и смене их местами. В теле программы вводите матрицу, в цикле вызываете процедуру для каждого столбца и затем выводите результат. Вот вам краткий алгоритм, действуйте. Если что непонятно - с радостью подскажем. Это и будет называться ПОМОЩЬЮ в написании программы.
 
uses
CRT;

const
n = 5;
m = 10;

var
mas: array [1..n, 1..m] of integer;
j, i, s, min, imin, imax, max, temp: integer;

begin
Clrscr;
randomize;
writeln('Исходная матрица: ');
for i := 1 TO n DO
begin
for j := 1 TO m DO
begin
MAS[i, j] := random(10) - 3;
write(' ',mas[i, j]:2);
end;
writeln;
end;
writeln;
for j := 1 to m do
begin
max := mas[1, j];
imax := 1;
min := mas[1, j];
imin := 1;
for i := 1 to n do
if MAS[i, j] < max THEN
begin
max := mas[i, j];
imax := i;
end
else
if MAS[i, j] > min THEN
begin
min := mas[i, j];
imin := i;
end;
begin
temp := mas[imin,j];
mas[imin,j] := mas[imax,j];
mas[imax,j] := temp;
end;
end;
writeln;
WRITELN('Результирующая матрица: ');
for i := 1 to n do
begin
for j := 1 to m do
begin
write(' ', mas[i, j]:2);
end;
writeln;
end;
end.

А как в процедуре сделать?
 
procedure [имя] ([список параметров]);
begin
[список операторов]
end;

В программе вызываете процедуру по имени. Список параметров необязателен. Если у вас все хранится в глобальных переменных, то можно обойтись без параметров
 
Код:
uses
 CRT;

const
 n = 5;
 m = 10;

var
 mas: array [1..n, 1..m] of integer;
 j, i, min, imin, imax, max, temp: integer;

begin
 Clrscr;
 randomize;
 writeln('Исходная матрица: ');
 for i := 1 TO n DO
  begin
   for j := 1 TO m DO
    begin
     MAS[i, j] := random(10) - 3;
     write(' ',mas[i, j]:2);
    end;
   writeln;
  end;
 writeln;
 for j := 1 to m do
  begin
   max := mas[1, j];
   imax := 1;
   min := mas[1, j];
   imin := 1;
   for i := 1 to n do
    begin
     if MAS[i, j] [COLOR=Red]>[/COLOR] max THEN
      begin
       max := mas[i, j];
       imax := i;
      end;
    if MAS[i, j] [COLOR=Red]<[/COLOR] min THEN
      begin
       min := mas[i, j];
       imin := i;
      end;
    end;
   temp := mas[imin,j];
   mas[imin,j] := mas[imax,j];
   mas[imax,j] := temp;
  end;
 writeln;
 WRITELN('Результирующая матрица: ');
 for i := 1 to n do
  begin
   for j := 1 to m do
    begin
     write(' ', mas[i, j]:2);
    end;
   writeln;
  end;
 readkey;
end.
А как в процедуре сделать?

Да по-всякому можно, например так:
Код:
uses
 CRT;

const
 n = 5;
 m = 10;

type
 Matrix = array [1..n, 1..m] of integer;

var
 mas1, mas2: Matrix;
 j, i: integer;

procedure Change_Matr(M_in:Matrix; var M_out:Matrix);
 var ic, jc, min, imin, imax, max : integer;
 begin
  M_out:=M_in;
  for jc := 1 to m do
   begin
    max := M_in[1, jc];
    imax := 1;
    min := M_in[1, jc];
    imin := 1;
    for ic := 1 to n do
     begin
      if M_in[ic, jc] > max THEN
       begin
        max := M_in[ic, jc];
        imax := ic;
       end;
      if M_in[ic, jc] < min THEN
       begin
        min := M_in[ic, jc];
        imin := ic;
       end;
     end;
    M_out[imin,jc] := M_in[imax,jc];
    M_out[imax,jc] := M_in[imin,jc];
   end;
 end;


begin
 Clrscr;
 randomize;
 writeln('Исходная матрица: ');
 for i := 1 TO n DO
  begin
   for j := 1 TO m DO
    begin
     MAS1[i, j] := random(10) - 3;
     write(' ',mas1[i, j]:2);
    end;
   writeln;
  end;
 writeln;
 Change_Matr(Mas1,Mas2);
 writeln;
 WRITELN('Результирующая матрица: ');
 for i := 1 to n do
  begin
   for j := 1 to m do
    begin
     write(' ', mas2[i, j]:2);
    end;
   writeln;
  end;
 ReadKey;
end.
Кстати, немного подредактировал Вашу программу: там знаки неравенств при определении максимального и минимального элементов были обратными, переменная s не использована ну и еще пара мелочей.
 
Вот это и есть помощь. А все, почему-то, под помощью понимают полное решение..
 
cпс чуваки)))
 
Назад
Сверху