Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Игры разума
Перезагрузить страницу Логическое условие как сбросить установки
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
michael michael вне форума
Member
 
Сообщений: 969
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.08.2003
По умолчанию Логическое условие как сбросить установки - 07.01.2006, 17:34

По мотивам оптимизации в ассемблере...

Небольшой ликбез.
В ассемблере Microchip есть команда btfsc R,b - пропустить, если бит сброшен. То есть если бит b в байте R установлен, то процессор выполняет следующую команду, а если сброшен - пропускает. Поскольку бит может принимать только два значения, он эквивалентен некой логической переменной (например, A). Используя эту формулировку, можно записать в обозначенном ассемблере:
Код:
btfsc   A
btfsc   B
goto    label
Эта запись аналогична по смыслу следующей:
Код:
F = !A | A & B
if (F) goto label
Здесь ! - логическое отрицание, | - логическое ИЛИ, & - логическое И.

Задание.
1. Напишите эквивалентное логическое условие (F из примера выше) для следующего фрагмента:
Код:
btfsc   A
btfsc   B
btfsc   C
btfsc   D
goto    label
2. Напишите общую формулу для следующей программы:
Код:
btfsc   A1
btfsc   A2
...
btfsc   An
goto    label
Ответить с цитированием
  (#2 (permalink)) Старый
voodOOpeople voodOOpeople вне форума
Member
 
Сообщений: 1,038
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.08.2004
По умолчанию 01.02.2006, 10:42

Хех микрочипами увлекаемся... только увидел...
Если уж переходить на логические операции то и использовать логические значки.
для задачи 1
Код:
F = (!A && !C) || (!A && C && D) || (A && !B && D) || (A && B && !C) || ( A && B && C && D)
if (F) goto label
Для задачи 2 формулу, думаю вывести несложно. Пусть еще кто-нибудь постарается.

Если оптимизировать
Код:
if(A)
{
    if(B)
    {
  if(C)
  {
      if(D) goto label;
  }
  else
  {
      goto label;
  }
    }
    else
    {
  if(D) goto label;
    }
}
else
{
    if(C)
    {
  if(D) goto label;
    }
    else
    {
  goto label;
    }
}
Ответить с цитированием
  (#3 (permalink)) Старый
michael michael вне форума
Member
 
Сообщений: 969
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.08.2003
По умолчанию 01.02.2006, 16:09

voodOOpeople
Вроде правильно, разве что не вынес за скобки общие члены. А после этого и вторая задачка становится очевидной...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу написать условие задачи fedd86 С/С++ 11 19.01.2012 08:05
Логическое программирование на mercury xonix Prolog 7 19.06.2011 00:19
Как поэлегантнее задать условие для массива Korrigan_sr C++ Builder 3 14.03.2011 05:01
Как придумать условие для программы 2QWERY С/С++ 6 13.01.2011 16:38
логическое выражение CoCu_cka Prolog 0 28.12.2010 18:41
Дата как условие в фильтре Alex25 Visual Basic 16 16.01.2009 20:59
Рекурсивно-логическое программирование Alexei A. Morozov Prolog 16 15.11.2008 19:22
Условие цикла While не коректно выполняется Sasyk PHP 3 16.05.2007 20:13
Отрицание - не логическое средство? TypucT Prolog 7 25.11.2005 15:40
GUI, логическое программирование, а также A=f(A). Alexei A. Morozov Prolog 90 19.10.2005 05:25
Что такое логическое программирование Anonymous Информационные технологии 15 03.06.2005 14:12
Не срабатывает условие на RESOURCEDISPLAYTYPE_SERVER Olegg C++ Builder 0 11.08.2004 18:02



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов