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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2012, 19:20   #1
Rikoshet
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 11
Печаль Двумерный массив: выборка чисел по спирали

Помогите пожалуйста с задачкой

Из двумерного массива А[N*N] выбрать числа по спирали во внутрь, то есть начиная с А[1,1],А[1,2],A[1,3] и т.д., записав их в одномерный массив.
Rikoshet вне форума Ответить с цитированием
Старый 08.10.2012, 20:16   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

похожее

еще одно похожее

заполнение по спирали
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 29.10.2012, 15:09   #3
Rikoshet
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 11
По умолчанию

Код:
uses crt;
const n=5;
var
  a:array[1..n,1..n]of integer;
  b:array[1..n] of integer;
  i,imax,imin,j,jmax,jmin,k,m:integer;
begin
Clrscr;
  randomize;
  writeln('Массив: ');
  for i:=1 to n do
    begin
      for j:=1 to n do
      begin
        a[i,j]:=random(51);
        write(a[i,j],' ');
      end;
      writeln;
    end;
  writeln;
  jmin:=1;
  jmax:=n;
  imin:=2;
  imax:=m;
  k:=0;
  repeat
    for j:=jmin to jmax do
    begin
      inc(k);
      a[imin-1,j]:=b[k];
    end;
    for i:=imin to imax do
    begin
      inc(k);
      a[i,jmax]:=b[k];
    end;
    dec(jmax);
    for j:=jmax downto jmin do
    begin
      inc(k);
      a[imax,j]:=b[k];
    end;
    dec(imax);
    for i:=imax downto imin do
    begin
      inc(k);
      a[i,jmin]:=b[k];
    end;
    inc(imin);
    inc(jmin);
  until k>=n*n;
  for k:=1 to n do
  begin
    write(b[k]:3);
  end;
  readln;
end.


Подскажите, что не так?

Последний раз редактировалось Rikoshet; 29.10.2012 в 15:12. Причина: Забыл
Rikoshet вне форума Ответить с цитированием
Старый 29.10.2012, 15:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
a[imin-1,j]:=b[k];
во-первых, вам же нужно ИЗ двухмерного записать в ОДНОмерный.
А Вы откуда берете и куда пишете?! (наоборот)

во-вторых,
Цитата:
Код:
 a:array[1..n,1..n]of integer;
  b:array[1..n] of integer;
рекомендую посчитать, сколько элементов будет в массиве A и какого размера должен быть массив B, чтобы они все в него поместились..


в-третьих, преположите, чему будет равно значение imax после этой строчки кода:
Цитата:
Код:
  imax:=m;

Последний раз редактировалось Serge_Bliznykov; 29.10.2012 в 15:31.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.10.2012, 15:43   #5
Rikoshet
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 11
По умолчанию

Код:
uses crt;
const n=5;
var
  a:array[1..n,1..n]of integer;
  b:array[1..n*n] of integer;
  i,imax,imin,j,jmax,jmin,k,m:integer;
begin
Clrscr;
  randomize;
  writeln('Массив: ');
  for i:=1 to n do
    begin
      for j:=1 to n do
      begin
        a[i,j]:=random(51);
        write(a[i,j],' ');
      end;
      writeln;
    end;
  writeln;
  jmin:=1;
  jmax:=n;
  imin:=2;
  imax:=n;
  k:=0;
  repeat
    for j:=jmin to jmax do
    begin
      inc(k);
      b[k]:=a[imin-1,j];
    end;
    for i:=imin to imax do
    begin
      inc(k);
      b[k]:=a[i,jmax];
    end;
    dec(jmax);
    for j:=jmax downto jmin do
    begin
      inc(k);
      b[k]:=a[imax,j];
    end;
    dec(imax);
    for i:=imax downto imin do
    begin
      inc(k);
      b[k]:=a[i,jmin];
    end;
    inc(imin);
    inc(jmin);
  until k>=n*n;
  for k:=1 to n*n do
  begin
    write(b[k]:3);
  end;
  readln;
end.

Исправил, но наверно не все, и возможно неправильно :3

Последний раз редактировалось Rikoshet; 29.10.2012 в 15:52.
Rikoshet вне форума Ответить с цитированием
Старый 29.10.2012, 15:51   #6
Rikoshet
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 11
По умолчанию

Ошибку нашел, все работает, Спасибо Большое!
Rikoshet вне форума Ответить с цитированием
Старый 29.10.2012, 16:27   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

молодец. квест успешно пройден. поздравляю!

p.s. чисто косметически, для вывода исходной матрицы на экран я бы использовал форматированный вывод, например, так:
Код:
      for j:=1 to n do
      begin
        a[i,j]:=random(51);
        write(a[i,j]:4,' ');
      end;
это, безусловно, не имеет значения, просто тогда матрица получается "ровной"
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерный массив целых чисел А размером N на M. найти максимальный элемент и поменять его местами с A[1,1]. Задача в Pascal flo90 Помощь студентам 4 19.05.2012 20:00
Задача Pascal - двумерный массив целых чисел А flo90 Помощь студентам 1 16.05.2012 11:52
Двумерный массив целых чисел PAREN_DEFO Помощь студентам 4 11.11.2011 08:37
Заполнить массив по спирали BeSHyLLlka Помощь студентам 2 20.09.2011 09:57
Дан двумерный массив случайных чисел. Построить одномерный из исходного, выбрав из него все числа кратные ProWinD Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2008 20:12