Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите решить двумерный массив! 
:(
    Опции темы
chermak
Дата 8.5.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



Даны числа от 1 до 64, генерировать числа по закону равномерного распределения, получить матрицу 8х8, числа должны располагаться по следующей змейке. 
(1)  (3)  (4)  (10)(11)(21)(22)(36) 
(2)  (5)  (9)  (12)(20)(23)(35)(37) 
(6)  (8)  (13)(19)(24)(34)(38)(49) 
(7)  (14)(18)(25)(33)(39)(48)(50) 
(15)(17)(26)(32)(40)(47)(51)(58) 
(16)(27)(31)(41)(46)(52)(57)(59) 
(28)(30)(42)(45)(53)(56)(60)(63) 
(29)(43)(44)(54)(55)(61)(62)(64) 

PM MAIL   Вверх
ama_kid
Дата 9.5.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



не знаю, как связано
Цитата(chermak @  8.5.2007,  22:47 Найти цитируемый пост)
Даны числа от 1 до 64
и
Цитата(chermak @  8.5.2007,  22:47 Найти цитируемый пост)
генерировать числа по закону равномерного распределения
но вот пример генерации требуемой матрицы:
Код
program Zmeika;
const NMAX = 8;
var
 A:array[1..NMAX,1..NMAX] of integer;
 i,j,k,m :integer;
 Counter:integer;

procedure PrintArray;
var
 s:string;
 i,j:integer;
begin
 for i:=1 to NMAX do
  begin
   for j:=1 to NMAX do
    begin
     str(A[i,j],s);
     while length(s)<2 do s:='0'+s;
     write(s+' ');
    end;
   writeln;
  end;
end;

begin
 i:=NMAX; j:=1; k:=1;m:=NMAX;
 for Counter:=1 to (NMAX*NMAX div 2 +1) do
  begin
   A[k,j]:=Counter;
   A[i,m]:=NMAX * NMAX - Counter + 1;
    If (k + j + NMAX) Mod 2 = 1 Then
     begin
      If k - 1 >= 1 Then k := k - 1;
      If j + 1 <= NMAX Then j := j + 1;

      If i + 1 <= NMAX Then i := i + 1;
      If m - 1 >= 1 Then m := m - 1;
     end
    Else
     begin
      If k + 1 <= NMAX Then k := k + 1;
      If j - 1 >= 1 Then j := j - 1;

      If i - 1 >= 1 Then i := i - 1;
      If m + 1 <= NMAX Then m := m + 1;
     end;
  end;
 PrintArray;
 readln;
end.




--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
chermak
Дата 9.5.2007, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



Спасибо, но мне нужно чтобы числа появлялись по заданной змейке! Это реально вообще сделать?
PM MAIL   Вверх
Ofer
Дата 13.5.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



А чем не удовлетворяет предоставленный алгоритм? Числа вроде выводятся в нужной последовательности... И потом, зачем
Цитата(chermak @  8.5.2007,  22:47 Найти цитируемый пост)
генерировать числа по закону равномерного распределения
(кстати, что это за закон и каков его принцип?), если числа уже заданны?
PM MAIL ICQ   Вверх
corpsehunter
Дата 14.5.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Все понятно, когда-то тоже делали что-то похожее - надо чтобы ты пробегал двумерную матрицу в определенном порядке. Конечно это возможно. Тебе надо просто описать один шаг, т.е. :
1. Спускамеся на 1 ячейку вниз, если не выходим за границы массива, иначе на 1 ячейку вправо.
2. Поднимаемся вправо вверх, пока не упремся в границу матрицы.
3. Делам шаг 1 ячейку вправо, если не выходим за границы массива, иначе на 1 ячейку вниз.
4. Спускаемся влево вниз, пока не упремся в границу матрицы.

И все это пускаешь по циклу, пока не доходишь до угла матрицы (это более универсально, т.к. не зависит от размера), либо пока переменная счетчик (которую ты каждый раз увеличиваешь и ей заполняешь ячейки массива) не достигнет 64.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.