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

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

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

 
 Ответить  Открыть новую тему 
> Помогите, с программкой, В самом конце затруднение
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


Вот задание:
Латинский квадрат. Латинским квадратом пордка n называется квадратная таблица размером nxn каждая строка и каждый столбец которой содержит все числа от 1 до n. Проверить является ли заданная целочисленная матрица латинским квадратом.

const nmax=100;mmax=100;
type matrix=array [1..nmax,1..mmax] of real;
var k,i,j,n,m:integer;
x:real;
a:matrix;
f:boolean;
begin
writeln('Vvedite mashtab matrix');
read (n,m);
writeln('vvedite matrix');
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
begin
for i:=1 to n do
for k:=1 to n-1 do
begin
j:=1;
repeat {упорядочивает эл-ты каждой строки матрицы по возрастанию }
if a[i,j]>a[i,j+1] then
begin
x:=a[i,j+1];
a[i,j+1]:=a[i,j];
a[i,j]:=x;
j:=j+1;
end
else
j:=j+1
until (j=n);
end;
begin
writeln ('_____MATRICA_____');
for i:=1 to n do
begin
for j:=1 to m do
write(' ', a[i,j]);
writeln;
end;
f:=false;
j:=1;
for i:=1 to n do
for j:=1 to m do
if (m=n) and (a[i,j+1]-a[i,j]=1) then {Вот тута и проблемка если следующий эл-нт меньше
предыдущего на 1 то латинский квадрат иначне нет.
Но у мя че то не получается, а мозги уже отказываются думать =) }
f:=true;
if f then
writeln ('matrica Latinskii kvadrat')
else
writeln ('matrica ne latinskii kvadrat')
end;
end;
end.



Напишите плиз что там за проверочку в конце надо поставить =)

Сообщение отредактировано: sintanial -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вот так проверяется, Латинский ли квадрат:
Латинский Квадрат
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


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

если следующий эл-нт был больше предыдущего на 1 и что бы это выполнялось во всех строчках то печатать Латинский квадрат иначе печатать не латинский квадрат

Добавлено через 7 мин.


З.Ы. И еще кое что. Вот по это ссылки Латинский Квадрат, я зашел туда, скопировал код в паскаль свой и в строчке

for is_col := false to true do begin - выдает ошибку что переменная цикла фор должна иметь тип integer,char,byte, интервальный или перечислимый
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Я сделал большую её часть
Ты сделал неправильную часть: латинский квадрат содержит цифры в определенном порядке, а сортировка нарушает этот порядок... Хочешь идти своим путем - иди, но потом, когда потеряешь время и ничего не получится, не говори, что тебя не предупредили...

Добавлено через 1 мин.
Цитата
for is_col := false to true do begin - выдает ошибку что переменная цикла фор должна иметь тип integer,char,byte, интервальный или перечислимый
по-твоему, Boolean это какой тип?

P.S.
Объясните мне, ПОЧЕМУ ни у кого не компилируется то, что у моего компилятора Паскаля вопросов не вызывает? Это что, я нашел какой-то особый дистрибутив, с расширенными возможностями, или как? У кого-то еще программа по ссылке выдает ту же ошибку? Или это неумение авторов подобных заявлений делать ДАЖЕ Copy/Paste?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


в каком порядке ? По типу такого:
12345
23451
34512
45123
51234

но ведь
35241
21354
43125
52413
14532
Это как я понимаю тоже латинский квадрат.
Я что бы проверить является ли матрица латинским квадратом сначало сортирую матрицу по возрастанию, в каждой строке, и проверяю следующий элемент больше предыдущего на 1 если это выполняется во всех строчках то это латинский квадрат иначе нет(вот в проверки у меня и ошибка). А вроде как мне кажется идея проверки латинский ли кв или нет правельна. Если не правльно то поясните почаму пожалуйста !!?
Цитата
P.S.
Объясните мне, ПОЧЕМУ ни у кого не компилируется то, что у моего компилятора Паскаля вопросов не вызывает? Это что, я нашел какой-то особый дистрибутив, с расширенными возможностями, или как? У кого-то еще программа по ссылке выдает ту же ошибку? Или это неумение авторов подобных заявлений делать ДАЖЕ Copy/Paste?


Откуда я знаю, я только на первом курсе, и паскаль только не давно начал осваивать, а до первого курса я вообще даже не знал что такое паскаль =), так что не ругайте строга, я только новечек. Я не знаю почему у меня не компелируется, я че могу поделать блин =). Кстати говоря я уже одну программу пытался так сделать в компутерном зале на мехмате(механико-математический факультет), но выдают такое же что и щас.
Цитата
Или это неумение авторов подобных заявлений делать ДАЖЕ Copy/Paste?

Код я скопировал правельно!!!


Сообщение отредактировано: sintanial -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


Помогите плиз, нужно это сдать до 2 часов дня=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Все компилируется.
Скажи хотя бы, какая у тебя версия? Help -> About ...


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
но ведь
35241
21354
43125
52413
14532
Это как я понимаю тоже латинский квадрат.

А ты что, после сортировки в состоянии отличить, сортировалась ли матрица, которую ты привел, или
12345
12345
21345
12345
13245
? Упорядоченные-то матрицы будут одинаковы!!! И что? то, что привел я - тоже латинский квадрат?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


Вот дописал программку, вроде работает правельно, так что выложу на всякий случай вдруг кому нить понадобится в таком алгоритме.

const nmax=100;mmax=100;
type matrix=array [1..nmax,1..mmax] of real;
var k,i,j,n,m:integer;
x,y:real;
a,b:matrix;
f1,f2,t1,t2:boolean;
begin
writeln('Vvedite mashtab matrix n х m');
read (n,m);
t1:=true;
t2:=true;
if m<>n then
writeln ('Матрица не квадратная')
else
writeln('vvedite matrix');
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
b:=a;
begin
for i:=1 to n do
for k:=1 to n-1 do
begin
j:=1;
repeat{упорядочиваем элементы матрицы по строкам в порядке возрастания}
if a[i,j]>a[i,j+1] then
begin
x:=a[i,j+1];
a[i,j+1]:=a[i,j];
a[i,j]:=x;
j:=j+1;
end
else
j:=j+1
until (j=n);
end;
f1:=false;
for i:=1 to n do
begin
j:=1;
repeat
if (m=n) and (a[i,j+1]-a[i,j]=1) then
begin
f1:=true;
j:=j+1
end
else
begin
f1:=false;
{ j:=j+1 }
end;
if not f1 then
t1:=f1;
until not f1 or (j=n);
end;
begin
for j:=1 to n do
for k:=1 to n-1 do
begin
i:=1;
repeat{упорядочиваем элементы матрицы по столбцам в порядке возрастания}
if b[i,j]>b[i+1,j] then
begin
y:=b[i+1,j];
b[i+1,j]:=b[i,j];
b[i,j]:=y;
i:=i+1;
end
else
i:=i+1
until (i=n);
end;
f2:=false;
for j:=1 to n do
begin
i:=1;
repeat
if (m=n) and (b[i+1,j]-b[i,j]=1) then
begin
f2:=true;
i:=i+1
end
else
begin
f2:=false;
end;
if not f2 then
t2:=f2;
until not f2 or (i=n);
end;
if not t1 and not t2 or t1 and not t2 or not t1 and t2 then
writeln ('матрица не является латинским квадратом');
if t1 and t2 then
writeln ('матрица яв латинский квадрат')
end;
end;
end;
end;
end.



Сообщение отредактировано: sintanial -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Не работает твоя программа:
    (1, 2, 3)
(3, 1, 2)
(2, 3, 1)
не признается Латинским Квадратом... Исправляй...

Ага... Уже исправил...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

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

 





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