Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как заполнить массив [0..3,0...3]


Страницы:   1 2

~Aid~ ©   (2006-11-19 15:48:00) 

как заполнить массив [0..3,0...3] разными числами от 0 до 15


~Aid~   (2006-11-19 16:45:00) [1]

ыы от [0..15]-так понятно.

вообще написал вроде бы быстро работает..
нехотел рандом потому что еще будет подсчет кол-ва инверсий в массиве.. то есть будет не очень быстро

c:=0;
 for i:=0 to 3 do begin
  for j:=0 to 3 do begin
    mas[i,j]:=c;
    inc(c);
  end;
 end;
 c:=random(5)+50;
 for  i:=1 to c do
  begin
    o1:=random(4);
    p1:=random(4);
    o2:=random(4);
    p2:=random(4);
    c:=mas[o1,p1];
    mas[o1,p1]:=mas[o2,p2];
    mas[o2,p2]:=c;
  end;


Anatoly Podgoretsky   (2006-11-19 16:28:00) [2]

> ~Aid~  (19.11.2006 16:18:18)  [18]

Конечно неуместно, 14 чисел не хватит для заполнения массива из 16 элементов и как ни старайся только зацикливание и получишь.


KilkennyCat   (2006-11-19 16:28:00) [3]

можно несколькими способами. моим, или Ориона... или еще третьим вариантом.
от прогона пустых циклов в моем варианте тоже несложно уйти.


~Aid~   (2006-11-19 16:18:00) [4]

Anatoly Podgoretsky
не уместно


Anatoly Podgoretsky   (2006-11-19 16:16:00) [5]

> ~Aid~  (19.11.2006 16:14:16)  [16]

В институте вывесить объяву - помогите решить, оплату гарантирую.


~Aid~   (2006-11-19 16:14:00) [6]

так как же лучше сделать?


KilkennyCat   (2006-11-19 16:12:00) [7]

> [14] Орион ©   (19.11.06 16:09)

теоретически как раз бесконечно не будет, а вот практически :))
Но, мощная машина успеет отработать :)


Орион   (2006-11-19 16:09:00) [8]

> [12] KilkennyCat ©   (19.11.06 16:05)

Теоретически бесконечный цикл может получиться :)
Лучше сразу заполнить массив числами, а потом рандомное чило рандомных перестановок сделать.


~Aid~   (2006-11-19 16:06:00) [9]

а... щас попробую


Anatoly Podgoretsky   (2006-11-19 16:05:00) [10]

> ~Aid~  (19.11.2006 16:01:07)  [7]

как заполнить массив [0..3,0...3] разными числами от 0 до 15


KilkennyCat   (2006-11-19 16:05:00) [11]

в твоем варианте, методом от противного:
заполняй последовательностью 0..15 случайно выбранные ячейки, с проверкой их на уже заполненность. код будет в пять раз меньше.


KilkennyCat   (2006-11-19 16:04:00) [12]

переписать алгоритм нафиг.


~Aid~   (2006-11-19 16:03:00) [13]

а как поправить?


KilkennyCat   (2006-11-19 16:02:00) [14]

> if findN(c) then  mas[i,j]:=c
>       else goto 1;


вероятно, здесь всегда гоуту. вот и зацикливается.


~Aid~   (2006-11-19 16:01:00) [15]

то есть числа 0,1,..,15

что значит условие от 0?


Anatoly Podgoretsky   (2006-11-19 16:00:00) [16]

> ~Aid~  (19.11.2006 15:53:03)  [3]

4*4 = 16
Плюс не выполняется условие от 0


~Aid~   (2006-11-19 15:58:00) [17]

)) человеком


Джо   (2006-11-19 15:56:00) [18]

Я не могу заставить себя поверить, что подобный код написан человеком (c) Знакомый менеджер.


~Aid~   (2006-11-19 15:53:00) [19]

ыыы... не могу найти почему зацикливается...

label 1;
var
 i,j,c:integer;
 mas:array[0..3,0..3] of integer;
function findN(a:integer):boolean;
var
  g,k:integer;
begin
 for g:=0 to 3 do begin
  for k:=0 to 3 do begin
    if a=mas[g,k] then begin result:=false;exit;end;
  end;
 end;
result:=true;

end;

begin
randomize;
 for i:=0 to 3 do begin
  for j:=0 to 3 do begin
   1: c:=random(14)+1;
      if findN(c) then  mas[i,j]:=c
       else goto 1;
  end;
 end;
 for i:=0 to 3 do begin
  for j:=0 to 3 do begin
   write(mas[i,j],' ');
  end;
  writeln;
 end;
readln;


Anatoly Podgoretsky   (2006-11-19 15:49:00) [20]

> ~Aid~  (19.11.2006 15:48:00)  [0]

В цикле


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо