Умножение в паскале без использования стандартного оператора умножения |
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. |
мисс_граффити |
8.01.2007 2:49
Сообщение
#2
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
одна программа и для целых, и для вещественных? или две разные?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
decompiler |
8.01.2007 2:53
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Юрий Репутация: 0 |
две разные
|
Malice |
8.01.2007 11:28
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Для целочисленных:
function mul (a,b:longint):longint; |
мисс_граффити |
8.01.2007 13:43
Сообщение
#5
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
циклы нельзя... судя по условию
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
decompiler |
8.01.2007 13:47
Сообщение
#6
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Юрий Репутация: 0 |
Для целочисленных: function mul (a,b:longint):longint; именно, циклы недоступны.... |
Malice |
8.01.2007 13:55
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
именно, циклы недоступны.... Можно испортить while через goto: function mul (a,b:longint):longint; |
мисс_граффити |
8.01.2007 14:44
Сообщение
#8
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
а shl и xor ты через что испортишь?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Malice |
8.01.2007 14:56
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
а shl и xor ты через что испортишь? Опять просмотрел Хотелось пооптимальней.. Тогда скатываемся к варианту автора, типа: function mul (a,b:longint):longint; |
Malice |
8.01.2007 17:23
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Кто что придумал с вещественными ? У меня только с погрешностью вышло, а как точно, что-то не соображу..
|
Michael_Rybak |
9.01.2007 0:15
Сообщение
#11
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Без погрешности-то и встроенное умножение не умеет
Можно циклом выделять все цифры; сначала бинарным поиском узнать порядок каждого из чисел, а потом вычитать постепенно и перемножать всё друг на друга (все разряды первого на все разряды второго) Хотя нет, с бинарным поиском я погорячился. Обычным циклом (т.е. вычисляем руками десятичный логарифм) |
Malice |
9.01.2007 0:55
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Без погрешности-то и встроенное умножение не умеет У меня уж больно большая - +/- 1. Знаю почему, но как точне сделать только сложениями пока не дошло Вот такой вариант: function mul2(a,b:real):real; Были и другие, но уж больно на шифровку похожие.. |
Michael_Rybak |
9.01.2007 3:48
Сообщение
#13
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Дальше нет смысла обсуждать, пока ОП не укажет границы входных (действительных) чисел и требуемую точность ответа. Еще вопрос: можно ли использовать массивы?
Цитата Знаю почему, но как точне сделать только сложениями Завести константу x = 2^(-много). И всё получится ;) |
decompiler |
9.01.2007 4:14
Сообщение
#14
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Юрий Репутация: 0 |
|
Текстовая версия | 29.04.2024 0:32 |