Проверочный тест по теме «Основы логики»
тест по информатике и икт (10 класс)
1. Отметьте все фразы, которые являются высказываниями.
- Прошлогодний снег.
- Сегодня пасмурно.
- В N-ской воинской части обед.
- В Санкт-Петербурге более 4 миллионов жителей.
- Почему я водовоз?
2. Какой ученый разработал основы алгебры логики?
- Л. Пастер
- Дж. Буль
- Б. Паскаль
- К. Шеннон
- И. Ньютон
3. Какая операция называется «конъюнкцией»?
4. Какая операция называется «дизъюнкцией»?
5. Как называется операция, соответствующая связке «тогда и только тогда»?
- отрицание
- конъюнкция
- эквивалентность
- дизъюнкция
- импликация
6. Как называется операция, соответствующая связке «если . то»?
- отрицание
- конъюнкция
- эквивалентность
- импликация
- дизъюнкция
7. Какие из этих логических выражений равны нулю независимо от значения переменной A?
8. Какие из этих логических выражений истинны независимо от значения переменной A?
9. Найдите значение логического выражения
10. Какая фраза является отрицанием утверждения «На улице идет снег и ветрено»?
- На улице нет ни снега, ни ветра.
- На улице или нет снега, или безветрие.
- На улице нет снега и ветрено.
- На улице идет снег и нет ветра.
- На улице идет снег или дует ветер.
11. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X , Y и Z . Дан фрагмент таблицы истинности выражения F . Какое выражение соответствует F ?
12. Символом F обозначено одно из указанных ниже логических выражений от двух аргументов: A и B . Дана таблица истинности выражения F . Какое выражение соответствует F ?
Логические операции — Основы Java
В этом уроке мы разберем логические операции, научимся использовать логические выражения и писать методы-предикаты.
Операции сравнения
Кроме арифметических операций, из школьной математики нам известны еще и операции сравнения, например:
Это звучит как вопрос: «Пять больше четырех?». В данном случае, ответ «да». В других случаях, ответом может быть «нет», например, для такого выражения:
Операции сравнения не имеют привязки к числам. Сравнивать можно практически что угодно — например, строки. Когда мы входим на какой-то сайт, внутри происходит сравнение введенного логина и пароля с теми, какие есть в базе. Если совпадение есть, то происходит авторизация.
Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие – операторы равенства и неравенства.
В математике для этого используется обычное равно = , но в программировании такое встречается нечасто. Во многих языках символ = используется для присваивания значений переменным, поэтому для сравнения взяли == .
Список операций сравнения в Java:
Посмотрим на пару примеров логических операций:
4 password == text
Оба примера — это выражения. Результат вычисления этих выражений — это одно из двух специальных значений:
- true — «истина»
- false — «ложь»
Это новый для нас тип данных — boolean. Он содержит всего лишь два этих значения. Так выглядит пример кода с ним:
var result = 5 > 4; System.out.println(result); // => true
Попробуем написать метод, который принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:
// Метод, возвращающий boolean, называется предикатом // Обычно такие методы имеют префикс has, can, is, was и так далее public static boolean isInfant(int age) return age 1; >
Пользуемся тем фактом, что любая операция — это выражение. Поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения age < 1 ».
В зависимости от пришедшего параметра, сравнение будет либо истинным ( true ), либо ложным ( false ). В итоге return вернет этот результат:
System.out.println(App.isInfant(3)); // => false System.out.println(App.isInfant(0)); // => true
Сравнение строк
Посмотрите на код и попытайтесь ответить, чему равны значения этих выражений:
// Какой результат будет в этих примерах — `true` или `false`? "a" == "a"; "a".toUpperCase() == "a".toUpperCase();
Правильный ответ: в первом случае true , во втором — false . Почему? Для ответа на этот вопрос нужно немного погрузиться в то, как работают компьютеры.
В наших программах мы оперируем данными — числами, строками, булевыми значениями. Мы выполняем разнообразные операции — записываем их в переменные, умножаем, делим, конкатенируем.
Так свою работу видит программист. Но внутри компьютера все немного по-другому. Во время работы программа получает доступ и манипулирует данными через их адреса в памяти:
// Под хранение переменной выделяется область памяти // Программа запоминает адрес этой области и работает с ней внутри себя var name = "CodeBasics"; // Программа считала значение переменной по адресу, где хранится значение System.out.println(name);
Память — это большая область для хранения данных, которая очень похожа на склад. В памяти любое значение получает номер, по которому его можно извлечь и заменить. Этот номер и есть адрес.
Сравнение по ссылке и по значению
Из-за этих технических особенностей на сравнение данных между собой можно смотреть двумя способами:
- То же самое — тот же участок памяти
- Такое же — одинаковые значения независимо от того, куда указывают адреса
Пример из реальной жизни: два одинаковых стакана из одного набора. Несмотря на свою одинаковость, все же разные стаканы.
Языки программирования по-разному работают с этими понятиями. Как и во многих других языках, в Java все данные делятся на два больших типа:
- Примитивные данные сравниваются по значению, независимо от адресов
- Ссылочные данные сравниваются по адресам
Так работают примитивные данные:
// Сравнение идет по значению, а не адресам 4 == 4; // true true == true; // true 10.0 == 10.0; // true
Из ссылочных данных мы пока знакомы только со строками, но они работают хитро, поэтому в качестве примера посмотрим на массивы. Не обращайте внимание на незнакомый синтаксис. Просто обратите внимание, что в этом коде вроде бы одинаковые штуки не равны друг другу:
// Создание массивов int[] a = 1, 2> int[] b = 1, 2> // Значения одинаковые, но ссылки разные a == b; // false
Особенности строк
Строки относятся к ссылочным типам данных, но ведут себя странно:
// Сравнение, как у примитивных типов данных "hm" == "hm"; // true // Сравнение, как у ссылочных типов данных "hexlet".toUpperCase() == "hexlet".toUpperCase(); // false
Программы постоянно оперируют строками, поэтому эффективность работы с ними выходит на первое место. Если бы строка всегда вела себя как ссылочный тип, то на каждое значение в коде выделялась дополнительная память:
// Без оптимизаций это выражение привело бы к двойному выделению памяти // По одной единице памяти на каждый "hm" "hm" == "hm";
Но этого не происходит. Когда Java встречает явно создаваемую строку, выполняется проверка, а есть ли уже в памяти такая строка.
Если есть, то она переиспользуется, если нет — создается:
// Выделяется память var name1 = "Java"; // Такая строка уже есть, поэтому подставляется ссылка на уже созданную строку // В результате экономится память var name2 = "Java"; // Сравнение по ссылке // Обе переменные указывают на один участок памяти name1 == name2; // true
Но если строка возвращается из метода, то она помещается в свою область памяти со своим уникальным адресом:
// Выделяется новая память в любом случае var name1 = "java".toUpperCase(); // "JAVA" // Выделяется новая память в любом случае var name2 = "java".toUpperCase(); // "JAVA" name1 == name2; // false
Может показаться, что ссылочные данные приносят сплошные проблемы. На самом деле они нужны. Это станет понятно, когда мы столкнемся с изменяемостью в будущем.
В прикладном программировании мы чаще сравниваем строки по значению, чем по ссылке. Для этого в строки встроен метод equals() :
var name1 = "java".toUpperCase(); // "JAVA" var name2 = "java".toUpperCase(); // "JAVA" name1.equals(name2); // true
Помимо equals() , в строки встроен метод equalsIgnoreCase() , который выполняет проверку по значению без учета регистра:
var name1 = "java".toUpperCase(); // "JAVA" var name2 = "java".toLowerCase(); // "java" name1.equalsIgnoreCase(name2); // true
Иногда сравнение строк в Java ведет себя как сравнение значений, но никогда не делайте ставку на это. При изменении кода легко забыть поправить проверку и получить ошибку. Всегда используйте методы, когда нужно сравнивать по значению.
Комбинирование операций и методов
Логические операции — это выражения. Значит, логические операции можно комбинировать с другими выражениями. Разберем на примере. Допустим, мы хотим проверить четность числа. В программировании четность проверяется через остаток от деления на 2:
- Если остаток 0, то число было четным
- Если остаток не 0, то число было нечетным
Остаток от деления — простая, но очень важная концепция в арифметике, алгебре, теории чисел и криптографии. Идея проста: нужно разделить число на несколько равных групп. Если в конце что-то останется, это и есть остаток от деления.
Делим конфеты поровну между людьми:
- 7 конфет, 2 человека: 2 x 3 + остаток 1. Значит, 7 не кратно 2
- 21 конфету, 3 человека: 3 x 7 + остаток 0. Значит, 21 кратно 3
- 19 конфет, 5 человек: 5 x 3 + остаток 4. Значит, 19 не кратно 5
В коде остаток вычисляется с помощью оператора % :
- 7 % 2 → 1
- 21 % 3 → 0
- 19 % 5 → 4
С помощью него напишем метод для проверки четности:
// Определен в классе App public static boolean isEven(int number) return number % 2 == 0; > App.isEven(10); // true App.isEven(3); // false
В одном выражении мы скомбинировали два логических оператора:
- == — проверка равенства
- % — арифметический оператор остатка от деления
Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение number % 2 , затем результат участвует в логическом сравнении.
По-русски это можно расшифровать так: «Нужно вычислить остаток от деления числа number на 2 и сравнить с нулем; затем вернуть результат сравнения».
Рассмотрим еще один пример. Напишем метод, который принимает строку и проверяет, заглавная ли первая буква. Алгоритм действий будет такой:
- Получим и запишем в переменную первый символ из строки-аргумента
- Сравним, равен ли символ своей заглавной версии
- Вернем результат
А так будет выглядеть реализация в коде:
public static boolean isFirstLetterInUpperCase(String string) var firstLetter = string.charAt(0); // Класс Character содержит различные методы для работы с символом // Метод isUpperCase() проверяет, что переданный символ в верхнем регистре return Character.isUpperCase(firstLetter); > App.isFirstLetterInUpperCase("marmont"); // false App.isFirstLetterInUpperCase("Robb"); // true
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Логические операции
Внимание! Все тесты в этом разделе разработаны пользователями сайта для собственного использования. Администрация сайта не проверяет возможные ошибки, которые могут встретиться в тестах.
тест для 10 класса по теме Логические операции учебник Информатика. 10 класс. Углубленный уровень. В 2 ч. Поляков К.Ю., Еремин Е.А. М.: 2013 — Ч.1 — 344с., Ч.2 — 304с.
Система оценки: 5 балльная
Список вопросов теста
Вопрос 1
Какой ученый разработал основы алгебры логики?
Варианты ответов
- Л. Пастер
- Дж. Буль
- Б. Паскаль
- К. Шеннон
- И. Ньютон
Вопрос 2
Какая операция называется «конъюнкцией»?
Варианты ответов
- НЕ
- И
- или
- исключающее ИЛИ
- импликация
Вопрос 3
Какая операция называется «дизъюнкцией»?
Варианты ответов
- не
- и
- или
- исключающее ИЛИ
- импликация
Вопрос 4
Как называется операция, соответствующая связке «тогда и только тогда»?
Варианты ответов
- отрицание
- конъюнкция
- эквивалентность
- дизъюнкция
- импликация
Вопрос 5
Как называется операция, соответствующая связке «если . то»?
Варианты ответов
- отрицание
- конъюнкция
- эквивалентность
- импликация
- дизъюнкция
Вопрос 6
Какие из этих логических выражений равны нулю независимо от значения переменной A? Здесь xor обозначает «исключающее ИЛИ»
Варианты ответов
- A + A
- A * 0
- A xor A
- A xor 0
- A + 1
Вопрос 7
Какие из этих логических выражений истинны независимо от значения переменной A? Здесь xor обозначает «исключающее ИЛИ»
Варианты ответов
- A + 1
- A * 1
- A xor 1
- A xor A
- 1 xor (0 * A)
Вопрос 8
Найдите значение логического выражения
Вопрос 9
Какая операция равносильна выражению
Варианты ответов
- исключающее ИЛИ
- импликация
- эквиваленция
- конъюнкция
- логическое сложение
Какие из этих логических выражений равны нулю независимо от значения переменной A? Здесь xor обозначает «исключающее ИЛИ». A + A
A * 0
A xor A
A xor 0
A + 1
морской исследовательское судно сделала стерео двухканальную Запись звуков китов и дельфинов длительностью 1 час 4 минуты с частотой дискретизации 32 … кгц объём записи получился 468, 75 Мбайт Определите глубину кодирования звуков в битах в ответе Укажите только число, слова бит не нужно ПОМОГИТЕ СРОЧНО
развязать кроссворд
Даю 25 баллов. Даны запросы к поисковому серверу. Расположи в порядке возрастания количество станиц, которые найдёт поисковый сервер. Информатика &a … mp; Учёба Информатика Информатика | Информация Информатика | Информация | Учёба
Даю 100 Балів допоможіть будь-ласка потрібно виконати задачу В з фото або перейдіть по силці вона там теж буде потрібно скласти код для задачі на любі … й мові програмуваня бажано на пайтоні але необовязково
Даю 100 Балів допоможіть будь-ласка потрібно виконати задачу А з фото або перейдіть по силці вона там теж буде потрібно скласти код для задачі на любі … й мові програмуваня бажано на пайтоні але необовязково