IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Латинский Квадрат
tricker
сообщение 7.11.2003 12:05
Сообщение #1


Гость






Люди помогите !!!
Мне срочно до завтра необходимо написать программу «Латинский квадрат». Суть в том что если Вы вводите число 5 то строится матрица  вида

1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

И так далее, я написал половину программы и у меня строится матрица вида,

1 2 3 4 5
2 3 4 5 1
3 4 5 0 2
4 5 0 0 3
5 0 0 0 4

а дальше не могу написать . Я могу выслать текст программы что бы кто – нибудь дописал мне ее, т.к. я не могу ее доделать.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 16.12.2006 12:34
Сообщение #2


Гость






Цитата
А как сделать без "set of byte" а то мне нельзя с ней.
Вот так:

const
  (*
  n = 4;
  a: array[1 .. n, 1 .. n] of integer = (
    (1, 2, 3, 4),
    (2, 3, 4, 1),
    (3, 4, 1, 2),
    (4, 1, 2, 3)
  );
  *)


  n = 3;
  a: array[1 .. n, 1 .. n] of integer = (
    (1, 2, 3),
    (3, 1, 2),
    (2, 3, 1)
  );

type
  { Это - вместо того множества, которое было раньше }
  vector = array[1 .. n] of integer;


var
  elems: vector;
  value, i, j, k, s, sum, check: integer;
  ok, is_col: boolean;

begin
  s := 0;
  {
    Вначале считаем сумму, которая должна получаться в каждом столбце/строке
    (согласно определению латинского квадрата)
  }
  for i := 1 to n do s := s + i;

  ok := true;  { изначально считаем, что все в порядке }

  { вначале (is_col = false) проходим по строкам, потом (когда is_col = true) - по столбцам }
  for is_col := false to true do begin
    i := 1; 
    {
      здесь цикл заменен на While, чтобы при нахождении ошибки сразу же
      закончить просмотр строк/столбцов, если была хоть одна ошибка, то это - уже
      НЕ латинский квадрат
    }
    while (i <= n) and ok do begin
      sum := 0; { обнуляем сумму для данной строки/столбца, и наше "псевдомножество" }
      for k := 1 to n do elems[k] := 0;

      for j := 1 to n do begin

        {
          теперь выбираем текущий элемент (в зависимости от того, со строками
          или столбцами мы работаем, индексы меняются местами)
        }
        if is_col then value := a[j, i]
        else value := a[i, j];

        { добавляем элемент к текущей сумме строки/столбца }
        sum := sum + value;
        {
           если элемент находится в допустимых границах (1 .. N)
           и до этого в данном столбце/строке еще не встречался,
           то записываем его, как уже встреченный, иначе - ошибка
           (либо одно и то же число встречается в строке больше одного раза,
           либо число больше N или меньше единицы, что тоже недопустимо)
        }
        if (value > 0) and (value <= n) and (elems[value] = 0) then
          inc(elems[value])
        else ok := false;

      end;

      { Ну, и проверяем еще сумму на ошибочность - отличается ли она от "эталонной" }
      ok := (ok and (sum = s)); 
      inc(i);
    end;
  end;

  if ok then writeln('Yes')
  else writeln('No');

end.

Вот и все... Так устроит?
 К началу страницы 
+ Ответить 

Сообщений в этой теме
tricker   Латинский Квадрат   7.11.2003 12:05
Serega   Re: Латинский Квадрат   7.11.2003 15:39
-=BR@BUS=-   А как сделать, чтобы программа определяла является...   7.12.2006 22:15
volvo   Я бы сделал так: const { Для проверки } n = 4;...   7.12.2006 22:41
-=BR@BUS=-   ВОТ СПАСИБО!!! :good:   7.12.2006 23:27
-=BR@BUS=-   А как сделать без "set of byte" а то мне...   15.12.2006 18:02
Malice   А вот так попробуй: var i,j:integer; b:boolean; be...   15.12.2006 22:53
-=BR@BUS=-   Вот такую матрицу 1 2 3 2 3 1 3 1 2 программа расп...   16.12.2006 0:46
Malice   Может по тому, что это совсем другая матрица, запо...   16.12.2006 1:03
-=BR@BUS=-   Но ведь эта матрица тоже является латинским квадра...   16.12.2006 12:05
volvo   Вот так: const (* n = 4; a: array[1 .. n, 1...   16.12.2006 12:34
-=BR@BUS=-   Вот чё в итоге у меня получилось, но программа все...   21.12.2006 19:05
volvo   Я тебе привел рабочую программу, которая давала пр...   21.12.2006 19:08
-=BR@BUS=-   Мне нужно чтобы матрица вводилась во время выполне...   21.12.2006 19:13
мисс_граффити   не умеешь писать ввод матрицы?   21.12.2006 19:30
volvo   sum := 0; { обнуляем сумму для данной строки...   21.12.2006 19:34
-=BR@BUS=-   :mega_chok: Как всегда => верно volvo   21.12.2006 19:43


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 30.07.2025 5:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"