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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2015, 19:10   #1
Street-Striker
 
Регистрация: 28.08.2015
Сообщений: 6
По умолчанию Змейка без двумерных массивов Pascal

Пожалуйста помогите срочно!!!
Вывести числа от 1 до N^2 без использования массивов и двумерных массивов следующим образом (N вводится с клавиатуры, например N=4):
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
Не понимаю как это можно решить без двумерных массивов!

Последний раз редактировалось Street-Striker; 14.09.2015 в 22:14.
Street-Striker вне форума Ответить с цитированием
Старый 14.09.2015, 19:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не понимаю как это можно решить без двумерных массивов!
А как с двумерными массивами знаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2015, 20:10   #3
Street-Striker
 
Регистрация: 28.08.2015
Сообщений: 6
По умолчанию

Знаю конечно.
Street-Striker вне форума Ответить с цитированием
Старый 14.09.2015, 20:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну вот ты там заполняешь массив по координатам. Так? Замени заполнение массива переводом курсора в консоли и получишь работу без массива
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2015, 20:29   #5
Street-Striker
 
Регистрация: 28.08.2015
Сообщений: 6
По умолчанию

Извините, конечно, но я вас не понял.
Пожалуйста, измените мой код так, как вы написали.
Вот мой оптимизированный код:

var n,i,j,l,k: integer;
a: array [1..100,1..100] of int64;

procedure Q;
begin
k:=k+1;
a[i,l-i+1]:=k
end;

begin
read(n);
for l:=1 to 2*n-1 do
if l>n then
if odd(l) then for i:=l-n+1 to n do Q
else for i:=n downto l-n+1 do Q
else if odd(l) then for i:=1 to l do Q
else for i:=l downto 1 do Q;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln
end
end.

Последний раз редактировалось Street-Striker; 14.09.2015 в 20:32.
Street-Striker вне форума Ответить с цитированием
Старый 14.09.2015, 20:42   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот что я имел ввиду:
Код:
uses crt;
var n,i,j,l,k: integer;

procedure Q;
var x,y:integer;
begin
k:=k+1;
x:=i*5;
y:=(l-i+1);
gotoxy(x,y); write(k:5);
end;

begin
n:=5;   clrscr; k:=1;
for l:=1 to 2*n-1 do
  if l>n then
    if odd(l) then for i:=l-n+1 to n do Q
    else for i:=n downto l-n+1 do Q
  else if odd(l) then for i:=1 to l do Q
  else for i:=l downto 1 do Q;
  readln;
end.
Только это классичесий паскаль, а у тебя АБЦ что ли?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2015, 20:44   #7
Street-Striker
 
Регистрация: 28.08.2015
Сообщений: 6
По умолчанию

У меня Free Pascal/Pascal ABC

Спасибо. А разве у меня под Turbo Pascal не подходит?

а, ну да, int64-Free Pascal' евский, не относится к Turbo Pascal

Последний раз редактировалось Stilet; 14.09.2015 в 20:56.
Street-Striker вне форума Ответить с цитированием
Старый 14.09.2015, 20:49   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Ну с переводом каретки скучно
Интереснее вывести формулу, зависящую от координат:
Код:
for i := 0 to n - 1 do
begin
  for j := 0 to n - 1 do
  begin
    k := i + j;
    write(1 + k * (k + 1) div 2 - ord(k > n) * (k - n) * (k - n + 1) + (k mod 2) * j + ((k + 1) mod 2) * i - ord(k >= n) * (k - n + 1), ' ');
  end;
  writeln;
end;
Вот неупрощенная формула.
Можно ее попробовать поупрощать:
Код:
1) 1 + k * (k + 1) div 2 - ord(k > n) * (k - n) * (k - n + 1) + (k mod 2) * j + ((k + 1) mod 2) * i - ord(k >= n) * (k - n + 1)
2) 1 + k * (k + 1) div 2 - ord(k > n) * sqr(k - n + 1) + (k mod 2) * j + ((k + 1) mod 2) * i - ord(k = n)
3) ord(k <> n) + k * (k + 1) div 2 - ord(k > n) * sqr(k - n + 1) + (k mod 2) * j + ((k + 1) mod 2) * i
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.09.2015 в 20:57.
BDA на форуме Ответить с цитированием
Старый 14.09.2015, 20:57   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У меня Free Pascal/Pascal ABC
Так не бывает )
Либо у тебя Фри, либо Абэцэйка - выбери что-то.
Так то мой пример что там что там не сработает, но смысл я надеюсь донес.
Цитата:
Интереснее вывести формулу, зависящую от координат
Ну дык надо твой пример внести в наш FAQ
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2015, 21:20   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну дык надо твой пример внести в наш FAQ
Ну Вы уже внесли
PS Чуть поправил там код
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка двумерных массивов Jalgas-xan Паскаль, Turbo Pascal, PascalABC.NET 1 18.01.2013 13:50
Обработка двумерных массивов (Pascal) Olga Sharik Помощь студентам 0 01.05.2012 17:52
обработка двумерных массивов (pascal) likanmaster Помощь студентам 0 03.12.2011 14:25
Turbo Pascal - Композиция Двух Двумерных Массивов размером 100х100 ulala Помощь студентам 2 09.11.2011 15:54
Обработка двумерных массивов Alexxxxxx Помощь студентам 5 23.10.2011 00:07