![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 18.10.2010
Сообщений: 7
|
![]()
Нужно всего-то написать программу для подсчёта a*a+b*b=вывод на экран
a и b вводятся с клавиатуры. Вроде всё просто, да как-то не получается. Максимум чего я смог добиться стабильно работающего и близкое к заданию это просто целочисленный ввод a и b (с их проверкой) в массивы и красивый их вывод на экран. Дальше проблемы: 1. Как можно организовать умножение массива 1.1. Проблема при переводе числа из массива в регистр 2. И по всей видимости умножает и складывает он в 16ой системе, а перевести в 10ую не получается по схожей причине как в п. 1.1. Прошу прощение, если это где уже рассмотрено. Но поиск по форуму не дал желаемого результата. Вот что есть на данный момент: Код:
Последний раз редактировалось Stilet; 21.10.2010 в 08:52. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 20.09.2010
Сообщений: 38
|
![]()
Под девятизначное десятичное число нужно отводить как минимум пару 16-битных регистров (операнд типа DWORD). Воспользоваться командой MUL в этом режиме вы не сможете, так как она позволяет умножить максимум WORD на WORD и поместить результат в пару регистров DX:AX. Тут нужен либо сопроцессор, либо 32-битные регистры, либо написать подпрограмму умножения.
Последний раз редактировалось Vergo; 19.10.2010 в 03:31. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 18.10.2010
Сообщений: 7
|
![]()
Количество знаков можно уменьшить и до трёх
Насчёт подпрограммы умножения можно поподробнее? И как занести всё это под умножение? |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Alexander_Volk
судя по ключевому слову Пифагор придется еще считать квадратный корень от суммы квадратов a и b если к этому подойти творчески, то a²+b²=(a+b)² - 2ab Код:
Последний раз редактировалось Mikl___; 20.10.2010 в 05:20. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 27.09.2010
Сообщений: 18
|
![]()
Для начала неплохо понять, с какими числами тебе надо производить вычисления.
Если это двоичные целые со знаком, размером слово (16 бит), то вводить надо максимум 5 цифр и знак, причем следить за диапазоном представления числа (от -32 768 до 32 767). Числа со знаком умножать надо командой IMUL. Результат умножения будет двойным словом или словом (но с возможной потерей значащих разрядов). Хотя зачем тебе числа со знаком вводить, если все равно ты их возводишь в квадрат? Последний раз редактировалось xrnd; 19.10.2010 в 09:24. |
![]() |
![]() |
![]() |
#6 | |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Alexander_Volk
еще один способ посчитать a² + b² a² + b² = ((a + b)² + (a - b)²)/2 Цитата:
![]() Последний раз редактировалось Mikl___; 20.10.2010 в 05:26. |
|
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 27.09.2010
Сообщений: 18
|
![]()
Mikl___
Почему тогда написано Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#8 | ||
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#9 |
Регистрация: 18.10.2010
Сообщений: 7
|
![]()
Приношу глубочайшие извинения, что некоторое время ничего не писал. Так как произошла большая проблема с винтом на моём ноуте и только недавно его восстановил.
По теме: Насчёт того, что минус - это требование к работе программы. Но за это время выяснилось следующее: преподаватель требует возможность вводить числа любой длины (сколько позволяет памяти) и дал подсказку на использоване BCD чисел и умножением проводить как в школе столбиком. Также просил вывести результат в файл. Но с файлом я как-нить сам разберусь. А вот работу с BCD числами подскажите как выполнять в конкретном примере. Немного теории нашёл что и как, но нужен небольшой толчок. P.S. Обращаться к преподавателю за помощью не смогу, т.к. все ответы у него: "не знаю", "забыл", *улыбка*. Хотя спрашивает прилично и если получилось сдать ему лабу, то и объясняет хорошо. |
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Alexander_Volk
по поводу BCD чисел -- если с клавиатуры введено число 1234 то в памяти оно сохраняются в виде 31h, 32h, 33h, 34h, где 31h код "1", 34h = код "4" то есть отбрасываешь первую 3 и сцепляешь по две цифры между собой 12h,34h это BCD- эквивалент твоего числа введенного с клавиатуры а вот двоичный эквивалент 1234=4D2h получив BCD-число и поместив его в переменную X можешь воспользоваться командами сопроцессора, который переводит BCD-число в шестнадцатеричное число и шестнадцатеричное число в BCD |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Умножение | panuta | Microsoft Office Excel | 3 | 31.05.2010 17:42 |
С теорией я разобрался незнаю как реализовать | Valerii | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 26.01.2010 15:35 |
Умножение | KoBRaAndrey | Общие вопросы Delphi | 4 | 03.10.2009 12:23 |
умножение | PAWLO1993 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 29.07.2008 18:55 |
помогите с теорией в паскале | Vitas1234 | Помощь студентам | 1 | 25.05.2008 17:55 |