Вступление
Добрый день! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ТеорияИтак сегодня мы узнаем ещё один тип данных - логический. С ним вы вообщем-то уже знакомы. Однако всё по порядку. Имя у этого типа - boolean. Переменная может принемать только два значения - true (истина) и false (ложь). Помните сколько будет 2*2=4 ? будет TRUE ! При этом для этих значений справедливо следующее: ord (false) = 0вот и выходит, что правда (то биш истина) сильнее :) В Паскале определены следующие логические операции:
операнд1 ОПЕРАЦИЯ операнд2Для not: not операндЭти операции применяются к целым и логическим переменным. Результат соответсвенно тоже целый или логический. Вначале рассмотрим целые числа. Помните двоичную систему счисления... так вот биты результата формируются по следующим правилам:
Что же выведет такая программа ? думаем.... думаем ... смотрим на описание xor .... думаем ... думаем ..... придумали! А ведь она выведет 0 !!! Почему ? Да потому, что xor даёт 0, если оба сравниваемых бита равны! А в числах а и а биты равны :)Тепрь для логических переменных
Так вот к чему мы всё это... при проверке условия (например в if или while) мы можем проверить сразу несколько условий. Например, следующее выражение будет истинно при а = b и c = d: (a = b) and (c = d)а что нам мешает сделать так: if (a = b) and (c = d) thenили так: if (a = b) or (c = d) thenили в конце-концов так: if (a = b) xor (c = d) thenКонечно можно соединять и пять и десять условий... главное не попутайтесь, раставляя скобки! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ПрограммаСегодня мы напишем программу, которая преобразует строку строчных букв к строке с заглавными буквами. Данный алгоритм будет работать только для латиницы! Итак мы помним (в чём я сомваюсь :)) что английские буквы распологаются в таблице символов следующим образом: заглавные буквы (A-Z) имеют коды 41h - 5Ah, строчные (a-z) соответственно 61h-7A. Поэтому нам сначала нужно прозаботится о проверке попадания буквы в нужный диапазон. Давайте рассмотрим двоичное представление чисел 41h (буква А) и 61h (буква а).
Думается вы заметили, что разница в 5-ом бите. Пэтому нам просто нужно его изменить и сделать из 1 равным 0. Каким образом? Давайте посморим на таблицу .... смотрим .... смотрим ..... ещё раз .... ещё два .... хватит. Что предложите использовать ? Я лично and, где вторым операндом будет страннное число 11011111b .... давайте убедимся, что всё произойдёт так как я и обещал:
обратите внимание на эту конструкцию: chr ( ord(str[i]) and 223) - сначала мы преобразовываем символ str[i] к целому числу (функция ord), потом выполняем and, потом преобразуем целое число к символу (функция chr).Домашнее задание #3 будет таким: написать программку, которая используя логические операции будет преобразовывать строку из заглавных к строчным (т.е. PASCAL -> pascal). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Д/ЗВозвращаясь к прошлому заданию: я был не прав :) в чём каюсь и раскаюваюсь. Слово, которое читается справа на лево и слева на право, называется не полиномом, а полиндромом. Ответов пришло много, я не считал... Однако из-за нехватки времени мы поговорим об этой программе только в следующий раз. От одного из читателей пришло интересное предложение: цитата Александр 21.11.2002 Хочется еще спросить: а что вы будете делать с программами, которые наверняка придут еще от кого-нибудь (ну не единственный же я!)? В смысле - может быть, стоит разместить их на вашем сайте, дабы каждый интересующийся автор мог посмотреть, как другие справились с этим заданием.мы решили воспользоваться мудрым советом и власть данной нам открыть страничку на сайте посвященную домашним заданиям. Поэтому просьба всех, кто отсылал нам исходники выслать подтверждающее письмо, что они не против публикации их решений. Теперь при посылке решения просьба соблюдать следующее соглашение: писать можно ли публиковать на сайте и нужно ли указывать ваш e-mail. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Послесловиеследующий выпуск будет чисто практическим, мы рассмотрим решение некоторых важных задач. |