- Добавлены уроки бассейна

This commit is contained in:
Alexandra Bashkirova
2024-08-23 14:34:15 +03:00
parent 2fad719692
commit 6f614f826e
28 changed files with 791 additions and 0 deletions
@@ -0,0 +1,149 @@
# Давайте познакомимся
Мы рады, что вы здесь. Почти все готово к старту!
Осталось только попросить вас ответить на несколько вопросов — так мы сможем больше узнать про ваш входной уровень, а вы сможете решить, пригодится ли вам дополнительная информация из «Бассейна».
> «Бассейн» — это дополнительный небольшой набор уроков, который должен познакомить вас с основными понятиями программирования. Эта информация поможет лучше усваивать дальнейший материал, если вы сталкиваетесь с программированием впервые в жизни.
Важно: любые ответы будут подходящими, мы не даем вам оценку, вы прекрасны по определению!
Есть ли у вас какое-либо образование, связанное с программированием? Если да, то какое?
- [ ] Законченное высшее
- [ ] Курсы
- [ ] Среднее профессиональное (колледж, техникум и тд)
- [ ] У меня нет никакого образовательного опыта, связанного с программированием
- [ ] Самообразование (видео, статьи, подкасты)
- [ ] Не законченное высшее
Сколько курсов вы начинали или попыток выучить самостоятельно какой-то из языков программирования предприняли за последние 5 лет?
- [ ] Нисколько, вот в первый раз хочу это сделать!
- [ ] Разок было такое
- [ ] Было две-три попытки
- [ ] Больше четырех точно — часто начинаю что-то
Есть ли у вас опыт написания любых программ какого угодно уровня сложности?
Если да, то что вы успели поделать?
- [ ] У меня нет никакого опыта с программированием
- [ ] Учебные задачки на курсе по информатике в школьные или студенческие годы
- [ ] Простые сайты, программы или приложения в рамках самообразования или прохождения курсов
- [ ] Был опыт написания скриптов для рабочих или других своих задач
- [ ] Занимаюсь коммерческой разработкой
- [ ] Были или есть личные проекты, но коммерческой разработкой не
занимаюсь
Какова ваша ОСНОВНАЯ причина для того, чтобы изучать мобильную разработку? Мы подстраиваемся под ваши цели, поэтому там важно правильно их понять.
- [ ] Разработчики много зарабатывают, хочу так же — это самое важное для меня, почему бы мне не начать жить лучше
- [ ] С детства нравились компьютеры, но жизнь ушла куда-то не туда, очень хочу быть программистом(-сткой)
- [ ] Ищу более спокойное/интересное занятие, которое будет иметь больше смысла и дохода, меньше стресса, чем моя текущая работа — и, думаю, что программирование может мне быть интересно
- [ ] Мне нужно новое занятие, а не новая работа — давненько не углублялся(-лась) во что-то не изученное, чтобы размять мозги
- [ ] Просто так, а почему бы и нет
- [ ] Хочу создать свой пет-проект, новая работа мне не нужна
- [ ] Ничего из перечисленного ко мне не относится
Как вы сами оцениваете свой уровень в программировании?
- [ ] Что-то умею, есть опыт написания простых программ или скриптов, но опыта с iOS нет
- [ ] Ничего не умею и не знаю, но очень хочу научиться!
- [ ] Немного знаю iOS-разработку
- [ ] Я разработчик(-ица)!
Спасибо! Ниже есть ещё вопросы — ответьте, пожалуйста, и на них!
**Перед вами есть блоки с псевдокодом — это язык, использующий ключевые слова языков программирования, но не содержащий специфический синтаксис.
Составьте из этих блоков программу, которая будет сравнивать два числа и выводить большее из них.
Если не получится — все в порядке, это абсолютно нормально, вы пришли к нам, чтобы всему научиться!**
если
б
конец
а >
вывод (б)
то
ввод (a)
ввод (б)
вывод (а)
иначе
начало
**Правильный порядок:**
начало
ввод (a)
ввод (б)
если
а >
б
то
вывод (а)
иначе
вывод (б)
конец
Что выведется на экран в предыдущей программе, если а будет равно б?
- [ ] а
- [ ] Программа не запустится.
- [ ] а и б
- [x] б
- [ ] Не знаю! (На экран выведется б, потому что если а = б, то условие если а > б — неверное, и в таком случае программа выведет б.)
Вот еще одна программа, сделанная с помощью псевдокода (это последняя, честное слово!)
Что она делает, как думаете?
```text
начало
ввод (n)
i := 1
пока (i < n)
вывод (i)
конец
```
- [ ] Это программа, которая выводит большее значение между i и n, но она работает, только если значение i было меньше единицы.
- [ ] Это цикл, который будет повторен количество раз, равное числу n, но только если n меньше одного.
- [ ] Это специализированное расширение, которое увеличивает значение i на n и показывает его, но только в случае, если i меньше n.
- [x] Это цикл, который бесконечно выводит 1, если введённое число n больше 1, и ничего не выводит в противном случае.
- [ ] С таким мне сталкиваться не приходилось! (Это даже хорошо! Сможете узнать про это на курсе.)
Фух, последний вопрос! Выберите наиболее правильный вариант определения “массива”.
- [ ] Это множество, в котором содержатся переменные, и из которого можно забирать данные для вычислений.
- [ ] В первый раз сталкиваюсь с этим понятием, не буду догадываться.
- [ ] Это набор структурированной информации, в которых содержатся данные одного типа.
- [x] Это структура данных одного типа, позволяющая хранить в определённом порядке значения, к которым можно обращаться по их номеру.
КНОПКА
Вопросы закончились, что дальше?
Спасибо за потраченное время! Теперь мы лучше с вами знакомы, можем использовать ответы, чтобы понимать, кто к нам приходит и улучшать программу.
Дальше вам стоит решить, получать ли дополнительные уроки, или не стоит.
## Кому «Бассейн» не будет полезен
Если вы сами ответили правильно на два и более вопроса и у вас есть образовательный или практический опыт столкновения с программированием — «Бассейн» ничем не будет вам полезен, переходите смело [к модулю «Основы языка Swift»](https://practicum.yandex.ru/learn/ios-developer/courses/0bf8963e-5da4-4972-a061-2f5d794bd2e1/sprints/125805/topics/a6326ca6-4d27-449c-86e7-2c8d5543e7c0/lessons/b7b0e60f-73e2-4ab1-8856-dd82972f0305/)!
## Кому «Бассейн» пригодится
Если вы дали верный ответ на один и менее вопрос или знаете, что просто что-то угадали — **имеет смысл получить информацию из «Бассейна».**
Особенно, если это ваше самое первое столкновение с программированием.
Однако, это не обязательно и вы можете переходить к следующей теме спринта 1.
Мы в Практикуме стараемся находить интересные закономерности в обучении у наших студентов. Полученные инсайты мы используем для улучшения и персонализации вашего учебного опыта. Ответьте, пожалуйста, на вопросы ниже. Будем благодарны за честные ответы!
- Насколько вы уверены в выборе профессии, по которой проходите курс, по шкале от 1 до 5? (1 — абсолютно не уверен, 5 — полностью уверен)
- Я уверен, что смогу освоить выбранную профессию/получить новые знания
- Я уверен, что смогу найти работу/вырасти в карьере после окончания выбранного курса
@@ -0,0 +1,63 @@
# Исходные булевы операторы
## Мистер Буль и поиски истины
Добро пожаловать в Бассейн! Это своего рода «центр подготовки» будущих мобильных разработчиков. Предлагаем пройти его прежде, чем отправляться в большое плавание по галактике iOS.
![image](https://pictures.s3.yandex.net/resources/Bassein_--_urok_Iskhodnye_bulevy_operatory_1697032324.png)
В начале обучения будет много новой информации, терминов и понятий. Вместе с тем, основные идеи программирования довольно просты и зачастую совпадают с нашей повседневной логикой.
Мы сделали акцент на основных идеях и постарались «перевести» их в бытовые задачки, решая которые вы постепенно поймёте принципы программирования, не вдаваясь в технические детали. Эти навыки помогут более плавно влиться в программирование, а вставки с примерами подскажут, как применить полученные знания в работе над реальными приложениями.
Мы с вами:
- узнаем, что такое исходные булевы операторы ИСТИНА, ЛОЖЬ и зачем они нужны в программировании;
- поймём, как и для чего применять операторы И и НЕ;
- разберёмся, как комбинировать эти операторы и с помощью них проверять данные, задавая вопросы;
- выясним, какие действия производят программы в результате таких проверок;
- изучим конструкции, наиболее часто используемые в программировании — функции, циклы, массивы.
Кнопка
Вперёд!
Во время своей работы приложение должно сделать две главных вещи: проверить некоторые условия и выполнить соответствующие действия. Например, при самом первом запуске приложение может показать обучающий экран, а при последующих запусках — сразу главный. Это происходит не само по себе, а благодаря определённым математическим основам, на которых базируются принципы работы компьютерных программ.
Одной из таких математических основ является булева алгебра. Называется она так в честь математика Джорджа Буля. В этом уроке мы познакомим вас с ним и с основами булевой алгебры, чтобы в будущем вы сами могли составлять различные условия при написании программ.
Давным-давно в Англии жил мистер Буль. Человек он был добрый, но чудаковатый, и любил всё делать по-своему. Буль не терпел неопределённости, поэтому решил, что будет использовать в своей речи только такие выражения, про которые можно точно сказать, верны они или нет.
Например, «Великобритания — королевство» — это `ИСТИНА`. А «Манчестер — столица Великобритании» — это `ЛОЖЬ`, что бы манчестерцы себе ни воображали. Но при этом мистер Буль никогда не сказал бы, что «кошки черепахового окраса — самые красивые»: красота — понятие субъективное, и нет никакой возможности доказать, `ИСТИНА` это или `ЛОЖЬ`.
> Все процессоры в современных смартфонах оперируют только двумя значениями: `ИСТИНА` и `ЛОЖЬ` (иногда они обозначаются как `1` и `0`).
![image](https://user-images.githubusercontent.com/102217910/181251950-ae36e834-948a-4b05-bf02-062cc2426aab.png)
Кнопка
Далее
Давайте теперь потренируемся думать как Буль. В этом нам помогут следующие высказывания: — КВИЗ
## «Все лебеди - белые»:
- [ ] `ИСТИНА`
**Пояснение: Оказывается, нет: бывают ещё и чёрные!**
- [x] `ЛОЖЬ`
**Пояснение: Вы, наверное, читали книгу Нассима Талеба «Чёрный лебедь»!**
## «Обычное облако весит сотни тонн»:
- [x] `ИСТИНА`
**Пояснение: Верно! И как только они не падают?**
- [ ] `ЛОЖЬ`
**Пояснение: Казалось бы, «лёгкий как облачко» — но нет! Просто хороший PR!**
## «6*2 < 29-17»:
- [ ] `ИСТИНА`
**Пояснение: В левой части у нас `6*2 = 12`, в правой части — `29-17 = 12`. То есть выражение можно записать как `12 < 12`. Но это неверно, поэтому значение выражения - `ЛОЖЬ`.**
- [x] `ЛОЖЬ`
**Пояснение: Верно — неравенство НЕ соблюдается.**
Кнопка
Далее
@@ -0,0 +1,52 @@
# Мистер Буль и дети
Однажды мистер Буль стал счастливым отцом двойняшек, Анны и Бетти. Девочки были так похожи, что он никак не мог научиться их различать. Чтобы выйти из положения, он научил Анну всегда говорить только правду, а Бетти — только ложь.
Буль задавал им вопросы (высказывания `X`) и записывал в свою тетрадку *все возможные комбинации значений* исходного высказывания и ответов девочек:
![image](https://user-images.githubusercontent.com/102217910/183682113-d250b6a7-fa8a-4bb1-8a38-a70ca1f25fd9.png)
![image](https://user-images.githubusercontent.com/102217910/181252161-73d78710-b66f-463c-8914-208c11e55811.png)
Теперь при встрече он всегда мог задать им проверочный вопрос, чтобы понять, кто есть кто. Например, девочки отвечали так:
Диалог
> Буль: У кареты четыре колеса?
> Анна: Да, четыре.
> Бетти: Нет, семь как минимум!
Тут исходное выражение — правда. Если же исходное выражение было ложью, то и ответы будут другими:
Диалог
> Буль: Вода сухая?
> Анна: Вовсе нет!
> Бетти: Именно так, папенька.
> Программисты часто проверяют данные, «задавая вопросы». Например, при проверке пользовательского пароля может использоваться выражение `длина придуманного пароля > 8 символов?`.
Попробуем научиться отличать истину ото лжи в компании мистера Буля и его дочерей: — КВИЗ
## Однажды Буль встретил одну из дочек и спросил её: «Ты Анна?» Что ответила дочка?
- [x] «Да, я Анна»
**Пояснение: Точно! Если это была Анна, она сказала `ИСТИНУ` — «Да, я Анна». Но если бы это была Бетти, она сказала бы `ЛОЖЬ`, ответив «Да, я Анна».**
- [ ] «Нет, я Бетти»
**Пояснение: Если бы это была Анна, она не смогла бы солгать. А если Бетти, то не смогла бы сказать правду. Поэтому никто из девочек не смог бы так ответить.**
## Однажды обе дочки пришли к отцу, и одна девочка сказала: «По крайней мере одина из нас всё время лжёт». Кто это сказал?
- [x] Анна сказала, Бетти промолчала
**Пояснение: Значение высказывания — `ИСТИНА`, значит, это была Анна.**
- [ ] Бетти сказала, Анна промолчала
**Пояснение: Значение высказывания — `ИСТИНА`: Бетти не сказала бы такого, ей воспитание не позволяет!**
Кнопка
Далее
@@ -0,0 +1,50 @@
# Мистер Буль и вредный сосед
Был у Буля сосед, который постоянно всё отрицал. На каждое булево выражение `X` он возвращал своё отрицание `НЕ X`. Буль решил записать в тетрадку все возможные значения. Получилась такая таблица:
![image](https://user-images.githubusercontent.com/102217910/183682499-0a2bb38b-55ec-42eb-8977-2a26368cfcaa.png)
Бывало, заведёт Буль разговор о погоде — а сосед даже тут не уступает:
Диалог
> Буль: Светит солнышко!
> Сосед: Не светит солнышко.
Шуток сосед тоже не понимал:
Диалог
> Буль: Вчера шёл дождь из эля.
> Сосед: Вчера не шёл дождь из эля.
Однажды Буль по доброте душевной занял соседу пять пенсов. Но тот ни в какую не хотел их отдавать, по привычке всё отрицая:
Диалог
> Буль: Ты должен мне пять пенсов.
> Сосед: Я не должен тебе пять пенсов.
И тогда Буля осенило: а что если вернуть соседу его же отрицание?
Диалог
> Буль: Ты не должен мне пять пенсов.
> Сосед: Я должен тебе пять пенсов.
![image](https://user-images.githubusercontent.com/102217910/181252441-cc63a9fe-c808-419c-b671-a3979b1fffba.png)
Так Буль не только вернул свои деньги, но и убедился, что *двойное отрицание даёт исходное суждение*! Окрылённый, он добавил в таблицу ещё один столбец:
![image](https://user-images.githubusercontent.com/102217910/183682729-bf945dc7-36a0-4eff-86a8-7f12c38cc7f8.png)
> Приложение для чтения книг может использовать оператор `НЕ` когда проверяет, открывал ли пользователь книгу. Если `пользователь НЕ открывал книгу`, оно определит её как «Новую».
Пример того, как Буль проучил несговорчивого соседа с помощью двойного отрицания, весьма показателен. Но если значение выражения `X` - `ЛОЖЬ`, то чему будет равно значение выражения `НЕ(НЕ(НЕ X))`? — КВИЗ
- [x] `ИСТИНА`
**Пояснение: Верно! Тройное отрицание - это отрицание двойного отрицания. Двойное отрицание для `ЛОЖЬ` равно `ЛОЖЬ`. Значит, тройное отрицание — это `НЕ ЛОЖЬ`, то есть `ИСТИНА`**
- [ ] `ЛОЖЬ`
**Пояснение: Отрицание каждый раз меняет `ЛОЖЬ` на `ИСТИНУ` и наоборот. Поэтому трижды применяя отрицание к `ЛОЖЬ`, получаем последовательность `ЛОЖЬ` -> `ИСТИНА` -> `ЛОЖЬ` -> `ИСТИНА`.**
Кнопка
Далее
+113
View File
@@ -0,0 +1,113 @@
# Мистер Буль и семейный бюджет
Мистер и миссис Буль вели общий бюджет и частенько спорили из-за того, как распорядиться деньгами. Иной раз мистер Буль хотел себе новую карету для езды по бездорожью, а миссис Буль, устав от лондонского смога, мечтала о поездке на море. В конце концов, они решили сесть и выработать общие правила для покупок.
Они разделили покупки на две категории, и для каждой придумали булево выражение.
![image](https://user-images.githubusercontent.com/102217910/181252898-9181eb00-cfd1-4046-b8ec-a6ec772504f7.png)
1. В первую группу выделили общие покупки, для которых применяли булево выражение с оператором `И`:
`мистер Буль согласен И миссис Буль согласна`
Давайте рассмотрим, как работает этот оператор. Обозначим `мистер Буль согласен` переменной `Х1`, а `миссис Буль согласна` — переменной `X2`. Запишем все возможные комбинации значений переменных и выражения `X1 И X2`.
![image](https://user-images.githubusercontent.com/102217910/183682942-747d8541-aa48-4263-8fbb-93e6142c6d68.png)
Значение булева выражения будет `ИСТИНА` только если `X1` = `ИСТИНА` и `X2` = `ИСТИНА`. Иными словами, покупка будет сделана лишь при единодушном согласии супругов.
> Мобильное приложение может использовать оператор `И`, чтобы проверить, принял ли пользователь лицензионное соглашение. Такое условие будет иметь вид: `Стоит галочка И нажата кнопка «Далее»`.
Также можно заметить, что если `X2` = `ИСТИНА`, то значение `X1 И X2` зависит только от `X1`. Если `X1` = `ИСТИНА`, то и `X1 И X2` = `ИСТИНА`. А если `X1` = `ЛОЖЬ`, то `X1 И X2` = `ЛОЖЬ`. То же самое будет, если поменять местами `X1` и `X2`. Поэтому:
`X И ИСТИНА` = `X`
`ИСТИНА И X` = `X`
А если `X2` = `ЛОЖЬ`, то значение `X1 И X2` не зависит от `X1`. То же самое — если поменять местами `X1` и `X2`. Поэтому
`X И ЛОЖЬ` = `ЛОЖЬ`
`ЛОЖЬ И X` = `ЛОЖЬ`
Кнопка
Далее
2. Так как полного согласия супругам удавалось добиться далеко не всегда, во вторую категорию были выделены личные покупки. Для них применяли булево выражение с оператором `ИЛИ`:
`мистер Буль согласен ИЛИ миссис Буль согласна`
![image](https://user-images.githubusercontent.com/102217910/183683202-42363b6c-46b6-4728-9d08-3158a96c9a7c.png)
Так-то лучше! Теперь значение булева выражения будет `ИСТИНА`, если хотя бы одна одна из двух переменных — `ИСТИНА`! Достаточно согласия хотя бы одного из супругов, чтобы покупка состоялась.
> Банковское приложение может использовать оператор `ИЛИ`, чтобы проверить, нужно ли разлогинить пользователя. Условие будет иметь вид `нажата кнопка «Выход» ИЛИ пользователь неактивен 15 минут`.
Также можно заметить, что если `X2` = `ЛОЖЬ`, то значение `X1 ИЛИ X2` зависит только от `X1`. Если `X1` = `ИСТИНА`, то `X1 ИЛИ X2` = `ИСТИНА`, а если `X1` = `ЛОЖЬ`, то `X1 ИЛИ X2` = `ЛОЖЬ`. То же будет, если поменять местами `X1` и `X2`. Поэтому
`X ИЛИ ЛОЖЬ` = `X`
`ЛОЖЬ ИЛИ X` = `X`
А если `X2` = `ИСТИНА`, то значение `X1 И X2` не зависит от `X1`. Аналогично — если поменять местами `X1` и `X2`. Поэтому:
`X ИЛИ ИСТИНА` = `ИСТИНА`
`ИСТИНА ИЛИ X` = `ИСТИНА`
## Мистер Буль и порванный рукав — КВИЗ
Когда мистер Буль выходил в свет, ему приходилось выбирать чистую рубашку. Для этого он использовал выражение со следующими переменными: `X1` — рубашка без пятен и `X2` — рукав порван.
Определите выражение, которое он использовал, если известно, что в рубашке с порванным рукавом его никогда не видели:
- [ ] `X1 И X2`
**Пояснение: Представим, что рукав рубашки порван, тогда `X2` = `ИСТИНА`. Выражение `X1 И X2` принимает вид `X1 И ИСТИНА`. Мы знаем из урока, что значение такого выражения равно `X1`. Получается, что если `X1` = `ИСТИНА`, то результат выражения будет `ИСТИНА`. Это значит, что мистер Буль наденет рубашку с порванным рукавом, что не соответствует условиям.**
- [ ] `X1 ИЛИ (НЕ X2)`
**Пояснение: Представим, что рубашка без пятен, тогда `X1` = `ИСТИНА`. Выражение `X1 ИЛИ (НЕ X2)` принимает вид `ИСТИНА ИЛИ (НЕ X2)`. Мы знаем из урока, что значение такого выражения всегда равно `ИСТИНА`, независимо от значения `НЕ X2`. Получается, что если рубашка без пятен, мистер Буль наденет её даже с порванным рукавом, что не соответствует условиям.**
- [x] `X1 И (НЕ X2)`
**Пояснение: Верно! Если рукав порван, то `X2` = `ИСТИНА`, значит, `НЕ X2` = `ЛОЖЬ`. Подставим в выражение, получим `X1 И ЛОЖЬ`. Как мы знаем из урока, это равно `ЛОЖЬ`, то есть такую рубашку мистер Буль никогда не наденет!**
Кнопка
Далее
Со временем мистер и миссис Буль составили такие выражения и для других семейных ситуаций. Например, вот условие для вопроса «сходить ли на ужин к друзьям». Скобками обозначен порядок действий, как в алгебре:
`(Друзья прислали приглашение И (Не видели друзей больше месяца)) ИЛИ Лень готовить.`
Чтобы записать это выражение более компактно, они взяли такие булевы переменные:
`X1` - Друзья прислали приглашение
`X2` - С момента последней встречи прошло меньше месяца
`X3` - Лень готовить
Тогда выражение приняло вид:
`(X1 И (НЕ X2)) ИЛИ X3`
Таблица истинности для этого выражения:
![image](https://user-images.githubusercontent.com/102217910/183683419-38f65961-d144-4353-8b4e-1e1a1e0da5db.png)
> Вы заметили, что в этой таблице получилось в два раза больше строк, чем в предыдущей? Всё из-за того, что в выражении теперь три переменных (а не две, как раньше), и число возможных комбинаций выросло. Добавление каждой новой переменной увеличивает таблицу ровно в 2 раза. В общем случае в таблице будет 2^N строк, где N - количество переменных.
## Мистер Буль и карета — Квиз
Перед поездкой карета Булей всегда проходила техосмотр. Механик использовал такое условие для проверки пригодности:
`(X1 ИЛИ (НЕ X2)) И (НЕ X3)`, где `X1` - аптечка укомплектована, `X2` - огнетушитель отсутствует, `X3` - колёса отвалились.
Укажите состояние огнетушителя, если известно, что аптечка не укомплектована, колёса не отвалились, а проверка пригодности показала значение `ИСТИНА`.
- [ ] Огнетушитель отсутствует.
**Пояснение: Если огнетушитель отсутствует, то `X2` = `ИСТИНА`. Из условий мы знаем, что `X1` = `ЛОЖЬ`, `Х3` = `ЛОЖЬ`. Подставим известные значения переменных в выражение; получим `(ЛОЖЬ ИЛИ (НЕ ИСТИНА)) И (НЕ ЛОЖЬ)`. Упростим его; получим `(ЛОЖЬ ИЛИ ЛОЖЬ) И ИСТИНА`. Выражение `ЛОЖЬ ИЛИ ЛОЖЬ` всегда равно `ЛОЖЬ`. Подставляем и получаем `ЛОЖЬ И ИСТИНА`, отсюда результат выражения — `ЛОЖЬ`. Значит, проверка пригодности не смогла показать `ИСТИНУ`. Мы пришли к противоречию, следовательно, `X2` не равно `ИСТИНА`.**
- [x] Огнетушитель присутствует.
- [ ]
**Пояснение: Верно! Хоть что-то исправно, и ладно.**
## Заключение
Вы познакомились с основами булевой алгебры, научились составлять выражения с операторами `И`, `ИЛИ`, `НЕ`. Отлично! Если вам хочется продолжить решать подобные логические задачи, рекомендуем обратиться к книге Рэймонда Смаллиана «Как же называется эта книга?». А в следующем уроке мы расскажем, как булевы выражения применяются в программах.
КНОПКА Следующий урок
@@ -0,0 +1,53 @@
# Мистер Буль и школьные условности
Когда Анна и Бетти пошли учиться, мистер Буль стал по утрам отвозить их в школу. Первое время всё шло хорошо, но однажды они приехали — а школа оказалась закрыта...
![image](https://user-images.githubusercontent.com/102217910/186368307-5d7f36f4-a3d0-4555-837c-1ec83c159e53.png)
«Выходной!» — догадался мистер Буль, и записал себе в тетрадку новый оператор ветвления `ЕСЛИ .. ТО`:
`ЕСЛИ` будний день,
`ТО` отвезти девочек в школу.
Как видите, от значения булева выражения зависит, выполняется ли действие:
![image](https://user-images.githubusercontent.com/102217910/186368419-938af1f6-5a5e-4e34-8718-3b6d2300451c.png)
> Также в зависимости от истинности условия приложение может выполнять или не выполнять определённое действие. Например, `ЕСЛИ` введён неправильный пароль, `ТО` надо показать пользователю сообщение об ошибке.
Буль был заботливым отцом. Он решил, что по выходным дочерям стоит больше гулять на свежем воздухе. Поэтому он дописал ещё одно условие, и в его тетрадке появился оператор `ЕСЛИ .. ТО .. ИНАЧЕ`,
`ЕСЛИ` будний день,
`ТО` отвезти дочек в школу,
`ИНАЧЕ` — пойти с дочками гулять.
![image](https://user-images.githubusercontent.com/102217910/186368533-3cf3c8a1-98e1-44d1-978f-c91f3fb202cb.png)
> Приложение-соцсеть может проверять длину поста при отправке: `ЕСЛИ` пост больше 500 символов, `ТО` показать предупреждение о невозможности публикации, `ИНАЧЕ` опубликовать его.
(**КВИЗ “СБОРНАЯ СТРОКА”**)
# Проверим изученное
Кошка Булей была ласковой и воспитанной исключительно хорошо. При встрече она давала знать о том, что голодна, вежливым мяуканьем. Как мистер Буль действовал, когда видел кошку?
**КАРТОЧКИ**:
ИНАЧЕ
КОШКА МЯУКАЕТ
ТО
ЕСЛИ
ПОГЛАДИТЬ КОШКУ
ПОКОРМИТЬ КОШКУ
**ВЕРНЫЙ ПОРЯДОК**:
ЕСЛИ КОШКА МЯУКАЕТ ТО ПОКОРМИТЬ КОШКУ ИНАЧЕ ПОГЛАДИТЬ КОШКУ
Кнопка
Далее
@@ -0,0 +1,69 @@
# Мистер Буль и чудеса дедукции
Однажды миссис Буль спросила у своего мужа, помнит ли он, какой сегодня важный день. Мистер Буль пробормотал что-то невнятное, быстро удалился в свой кабинет и погрузился в раздумья. Спустя некоторое время ему пришла в голову мысль: возможно, миссис Буль говорила про годовщину их свадьбы. Но он должен был знать наверняка.
В своей тетрадке он нашёл запись, сделанную ровно год назад. Там было записано булево выражение для похода на футбол:
`X` = `X1 И НЕ (X2 ИЛИ X3)`, где
`X` — мистер Буль идёт на футбол
`X1` — матч в этот день проходит
`X2` — день рождения миссис Буль
`X3` — годовщина свадьбы
Мистер Буль точно помнил, что на футбол он в тот день не пошёл (`X` = `ЛОЖЬ`), хотя матч состоялся (`X1` = `ИСТИНА`). При этом день рождения миссис Буль был в другой день (`X2` = `ЛОЖЬ`) — супруга отметила юбилей полгода тому назад.
Подставив известные значения в булево выражение, мистер Буль получил:
`ЛОЖЬ` = `ИСТИНА И НЕ (ЛОЖЬ ИЛИ X3)`
Зная, что `ЛОЖЬ ИЛИ X3` = `X3`, он написал:
`ЛОЖЬ` = `ИСТИНА И НЕ X3`
Так как `ИСТИНА И НЕ X3` = `НЕ X3`, он понял, что:
`ЛОЖЬ` = `НЕ X3`
Отсюда следовало единственно возможное следствие:
`ИСТИНА` = `X3`
Значит, мистер Буль не ошибся! В этот день действительно была годовщина свадьбы, и следовало отпраздновать её с миссис Буль.
> Программистам иногда приходится быть детективами. Например, пользователь прислал скриншот с ошибкой. Чтобы её исправить, программисту нужно сперва понять, при каких условиях такая ошибка могла появиться.
# Проверим изученное
Мистер Буль любил ездить на рыбалку на озеро. Булево выражение для поездок имело вид:
`X` = `X1 И НЕ (X2 ИЛИ X3 ИЛИ X4)`, где
`X` — мистер Буль едет на рыбалку
`X1` — выходной
`X2` — озеро замёрзло
`X3` — ездил на рыбалку в прошлые выходные
`X4` — обещал провести выходные с семьёй
В один из дней мистер Буль не поехал на рыбалку (`X` = `ЛОЖЬ`). Известно, что:
- озеро не замёрзло (`X2` = `ЛОЖЬ`)
- в прошлые выходные мистер Буль ездил на рыбалку (`X3` = `ИСТИНА`)
- мистер Буль не обещал провести выходные с семьёй (`X4` = `ЛОЖЬ`)
Можно ли из этой информации узнать, был ли это выходной (иными словами, чему равно `X1`)?
- [ ] можно
**Пояснение: Нам нужно понять, зависит ли значение выражения `X1 И НЕ (X2 ИЛИ X3 ИЛИ X4)` от значения `X1`.
Подставив в него известные значения, получим `X1 И НЕ (ЛОЖЬ ИЛИ ИСТИНА ИЛИ ЛОЖЬ)`.
Упрощая скобки, получаем `X1 И НЕ ИСТИНА`, то есть `X1 И ЛОЖЬ`.
`X1 И ЛОЖЬ` = `ЛОЖЬ` независимо от значения `X1`. Следовательно, значение выражения не зависит от `X1`. Получается, что мы не можем определить значение `X1` из доступной информации.**
- [x] нельзя
**Пояснение: Верно! При таких значениях переменных `X2`, `X3` и `X4` значение булева выражения `X` всегда `ЛОЖЬ`, независимо от значения `X1`.**
Кнопка
Далее
@@ -0,0 +1,60 @@
# Мистер Буль и кулинарные опыты
Однажды миссис Буль уехала в гости к маме. Внимательная супруга, она оставила для мистера Буля на столе рецепт варки яиц на завтрак. Каждое действие было записано на отдельном листочке.
Но тут, как на беду, поднялся сильный ветер и разметал листы по кухне!
![image](https://user-images.githubusercontent.com/102217910/186368693-742eb69a-c461-4cb9-b6c1-c5b59d71b95b.png)
Буль собрал следующие листы:
– Подождать 10 минут
– Налить в кастрюлю воду
Разжечь огонь
– Положить в кастрюлю яйца
Погасить огонь
Сначала он попробовал выполнить все эти действия в том порядке, как было написано. Но дочки отчего-то завтракать отказались.
Методом проб и ошибок мистер Буль смог восстановить оригинальную последовательность действий и записал алгоритм (**ГЛОССАРИЙ** Алгори́тм — от имени среднеазиатского математика Аль-Хорезми — конечная последовательность действий для решения определённой задачи) в тетрадку:
– Налить в кастрюлю воду
– Положить в кастрюлю яйца
Разжечь огонь
– Подождать 10 минут
Погасить огонь
За время экспериментов Буль сделал такие наблюдения:
- Некоторые последовательности действий приводят к *желаемому результату*. При этом некоторые действия можно менять местами: например, неважно, что сначала окажется в кастрюле — вода или яйца.
- Некоторые последовательности действий приводят к *нежелательному результату*. Например, если мы зажигаем огонь и сразу его выключаем, то яйца останутся сырыми.
- Некоторые последовательности действий приводят к *ошибке*. Например, мы не можем погасить огонь до того, как его зажгли.
> Приложение-калькулятор рассчитывает результат для `3-1*2`. Чтобы получить правильный результат (`1`), оно должно соблюдать правильный порядок действий: сначала умножение и деление, потом — сложение и вычитание. Если программист это не учёл, он получит неверный результат — `4`.
(**КВИЗ “СБОРНАЯ СТРОКА”**)
# Проверим изученное
Восстановите алгоритм чаепития Булей.
**КАРТОЧКИ**:
- разлить чай по чашкам
- подождать, пока чай заварится
- залить кипяток в чайник
- попивать чай, обсуждая погоду в Лондоне
- насыпать заварку в пустой чайник
**ВЕРНЫЙ ПОРЯДОК**:
- насыпать заварку в пустой чайник
- залить кипяток в чайник
- подождать, пока чай заварится
- разлить чай по чашкам
- попивать чай, обсуждая погоду в Лондоне
Кнопка
Далее
@@ -0,0 +1,33 @@
# Мистер Буль и его (бытовые) функции
Пока миссис Буль была в отъезде, на мистера Буля свалилось много дел. Для каждого дела он записывал алгоритм и называл такую запись *функцией* (**ГЛОССАРИЙ Функция — это фрагмент программы, который делает одно дело, и к которому можно обратиться из другой части программы.**).
Например, функция `постирать платок` выглядела так:
`постирать платок`
- налить в таз воды
- положить платок в таз
- насыпать в таз стиральный порошок
- потереть части платка друг об друга
- прополоскать платок
Мистер Буль быстро понял, что остальные вещи из его гардероба стираются точно каким же образом. Значит, нет необходимости заводить отдельную функцию для стирки каждой вещи (например, `постирать сюртук`). Тогда учёный изменил функцию `постирать платок` так, чтобы она позволяла постирать любой `предмет одежды`.
В скобках он записал данные, которые передаются в функцию при начале её выполнения. Они называются `входные параметры`.
`постирать(<предмет одежды>)`
- налить в таз воды
- положить `<предмет одежды>` в таз
- насыпать в таз стиральный порошок
- потереть части `<предмета одежды>` друг об друга
- прополоскать `<предмет одежды>`
> Бывает, что в программе какой-то код повторяется в нескольких местах. Например, приложение «Телефонная книга» может проверять корректность номера телефона:
> - при создании нового контакта,
> - при редактировании существующего.
> Такой код нужно вынести в отдельную функцию. Ваши коллеги будут благодарны: кода станет меньше, а значит, его будет легче читать и поддерживать.
Кнопка
Далее
@@ -0,0 +1,39 @@
# Мистер Буль и цикличность бытия
Мистер Буль очень любил сладкое. Он предпочитал пить чай с тремя ложами сахара. Но поскольку его то и дело что-то отвлекало, иногда в чае оказывалось две, а иногда — целых четыре ложки сахара.
Мистер Буль решил усовершенствовать процесс. Для этой цели он раздобыл пустую банку и камешки. Теперь каждый раз, когда он добавлял ложку сахара в чай, то клал в пустую банку камешек. Так он придумал `ЦИКЛ ДЛЯ` камешков в банке:
ЦИКЛ ДЛЯ (банки, содержащей меньше 3 камешков) {
добавить в чай 1 ложку сахара
добавить в банку 1 камешек
}
В самом начале в банке не было камешков (иными словами, было 0 камешков). Перед каждым повторением цикла (ещё говорят «перед каждой итерацией») проводилась проверка условия, написанного в скобках.
Если проверка проходила успешно (в банке было меньше трёх камешков), то выполнялось тело цикла (то, что написано в фигурных скобках). Это продолжалось до тех пор, пока условие не переставало выполняться:
![image](https://user-images.githubusercontent.com/102217910/186368851-fb590695-9bae-4ccf-b89e-1d3c270c8852.png)
После окончания третьей итерации в банке было 3 камешка. Поэтому перед началом четвёртой итерации условие не выполнялось, и цикл завершался.
> Игровое приложение может использовать такой цикл, чтобы при победе игрока несколько раз воспроизвести звук трубы.
**КВИЗ**
# Проверим изученное
Мистер Буль любил, чтобы в супе было 4 ложки соли. В каждой итерации он добавлял по 2 ложки. Сколько итераций ему потребовалось, чтобы посолить суп?
- [ ] 1
**Пояснение: Перед первой итерацией в супе было 0 ложек соли. Во время первой итерации Буль добавили 2 ложки соли. Если на этом остановиться, то суп будет недосолен!**
- [x] 2
**Пояснение: Верно! Идеальный вкус, насыщенный аромат!**
- [ ] 3
**Пояснение: После первой итерации в супе будет 2 ложки соли, после второй - 4, после третьей - 6. Суп пересолен!**
@@ -0,0 +1,80 @@
# Гардероб мистера Буля
Мистер Буль очень любил свой комод из массива дуба. Он так ласково его и называл: «мой массив». А чтобы было удобнее ориентироваться, Буль последовательно пронумеровал все ящики массива, начиная с 0. То есть первый ящик имел номер 0, второй — номер 1 и так далее.
Когда учёный хотел открыть первый ящик и посмотреть, что в нём, это выглядело так:
`массив[0]`
А когда клал галстук во второй ящик — вот так:
`массив[0] = галстук`
> Массив в программировании — одна из самых часто используемых структур данных. Например, программа для просмотра фото может хранить в массиве фотографии.
Так как место в комоде ограничено, в каждом ящике может лежать только один предмет одежды (он называется «элемент массива»).
Соответственно, при добавлении нового элемента в ящик оттуда извлекается старый элемент:
`массив[0] = галстук`
// сейчас в массиве[0] — галстук
`массив[0] = бабочка`
// а теперь — бабочка
Однажды мистер Буль решил устроить разбор гардероба. Вещи, которые порвались, он решил заштопать. На этот раз он не использовал банку, а запоминал `номер_элемент_массива`.
В массиве было 10 элементов, поэтому цикл получился такой:
`ЦИКЛ ДЛЯ` (номера_элемента_массива меньше 10) {
`ЕСЛИ` массив[номер_элемент_массива] порвался, `ТО` заштопать
увеличить номер_элемент_массива на 1
}
> Программы могут хранить в массивах самые разные элементы, в том числе абстрактные. Например, может быть массив целых чисел, массив кнопок на экране, массив кличек собак и так далее.
**КВИЗ**
# Проверим изученное
# Дочка Анна сделала массив `месяцы` и последовательно поместила в него элементы «январь», «февраль», «март» и остальные. Затем она сделала `ЦИКЛ ДЛЯ` `номера_элемента_массива`:
`ЦИКЛ ДЛЯ` (номера_элемента_массива меньше 11) {
`ЕСЛИ` число дней в месяцы [номер_элемента_массива] равно 31, `ТО` нарисовать ёлочку, `ИНАЧЕ` нарисовать сосенку
увеличить номер_элемента_массива на 1
}
Сколько ёлочек и сосенок нарисовала Анна?
- [ ] 7 ёлочек, 5 сосенок
**Пояснение: Таким был бы ответ, если бы мы выполняли цикл для всех 12 месяцев. Но так как в скобках указано «меньше 11», а не «меньше 12», то цикл выполнится только для первых 11 месяцев.**
- [x] 6 ёлочек, 5 сосенок
**Пояснение: Верно. Из первых 11 месяцев года 31 день содержат 6.**
- [ ] 5 ёлочек, 6 сосенок
**Пояснение: Из первых 11 месяцев года 31 день содержат 6. Но для таких месяцев Анна рисовала ёлочки, а не сосенки.**
- [ ] 6 ёлочек, 4 сосенки
**Пояснение: `номер_элемента_массива` перед первой итерацией равен 0. В конце каждой итерацией он увеличивается на 1, пока не достигнет 10 (после этого условие в скобках перестанет выполняться). Значит, всего у нас 11 итераций, и Анна нарисовала 11 деревьев, а не 6+4 = 10.**
Кнопка
Подведём итоги
Мы познакомились с основами булевой логики и базовыми элементами программирования: проверкой условий, функциями, циклами, массивами. Эти знания помогут вам при изучении языка программирования и написании программ. В добрый путь!
![image](https://pictures.s3.yandex.net/resources/Bassein_konets_--_urok_Massiv_1697032406.png)
Как вам уроки Бассейна? 1 / 2 / 3 / 4 / 5
Как вам уроки Бассейна?
Пожалуйста, расскажите, подробнее.
Мы в Практикуме стараемся находить интересные закономерности в обучении у наших студентов. Полученные инсайты мы используем для улучшения и персонализации вашего учебного опыта. Ответьте, пожалуйста, на вопросы ниже. Будем благодарны за честные ответы!
- Насколько вы уверены в выборе профессии, по которой проходите курс, по шкале от 1 до 5? (1 — абсолютно не уверен, 5 — полностью уверен)
- Я уверен, что смогу освоить выбранную профессию/получить новые знания
- Я уверен, что смогу найти работу/вырасти в карьере после окончания выбранного курса
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

@@ -0,0 +1,13 @@
**Пояснение: Верно! Хоть что-то исправно, и ладно.**
## Заключение
Вы познакомились с основами булевой алгебры, научились составлять выражения с операторами `И`, `ИЛИ`, `НЕ`. Отлично! Если вам хочется продолжить решать подобные логические задачи, рекомендуем обратиться к книге Рэймонда Смаллиана «Как же называется эта книга?». А в следующем уроке мы расскажем, как булевы выражения применяются в программах.
КНОПКА Следующий урок
+17
View File
@@ -0,0 +1,17 @@
Из прошлого урока мы узнали, что такое булевы выражения. Они используются программами для различных проверок: например, приложение сотового оператора может проверять, хватает ли абоненту денег на счёте для платежа за следующий месяц.
В этом уроке мы с вами:
- поговорим о том, какие действия производят программы в результате таких проверок,
- изучим конструкции, наиболее часто используемые в программировании — функции, циклы, массивы.
А помогут нам в этом уже хорошо знакомый мистер Буль и его семья.
Мы познакомились с основами булевой логики и базовыми элементами программирования: проверкой условий, функциями, циклами, массивами. Эти знания помогут вам при изучении языка программирования и написании программ. В добрый путь!