Усердно грызу (по мере наличия свободного времени) книжку “Песни о Паскале”, хочу все таки научится чему нибудь.
Вот такое задание: Пусть программа запросит два числа N и M, а затем вычислит их произведение без использования операции умножения. Подсказка: организуйте цикл суммирования N раз числа M.
Вообщем долго думал, подсмотрел…..вроде работает…..
Pascal | ||
|
Убейте меня, не понимаю я, причем тут ‘b’, откуда оно взялось? Все понятно до DO, потом не понимаю…..откуда ‘b’?
Natali
Знаток
(380),
на голосовании
7 лет назад
Голосование за лучший ответ
Александр
Гуру
(2853)
7 лет назад
алг ПРОИЗВ
цел А, В, С, Х
нач
ввод А
ввод В
С: =1
Х: =0
пока С<=В повторять
нц
Х: =Х+А
С: =С+1
кц
кон
Денис Молдавский
Знаток
(401)
7 лет назад
program Your_HomeWork;
var a, b, c: integer;
begin
readln(a, b);
for var i := 1 to b do
c += a;
writeln(c);
end.
Похожие вопросы
Перемножение чисел без умножения
Время на прочтение
1 мин
Количество просмотров 5.9K
Перемножение чисел без использования инструкций умножения мало кому покажется интересным, но я попробую предложить свою версию:
Нужно сказать, что в корне данной задачи лежит сдвиг числа на индексы установленных бит. Более того, чем меньше установленных бит у нас будет в регистре RBX, тем меньшее количество циклов будет затрачено для вычисления произведения, с этой целью в начале кода идут команды POPCNT и XCHG, т.е. если нужно, программа обменяет значениями регистры RAX – RBX и пойдёт считать по наименьшему сопротивлению.
К примеру для перемножения чисел 65535*65535 уйдёт 16 циклов, а вот для перемножения 65535*65536 – всего один цикл.
Но даже за этот один цикл в этом коде процессор тратит (по приблизительным подсчётам) 72 тика, в то время как инструкция IMUL перемножит за 36 тиков. На 16 циклов уйдёт 516 тиков.
В результате недолгого мозгового штурма получился следующий ниже код, в регистре rsi получаем произведение rax * rbx.
mov rax, 32768 ;
mov rbx, 12345 ;
popcnt rdx, rax ; подсчитаем количество установленных бит
popcnt rcx, rbx ;
cmp rdx, rcx ;
ja @F ;
xchg rax, rbx ; выбор наименьшего множителя
@@: xor rsi, rsi ; обнулим мусор
@@: mov rdx, rax ; сохраним число для сдвигов
bsf rcx, rbx ; находим установленный бит
btc rbx, rcx ; удалим найденный ранее установленный бит
shl rdx, cl ; сдвигаем число на индекс найденого бита
add rsi, rdx ; складываем полученные в результате сдвигов числа
or rbx, rbx ; проверяем есть ли ещё установленные биты
jnz @B ; если есть, поработаем ещё
ret ; иначе - выходим
Смотрите также
- © 2014 — 2023 «Game 🏃 Runs» — прохождения видеоигр
- Отказ от ответственности
- Правообладателям
- Постеры игр: © MobyGames.com
- Полезное
thincaiokede
Вопрос по информатике:
В КУМИРЕ
Решить задачу: Ввести два целых числа, найти их произведение, не используя операцию умножения. Пример: Введите два числа: 4 15 4*15=60
В КУМИРЕ
Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?
Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок – бесплатно!
Ответы и объяснения 2
kidai919
Алг Произведение
нач
цел a, b, s
вывод “Введите два числа”, нс
ввод a, b
s := 0
нц b раз
s := s + a
кц
вывод a,”*”,b,”=”,s
кон
xedelestivi758
алг
нач
цел a, b, i, p
p:=0
вывод “Введите число а”, нс
ввод a
вывод “Введите число b”, нс
ввод b
нц для i от 1 до a
p:=p+b
кц
вывод p
кон
Знаете ответ? Поделитесь им!
Гость ?
Как написать хороший ответ?
Как написать хороший ответ?
Чтобы добавить хороший ответ необходимо:
- Отвечать достоверно на те вопросы, на которые знаете
правильный ответ; - Писать подробно, чтобы ответ был исчерпывающий и не
побуждал на дополнительные вопросы к нему; - Писать без грамматических, орфографических и
пунктуационных ошибок.
Этого делать не стоит:
- Копировать ответы со сторонних ресурсов. Хорошо ценятся
уникальные и личные объяснения; - Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не
знаю» и так далее; - Использовать мат – это неуважительно по отношению к
пользователям; - Писать в ВЕРХНЕМ РЕГИСТРЕ.
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует?
Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие
вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи –
смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.