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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2013, 16:37   #1
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию змейка

очень долго уже пытаюсь сделать змейку вида:
Код:
0  1  5  6                                                                                                              
2  4  7 12                                                                                                      
3  8  11 13                                                                                                                
9  10 14 15
проблемы с вычислением зависимости i,j
Код:
program P4;
uses crt;
Var
  a:array[1..10,1..10] of integer;
  k,i,j,N,d,k1,d1,m,l,t:integer;
   Q:real;

Begin{program}
  ClrScr;
  writeln('введите размер матрицы');
  readln(N);

  for k:=0 to sqr(n)-1 do
  begin
    if k<=((n*(n+1))div 2)-1 then {если к в верхнем треугольнике}
    begin
      d:=trunc((1+sqrt(1+8*k))/2); {d-диагональ}
      t:=d-1;
      l:=k-((1+(d-1))*(d-1))div 2;

      if d mod 2<>0 then {если d не четная}
      begin
        m:=k-((d*(d-1))div 2);
        i:=d-m;
        j:=d-i+1;

      end
      else
      begin
        m:=k-((d*(d-1))div 2);
        j:=d-m;
        i:=d-j+1;

      end;
    end
    else
    begin
      k1:=(sqr(n)-1)-k;
      d1:=trunc((1+sqrt(1+8*k1))/2);
      d:=2*n-d1;
      t:=d-1;
      l:=k-((1+(d-1))*(d-1))div 2;
      if d mod 2<>0 then
      begin
        m:=k-((d*(d-1))div 2);
        i:=d-m;
        j:=d-i+1;
        i:=(n-1)-i;
        j:=(n-1)-j;

      end
      else
      begin
        m:=k-((d*(d-1))div 2);
        j:=d-m;
        i:=d-j+1;
        j:=(n-1)-j;
        i:=(n-1)-i;

      end;
    end;
    writeln('полученная матрица*:');
    writeln(a[i,j]);
  end;
  readkey;
end.{program}

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

поищите по форуму заполнение массива змейкой
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.06.2013, 18:35   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
var
  n, i, j, d, k: integer;

begin
  readln(n);
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      k := i + j - 1;
      d := k - 1;
      write(k * d div 2 + d mod 2 * i + k mod 2 * j - (ord(d > n) * (d - n) + ord(k > n)) * (k - n) - 1, ' ');
    end;
    writeln;
  end;
  readln;
end.
Это результат многочисленных упрощений кода:
Код:
var
  n, i, j, d, k, s, h: integer;

begin
  readln(n);
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      k := i + j - 1;
      d := k - 1;
      s := (1 + d) * d div 2;
      if d > n then
        dec(s, (1 + d - n) * (d - n));
      h := j;
      if d >= n then
      begin
        dec(k, 2 * (d - n + 1));
        dec(h, d - n + 1);
      end;
      if d mod 2 = 0 then
        write(s + h - 1, ' ')
      else
        write(s + k - h, ' ');
    end;
    writeln;
  end;
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.06.2013 в 19:14.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
змейка spydark91 Общие вопросы Delphi 4 16.07.2011 15:12
Змейка на c++ Banner Помощь студентам 1 14.05.2011 16:21
змейка =) romiccccc Помощь студентам 0 12.05.2010 11:08
ЗМЕЙКА(((( mizantrop32 Общие вопросы C/C++ 2 07.04.2010 17:10
Змейка(С++) MISHA13 Помощь студентам 1 08.02.2009 09:35