Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 15.02.2004
Откуда: Уфа-сити
Надо в Паскале сложить (умножить) 2 матрицы. Какие есть для этого функции?
Ну или хотя бы сложение по модулю 2 чисел, дальше сам разберусь.

_________________
Мы сделаны из мяса.



Партнер
 

Junior
Статус: Не в сети
Регистрация: 07.05.2005
Откуда: г. Владимир
1.Размерность матриц? если NxM, то (входные метрицы A и B - выходная (сумма A и B) - матрица C):
Код:
for i:=1 to N do
  for j:=1 to M do
    C[i,j]:=A[i,j]+B[i,j];


2.
Код:
(a+b) mod 2
- сложение по модулю 2. :)


 

Member
Статус: Не в сети
Регистрация: 15.02.2004
Откуда: Уфа-сити
Syrf@ А если a и b строки типа 0010101 и 1010100 и надо побитовое сложение по модулю 2, тогда как?

_________________
Мы сделаны из мяса.


 

Junior
Статус: Не в сети
Регистрация: 07.05.2005
Откуда: г. Владимир
Умножение ненамного сложнее (размерность матриц: A - NxM; B - MxN; C: NxN):
Код:
for i:=1 to N do
  for j:=1 to N do
    for k:=1 to M do
       C[i,j]:=C[i,j]+A[i,k]*B[k,j];


Естественно, матрица C в последнем примере должна быть обнулена перед выполнением циклов.

Добавлено спустя 56 секунд:
встроенных функций нет :(

Добавлено спустя 1 минуту, 9 секунд:
хотя, постой, если a и b - строки? или числа в двоичной системе счисления?

Добавлено спустя 1 минуту, 15 секунд:
если - числа в двоичке - ты задать стандартными функциями Паскаля не сможешь.
Тогда только асмовские вставки...


 

Member
Статус: Не в сети
Регистрация: 15.02.2004
Откуда: Уфа-сити
Числа в двоичной СС, но нужно именно побитовое сложение без переноса

_________________
Мы сделаны из мяса.


 

Junior
Статус: Не в сети
Регистрация: 07.05.2005
Откуда: г. Владимир
тогда пробуй асмовские вставки с масками. А на асме нельзя?
ИМХО на асме проще.


 

Member
Статус: Не в сети
Регистрация: 15.02.2004
Откуда: Уфа-сити
Млин неохота асм, он меня в универе уже зае...
Ладно разберемся как-нить. Спасибо!

_________________
Мы сделаны из мяса.


 

Junior
Статус: Не в сети
Регистрация: 07.05.2005
Откуда: г. Владимир
Вот на паскале можно забить функцию с строками:
Код:
function IntToBin(A: integer): string; {возвращает строку с бинарным представлением числа А}
var       i: byte;
    Temp: string;
begin
 Temp:='';
 while(A>0) do
   begin
    if (A mod 2)=1 then Temp:='1'+Temp
    else Temp:='0'+Temp;
    A:=A div 2
   end;
 IntToBin:=Temp
end;


2 числа переводишь сначала функцией в строки с бинарным представлением, затем делаешь следующее:

Код:
function Mod2bezPerenosa(A,B: String): string;

 procedure AligningStrings(var C: string; var D: string); {уравниваем длину строк}
  var  i: byte;
     Max: byte;
  begin
    Max:=Length(C)-Length(D);
    if Max>=0 then
       for i:=1 to Max do D:='0'+D
    else
       for i:=1 to ABS(Max) do C:='0'+C
  end;

var     i: byte;
      Res: string;
begin
  Res:='';
  AligningStrings(A,B);
  for i:=1 to length(A) do
    if A[i]=B[i] then Res[i]:=0 else Res[i]:=1;
  Mod2bezPerenosa:=Res
end;


Конечно, геморрой большой, но если на паскале - то так ;)

P.S. Могут быть ошибки, т.к. писал сразу в форум. Работает только с неотрицательными числами. Поддержка отрицательных усложнит функции: IntToBin и AlignStrings.


 

Member
Статус: Не в сети
Регистрация: 17.10.2003
Откуда: Киев
может я чего не понял, но зачем такие извраты с сложением по модулю 2 ?

var a,b,c:integer;
begin
readln(a,b);
c:=a xor b;
writeln(c);
readln;
end;

Добавлено спустя 4 минуты, 24 секунды:
сейчас паскаля под рукой нет, но если там нет операции xor (в чем очень сомненваюсь), тогда так : c:=((not a) and (b)) or ((not b) and (a))


Последний раз редактировалось LS 01.06.2005 11:10, всего редактировалось 1 раз.

 

Advanced member
Статус: Не в сети
Регистрация: 23.10.2003
Откуда: Иркутск/Майкоп
XOR в Паскале есть.

_________________
Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.


 

Member
Статус: Не в сети
Регистрация: 15.02.2004
Откуда: Уфа-сити
LS Если твоим методом сложить, например 100011 и 101010, то он выдает 3129.
Syrf@ Твоим метедом еще не пробовал.
Всем спасибо за помощь, но вы так не заморачивайтесь. Я просто хотел облегчить немного расчет в дипломе с помощью паскаля. Не получится, так вручную посчитаю.

_________________
Мы сделаны из мяса.


 

Member
Статус: Не в сети
Регистрация: 17.10.2003
Откуда: Киев
RufuS
100011 (2) = 35(10)
101010 (2) = 42(10)
--------------
001001 = 9(10)
Вводим в прогу 35 и 42, получаем 9 :)
Ты же писал про побитовое сложение


 

Junior
Статус: Не в сети
Регистрация: 07.05.2005
Откуда: г. Владимир
LS, дело в том, что
RufuS писал(а):
нужно именно побитовое сложение без переноса

xor - с переносом...


 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
Syrf@ да ты что??? xor - это чисто побитовый оператор, никаких переносов.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan