Как сделать таблицу истинности в паскале
var
\u00a0 a,b,c:boolean;
begin
\u00a0 ClrScr;
\u00a0 for a:=False to True do
\u00a0 for b:=False to True do
\u00a0 for c:=False to True do
\u00a0 Writeln(a:6,b:6,c:6,(not a) or (not b) or c:6);
\u00a0 ReadKey
end.
\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:
\u00a0FALSE FALSE FALSE\u00a0 TRUE
\u00a0FALSE FALSE\u00a0 TRUE\u00a0 TRUE
\u00a0FALSE\u00a0 TRUE FALSE\u00a0 TRUE
\u00a0FALSE\u00a0 TRUE\u00a0 TRUE\u00a0 TRUE
\u00a0 TRUE FALSE FALSE\u00a0 TRUE
\u00a0 TRUE FALSE\u00a0 TRUE\u00a0 TRUE
\u00a0 TRUE\u00a0 TRUE FALSE FALSE
\u00a0 TRUE\u00a0 TRUE\u00a0 TRUE\u00a0 TRUE
Uses Crt;
var
a,b,c:boolean;
begin
ClrScr;
for a:=False to True do
for b:=False to True do
for c:=False to True do
Writeln(a:6,b:6,c:6,(not a) or (not b) or c:6);
ReadKey
end.
Результат выполнения программы:
FALSE FALSE FALSE TRUE
FALSE FALSE TRUE TRUE
FALSE TRUE FALSE TRUE
FALSE TRUE TRUE TRUE
TRUE FALSE FALSE TRUE
TRUE FALSE TRUE TRUE
TRUE TRUE FALSE FALSE
TRUE TRUE TRUE TRUE
Новые вопросы в Информатика
Исправьте код, разработанный начинающим программистом, используя Debugger. Код: shape(turtle) pen size(100000) turtle.forward(100) left(90) forward(10 … 0) penup color(red, 'yellow') pendown(10) left(90) for ward(100) left(180) forward(150)
(СРОЧНО)(на Python — Middle) Создайте функцию рисования звезды. В то же время пользователь должен вводить длину стороны.(CРОЧНО) (на Python — Middle)
Здравствуйте, нужна помощь. Захожу в ноутбук, он включается, всё хорошо. Пытаюсь выйти с экрана блокировки (он без пароля), выходит пользователь и кно … пка 'войти', я нажимаю и ничего не происходит. Всё также экран блокировки. Что делать? Как быть.. Ноутбук Lenovo, 11 винда Перезагрузка не помогла
(СРОЧНО) Создайте функцию, в которую после вызова пользовательвводит наибольшее и наименьшее значения, а возвращается случайное число из заданного диа … пазона. Выведите наэкран это число. (СРОЧНО)(Python —Middle)
Запиши ответ Татьяна редактировала фотографию своей подруги. После выполненной работы она хотела отослать фотографию через специальный сервис, чтобы н … е потерять качество изображения. Во время отправки сервис попросил указать размер файла. Известно, что фотография имеет размер 3840 x 2160 пикселей. Для кодирования 1 пикселя используется 3 байта. Определи размер получившегося файла. Ответ необходимо округлить до сотых долей. Ответ: Мбайт.
Написать программу для робота обязательно используя цикл пока.Условия для робота:слева свободносправа свободноснизу свободносверху свободнослева стена … справа стенаснизу стенасверху стена.Срочноооо
Для того, чтобы программа была не линейной (т.е. в зависимости от ситуации выполнялись разные инструкции) в языках программирования используются логические выражения, результат которых может быть либо правдой (true), либо ложью (false). Результат логических выражений обычно используют для определения пути выполнения программы.
Простые логические выражения являются результатом операций отношения между двумя операндами (значениями). В примерах ниже операндами являются значения переменных x и y. Операндами могут быть числа, символы и другие типы данных. Все что можно сравнивать между собой. Однако не рекомендуют сравнивать вещественные числа из-за особенностей их хранения в памяти компьютера.
В Паскале предусмотрены следующие операторы отношений:
- меньше: x y
- равно: x = y
- не равно: x <> y
- меньше или равно: x = y
Булевы типы
Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean) может принимать только два значения (true или false). Эти величины упорядочены следующим образом: false , >=, , =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.
Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции .
Pascal – это язык, который учит аккуратности и четкости (разделы программы нельзя менять местами, необходимо четко представлять работу программы и т.д.). Вот почему необходимо четко знать и понимать структуру программы на языке Pascal.
PROGRAM имя программы;
(английскими буквами, одно слово. Хотите глубже? То необходимо воспользоваться правилами написания идентификаторов )
USES подключаемые библиотеки (модули);
(дополнительные возможности, их можно подключать к программе в этой строке)
CONST раздел описания констант;
(постоянные величины, их нельзя изменять)
TYPE описание типов переменных; (тайп)
VAR определение глобальных переменных;
(описание всех переменных величин, которые в программе могут изменяться)
ОПРЕДЕЛЕНИЕ ПРОЦЕДУР;
ОПРЕДЕЛЕНИЕ ФУНКЦИЙ;
BEGIN
основной блок программы
END.
Почти после каждой строчки ставится знак ";". Этот знак говорит о том, что строка закончена. Знак ";" не ставится после служебного слова BEGINи последнего END.(который означает конец программы), после которого ставиться точка.
3.Условный оператор, оператор выбора. Логические операции в Паскале, таблицы истинности, основные законы алгебры логики.
Условные операторы
IF [логическое выражение] Then [оператор 1]; Else [оператор 2];
Оператор IF работает следующим образом: вначале проверяется результат логического выражения. Если результат Истина(TRUE), то выполняется [оператор_1], следующий за служебным словом Then, а [оператор_2] пропускается. Если результат Ложь(FALSE), то [оператор_1] пропускается, а [оператор_2] исполняется.
FOR [параметр_цикла] := [н_з_п_ц] To [к_з_п_ц] Do [оператор];
FOR, To, Do – служебные слова. [параметр_цикла] – параметр цикла. [н_з_п_ц] – начальное значение параметра цикла. [к_з_п_ц] – конечное значение параметра цикла. [оператор] – произвольный оператор.
Параметр цикла должен быть переменой порядкового типа. Начальное и конечное значения параметра цикла должны быть того же типа, что и параметр цикла.
WHILE [условие] Do [оператор];
WHILE, Do – служебные слова. [условие] – выражение логического типа. [оператор] – обыкновенный оператор.
Оператор While работает следующим образом: вначале работы проверяется результат логического условия. Если результат истина, то выполняется оператор, после которого осуществляется возврат на проверку условия с новым значением параметров в логическом выражении условия. Если результат ложь, то осуществляется завершение цикла.
REPEAT [тело_цикла]; UNTIL [условие];
Оператор REPEAT работает следующим образом: сначала выполняются операторы тела цикла, после чего результат проверяется логического условия. Если результат ложь, то осуществляется возврат к выполнению операторов очередного тела цикла. Если результат истина, то оператор завершает работу.
Логические операции в Паскале, таблицы истинности
Логическая операция И (AND)
Логическая операция И выполняется с двумя битами, назовем их a и b. Результат выполнения логической операции И будет равен 1, если a и b равны 1, а во всех остальных (других) случаях, результат будет равен 0. Смотрим таблицу истинности логической операции and.
Логическая операция ИЛИ (OR)
Логическая операция ИЛИ выполняется с двумя битами (a и b). Результат выполнения логической операции ИЛИ будет равен 0, если a и b равны 0 (нулю), а во всех остальных (других) случаях, результат равен 1 (единице). Смотрим таблицу истинности логической операции OR.
Логическая операция исключающее ИЛИ (XOR).
Логическая операция исключающее ИЛИ выполняется с двумя битами (a и b). Результат выполнения логической операции XOR будет равен 1 (единице), если один из битов a или b равен 1 (единице), во всех остальных случаях, результат равен 0 (нулю). Смотрим таблицу истинности логической операции исключающее ИЛИ.
Логическая операция НЕ(Not)
Логическая операция НЕ выполняется с одним битом. Результат выполнения этой логической операции напрямую зависит от состояния бита. Если бит находился в нулевом состоянии, то результат выполнения NOT будет равен единице и наоборот. Смотрим таблицу истинности логической операции НЕ.
Типы данных.
Целые; Логические; Символьные; Перечисляемые; Интервальные;
Массивы; Строки; Множества; Записи; Файлы;
6.Массивы. Определение, описание, размещение в памяти и использование.
Массив-это структурированный тип данных состоящий из фиксированных чисел элементов имеющий один и тот же тип.
все элементы массива имеют один и тот же тип;
массив имеет одно имя для всех элементов;
доступ к конкретному элементу массива осуществляется по индексу (индексам).
7.Процедуры и функции. Заголовок и тело процедур и функций, классификация параметров. Вызов процедур и функций, особенности их использования.
Подпрограмма это часть программы, оформленная в виде отдельной синтаксической конструкции и снабженная именем. "Вызов" подпрограммы, т.е. выполнение действий, заданных в подпрограмме в виде операторв, может быть произведен в некоторой точке программы посредством указания имени этой подпрограммы. Кроме задания последовательности действий, любая подпрограмма может содержать описание некоторой совокупности локальных объектов - констант, типов, переменных и т.д. Эти объекты предназначены для организации действий внутри подпрограммы и имеют смысл (т.е. доступны или видимы) только внутри данной подпрограммы
Механизм подпрограмм в языке Турбо Паскаль реализован в виде процедур и функций. Они имеют почти одинаковую структуру, один и тот же смысл, но различаются назначением и способом вызова.
Процедуры служат для задания последовательности действий, направленных на изменение внешней по отношению к программной обстановки. Вызов процедуры осуществляется указанием ее имени в том месте программы, где предполагается выполнение операторов, заданных в процедуре.
Функции служат, прежде всего, для определения алгоритма вычисления некоторого значения (простого типа). В соответствии с этим вызов функции является одним из допустимых операндов выражения, обозначая в нем то значение, которое вычисляет ("возвращает") функция.
PROCEDURE ИмяПроцедуры ( СписокФормальныхПараметров );
LABEL
Перечисление меток внутри тела процедуры
CONST
Описание локальных констант
TYPE
Описание локальных типов
VAR
Описание локальных переменных
BEGIN
Тело процедуры
END.
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни.
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.
Операция "И" (логическое умножение)
Операция "ИЛИ" (логическое сложение)
Операция "исключающее ИЛИ"
Операция NOT применима к одному логическому выражению (является унарной). Ее результат равен true , если выражение ложно и наоборот.
Например, выражение NOT ( sin ( x )>1) всегда даст значение true .
Операция AND связывает не менее двух логических выражения (является бинарной). Ее результат равен true , если все выражения истинны или false , если хотя бы одно из выражений ложно.
В качестве примера распишем выражение . Т. к. операции принадлежности в Паскале нет, используем операцию AND и операции отношения: ( x >= a ) and ( x b ) .
Математическое выражение a , b , c >0 (одновременно) будет иметь вид ( a >0) and ( b >0) and ( c >0) .
Операция OR также связывает не менее двух логических выражений. Ее результат равен true , если хотя бы одно выражение истинно и false , если все выражения ложны.
Распишем выражение . На Паскале оно будет иметь вид ( x a ) or ( x > b ) . Другой способ связан с применением операции NOT : not (( x >= a ) and ( x b )) .
Условие "хотя бы одно из значений a , b , c положительно" может быть записано в виде ( a >0) or ( b >0) or ( c >0) .
Условие "только одно из значений a , b , c положительно" потребует объединения возможностей операций AND и OR :
( a and ( b and ( c >0) .
Операция XOR , в отличие от OR , возвращает значение "ложь" ( false ) и в том случае, когда все связанные ей логические выражения истинны. Чтобы лучше уяснить это отличие, составим так называемую таблицу истинности двух логических операций (табл. 7.2). Для краткости значение false обозначим нулем, а true -- единицей. Для двух логических аргументов возможно всего 4 комбинации значений 0 и 1.
Табл. 7.2. Таблица истинности операций OR и XOR
В качестве примера использования операции XOR запишем условие "только одно из значений a,b положительно":
К сожалению, записать условие "только одно из значений a,b,c положительно" в напрашивающемся виде ( a >0) xor ( b >0) xor ( c >0) нельзя -- результат этого выражения будет равен true и в случае, когда все три значения положительны. Связано это с тем, что при последовательном расчете логических выражений слева направо (1 xor 1) xor 1 будет равно 0 xor 1 = 1 .
С помощью xor удобно организовывать различного рода переключатели, которые последовательно должны принимать одно из двух состояний:
x := x xor true; writeln ('x=', x);
x := x xor true; writeln ('x=', x);
Независимо от начального значения логической переменной x , второе выведенное на экран значение будет логическим отрицанием первого. В реальной практике конструкции подобные x := x xor true ; не дублируются в коде многократно, а применяются внутри цикла (см. гл. 9).
Приоритет логических операций следующий: самая старшая операция -- not , затем and , следующие по приоритету -- or и xor (равноправны между собой), самый низкий приоритет имеют операции отношения. Последнее служит причиной того, что в составных условиях отдельные отношения необходимо заключать в круглые скобки, как и сделано во всех примерах раздела.
7.4. Короткий условный оператор
Это первый вид условного оператора, позволяющий программе выполнить или пропустить некоторый блок вычислений. Общий вид короткого условного оператора следующий:
if логическое_выражение then оператор1;
Сначала вычисляется логическое выражение, если оно имеет значение true , то выполняется оператор1 , иначе оператор1 игнорируется. Блок-схема соответствующего вычислительного процесса представлена на рис. 7.1.
Рис. 7.1. Блок-схема короткого условного оператора
Если по условию требуется выполнить несколько операторов, их необходимо заключить в операторные скобки begin . end ; , образуя единый составной оператор:
if d>0 then begin
Здесь по условию d >0 выполняется 3 оператора, первые два из которых вычисляют корни x 1 и x 2 квадратного уравнения, а последний выводит на экран найденные значения корней.
Следующий пример иллюстрирует поиск значения y = max ( a , b , c ). Поскольку стандартной функции для нахождения максимума в Паскале нет, применим 2 коротких условных оператора:
Вообще, для условной обработки N значений требуется N-1 короткий условный оператор.
7.5. Полный условный оператор
Эта форма условного оператора позволяет запрограммировать 2 ветви вычислений. Общий вид полного условного оператора следующий:
if логическое_выражение then оператор1
Оператор работает следующим образом: если логическое выражение имеет значение true , то выполняется оператор1 , иначе выполняется оператор2 . Всегда выполняется только один из двух операторов. Перед ключевым словом else ("иначе") точка с запятой не ставится, т.к. if - then - else -- единый оператор.
Вычислим значение m = min ( x , y ) с помощью полного условного оператора:
В следующем примере выполним обработку двух переменных: если значения a и b одного знака, найти их произведение, иначе заменить нулями.
if a*b>0 then c:=a*b
Из примера видно, что к ветви алгоритма после ключевого слова else , состоящей более чем из одного оператора, также применяются операторные скобки.
7.6. Составной условный оператор
Эта форма условного оператора применяется, когда есть более 2 вариантов расчета. Общий вид составного оператора может включать произвольное число условий и ветвей расчета:
if логическое_выражение1 then оператор1
else if логическое_выражение2 then оператор2
else if логическое_выражение N then оператор N
При использовании оператора последовательно проверяются логические выражения 1 , 2 , . , N , если некоторое выражение истинно, то выполняется соответствующий оператор и управление передается на оператор, следующий за условным. Если все условия ложны, выполняется оператор0 (если он задан). Число ветвей N неограниченно, ветви else оператор0; может и не быть.
Существенно то, что если выполняется более одного условия из N , обработано все равно будет только первое истинное условие. В показанной ниже программе составной условный оператор неверен, если ее разработчик хотел отдельно учесть значения x , меньшие единицы по модулю:
write (' Введите x:'); readln (x);
if x Отрицательный ')
else if x=0 then writeln (' Ноль ')
writeln (' По модулю меньше 1')
else writeln (' Больше 1');
Условие x сработает, например, для значения x =-0.5 , что не позволит программе проверить условие abs(x) .
Еще одну распространенную ошибку работы с составным условным оператором показывает произведенный ниже расчет знака n переменной a :
Применение одного короткого и одного полного условных операторов является здесь грубой ошибкой -- ведь после завершения короткого условного оператора для всех ненулевых значений a будет выполнено присваивание n :=1 . Правильных вариантов этого расчета, по меньше мере, два:
- с помощью 3 коротких условных операторов, вариант не очень хорош тем, что проверяет лишние условия даже тогда, когда знак уже найден.
else if a>0 then n:=1;
- с помощью составного условного оператора, этот вариант лучше. На практике следует помнить, что для вещественных значений сравнение с нулем может быть проблематично.
Можно сделать вывод, что при программировании многовариантных расчетов следует соблюдать осторожность, чтобы не допустить "потерянных" или неверно срабатывающих ветвей алгоритма.
В качестве еще одного примера рассчитаем значение функции, заданной графически (рис. 7.2).
Рис. 7.2. Функция, заданная графически
Перепишем функцию в аналитическом виде:
Одним из вариантов запрограммировать вычисление y ( x ) мог бы быть следующий:
if abs(x)>1 then y:=0
Возможна и последовательная проверка условий слева направо, которая породит немного избыточный, но легче воспринимающийся код:
7.7. Вложенные условные операторы
Когда после ключевых слов then или else вновь используются условные операторы, они называются вложенными. Число вложений может быть произвольно, при этом действует правило: else всегда относится к ближайшему оператору if , для которого ветка else еще не указана. Часто вложением условных операторов можно заменить использование составного.
В качестве примера рассмотрим программу для определения номера координатной четверти p , в которой находится точка с координатами ( x , y ) . Для простоты примем, что точка не лежит на осях координат. Без использования вложений основная часть программы может иметь следующий вид:
if (x>0) and (y>0) then p:=1
else if (x 0) then p:=2
Однако использование такого количества условий представляется явно избыточным. Перепишем программу, используя тот факт, что по каждое из условий x >0 , x оставляет в качестве значения p только по 2 возможных четверти из 4:
if x>0 then begin
В первом фрагменте программе проверяется от 2 до 6 условий, во втором -- всегда только 2 условия. Здесь использование вложений дало существенный выигрыш в производительности.
Рассмотренный в п. 7.6 пример с определением знака числа может быть переписан и с использованием вложения:
Однако, как эти операторы, так и составной условный оператор из п. 7.6 проверяют не более 2 условий, так что способы примерно равноценны.
7.8. Оператор выбора
Для случаев, когда требуется выбор одного значения из конечного набора вариантов, оператор if удобнее заменять оператором выбора (переключателем) case :
case выражение of
список N : оператор N ;
Оператор выполняется так же, как составной условный оператор.
Выражение должно иметь порядковый тип (целый или символьный). Элементы списка перечисляются через запятую, ими могут быть константы и диапазоны значений того же типа, что тип выражения. Диапазоны указываются в виде:
Оператор диапазона записывается как два рядом стоящих символа точки. В диапазон входят все значения от минимального до максимального включительно.
В качестве примера по номеру месяца m определим число дней d в нем:
Следующий оператор по заданному символу c определяет, к какой группе символов он относится:
writeln (' Латинская буква ');
writeln ('Русская буква');
else writeln ('Другой символ');
Здесь отдельные диапазоны для русских букв от "а" до "п" и от "р" до "я" связаны с тем, что между "п" и "р" в кодовой таблице DOS находится ряд не-буквенных символов (см. Приложение 1).
Если по ветви оператора case нужно выполнить несколько операторов, действует то же правило, что для оператора if , т. е. ветвь алгоритма заключается в операторные скобки begin . end ; .
7.9. Примеры программ с условным оператором
Приведем несколько примеров законченных программ, использующих РВП.
1. Проверить, может ли быть построен прямоугольный треугольник по длинам сторон a , b , c .
Проблема с решением этой задачи -- не в проверке условия теоремы Пифагора, а в том, что в условии не сказано, какая из сторон может быть гипотенузой. Подходов возможно несколько -- запрашивать у пользователя ввод данных по возрастанию длины сторон, проверять все три возможных условия теоремы Пифагора и т. п. Используем наиболее естественное решение -- перед проверкой условия теоремы Пифагора упорядочим величины a , b , c так, чтобы выполнялись соотношения a <= b <= c . Для этого применим прием с обменом значений переменных из п. 4.1.
Читайте также: