Важная информация
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 22

Тема: Помогите с заданием

  1. #1 Помогите с заданием 
    Новичок
    Регистрация
    16.02.2013
    Сообщений
    10
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Здравствуйте, друзья.

    Помогите, пожалуйста, справиться с одной небольшой задачей: имеется небольшой фрагмент кода; необходимо определить его предназначение и принцип работы.

    Код такой:
    Код :
    ИПA	ИПB	*	|x|	ПC	ИПA	ИПB	/	П9	КИП9
    ИПA	ИПB	ПA	ИП9	*	-	ПB	x=0	05	ИПA
    ПC	<->	/	С/П
    Надеюсь на вашу помощь.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от Русский Посмотреть сообщение
    Код :
    ИПA	ИПB	*	|x|	ПC	
    ИПA	ИПB	/	П9	
    КИП9
    ИПA	ИПB	ПA	ИП9	*	-	ПB	
    x=0	05	ИПA
    ПC	<->	/	С/П
    Надеюсь на вашу помощь.
    ИПA - выбор числа из ячейки памяти А
    ИПB - выбор числа из ячейки памяти B
    * - произведение вышеназванных чисел
    |x| - получение абсолютного значения произведения
    ПC - сохранение числа в ячейке С
    Формула 1: C=|A*B| (буквы соответствуют названиям ячеек)

    ИПA - выбор числа из ячейки памяти А
    ИПB - выбор числа из ячейки памяти B
    / - деление числа из ячейки A на число из ячейки B
    П9 - сохранение полученного числа в ячейке 9
    Формула 2: 9=|A/B| (буквы и цифры соответствуют названиям ячеек)

    КИП9 - косвенное извлечение памяти, однако похоже команда используется не для основного назначения, а для получения целого числа из дробного. поэтому преобразовав формулу 2 получим:
    Формула 3: 9=INT|A/B| (буквы и цифры соответствуют названиям ячеек)

    ИПA - выбор числа из ячейки памяти А
    ИПB - выбор числа из ячейки памяти B
    ПА - сохранение полученного числа B в ячейке А
    ИП9 - выбор числа из ячейки памяти 9
    * - произведение чисел из ячеек B и 9
    - - вычитание из числа А названного произведения.
    ПB - сохранение полученного числа в ячейке B
    Формула 4: B=B*9-A

    Если значение на индикаторе равно 0 (вышенайденное значение B) то переход к команде под номером 05 иначе продолжение
    ПC - сохранение полученного числа в ячейке C
    <-> - неизвестная мне команда, возможно обозначает обмен значений между регистрами X и Y. Если моя догадка верна, то далее следует:
    / - деление числа из ячейки C на число из ячейки B
    С/П - остановка (конец программы)

    Еще очень важно знать для какого именно калькулятора написана эта программа, судя по синтаксису для Б3-34, но полной уверенности нет. Кроме этого к программе обычно прилагается инструкция в которой говориться о необходимом стартовом содержании ячеек памяти.
    Последний раз редактировалось Dimon012; 17.02.2013 в 09:33.
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    Русский (17.02.2013)

  4. #3  
    Новичок
    Регистрация
    16.02.2013
    Сообщений
    10
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Большое Вам спасибо за помощь.

    Еще очень важно знать для какого именно калькулятора написана эта программа, судя по синтаксису для Б3-34, но полной уверенности нет.
    Что касается калькулятора, то это, скорее, уже третье поколение (МК-61 и т. д.), на что намекает команда |x| - у Б3-34 её ещё не было. Но тогда вопрос насчёт КИП9 - ведь есть же команда [x] для взятия целой часть, зачем так изощряться? Такие приёмы обычно и делают код нечитаемым, хотя зачастую позволяют его сократить и повысить быстродействие программы.

    Кроме этого к программе обычно прилагается инструкция в которой говориться о необходимом стартовом содержании ячеек памяти.
    Да, как-то забыл про них написать. Два числа (a и b) вводятся в регистры РA и РB (об этом намекают и первые две команды), результат работы - РX (на индикаторе). Хотя не уверен, что программа безошибочна: прогоняю по эмулятору, почему-то выдаёт ошибку.

    Если значение на индикаторе равно 0 (вышенайденное значение B) то переход к команде под номером 05 иначе продолжение
    Скорее, наоборот. Название команды - "проверка условия", т. е. если оно не выполняется, уходим, иначе идём дальше.

    обозначает обмен значений между регистрами X и Y
    Именно так.

    Судя по вводимым значениям, программа ищет какое-то общее для двух чисел них значение, типа НОД или какого-нибудь среднего.
    Ответить с цитированием  
     

  5. #4  
    Новичок
    Регистрация
    16.02.2013
    Сообщений
    10
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    - - вычитание из числа А названного произведения.
    Формула 4: B=B*9-A
    Всё-таки противоречие. У двухместных операций на первом месте стоит Y, на втором X. Когда перемножились РB и Р9, результат остался в иксе, а значение РA - в игреке (съехало в него после умножения). Соответственно, при вычитании именно оно будет уменьшаемым, а полученное произведение - вычитаемым. Поэтому здесь верен первый вариант (А-В*9).

    Попробую собрать приведённые Вами формулы до кучи, представив алгоритм более наглядно.

    Код :
    РC := | РA * РB |;
    ПОВТОРЯТЬ
      Р9 := ЦЕЛ(РA * РB);
      буфер := РB;
      РB := РA - РB * Р9;
      РA := буфер
    ДО РB = 0;

    А вот с последним участком интереснее. Скорее всего, в команде ПС и лежит ошибка, ведь мы до этого никогда к регистру РC не обращались, хотя значение в нём уже есть. Очевидно, имелось в виду извлечение из него, а не запись, т. е. ИПC. Тогда ещё возникает вопрос: зачем тут команда обмена X и Y (<->), если значения можно просто извлечь в обратном порядке и разделить?
    Ответить с цитированием  
     

  6. #5  
    Новичок
    Регистрация
    16.02.2013
    Сообщений
    10
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    В таком случае предположим, что имеем дело с такой программой (послали, куда следует, кастрацию дроби при помощи КИПа, а также абсолютно никчёмный обмен регистрами):

    Код :
    ИПA	ИПB	*	|x|	ПC	ИПA	ИПB	/	[x]	П9
    ИПA	ИПB	ПA	ИП9	*	-	ПB	x=0	05	ИПC
    ИПA	/	С/П

    Тогда алгоритм будет следующий:

    Код :
    РC := | РA * РB |;
    ПОВТОРЯТЬ
      Р9 := ЦЕЛ(РA * РB);
      буфер := РB;
      РB := РA - РB * Р9;
      РA := буфер
    ДО РB = 0;
    ВОЗВРАТ РC / РA

    Уже хорошо. Но как полагаете, что делает этот алгоритм? Или моё преобразование ошибочно?
    Ответить с цитированием  
     

  7. #6  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от Русский Посмотреть сообщение
    Что касается калькулятора, то это, скорее, уже третье поколение (МК-61 и т. д.), на что намекает команда |x| - у Б3-34 её ещё не было. Но тогда вопрос насчёт КИП9 - ведь есть же команда [x] для взятия целой часть,
    Ну как же не было, модуль числа это святое дело он еще в Б3-21 был, даже на клавиатуре можно видеть, только палки косые "/-/". А вот команды получения целого числа, у Б3-21 и Б3-34, не было отсюда и КИП9.
    Цитата Сообщение от Русский Посмотреть сообщение
    ...зачем так изощряться? Такие приёмы обычно и делают код нечитаемым, хотя зачастую позволяют его сократить и повысить быстродействие программы.
    Ну о читаемости кода никогда разговоров не было, да и какая читаемость, если команд всего 61 (у Б3-21) и 98 (у Б3-34), наоборот применялись всякие ухищьрения для уменьшения длины кода!
    Цитата Сообщение от Русский Посмотреть сообщение
    Да, как-то забыл про них написать. Два числа (a и b) вводятся в регистры РA и РB (об этом намекают и первые две команды), результат работы - РX (на индикаторе). Хотя не уверен, что программа безошибочна: прогоняю по эмулятору, почему-то выдаёт ошибку.
    Надо в пошаговом режиме погонять, найти в каком месте баг.


    Цитата Сообщение от Русский Посмотреть сообщение
    Скорее, наоборот. Название команды - "проверка условия", т. е. если оно не выполняется, уходим, иначе идём дальше.
    Точно! Всегда путался с этими переходами.
    Ответить с цитированием  
     

  8. #7  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от Русский Посмотреть сообщение
    Всё-таки противоречие. У двухместных операций на первом месте стоит Y, на втором X. Когда перемножились РB и Р9, результат остался в иксе, а значение РA - в игреке (съехало в него после умножения). Соответственно, при вычитании именно оно будет уменьшаемым, а полученное произведение - вычитаемым. Поэтому здесь верен первый вариант (А-В*9).
    При перемножании в игреке ничего не остается, точнее стек поднимается т.е. при бинарной операции, например умножении x умножается на y и результат пишется в x, в y поднимается значение из z в z из т. см. диаграмму работы стека F(x,y)[Ссылки могут видеть только зарегистрированные пользователи. ], при вычитании происходит y-x, а не на оборот, иначе ручной ввод нелогичен, а именно <уменьшаемое, стрелка (сдвиг стека), вычитаемое, минус>, при вычислениях по программе все так же как и при ручном вводе!
    Ответить с цитированием  
     

  9. #8  
    Новичок
    Регистрация
    16.02.2013
    Сообщений
    10
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Ну как же не было, модуль числа это святое дело он еще в Б3-21 был

    Где? "/-/" - это просто смена знака числа.

    При перемножании в игреке ничего не остается, точнее стек поднимается т.е. при бинарной операции, например умножении x умножается на y и результат пишется в x, в y поднимается значение из z в z из т. см. диаграмму работы стека F(x,y)[Ссылки могут видеть только зарегистрированные пользователи. ], при вычитании происходит y-x, а не на оборот, иначе ручной ввод нелогичен, а именно <уменьшаемое, стрелка (сдвиг стека), вычитаемое, минус>, при вычислениях по программе все так же как и при ручном вводе!
    Так я именно об этом и написал, указав, что в Y съехало значение, прежде засунутое в стек, а вычитание происходит X из Y.

    Надо в пошаговом режиме погонять, найти в каком месте баг.
    Именно на последнем участке, деление на ноль, я так понял. Изменив код, как я написал выше, вроде бы всё работает.
    Ответить с цитированием  
     

  10. #9  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от Русский Посмотреть сообщение
    Где? "/-/" - это просто смена знака числа.
    ДА! ДА! я ошибся, забыл уже, это действительно унарный минус!
    Цитата Сообщение от Русский Посмотреть сообщение
    Именно на последнем участке, деление на ноль, я так понял. Изменив код, как я написал выше, вроде бы всё работает.
    видимо да.
    Да с этим калькулятором я учился последние 3 года института, очень теплые воспоминания.

    Кстати а у Вас, если не секрет, почему работа с такой древней техникой?
    Ответить с цитированием  
     

  11. #10  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    а еще в Б3-34, была такая фича:
    чтобы иметь возможность его останавливать, допустим раз в час или когда захочется, ставишь условие на синус какого либо угла, а в процессе вычислений переключаешь положение градусы-радианы и тогда программа корректно останавливается! А далее оказалось, что этот переключатель можно ставить и в среднее положение, тогда он считает грады!!! Короче была возможность динамически воздействовать на работу программы!!!!!
    Ответить с цитированием  
     

Страница 1 из 3 123 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •