Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 05.12.2010, 16:24   #1 (permalink)
SVMEREN
Новичок
 
Регистрация: 05.12.2010
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Задача о группах

: группу задать массивом, каждый элемент группы -- строкой из 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).
Дальше можно отдельно сделать процедуру умножения двух строк abcd*xyzw=((ax+bz) mod 4)((ay+bw) mod 4)((cx+dz) mod 4)((cy+dw) mod 4) При этом, конечно, предваритель нужно переводить все в числа, а затем обратно с строку.

Обращаясь к процедуре умножения, можно определить порядок каждого элемента и вывести на экран циклическую подгруппу, порожденную элементом. Все делать в цикле, пока на очередном умножении не получится единичная матрица '1001'.
SVMEREN вне форума   Ответить с цитированием

Старый 05.12.2010, 16:24
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Проблему решать гораздо легче, если набраться информации из схожих тем

Задача по С + +
Задача по С++
Задача

Старый 05.12.2010, 18:55   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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. А еще я не понял - зачем нужно возиться со строками и без конца переводить числа в строки и обратно, если работа идет исключительно с числами? Просто ради дури преподской?
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 11:39.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.