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

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

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

> Латинский Квадрат
сообщение
Сообщение #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

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


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

 





- Текстовая версия 29.04.2024 18:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name