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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2014, 16:14   #1
T1wka
 
Регистрация: 12.11.2014
Сообщений: 3
По умолчанию В двумерном массиве, состоящем из целочисленных элементов, поменять местами

Будьте добры проверить программку

В двумерном массиве, состоящем из целочисленных элементов, поменять местами:
в каждом столбце наибольший по модулю и последний положительный элементы;

Код:
program lab5_2;
const
n=3; m=3;
var
mat:array [1..n, 1..m] of integer;
str, k, i, j:integer;
 
function MaxAbs(stl:integer):integer;
var i, max:integer;
begin
max:=1;
for i:=2 to n do
if abs(mat[max,stl])<abs(mat[i,stl]) then max:=i;
MaxAbs:=max;
end;
 
begin
 
writeln ('Ввод матрицы');
for i:=1 to n do
for J:=1 to m do
readln(mat[i,j]);
 
writeln('Матрица');
for i:=1 to n do begin
for J:=1 to m do begin
write(mat[i,j],' '); end;
writeln;
end;
 
for j:=1 to m do
begin
str:=MaxAbs(j);
k:=mat[str,j];
mat[str,j]:=mat[n,j];
mat[n,j]:=k;
end;
 
writeln ('После обработки');
for i:=1 to n do begin
for J:=1 to m do begin
write(mat[i,j],' '); end;
writeln;
end;
 
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.11.2014 в 16:30.
T1wka вне форума Ответить с цитированием
Старый 12.11.2014, 19:25   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Будьте добры проверить программку
Программка проверена успешно.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.11.2014, 20:53   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Будьте добры проверить программку
Допустим она рабочая. Что дальше?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2014, 21:35   #4
T1wka
 
Регистрация: 12.11.2014
Сообщений: 3
По умолчанию

Были сомнения, огромное спасибо!
T1wka вне форума Ответить с цитированием
Старый 12.11.2014, 21:46   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тогда рекомендую развеивать их на сайте: http://www.compileonline.com/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2014, 22:06   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А как насчет того, что она меняет местами не с последним положительным, а просто с последним? )
Son Of Pain вне форума Ответить с цитированием
Старый 13.11.2014, 20:34   #7
T1wka
 
Регистрация: 12.11.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
А как насчет того, что она меняет местами не с последним положительным, а просто с последним? )
Тогда вопрос, что изменить?
T1wka вне форума Ответить с цитированием
Старый 14.11.2014, 10:05   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

изменить нужно получение позиции (индекса) последнего положительного элемента в столбце.

например, так:
Код:
const
  n=5; m=4;
var
  mat : array [1..n, 1..m] of integer;
  indexMax, IndexLastPozitive, k, i, j : integer;

function MaxAbs(stl:integer):integer;
var i, max:integer;
begin
  max:=1;
  for i:=2 to n do
     if abs(mat[max,stl])<abs(mat[i,stl]) then max:=i;
  MaxAbs:=max;
end;

function LastPozitive(stl:integer):integer;
var
  i :integer;
begin
  LastPozitive := -1;
  for i:=n downto 1 do
    if mat[i, stl]>0 then begin
       LastPozitive := i;
       Exit
    end;
end;



procedure PrintMatrix;
var i, j : integer;
begin
  for i:=1 to n do begin
    for j:=1 to m do
       write(mat[i,j]:3,' ');
    writeln;
  end;
end;

begin
  Randomize;
  writeln ('Ввод матрицы');
  for i:=1 to n do
  for J:=1 to m do
     {readln(mat[i,j]); } mat[i,j] := -10 + Random(21);

  writeln('Матрица до обработки:');
  PrintMatrix;

  for j:=1 to m do
  begin
    indexMax := MaxAbs(j);
    IndexLastPozitive := LastPozitive(j);
    if IndexLastPozitive>0 then begin {меняем только в строках,
                        где есть положительные элементы}
      k := mat[indexMax,j];
      mat[indexMax,j] := mat[IndexLastPozitive,j];
      mat[IndexLastPozitive,j] := k;
    end;
  end;

   writeln ('После обработки');
   PrintMatrix;

   readln;
end.

Последний раз редактировалось Serge_Bliznykov; 14.11.2014 в 10:24.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#. В двумерном массиве, состоящем из вещественных элементов вычислить: roflove Помощь студентам 0 15.12.2013 13:28
Поменять в двумерном массиве местами первый и последний столбец }|{eka Паскаль, Turbo Pascal, PascalABC.NET 6 21.06.2012 20:19
В двумерном массиве 3 x 5, состоящем из целых чисел, найти сумму элеметов нечётных строк. (Delphi) Мария я Помощь студентам 1 30.04.2011 10:19
В одномерном массиве , состоящем из n целочисленных элементов, вычислить номер максимального элемента мас Ufa Помощь студентам 1 21.04.2010 14:06
в двумерном массиве целых чисел поменять местами стороки и столбы с одинаковыми номерами. Lilu Паскаль, Turbo Pascal, PascalABC.NET 2 03.04.2008 16:27