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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 00:00   #1
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
Вопрос задача паскаль, скорее всего массив+рекурсия(хотя у меня другой способ)

решаю, решаю некак не дорешаю. Задача: задано число n<100, надо вывести "улитку" цифр в квадрат этого числа.(да условие неясное) вот примеры:
напиример
Код:
Н=2 то будет следуйшее
12
43
Н=3
Код:
123
894
765
заметил следуйщую зависимость первая верхняя строчка идет просто подряд остальные идут по 2 раза кол-во цифр (и 2 поворота, но количество тоже) и после того их кол-во уменьшаеться, это заметно на примере более крупном

Код:
1   2   3   4  5
16 17 18 19 6
15          20 7
14          21 8
13 12 11 10 9
тут хороше заметно что 1-й пункт 12345, далее 2 поворота по 4 цифры
это: 6789 и 10 11 12 13 (уже 4 цифры) далее 14 15 16 и 17 18 19 (по 3 и т.д.)

я начал решать и записывал в массив это дело, но закончил на 2-ом повороте далее не получаеться, с выводом тоже все просто(могу показать)
IvaniuS вне форума Ответить с цитированием
Старый 23.12.2009, 00:11   #2
Анатоль
Пользователь
 
Регистрация: 17.12.2009
Сообщений: 74
По умолчанию

Всё просто. Сначала помечаешь все элементы массива -1.
Теперь пока можешь двигаешься вправо(пока существует соседняя клетка и там стои -1). Потом пытаешься двигаться вниз. Потом влево, Потом вверх. И так зацикливаешь программу пока всё не обойдёшь.
Это 4 цикла while которые должны ити друг за другом.
Если чё не понятно что я объянил спроси.
Анатоль вне форума Ответить с цитированием
Старый 23.12.2009, 00:23   #3
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Анатоль нет спасибо все ясно, но есть пару но тут будет не while а for т.к. в версиях паскаля до 7 нету динамических массивов и я сразу задаю максимально возможный (10000х10000) и тут такой фокус не пройдет, хотя я только что подумал и понял ты немножко неправельно дал идею... надо менять на -1 не все элементы массива, а только н*н т.е. наш квадрат и тогда этот фокус пройдет.. сейчас попробую потом дам код
IvaniuS вне форума Ответить с цитированием
Старый 23.12.2009, 00:36   #4
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

а почему бы не сделать тупо в лоб??? Большеватая конечно получится но все же
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:46   #5
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

Код:
const n=5;
var
  i,j,k,l,m:integer;
  a:array [1..n,1..n] of integer;
begin
  l:=1;
  m:=n;
  k:=1;
  while k<=n*n do
  begin
  for i:=l to m do
    begin
    a[l,i]:=k;
    Inc(k);
    end;

  for i:=l+1 to m do
    begin
    a[i,m]:=k;
    Inc(k);
    end;

  for i:=m-1 downto l do
    begin
    a[m,i]:=k;
    Inc(k);
    end;

  for i:=m-1 downto l+1 do
    begin
    a[i,l]:=k;
    Inc(k);
    end;
  inc(l);
  dec(m);
  end;

  for i:=1 to n do
    begin
    for j:=1 to n do
      write(a[i,j]:3);
    writeln;
    end;
  readln;
end.
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:47   #6
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

никакой рекурсии и никаких закономерностей тупо в лоб
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:54   #7
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

А Анатоль привильно дал идею только в паскале то все элементы все равно зануляются и можно так же смотреть не нулевая ли ячейка))
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:54   #8
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от IvaniuS Посмотреть сообщение
Анатоль нет спасибо все ясно, но есть пару но тут будет не while а for т.к. в версиях паскаля до 7 нету динамических массивов и я сразу задаю максимально возможный (10000х10000) и тут такой фокус не пройдет, хотя я только что подумал и понял ты немножко неправельно дал идею... надо менять на -1 не все элементы массива, а только н*н т.е. наш квадрат и тогда этот фокус пройдет.. сейчас попробую потом дам код
и как же ты такой гигантский массив опишешь? у TP макс. размер стека 65520, ты даже 500x500 типа byte описать не сможешь
Alex_FF вне форума Ответить с цитированием
Старый 23.12.2009, 01:51   #9
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

незнаю почему, но у меня такой массив отлично работает.
2Нур читай мой 2-ой пост и вот как я вывожу
Код:
for i:=1 to n do
 for j:=1 to n do
  if j=n then
   writeln(array[i,j])
  else write(array[i,j]);
IvaniuS вне форума Ответить с цитированием
Старый 23.12.2009, 06:25   #10
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

У тебя проблема с решением или выводом???
Нур вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при запуске фотошопа он съедает 1Гб памяти с системного диска (:С), у меня там осталось всего 195Мб Deema Софт 2 15.06.2009 21:57
паскаль задача на массив matrix2010 Помощь студентам 1 09.02.2009 02:07
Паскаль. задача на массив narkozz Паскаль, Turbo Pascal, PascalABC.NET 3 23.05.2007 20:48