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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2009, 16:03   #1
NeGaTiVe
 
Регистрация: 31.10.2009
Сообщений: 5
По умолчанию Заполнить массив змейкой

Спасибо за помощь, разобрался
Изображения
Тип файла: jpg massiv.JPG (30.5 Кб, 558 просмотров)

Последний раз редактировалось NeGaTiVe; 01.11.2009 в 00:50.
NeGaTiVe вне форума Ответить с цитированием
Старый 31.10.2009, 17:03   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Вот Вам задача: Змейка.
Вот мой солюшн этой задачи:
Код:
var input,output:text;i,q,n,j,t,x,y:longint; ar:array[1..100,1..100] of longint;
begin
assign(input,'input.txt');reset(input);
assign(output,'output.txt');rewrite(output);
readln(input,n);
for i:=1 to n*2-1 do begin if i mod 2=1 then begin x:=0;y:=i+1; 
for t:=1 to i do begin inc(x);
dec(y);if (x>0) and (x<=n) and (y>0) and (y<=n) then begin inc(q);ar[x,y]:=q;end;end;end 
else begin y:=0;x:=i+1;
for t:=1 to i do begin inc(y);dec(x);if (x>0) and (x<=n) and (y>0) and (y<=n) then begin inc(q);ar[x,y]:=q;end;end;end;end;

for i:=1 to n do begin for j:=1 to n do begin write(output,ar[i,j],' ');end;writeln(output); end;

close(output);close(input);
end.
Смотрите, читайте, анализируйте... Делайте, что хотите
LeBron вне форума Ответить с цитированием
Старый 31.10.2009, 18:00   #3
NeGaTiVe
 
Регистрация: 31.10.2009
Сообщений: 5
По умолчанию

это как-то очень сложно, мне бы сделать двумерный массив, как на рисунке (см.1 пост) без ввода чисел...
NeGaTiVe вне форума Ответить с цитированием
Старый 31.10.2009, 18:52   #4
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от NeGaTiVe Посмотреть сообщение
это как-то очень сложно, мне бы сделать двумерный массив, как на рисунке (см.1 пост) без ввода чисел...
Тогда такой вариант:
Код:
var {input,output:text;}i,q,n,j,t,x,y:longint; ar:array[1..100,1..100] of longint;
begin
{assign(input,'input.txt');reset(input);
assign(output,'output.txt');rewrite(output);  }
readln(n);
for i:=1 to n do begin if i mod 2=1 then begin x:=0;y:=i+1;
for t:=1 to i do begin inc(x);
dec(y);if (x>0) and (x<=n) and (y>0) and (y<=n) then begin inc(q);ar[x,y]:=q;end;end;end
else begin y:=0;x:=i+1;
for t:=1 to i do begin inc(y);dec(x);if (x>0) and (x<=n) and (y>0) and (y<=n) then begin inc(q);ar[x,y]:=q;end;end;end;end;
for i:=1 to n do begin for j:=1 to n do begin write({output,}ar[i,j],' ');end;writeln{(output)}; end;
{close(output);close(input); }
end.
Здесь закоментировал изменения относительно начального - работу с файлами вырезал, так же поменял одно из значений внутри кода. Работает корректно. В коде оставил ту часть, которая связана с заполнением нижней части массива. Потрудитесь найти и удалить ее сами - она хоть и не делает решение неверным, но явно лишняя. Если надо - можете вписать свои комментарии и сделать позиционированный вывод. В общем, доделать.
По поводу ввода чисел - и в этом, и в предидущем коде надо ввести только одно число - размер массива. Если размер стандартный, то объявите его константой, или вместо считывания напишите присвоение.
LeBron вне форума Ответить с цитированием
Старый 31.10.2009, 23:57   #5
NeGaTiVe
 
Регистрация: 31.10.2009
Сообщений: 5
По умолчанию

Спасибо за помощь, разобрался

Последний раз редактировалось NeGaTiVe; 01.11.2009 в 00:50.
NeGaTiVe вне форума Ответить с цитированием
Старый 28.03.2011, 08:40   #6
Евгенийgg
Новичок
Джуниор
 
Регистрация: 28.03.2011
Сообщений: 3
По умолчанию

помогите доделать 2 4асть немогу((

Код:
var a:array[1..100,1..100] of integer;
    i,j,n,m,k,l,b:integer;
begin
read(n); k:=0; m:=0;    l:=sqr(n); b:=0;
repeat
 l:=l div 10;
 b:=b+1;
until l=0;
while m<>n do
 begin
  m:=m+1;
   if m mod 2<>0 then
    for i:=1 to m do
     begin
      k:=k+1;
      for j:=1 to m do
       if i+j=m+1 then a[i,j]:=k;
     end
    else
     begin
      k:=k+m+1;
      for i:=1 to m do
       begin
        k:=k-1;
        for j:=1 to n do
         if i+j=m+1 then a[i,j]:=k;
        end;
      k:=k+m-1;
     end;
     end;
  for i:=1 to n do
   begin
    for j:=1 to n do write(a[i,j]:b,' ');
    writeln;
   end;
end.

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

Последний раз редактировалось Serge_Bliznykov; 28.03.2011 в 09:26.
Евгенийgg вне форума Ответить с цитированием
Старый 28.03.2011, 10:30   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне, честно говоря, решение от LeBron более понятно.. Только доработать его чуток и всё..

а ещё можете сходить сюда:
http://programmersforum.ru/showthread.php?t=3338
http://www.programmersforum.ru/showthread.php?t=27203
http://www.programmersforum.ru/showthread.php?t=80002

ну ещё можно поискать: например, по ключевой фразе "Заполнение матрицы зигзагом."


по одной из ссылочек взял решение (c) eoln
Код:
var a: array[1..100, 1..100] of integer;
  i, j, n, l, k, b, q : integer;
begin
  read(n);
  l := sqr(n); b := 0;
  repeat
    l := l div 10;
    b := b + 1;
  until l = 0;


  { алгоритм для квадратной матрицы }
  q := 0;
  for i := 1 to 2 * n - 1 do
  begin
    if i > n then k := n else k := i; {ограничение для строк}
    if i mod 2 = 1 then {вверх}
      for j := 1 + i - k to k do begin
         inc(q);
         a[1 - j + i, j] := q
      end
    else {вниз}
      for j := k downto 1 + i - k do begin
        inc(q);
        a[1 - j + i, j] := q
      end;
  end;


  for i := 1 to n do
  begin
    for j := 1 to n do write(a[i, j]: b, ' ');
    writeln;
  end;
end.

Последний раз редактировалось Serge_Bliznykov; 28.03.2011 в 10:52.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2011, 11:15   #8
Евгенийgg
Новичок
Джуниор
 
Регистрация: 28.03.2011
Сообщений: 3
По умолчанию

Пишет ,что решение долгое надо короче(
Евгенийgg вне форума Ответить с цитированием
Старый 28.03.2011, 11:29   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) кто пишет, что надо короче?!
Это решение от eoln надо короче?! типа полтора десятка строк это слишком много?!!
меньше строчек кода надо? Так запишите в одну строчку весь цикл!

2) короче - можно выкинуть вычисление b (и саму переменную b)
как ещё короче - я лично не знаю... Пусть тот, кто знает - подскажет..
я всё сказал..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2011, 17:08   #10
Евгенийgg
Новичок
Джуниор
 
Регистрация: 28.03.2011
Сообщений: 3
По умолчанию

http://acmp.ru/index.asp?main=task&id_task=197
тута попробуй решить все время пишет ''Time limit exceeded''
Евгенийgg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить двумерный массив константами Lacoste Общие вопросы Delphi 4 15.02.2009 14:37
Заполнить массив A следующим образом: 0 0 0 …0 Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 7 18.11.2008 21:07
Заполнить массив и записать в файл Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 27.05.2008 20:02
Заполнить массив случайными числами forumu Общие вопросы Delphi 13 03.12.2007 22:11