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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 21:05   #1
Arshavin10
 
Регистрация: 30.05.2009
Сообщений: 6
Радость Помогите с программой.

Заполнить матрицу заданного размера M(k,l) числами 1,2,3,4 так, чтобы по горизонтали, вертикали и диагонали не было одинаковых рядом стоящих чисел.
Arshavin10 вне форума Ответить с цитированием
Старый 01.06.2009, 16:10   #2
Gongled
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 78
По умолчанию

Умнее ничего придумать не смог :)
Код:
program pr;
uses CRT;
const
n = 7;
m = 6;
type
AR2 = array[1..n,1..m] of integer;
AR1 = array[1..4] of boolean;
var
a : AR2;
b : AR1;
i, j, temp, z : integer;
k : boolean;

// Понулить массив элементов
procedure null_array(var x : AR2);
var
e, r : integer;
begin
     for e:=1 to n do
         for r:=1 to m do
             x[e,r] := 0;
end;

begin
clrscr;
randomize;
null_array(a);

// Пока все переменные не использовались
for i:=1 to 4 do
begin
     b[i] := false;
end;

temp := 0;

for i:=1 to n do
begin
    for j:=1 to m do
    begin
         // Если ячейка не занята числом
         if (a[i,j]=0) then
         begin
              // Генерировать новое число, чтобы избежать повтор
              repeat
                    a[i,j] := random(4)+1;
                    temp := a[i,j];
              until not b[temp];

              // Число использовано
              b[temp] := true;
              
              // Располагать числа, чтобы не повторялись
              if (i+2<=n) then a[i+2,j] := a[i,j];
              if (j+2<=m) then a[i,j+2] := a[i,j];
         end
         else
         begin
              // Дублируем значения
              if (i+2<=n) then a[i+2,j] := a[i,j];
              if (j+2<=m) then a[i,j+2] := a[i,j];
         end;
    end;
end;

// Выводим массив
for i:=1 to n do
begin
     for j:=1 to m do
     begin
          write(a[i,j]:4);
     end;
writeln;
end;
readln;
end.
Пишу глупости.
Gongled вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с программой Mishkaplus Помощь студентам 9 06.01.2009 14:09
Помогите с программой Panda Помощь студентам 4 07.07.2008 18:13
помогите с программой 1234 Общие вопросы Delphi 6 05.03.2008 19:08
помогите с программой LexusSPb Фриланс 2 04.09.2007 16:29