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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 12:21   #1
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию двумерный массив

Задача: В каждом столбце массива 7х7 расставить в обратном порядке только положительные значения. не используя доп. массив.
Что сделал :
Код:
uses crt;
var
a: array[1..7,1..7] of integer;
i, j, i1  :integer;
 begin
 writeln ('Двумерный массив: ');
 for i :=1 to 7 do
  for j :=1 to 7 do
   a[i,j]:=random (100)-50;
   for i:=1 to 7 do begin
    for j:=1 to 7 do
     write (a[i,j]:3,' ');
     writeln ;
   end;
  writeln('  ________________________');
  writeln;
  for  i := 1 to 7   div 2  do
   for j := 1 to 7   do
    if a[i,j] >0 then
     begin
     i1:= a[i,j];
     a[i,j]:=a[7-i+1,j];
     a[7-i+1,j] :=i1;
     end;
      for i:=1 to 7 do begin
       for j:=1 to 7 do
       write (a[i,j]:3,' ');
       writeln ;
      end;
 end.
Проблема в том что она сдвигает отрицательные значения и не меняет местами положительные если их 2 в столбце. пробовал другими способами но тут мне кажется подошёл ближе всего. Хотелось бы знать возможно ли решение этим способом или он в корне неверен.
niwssg вне форума Ответить с цитированием
Старый 23.04.2013, 13:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Код:
uses crt;
var
  a: array[1..7,1..7] of integer;
  i, j, tmp, iFirst, iLast  : integer;
begin
 writeln ('Двумерный массив: ');
 for i :=1 to 7 do begin
  for j :=1 to 7 do begin
   a[i,j]:=-50+random (100);
   write (a[i,j]:3,' ');
  end;
  WriteLn;
 end;

 writeln('  ________________________');
 writeln;
 for j := 1 to 7 do begin {цикл по столбцам от 1 до 7-го}
   iFirst := 1;
   iLast := 7; 
   while iFirst<iLast do begin
     {ищем положительный элемент, двигаясь сверху вних}
     while (iFirst < iLast) and ( a[iFirst, j] <= 0 ) do inc(iFirst);

     {ищем положительный элемент, двигаясь снизу вверх}
     while (iFirst < iLast) and ( a[iLast, j] <= 0 ) do dec(iLast);

     {если нашли такие элементы, то поменяем их местами}
     if (iFirst < iLast) then begin
        tmp := a[iFirst, j];
        a[iFirst, j] := a[iLast, j]; 
        a[iLast, j] := tmp;
     end;

     Inc(iFirst); Dec(iLast);

   end;
 end;


 for i:=1 to 7 do begin
   for j:=1 to 7 do
     write (a[i,j]:3,' ');
   writeln ;
 end;
 Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2013, 08:49   #3
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Спасибо. Отдельное большое спасибо за объяснение.
niwssg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
двумерный массив Laplas Помощь студентам 5 07.01.2010 15:42
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Двумерный массив apetr Паскаль, Turbo Pascal, PascalABC.NET 2 30.11.2008 12:32