Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логические действия, Алгоритмы 
:(
    Опции темы
Сый
Дата 24.2.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Вот, кстати, алгоритмы сдвигов (shl и shr):
Код

ЗАДАЧА вСтепень(Число, Степень: ШИРЦЕЛ): ШИРЦЕЛ; 
ПЕР 
 ч: ЦЕЛ; 
 б: ШИРЦЕЛ; 
УКАЗ 
 б := Число; 
 ОТ ч := 2 ДО Степень ВЫП 
   Число := Число * б 
 КОН; 
 ВОЗВРАТ Число 
КОН вСтепень; 

ЗАДАЧА СдвигЛ(Что, НаСколько: ШИРЦЕЛ): ШИРЦЕЛ; 
УКАЗ 
ВОЗВРАТ Что * вСтепень(2, НаСколько)
КОН СдвигЛ; 

ЗАДАЧА СдвигП(Что, НаСколько: ШИРЦЕЛ): ШИРЦЕЛ; 
УКАЗ 
ВОЗВРАТ Что ДЕЛИТЬ вСтепень(2, НаСколько)
КОН СдвигП;
  

Это сообщение отредактировал(а) Сый - 21.5.2006, 15:00
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Romikgy
Дата 24.2.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(Сый @ 24.2.2006, 11:10 Найти цитируемый пост)
(* not 3 *) = 2147483644 (* хотя должен быть равен -4 *).

просто проверяй старший знак если 1 отрицанельно и выводить -(МАХ-число)
Добавлено @ 12:34
Сый, че эт за язык такой.... smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
SoWa
Дата 24.2.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Это глагол!!! smile
Сый, я тебя вообще не понимаю! Задача- алгоритм. Кодs? приведенные выше- и есть алгоритмы.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Сый
Дата 24.2.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



> Сый, че эт за язык такой....
http://glagol.nad.ru

> Сый, я тебя вообще не понимаю! Задача- алгоритм. Кодs?
Задача в Глаголе - это, по-вашему, function.
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Dian
Дата 24.2.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 2.1.2006

Репутация: нет
Всего: 1



Цитата(SoWa @ 24.2.2006, 12:43 Найти цитируемый пост)
Это глагол!!!

А по приличней не было чего? smile
PM MAIL WWW   Вверх
Romikgy
Дата 24.2.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Сый, так это твой язык?
Цитата(Сый @ 24.2.2006, 11:10 Найти цитируемый пост)
* not 3 *) = 2147483644 (* хотя должен быть равен -4 *).

Да и тогда надо ввести понятие знаковое целое или беззнаковое целое


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Сый
Дата 24.2.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Dian, а чем тебя Глагол не устраивает?
Romikgy, нет, это не мой язык, хотя у меня есть форум, посвящённый в том числе и этому языку.
> Да и тогда надо ввести понятие знаковое целое или беззнаковое целое
Не понял, причём тут знаки (то выражение я для примера привёл, если ты на него смотришь, так что какой бы знак ни был бы у результата, он всё-равно будет неправильным (для НЕ, И-НЕ и ИЛИ-НЕ)).
Добавлено @ 15:13
А почему - смотри моё сообщение (23.2.2006, 22:51).
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Romikgy
Дата 24.2.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(Сый @ 24.2.2006, 14:09 Найти цитируемый пост)
Не понял, причём тут знаки

притом что число 3 в двоичной системе это 11, а -4 как ты хошь представляется 100 , если всего 3 разряда или как 11...1100, разрядов в 4 байта в хексе FFFFFFFC , егоже можно представить как 4 294 967 292, т.е. вариант со знаковыми числами выдает -4 , с безнаковыки 4 294 967 292, но это тоже -4,
В твоем же варианте , не обрабатывается старший разряд вообще (в смысле 4 байтов) вот и получается 2147483644
Цитата(Сый @ 24.2.2006, 14:09 Найти цитируемый пост)
А почему - смотри моё сообщение (23.2.2006, 22:51).

Смотрю
Цитата(Сый @ 23.2.2006, 22:53 Найти цитируемый пост)
Ну это пример привёл. Мне нужен сам алгоритм работы этой функции. Что тут непонятного?

И ?
У тя он реализован.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Dian
Дата 24.2.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 2.1.2006

Репутация: нет
Всего: 1



Цитата(Сый @ 24.2.2006, 15:09 Найти цитируемый пост)
Dian, а чем тебя Глагол не устраивает?

Неудачный он...
PM MAIL WWW   Вверх
Сый
Дата 24.2.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Путём издевательства над калькулятором нашём алгоритм для вычисления not:
Код

ЕСЛИ Число > 0 ТО ВОЗВРАТ -1-Число ИНАЧЕ ВОЗВРАТ МОДУЛЬ(Число)-1 КОН;

Добавлено @ 18:38
> Неудачный он...
Ничем не обоснованное утверждение.
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Сый
Дата 24.2.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Теперь, используя имеющиеся данные, могу посчитать и xor:
ВОЗВРАТ Логич(Логич(ч1,Логич(ч2,0,3),1),Логич(Логич(ч1,0,3),ч2,1),2); (* (a And Not b) Or (Not a And b) = a Xor b *)
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
mes
Дата 2.3.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(Сый @ 23.2.2006, 10:02 Найти цитируемый пост)
Вобщем, нужны алгоримты вычислений not, xor и т.д. Кто знает, поделитесь.

Цитата(Сый @ 23.2.2006, 23:19 Найти цитируемый пост)
Вобщем, чтобы not(5)=-6.


Судя по етим двум высказываниям, тебе нужно совсем не то, что ты спрашиваешь.
Начну с первого вопроса. Независимо с какими числами ты делаешь операцию, компьютер делает операции с двойчным представлением этого числа.
not (b) изменяет каждый бит числа на противоположный.
Пример: not (11001100) = 00110011


a and b оставляет включенными только те биты, которые являются включенными во втором. Остальные сбрасывает.
Пример: 11001100 and 00001111 = 00001100

a or b : включает те биты, которые являются включенными во втором. Остальные оставляет без изменения
Пример: 11001100 or 00001111 = 11001111

a xor b : включает те биты, которые , имеют противоположное состояние во втором. Остальные сбрасывает.
Пример: 11001100 xor 00001111 = 11000011


Почему же not(5)=-6? Такое можно сказать, только в том случае, если оговорить тип переменных участвующих в операции.
Если я скажу : 1+1 = 10, то ето будет некорректно, потому что такое только в двоичной системе. А в десятичной 1+1 =2.
Поетому для представления иной системы пользуятся обознаьчением. Обычно (ИМХО) 01B для двоичной, 1 или 1D для десятиричной,
01H и $1 для шестнадцатиричной .

Поэтому я думаю ты хотел спросить : Какой алгоритм вычесления xor,or,not для десятичных чисел.
Алгоритм простой: Провести двоичную операцию (как в примере выше) над двоичным представлением числа.

Как же компьютер представляет десятичные числа? Ето зависит от типа переменной.
Для примера рассмотрим операцию not для разных типов:
Тип boolean (1 разряд ) not (1) = not (01B) = 0;

Тип byte (8 разрядов) -бывает только положительным - not(3) = not(0000 0010B) = 1111 1101B = 253

Tип shortint(8 разрядов) -бывает как положительным так отрицательным not(3) = not(0000 0010B) = 1111 1101B = -4

Тип word (16 разрядов) -бывает только положительным - not(3) = not (0000 0000 0000 0010B) = 1111 1111 1111 1101B = 65533

Tип smallint(16 разрядов) -бывает как положительным так отрицательным - not(3) = not (0000 0000 0000 0010B) = 1111 1111 1111 1101B = -4

Заметил для "отрицательных" типов результат не зависит от кол-ва разрядов, это потому что отрицательные числа начинают свой отсчет с конца. Например для 8разрядного типа -1 = 255; -2 = 254; 253 =-3 и т.д.

Для чего нужны различные типы при одинаковом кол-ве разрядов? Потому что они отражают разный диапозон чисел:
byte от 0 до 255
shortint -128 до 127. (Обратите внимание, что модуль максимального отицательного числа больше, чем максимальное положительное число. Это потому,что ноль - положительное.

Какие подводные камни нас подстерегают если мы не будем строго следить за правильным преобразованием типов?
Пример: попробуем прибавить к числу с двоичным представлением 0111 1111B единицу.
0111 1111B + 0000 00001B = 1000 0000B
Теперь посмотрим если мы захотим получить десятичное представление:

для типа byte : 0111 1111B (127) + 0000 00001B (1) = 1000 0000B (128)

для типа shortint : 0111 1111B (127) + 0000 00001B (1) = 1000 0000B (-128) (минус 128!)

В "отрицательных" типах , включенный первый бит означает, что число отрицательное.
Добавлено @ 13:28
Цитата(Сый @ 24.2.2006, 12:10 Найти цитируемый пост)
 
Код


        ЕСЛИ (ч1дв[i]="0") И (ч2дв[i]="0") ТО Цепь.ДобавитьЗнак(РезДв,"0"); 
      АЕСЛИ (ч1дв[i]="0") И (ч2дв[i]="1") ТО Цепь.ДобавитьЗнак(РезДв,"0"); 
      АЕСЛИ (ч1дв[i]="1") И (ч2дв[i]="0") ТО Цепь.ДобавитьЗнак(РезДв,"0"); 
      АЕСЛИ (ч1дв[i]="1") И (ч2дв[i]="1") ТО Цепь.ДобавитьЗнак(РезДв,"1");




Некоректно (лишние действия) . Лучше так:
Код

    ЕСЛИ  (ч2дв[i]="0") ТО Цепь.ДобавитьЗнак(РезДв,"0"); 
   АЕСЛИ (ч2дв[i]="1") ТО Цепь.ДобавитьЗнак(РезДв, ч1дв[i]);

И в остальных примерах по тому же принципу.
smile
Добавлено @ 13:33
Цитата(Сый @ 24.2.2006, 18:31 Найти цитируемый пост)
Неудачный он...
Ничем не обоснованное утверждение.


Вообшето обоснованное. smile Только ето не алгоритм операции not , а подмена операции подобной ей. (Например для повышения скорости)
И годится только для операций над десятичными переменнами "отрицательного" (отрицательно-положительного) типа.


--------------------
PM MAIL WWW   Вверх
mes
Дата 2.3.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



У тебя алгоритм в твоём первом примере абсолютно правильный (за исключением излишних действий)
Тепе нужно ввести понятии "тип" для правильного отражения результатов.


--------------------
PM MAIL WWW   Вверх
Сый
Дата 2.3.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Интересные рассуждения.
Про Глагол - бред. Прекрасный язык. Ничем необоснованный гон на него (наверное, врождённая ненависть ко всему русскому, в т.ч. и словам/алфавиту/языку, иначе объяснить просто нечем).

Ну вобщем, спасибо, нужен мне сейчас был лишь xor, реализовал я его так:
Код

ЗАДАЧА xor(ч1,ч2:ЦЕЛ):ЦЕЛ; 
ПЕР 
  ч1дв,ч2дв:Текст.Число; 
  РезДв:РЯД 32+1 ИЗ ЗНАК; 
  i:ЦЕЛ; 
  Результат:ЦЕЛ; 
  тст:РЯД 2 ИЗ ЗНАК; 
УКАЗ 
  ч1дв:=""; ч2дв:=""; РезДв:=""; 
  ИзЦел2(ч1,32,ч1дв); 
  ИзЦел2(ч2,32,ч2дв); 
  i:=0; 
  ПОВТОРЯТЬ 
      (* xor *) 
       ЕСЛИ ч1дв[i]=ч2дв[i] ТО Цепь.ДобавитьЗнак(РезДв,"0") 
       ИНАЧЕ Цепь.ДобавитьЗнак(РезДв,"1") КОН;
    УВЕЛИЧИТЬ(i); 
  ДО i >= 32-1; 
  Цепь.ДобавитьЗнак(РезДв,"B"); 
  Результат:=УЗК(ВЦел(РезДв)); 
  ВОЗВРАТ Результат; 
КОН xor; 

То есть использовал преобразование двух чисел в двоичный вид (в цепочку знаков), дальше собирал на основе каждого знака этой цепочки новую цепь и преобразовывал в целое число.

Это сообщение отредактировал(а) Сый - 2.3.2006, 20:14
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
maxim1000
Дата 2.3.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Модератор: ох... хватит вам уже обсуждать язык Глагол в этом форуме, если кому-то не нравится или нравится Глагол, и он стремится поведать об этом всему миру - милости просим в Красную книгу, там, кстати, уже одна тема есть...
а здесь обсуждаются алгоритмы, в данном случае - алгоритм вычисления логических операций
я надеюсь, подобное разъяснение будет понятно всем, и не придется пользоваться административными мерами...

Это сообщение отредактировал(а) maxim1000 - 2.3.2006, 21:20


--------------------
qqq
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.