Цитата:
Сообщение от SVMEREN
: группу задать массивом, каждый элемент группы -- строкой из 4 символов.
n:=1 {номер элемента группы}
for i:=0 to 3 do for j:=0 to 3 do for k:=0 to 3 do for l:=0 to 3 do
if (i*l-j*k) mod 4 = 1 {усли определитель равен 1} then begin 1)перевести i, j, k, l в строку
2)присвоить очередному элементу массива а[n] строку ijkl.
3) увеличить счетчик на 1, n:=n+1
end.
После цикла n должно быть равно 61.
Выведи на экран все элементы массива (их 60).
|
Ну вроде тут всё понятно. Пишем программу:
Код:
TYPE
AR=ARRAY[0..3] of Byte;
VAR
A:Array[1..100] of AR;
n,i,j,k,l:Byte;
Function Prod(p1,p2:AR):Byte;
begin
Prod:=((p1[0]*p2[0]+p1[1]*p2[2]) mod 4)*
((p1[0]*p2[1]+p1[1]*p2[3]) mod 4)*
((p1[2]*p2[0]+p1[3]*p2[2]) mod 4)*
((p1[2]*p2[1]+p1[3]*p2[3]) mod 4);
end;
BEGIN
n:=1;
for i:=0 to 3 do
for j:=0 to 3 do
for k:=0 to 3 do
for l:=0 to 3 do
if ((i*l-j*k) mod 4) = 1 then
begin
a[n][0]:=i;
a[n][1]:=j;
a[n][2]:=k;
a[n][3]:=l;
n:=n+1
end;
n:=n-1;
for i:=1 to (n div 6) do
begin
for j:=1 to 6 do
begin
write('(');
for k:=0 to 3 do
write(a[(i-1)*6+j][k]:2);
write(') ');
end;
writeln;
end;
for j:=(n div 6)*6+1 to n do
begin
write('(');
for k:=0 to 3 do
write(a[j][k]:2);
write(') ');
end;
writeln;
readln;
END.
И увы - убеждаемся в том, что элементов массива не 60, а всего 25. В чем ошибка - не знаю.
Цитата:
Дальше можно отдельно сделать процедуру умножения двух строк abcd*xyzw=((ax+bz) mod 4)((ay+bw) mod 4)((cx+dz) mod 4)((cy+dw) mod 4) При этом, конечно, предваритель нужно переводить все в числа, а затем обратно с строку.
|
Непонятно. Я написал функцию, исходя из того, что произведение строк есть число, равное произведению указанных остатков. Или Ваше описание надо понимать так, что произведение строк есть строка, элементами которой являются указанные в скобках остатки? Если так, то функция будет такой:
Код:
Function Prod(p1,p2:AR):AR;
begin
Prod[0]:=((p1[0]*p2[0]+p1[1]*p2[2]) mod 4);
Prod[1]:=((p1[0]*p2[1]+p1[1]*p2[3]) mod 4);
Prod[2]:=((p1[2]*p2[0]+p1[3]*p2[2]) mod 4);
Prod[3]:=((p1[2]*p2[1]+p1[3]*p2[3]) mod 4);
end;
Нельзя ли почетче ставить условия задачи?
Цитата:
Обращаясь к процедуре умножения, можно определить порядок каждого элемента и вывести на экран циклическую подгруппу, порожденную элементом. Все делать в цикле, пока на очередном умножении не получится единичная матрица '1001'.
|
Извините - ни бельмеса не понял. Что за циклические подгруппы, в каком смысле элемент их порождает, как порождает и т.д.
Если Вы хотите получить помощь на форуме, соблаговолите ясно, четко, прозрачно и подробно сформулировать задачу.
P.S. Отговорки типа "А мне так дали" НЕ ПРИНИМАЮТСЯ.
P.P.S. А еще я не понял - зачем нужно возиться со строками и без конца переводить числа в строки и обратно, если работа идет исключительно с числами? Просто ради дури преподской?