Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2013, 20:23   #1
Ultar
Пользователь
 
Аватар для Ultar
 
Регистрация: 26.01.2013
Сообщений: 13
По умолчанию Алгоритм.Паскаль

Код:
var
  i: byte;
  x1, x2, s: boolean;

begin
  writeln('x1':6, 'x2':6, 's':6);
  for i := 0 to 3 do
  begin
    x1 := i and 1 = 1;
    x2 := (i shr 1) and 1 = 1;
    s := not(x1 and x2) = not(x1) or not(x2);
    writeln(x1:6, x2:6, s:6);
  end;
  readln;
end.
Ultar вне форума Ответить с цитированием
Старый 04.02.2013, 20:41   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
s := not(x1 and x2) = not(x1) or not(x2);
s=true. Всегда. Закон де Моргана, однако


А собственно вопрос-то в чем был?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.02.2013, 21:13   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А собственно вопрос-то в чем был?
думаю, что это программа для доказательства (в виде перебора всех вариантов) тождества.

А вот в чём вопрос - это загадка!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.02.2013, 22:07   #4
Ultar
Пользователь
 
Аватар для Ultar
 
Регистрация: 26.01.2013
Сообщений: 13
По умолчанию

Задание-это доказать тождество,а мне нужно объяснить вот эти строки:
Код:
writeln('x1':6, 'x2':6, 's':6);
          for i := 0 to 3 do
          begin
          x1 := i and 1 = 1;
          x2 := (i shr 1) and 1 = 1;

Последний раз редактировалось Ultar; 04.02.2013 в 22:16.
Ultar вне форума Ответить с цитированием
Старый 04.02.2013, 22:30   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
writeln('x1':6, 'x2':6, 's':6);
Выводит строку:
Цитата:
x1 x2 s
на экран, под каждый символ отведено 6 символов (типа форматирование, пустые забиваются пробелами слева).

Код:
for i := 0 to 3 do
Цикл-счетчик от 0 до 3, думаю, Вы и сами узнали?

Код:
x1 := i and 1 = 1;
- то же, что и
Код:
if (i and 1=1) then x1:=true else x1:=false;
следующая строчка с x2 аналогична, только условие другое - (i shr 1) and 1=1

and - операция "логическое И"
shr - операция правого сдвига.

Точнее, в данном случае обе эти операции используются для реализации битовой арифметики.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.02.2013, 22:44   #6
Ultar
Пользователь
 
Аватар для Ultar
 
Регистрация: 26.01.2013
Сообщений: 13
По умолчанию

Все стало понятно,большое спасибо)
Ultar вне форума Ответить с цитированием
Старый 04.02.2013, 22:59   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

Еще некоторые пояснения:
x1 значения true и false (0 и 1)
x2 значения true и false (0 и 1)
все варианты 00 01 10 11
цикл от 0 до 3, это цикл по числам 00 01 10 11 в двоичной системе счисления
выделяем из счетчика цикла 1 и 2 цифры
для перевода цифры в булеву перменную делаем сравнение с 1
если цифра 1, то соответствующая переменная true, иначе false
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 04.02.2013 в 23:03.
BDA вне форума Ответить с цитированием
Старый 04.02.2013, 23:22   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:
s := not(x1 and x2) = not(x1) or not(x2);
s=true. Всегда. Закон де Моргана, однако


А собственно вопрос-то в чем был?
Почему же всегда?
Как раз таки не всегда
Базиля вне форума Ответить с цитированием
Старый 05.02.2013, 00:26   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
Почему же всегда? 
 Как раз таки не всегда
Как раз таки - ВСЕГДА!

Потому что в s - результат проверки тождества.
Код:
  s := not(x1 and x2) = not(x1) or not(x2);
совпадает ли левая часть not(x1 and x2) правой not(x1) or not(x2)

и результат ВСЕГДА true!
Цитата:
Код:
    x1    x2     s
 FALSE FALSE  TRUE
  TRUE FALSE  TRUE
 FALSE  TRUE  TRUE
  TRUE  TRUE  TRUE
а вообще, с циклом от 0 до 3 и вычислением x1 и x2 код замудрённый получается.
я бы в лоб так и написал:
Код:
var
  x1, x2, s: boolean;
begin
  writeln('x1':6, 'x2':6, 's':6);
  for x1:=False to True do
    for x2:=False to True do 
    begin
      s := not(x1 and x2) = not(x1) or not(x2);
      writeln(x1:6, x2:6, s:6);
    end;
  readln;
end.
и короче, и нагляднее, и проще...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.02.2013, 00:42   #10
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Аааааааа вот оно что
Извиняюсь, не так понял товарища Sciv.
Я что-то сам себе намудрил и решил что во внимание берутся только левая или правая части отдельно. Т.е. это не рассматривается как равенство.
В таком случае да, если равенство то естественно всегда истина
Базиля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АЛгоритм стыковки комманд. Паскаль. Dobbos Помощь студентам 2 03.06.2012 16:13
Рекорды. Алгоритм. Паскаль zhenka619 Помощь студентам 1 16.02.2012 23:21
Алгоритм->Паскаль Toofy Паскаль, Turbo Pascal, PascalABC.NET 4 29.05.2011 17:40
Алгоритм Кнута — Морриса — Пратта. Ошибка!! Паскаль WizzzIDizzzI Помощь студентам 1 25.05.2011 16:46