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

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

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

> Умножение в паскале без использования стандартного оператора умножения
decompiler
сообщение 8.01.2007 2:33
Сообщение #1





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

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


Здравствуйте, товарищи))))
Предложите, кто может, свои варианты решения: как написать программу, выполняющую умножение двух чисел (для вещественного и целочисленного типов), используя при этом:
1. Оператор сложения.
2. Оператор вычитания.
3. Оператор присваивания.
4. Условный оператор и оператор goto.
Заранее спасибо.


ЗЫ. прилагаю свой вариант:
Код

  var a,b,z:integer;

  function umn(x,y:integer):integer;
  var s,i:integer; label 1;
  begin
    s:=-y;
    i:=x;
    1: s:=s+y;
    if x>0 then
      begin
    x:=x-1;
    goto 1;
      end;
    if x<0 then
      begin
    x:=x+1;
    goto 1;
      end;
     if i<0 then s:=-s;
     if x=0 then umn:=s;
  end;

  begin
    readln(a,b);
    z:=umn(a,b);
    writeln(z);
  end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Michael_Rybak
сообщение 9.01.2007 0:15
Сообщение #2


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Без погрешности-то и встроенное умножение не умеет smile.gif

Можно циклом выделять все цифры; сначала бинарным поиском узнать порядок каждого из чисел, а потом вычитать постепенно и перемножать всё друг на друга (все разряды первого на все разряды второго)

Хотя нет, с бинарным поиском я погорячился. Обычным циклом (т.е. вычисляем руками десятичный логарифм)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 9.01.2007 0:55
Сообщение #3


Профи
****

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

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


Цитата(Michael_Rybak @ 9.01.2007 0:15) *

Без погрешности-то и встроенное умножение не умеет smile.gif

У меня уж больно большая - +/- 1. Знаю почему, но как точне сделать только сложениями пока не дошло sad.gif
Вот такой вариант:
function mul2(a,b:real):real;
var r:real;
z,s:real;
a1,a2:real;
k:byte;
label 1,2,6,7;
begin
{writeln (a*b:0:3);}
a1:=0; a2:=0; k:=0; s:=0; z:=0;
if a<0 then begin z:=1-z; a:=-a; end;
if b<0 then begin z:=1-z; b:=-b; end;
1: if a<1 then goto 2;
a:=a-1; a1:=a1+1;
goto 1;
2: a2:=a;
6: if a1<=0 then goto 7;
s:=s+b; a1:=a1-1;
goto 6;
7: a:=b; b:=a2;
k:=k+1; if k=1 then goto 1;
if z=1 then s:=-s;
mul2:=s;
end;

Были и другие, но уж больно на шифровку похожие..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
decompiler   Умножение в паскале без использования стандартного оператора умножения   8.01.2007 2:33
мисс_граффити   одна программа и для целых, и для вещественных? ил...   8.01.2007 2:49
decompiler   две разные   8.01.2007 2:53
Malice   Для целочисленных: function mul (a,b:longint):long...   8.01.2007 11:28
decompiler   Для целочисленных: function mul (a,b:longint):lon...   8.01.2007 13:47
Malice   именно, циклы недоступны.... Можно испортить whi...   8.01.2007 13:55
мисс_граффити   циклы нельзя... судя по условию   8.01.2007 13:43
мисс_граффити   а shl и xor ты через что испортишь? :)   8.01.2007 14:44
Malice   а shl и xor ты через что испортишь? :) Опять пр...   8.01.2007 14:56
Malice   Кто что придумал с вещественными ? У меня только с...   8.01.2007 17:23
Michael_Rybak   Без погрешности-то и встроенное умножение не умеет...   9.01.2007 0:15
Malice   Без погрешности-то и встроенное умножение не умее...   9.01.2007 0:55
Michael_Rybak   Дальше нет смысла обсуждать, пока ОП не укажет гра...   9.01.2007 3:48
decompiler   Дальше нет смысла обсуждать, пока ОП не укажет гр...   9.01.2007 4:14


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

 



- Текстовая версия 20.07.2025 3:13
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"