Rambler's Top100


Итак сегодня мы узнаем ещё один тип данных - логический. С ним вы вообщем-то уже знакомы. Однако всё по порядку. Имя у этого типа - boolean. Переменная может принемать только два значения - true (истина) и false (ложь). Помните сколько будет 2*2=4 ? будет trUE ! При этом для этих значений справедливо следующее:
ord (false) = 0
ord (true) = 1
false < true
вот и выходит, что правда (то биш истина) сильнее :) В Паскале определены следующие логические операции:
  • not - логическое НЕ
  • and - логическое И
  • or -логическое ИЛИ
  • xor - исключающее ИЛИ
страшные имена :) синтаксис этих операций таков, кроме not:
операнд1 ОПЕРАЦИЯ операнд2
Для not:
not операнд
Эти операции применяются к целым и логическим переменным. Результат соответсвенно тоже целый или логический. Вначале рассмотрим целые числа. Помните двоичную систему счисления... так вот биты результата формируются по следующим правилам:
AND OR XOR NOT
операнд 1 0101 0101 0101 0101
операнд 2 0011 0011 0011         
Результат: 0001 0111 0110 1010
Для простоты мы предположили, что в числе у нас 4 бита (4 двоичных разряда). А теперь те же правила, но в текстовом варианте:
  • AND - если оба сравниваемых бита раны 1, то результат равен 1, в остальных случаях 0
  • OR - если хотя бы один из сравниваемых битов равен 1, то результат равен 1, если оба 0, то результат - 0
  • XOR - если один из сравниваемых битов равен 0, а другой еденице, то результат равен 1, в других случаях (оба 0 или оба 1) результат - 0
  • NOT - устанавливает обратное значение битов: 0 становится 1, а 1 - 0.
Вот такие дела! Рассмотрим вечный пример:
var
 a, b : integer;
begin
     a := 31;
     b := a xor a;
     writeLn (b)
end.
Что же выведет такая программа ? думаем.... думаем ... смотрим на описание xor .... думаем ... думаем ..... придумали! А ведь она выведет 0 !!! Почему ? Да потому, что xor даёт 0, если оба сравниваемых бита равны! А в числах а и а биты равны :) Тепрь для логических переменных
AND OR XOR NOT
операнд 1 falsetruefalsetrue falsetruefalsetrue falsetruefalsetrue falsetrue
операнд 2 falsefalsetruetrue falsefalsetruetrue falsefalsetruetrue                  

Результат: falsefalsefalsetrue falsetruetruetrue falsetruetruefalse truefalse
Таблица получилась конечно запутанная, но смысл тот же - если заменить true на 1, а false на 0. Так вот к чему мы всё это... при проверке условия (например в if или while) мы можем проверить сразу несколько условий. Например, следующее выражение будет истинно при а = b и c = d:
(a = b) and (c = d)
а что нам мешает сделать так:
if (a = b) and (c = d) then
   это выполняется когда оба условия истинны, т.е. a=b и c=d одновременно!
else
   это выполняется, когда хотя бы одно из условий ложно.
или так:
if (a = b) or (c = d) then
   это выполняется когда хотя бы одно из условий истинно, т.е. a=b или (и) c=d
else
   это выполняется, когда оба условия ложны.
или в конце-концов так:
if (a = b) xor (c = d) then
   это выполняется когда одно условие истинно, а второе ложно, т.е. a=b или c=d
else
   это выполняется, когда оба условия истинны или оба ложны.
Конечно можно соединять и пять и десять условий... главное не попутайтесь, раставляя скобки!

Программа

Сегодня мы напишем программу, которая преобразует строку строчных букв к строке с заглавными буквами. Данный алгоритм будет работать только для латиницы! Итак мы помним (в чём я сомваюсь :)) что английские буквы распологаются в таблице символов следующим образом: заглавные буквы (A-Z) имеют коды 41h - 5Ah, строчные (a-z) соответственно 61h-7A. Поэтому нам сначала нужно прозаботится о проверке попадания буквы в нужный диапазон. Давайте рассмотрим двоичное представление чисел 41h (буква А) и 61h (буква а).
Биты 76543210
Буква А: 01000001
Баква а: 01100001
Думается вы заметили, что разница в 5-ом бите. Пэтому нам просто нужно его изменить и сделать из 1 равным 0. Каким образом? Давайте посморим на таблицу .... смотрим .... смотрим ..... ещё раз .... ещё два .... хватит. Что предложите использовать ? Я лично and, где вторым операндом будет страннное число 11011111b .... давайте убедимся, что всё произойдёт так как я и обещал: AND
Буква а: 01100001
11011111
Буква А: 01000001
убедились ? Я да!
program up;

var
 i : integer;
 str : string;
begin
     str := 'I''m world-best Pascal programmer :)';
     writeLn (str);

     for i := 1 to ord (str[0]) do
     begin
          if (str[i] >= 'a') and (str[i] <= 'z') then
             str[i] := chr ( ord(str[i]) and 223)
     end;

     writeLn (str)
end.
обратите внимание на эту конструкцию: chr ( ord(str[i]) and 223) - сначала мы преобразовываем символ str[i] к целому числу (функция ord), потом выполняем and, потом преобразуем целое число к символу (функция chr).


программирование на Паскале, Pascal, BP, TP, BorlandPascal, TurboPascal turbo pascal 7.0, borland pascal 7.0, языки программирования, pascal учебник
Рад приветствовать! =) Начнем мы с истории данного сайта. Изначально он разрабатывался как типично авторский проект, не неся в себе особых целей. Я лишь хотел освоить азы html верстки и опробывать свои силы в разработке web-сайтов. Тематика "программирование на Паскале" была выбрана не случайно, до этого я долго изучал этот ЯП и всё это вылилось в написание собственного самоучителя по Паскалю. Сейчас это всё вспоминается с некоторой долей иронии и улыбкой на лице. В нынешнее время я полностью занимаюсь web-разработками и отошел от прикладного программирования, но данный проект решил всё же не забрасывать и вдохнуть в него новую жизнь, освежив дизайн и контент.

С уважением, Евгений Злобин
турбо-паскаль скачать, файлы паскаль, бесплтано скачать pascal