Специализированный учебно-научный центр Новосибирского государственного университета (СУНЦ НГУ)
Введение.Что такое информатика. Её задачи и цели. Проблемы современных способов обработки информации
Архитектура ЭВМ и языки программирования Python и C++
6.32M

Информатика 10 класс_Л1 Вводная

1. Специализированный учебно-научный центр Новосибирского государственного университета (СУНЦ НГУ)

2. Введение.Что такое информатика. Её задачи и цели. Проблемы современных способов обработки информации

2

3.

ПО и базы знаний для самостоятельной работы
Программное обеспечение (ПО)
В нашем классе, на компьютерах установлено всё необходимое ПО для работы с С++ и Python. Так же Вы легко
найдёте табличные и текстовые процессоры (в простонародии Excel и Word или их отечественные аналоги). Работу
с этими программными продуктами Вы должны изучить самостоятельно (хотя бы азы). Это поможет Вам выполнять
задания на уроках, а так же подготовиться и сдать ЕГЭ в будущем.
Однако, если Вы ещё не особо владеете Microsoft Visual Studio, Visual Studio Code или PyCharm Community, то
можете некоторое время работать в онлайн компиляторах (они позволяют работать сразу на нескольких языках
программирования).
Например:
https://www.codechef.com/cpp-online-compiler
https://silvertests.ru/Compiler.aspx
https://www.online-compiler.com/ru
Так же Вам необходимо зарегистрироваться (как ученик) на сайте «Сдам ГИА: Решу ЕГЭ» https://inf-ege.sdamgia.ru
После регистрации на этом сайте Вам необходимо пройти по ссылке, которая соответствует Вашему классу:
10-4 (Подгруппа 1 (609)) https://inf-ege.sdamgia.ru/j/AAq6zQDp0W4
10-4 (Подгруппа 2 (610)) https://inf-ege.sdamgia.ru/j/AAq6zgDp0W4

4.

ПО и базы знаний для самостоятельной работы
Полезные ссылки:
Видео уроки от Сергея Балакирева:
По С++: https://vkvideo.ru/playlist/302513503_11?ysclid=mtcj9h3fj6268266462
По Python: https://vkvideo.ru/playlist/-225733123_12
Один из моих студентов порекомендовал интересный трёхтомник по программированию. Для тех кто интересуется - весьма
полезные книги. http://stolyarov.info/books/programming_intro/dmk
Полезные курсы на Степике для изучения языка программирования С++
Курс от Яндекс Академии: https://stepik.org/course/363/promo#toc
Курсы от Computer Science Center:
https://stepik.org/course/7/promo#toc
https://stepik.org/course/3206/promo#toc
для изучения алгоритмов
https://stepik.org/course/217/promo#toc
https://stepik.org/course/1547/promo#toc
Если кто-то интересуется своим образованием – советую посмотреть учебники 1910-1990 гг (по всем предметам средней
школы), то рекомендую вот этот ресурс: http://fremus.narod.ru/schoolbk2.html
За последние 100 лет основные законы физики, математики, химии - не поменялись. В старых учебниках многие темы
разобраны понятнее и нагляднее, чем во многих современных. Не уверен, что это поможет с ЕГЭ, но понять материал и получить знания
- точно!
Разумеется - посещение этого сайта и изучение материалов - дело добровольное! :-) Просто посоветовал.
P.S. Ещё есть книги тут https://sheba.spb.ru/shkola/ , но ресурс менее наглядный, чем тот, что я указал выше.

5.

6.

… У меня, как у физика, своя философия, она проста. Мы не
способны постичь истину и не знаем, что это. Мы, ученые,
по сути умеем только одно. Мы формируем некое сложное
абстрактное представление и выражаем его на языке
формул и графов. По сути, это - заклинание. Затем мы
приходим в гости к реальности, зачитываем ей свою
абракадабру – и получаем ответ. Если заклинание было
неудачным, не происходит ничего. Например, мирового
эфира так и не находят. Но если заклинание срезонировало,
результат впечатляет всех. Получается электрическая
лампочка или атомная бомба. Это не значит, что мы
познали истину. Мы просто научились еще одному
колдовству. Что мы при этом бормочем себе под нос, не
важно. Древние люди ведь тоже не огонь разводили. Для
них это был вызываемый дух. Представления меняются, а
навыки остаются…
Александр Исаакович Мирер, редактор первых книг писателя
(Виктор Пелевин , «Возвращение синей бороды»)

7.

Сегодня мало кто задумывается, как работает поисковая система на сайте, как беспилотный
автомобиль распознаёт дорогу, как создаются компьютерные игры, как искусственный интеллект ставит
диагнозы. Это стало привычным. А ведь всё это – результат работы алгоритмов, которые реализованы в
виде программ.
Программирование – это не просто набор заклинаний на непонятном языке. Это способ
мышления: умение разбить сложную задачу на простые шаги, найти закономерности, выбрать самый
эффективный путь. Любой сложный расчет стоит процессорного времени. Задача программиста настроить метод так, чтобы: Алгоритм «думал» секунды, а не часы, а ошибка в ответе была допустимой
(например, пара миллиметров на километре пути).
Представьте, что вы – архитекторы. Вы проектируете дом. Важно не только знать, как класть
кирпичи, но и рассчитать нагрузку, проложить коммуникации, выбрать материалы. Так и в
программировании: важно не просто написать код, а продумать структуру, оценить время работы и
объём памяти.
Мы начнём разговор с важных тем: численные методы – как компьютер помогает решать
математические задачи, которые невозможно решить точно (например, найти корень уравнения), и
эффективность алгоритмов – почему один и тот же результат можно получить за секунду, а можно за
час, и как избежать ошибок. А также поговорим об искусственном интеллекте – мощном инструменте,
который, однако, не заменяет собственное понимание.

8.

Численные методы в «двух словах»
Для начала нам нужно запомнить: наш компьютер - это очень послушный, но очень
тупой робот. Он умеет только складывать, вычитать и сравнивать числа (больше или меньше). А
нам нужно, чтобы он, например, нарисовал идеальный круг, нашёл кратчайший путь,
оптимальное решение или приземлил космический корабль на Луну.
Численные методы - это хитрые инструкции (программы), которые объясняют тупому роботу, как
решить сложную задачу с помощью простых действий.
Но есть секрет: робот почти никогда не даёт точный ответ, он даёт очень-очень близкий ответ. А
нам нужно вовремя решить когда этого действительно хватит для получения нужной точности
решения!

9.

Численные методы в «двух словах»
Пример 1. Игра «Угадай число» (Метод деления пополам)
Пусть робот загадал число от 1 до 1000, а нам нужно его угадать. Если говорим «500», а робот говорит «Мало!», сразу
понимаем - все числа от 1 до 500 можно выкинуть. Теперь их осталось 500. Потом говорим «750» - робот отвечает
«Много!». Снова откидываем половину. Так всего за 10 вопросов (почему?) мы гарантированно угадаем число!
В программировании это называется «Метод дихотомии (бисекции, половинного деления, бинарного поиска)». Так
алгоритмы находят нужные числа, быстро отрезая от данных «лишние» куски.
Пример 2. Измеряем длину облака (Метод прямоугольников)
Как измерить длину извилистой реки на карте или площадь кляксы? Мы не можем точно приложить линейку к
изгибам. Тогда мы разбиваем нашу кривую на много маленьких кусочков (аппроксимируем), измеряем каждый кусочек
по прямой (по линейке) и складываем. Чем на больше кусочков мы разобьём реку, тем точнее будет длина.
В программировании это используют, чтобы узнать площадь фигур или скорость движения. Это называется «Численное
интегрирование».
Пример 3. Предсказание полёта мячика (Метод прыжков)
Представим, что мы кидаем мяч. На него дует ветер, он крутится. Компьютер не может сразу вычислить, куда он
прилетит (там достаточно сложные формулы). Но можно сделать так: смотрим на мяч сейчас, вычисляем, куда он
дёрнется через 0.01 секунды, и «передвигаем» его туда. Потом снова смотрим, вычисляем следующее движение на
0.01 секунды и снова передвигаем. Так он шаг за шагом рисуем траекторию. Это называется «Метод Эйлера» (или
«пошаговое моделирование»).
Самое главное правило (Ошибка): Чем больше шагов в примерах 2 и 3 (или чем больше вопросов в примере 1), тем
дороже это стоит - компьютеру нужно больше времени, чтобы думать. Поэтому программисты придумывают
численные методы так, чтобы найти золотую середину: чтобы алгоритм и думал не целый день, но ошибался так мало,
что это даже незаметно (например, ошибка в 1 миллиметр при полёте на Луну).

10.

ИИ – инструмент Специалиста
Мы живем в 2026 году. Нейросети пишут код, решают уравнения и генерируют тексты. Кажется, что можно
ничего не учить, просто спросить у ИИ. Это главная ловушка современности.
ИИ - это фактически вероятностный (весовой) калькулятор.
Если вы не знаете математику, калькулятор не спасет вас от ошибки. Он быстро и верно выполняет математические
действия с теми числами, что Вы дадите ему, но он совершенно не понимает, что означают эти числа и что означает
результат. Актуальный пример – попытка решить задачу по физике не приводя все величины в задаче к системе СИ.
Современный ИИ (ChatGPT, GigaChat, YandexGPT, Claude) - это большие языковые модели (LLM). Генеративная
нейросеть обучается на огромных массивах текстов, кода, изображений. Она запоминает статистические
закономерности – например, что после слова «кошка» часто идёт «мяукает» или «белая». Когда вы задаёте вопрос,
модель не «думает», а предсказывает наиболее вероятное продолжение вашего запроса, основываясь на
выученных шаблонах. Она не имеет внутренней модели мира, не проверяет факты, не обладает логикой в
человеческом смысле. По сути, ИИ сегодня являются «очень сложными автодополнениями» (читай – современный
аналог Т9 из смс ;-) ). Каждая модель предсказывает следующий токен (слово/часть слова) на основе предыдущего
контекста.
Важно понять: ИИ - это не база знаний. У него нет «внутренней энциклопедии». Он не «знает» факты - он
воспроизводит статистические закономерности из обучающей выборки (и ещё вопрос насколько эта выборка
была верна!).
ИИ не понимает мир, он предсказывает следующее слово (или токен) на основе статистики. Если вы не
разбираетесь в теме, вы не сможете отличить гениальную находку от "нейросетевого бреда" (галлюцинации).

11.

12.

ИИ – инструмент Специалиста
Современный рынок ИТ похож на состояние, когда люди научились делать молоток, а гвозди еще не изобрели.
Кругом бегает толпа прогрессивных инноваторов и пытается бить молотком по всему, до чего дотянется. Очень
серьезные «дядечки» бегают с большими молотками. Стартаперы - с креативным нечто "похожим на молоток". У всех
есть ощущение - что нужная вещь! Кто-то хвастается удачными попаданиями… Некоторые Умники уже даже занимаются
улучшением молотка - то ручку длиннее сделают, то в новый цвет покрасят.
Вот только… гвоздей пока нет…
Такое ощущение :)
(с) https://habr.com/ru/users/Amabi/

13.

ИИ – инструмент Специалиста
Почему возникают ИИ-галлюцинации
Галлюцинация - это уверенный, но ложный ответ модели. Например, ИИ может «придумать»
несуществующую статью в Википедии, вымышленную цитату или неверную формулу, но подать это с
абсолютной уверенностью.
Причина №1 - вероятностная природа модели. LLM не хранит факты, она хранит «веса» - числа,
описывающие, насколько вероятно появление одного токена после другого. Если в обучающих данных редко
встречалась какая-то информация, модель может «додумать» её правдоподобно, но неверно.
Причина №2 - отсутствие «внутреннего критика». Модель не умеет говорить «я не знаю». Она всегда
продолжит текст. Даже если факта нет в обучающей выборке, модель сгенерирует что-то, похожее на правду.
Причина №3 - обучение на «зашумлённых» данных. Интернет содержит ошибки, устаревшую информацию,
мнения, выдаваемые за факты. Модель не отличает «источник А» от «источник Б» - она усредняет всё.
Причина №4 - разные промпты → разные ответы. Один и тот же вопрос, сформулированный по-разному,
может дать противоречивые результаты. Например: «Кто написал "Войну и мир"?» и «Какой малоизвестный
автор XIX века написал "Войну и мир"?» - во втором случае модель может «поддаться» на провокацию и
назвать вымышленного автора. Дополнительно нужно помнить, что все ИИ «мыслят на английском» и
дополнительные ошибки промпта возникают из-за неверного перевода с языка запроса на язык ИИ и
обратно.

14.

15.

ИИ – инструмент Специалиста
Почему возникают ИИ-галлюцинации
Причина №5 - параметры генерации: «температура». Температура определяет «случайность» выбора
следующего токена. При температуре 0 модель почти детерминирована, при температуре 1 - сильно
случайна. Именно поэтому один и тот же промпт при разных запусках может давать разные ответы.
Причина №6 - ограниченный контекст и «забывание». Модель видит только окно контекста (обычно
несколько тысяч токенов). Если в длинном диалоге противоречивая информация, модель может «потерять»
начало и противоречить сама себе.
Причина №7 - отсутствие доступа к реальному миру в базовой версии. Модель не может «проверить» факт в
интернете (если не подключён режим поиска). Она опирается только на то, что «запомнила» при обучении, а
обучение заканчивается на определённой дате (cut-off).

16.

ИИ – инструмент Специалиста
Типовые ошибки пользователей
Ошибка 1. Слепое доверие фактам без проверки.
Классический кейс - адвокат Мата против Avianca (США, 2023). Адвокат подал в суд документы со
ссылками на 6 судебных решений, полностью сгенерированных ChatGPT. Ни одного из этих решений не
существовало. Суд оштрафовал адвоката.
Ошибка 2. Использование ИИ для написания кода без понимания.
Ученик копирует код из ИИ, не разбираясь в нём. При малейшем изменении задачи код перестаёт
работать, а ученик не может исправить ошибку, потому что не понимает логику.
Ошибка 3. Перегрузка контекста противоречивыми данными.
Если в одном промпте дать модели противоречивые инструкции («отвечай кратко» + «дай развёрнутый
ответ с примерами»), результат будет непредсказуемым.
Ошибка 4. Отсутствие проверки выводов на реальных данных.
ИИ может предложить алгоритм, который «на бумаге» работает, но на реальных данных даёт сбой
(например, из-за граничных случаев: n=0, отрицательные числа, переполнение).
Ошибка 5. Использование ИИ как единственного источника в учебной работе.
Если вся работа написана ИИ без проверки по учебнику/учителю, в ней могут быть не только фактические
ошибки, но и «придуманные» ссылки, несуществующие цитаты.

17.

ИИ – инструмент Специалиста
Позитивные сценарии использования ИИ
Генерация идей и черновиков.
ИИ отлично подходит для мозгового штурма: «Предложи 5 тем для проекта по информатике, связанных с
численными методами». Человек получает «скелет», который дорабатывает сам.
Объяснение сложных концепций «на пальцах».
Промпт: «Объясни рекурсию как новичку, используя аналогию из жизни» - ИИ даёт понятное объяснение с
матрёшками, зеркалами и т.п. Это не заменяет учебник, но помогает «войти» в тему.
Помощь в отладке кода (с оговорками).
Промпт: «Вот мой код, он падает на n=100000. Объясни, почему, и предложи оптимизацию». ИИ часто
находит «узкие места» (например, рекурсию с экспоненциальной сложностью). Но финальное решение
всегда должен проверить Специалист!
Генерация тестовых данных – создать наборы входных данных для проверки программы.
Поиск синтаксических ошибок – указать на опечатки и предложить исправления.

18.

ИИ – инструмент Специалиста
Наглядно «разные промпты → разные ответы»
Промпт 1: «Напиши функцию для вычисления чисел Фибоначчи на Python» → ИИ
даст итеративный (что это?) вариант.
Промпт 2: «Напиши самую короткую функцию для Фибоначчи на Python» → ИИ
даст рекурсивный (что это?) вариант в одну строку (который работает очень
медленно при n>35!).
Промпт 3: «Напиши оптимальную функцию для Фибоначчи на Python» → ИИ даст
итеративный вариант или рекурсию с мемоизацией.
Вывод: один и тот же запрос, но с разными акцентами, даёт разные алгоритмы.
Именно поэтому важно понимать, как работает каждый из них.
ИИ не знает, он догадывается. Если вы не знаете точно, как должно быть, вы не
заметите, где он соврёт.
Нейросеть - как мощный калькулятор: она ускоряет работу эксперта, но не
заменяет его. Если вы не понимаете, почему код работает именно так, вы не
поймёте, когда ИИ предложит оптимизацию, которая на самом деле ломает
программу. Если вы не знаете, как выглядит правильная цитата, вы не поймёте, что
она выдумана.
Учите фундамент - алгоритмы, математику, логику. ИИ поможет вам писать
быстрее, но только вы несёте ответственность за результат.
ИИ - это ваш «экзоскелет», а не замена мозга! Учитесь сами, понимайте суть
процессов, и тогда ИИ станет для вас мощнейшим ускорителем, а не генератором
ошибок.

19. Архитектура ЭВМ и языки программирования Python и C++

19

20.

Архитектура фон Неймана (1945):
Принципы фон Неймана и архитектура компьютера на их основе
В 1946 году Джон фон Нейман, Г. Голдстайн и А. Беркс в своей совместной статье изложили новые принципы
построения и функционирования ЭВМ. В последствие на основе этих принципов производились первые два
поколения компьютеров. В более поздних поколениях происходили некоторые изменения, хотя принципы Неймана
актуальны и сегодня.
По сути, Нейману удалось обобщить научные разработки и открытия многих других ученых и сформулировать на их
основе принципиально новое.
Принципы фон Неймана
1. Использование двоичной системы счисления в вычислительных машинах. Преимущество перед десятичной
системой счисления заключается в том, что устройства можно делать достаточно простыми, арифметические и
логические операции в двоичной системе счисления также выполняются достаточно просто.
2. Программное управление ЭВМ. Работа компьютера контролируется программой, состоящей из набора команд.
Команды выполняются последовательно друг за другом. Созданием машины с хранимой в памяти программой
было положено начало тому, что мы сегодня называем программированием.
3. Память компьютера используется не только для хранения данных, но и программ. При этом и команды
программы, и данные кодируются в двоичной системе счисления, т.е. их способ записи одинаков. Поэтому в
определенных ситуациях над командами можно выполнять те же действия, что над данными.
4. Ячейки памяти ЭВМ имеют адреса, которые последовательно пронумерованы. В любой момент можно
обратиться к любой ячейке памяти по ее адресу. Этот принцип открыл возможность использовать переменные в
программировании.
5. Возможность условного перехода в процессе выполнения программы. Несмотря на то, что команды выполняются
последовательно, в программах можно реализовать возможность перехода к любому участку кода.

21.

Архитектура фон Неймана (1945):
Самым главным следствием этих принципов можно назвать то, что теперь программа уже не была постоянной частью машины (как
например, у калькулятора). Программу стало возможно легко изменить. А вот аппаратура, конечно же, остается неизменной, и
очень простой.
Как работает машина фон Неймана
Машина фон Неймана состоит из запоминающего устройства (памяти) – ЗУ, арифметикологического устройства – АЛУ, устройства управления – УУ, а также устройств ввода и вывода.
Программы и данные вводятся в память из устройства ввода через арифметико-логическое
устройство. Все команды программы записываются в соседние ячейки памяти, а данные для
обработки могут содержаться в произвольных ячейках. У любой программы последняя
команда должна быть командой завершения работы.
Команда состоит из указания, какую операцию следует выполнить (из возможных операций
на данном "железе") и адресов ячеек памяти, где хранятся данные, над которыми следует
выполнить указанную операцию, а также адреса ячейки, куда следует записать результат
(если его требуется сохранить в ЗУ).
Арифметико-логическое устройство выполняет указанные командами операции над
указанными данными.
Из арифметико-логического устройства результаты выводятся в память или устройство
вывода. Принципиальное различие между ЗУ и устройством вывода заключается в том, что в
ЗУ данные хранятся в виде, удобном для обработки компьютером, а на устройства вывода
(принтер, монитор и др.) поступают так, как удобно человеку.
УУ управляет всеми частями компьютера. От него на другие устройства поступают сигналы "что делать", а от других устройств УУ получает информацию
об их состоянии.
Управляющее устройство содержит специальный регистр (ячейку), который называется "счетчик команд". После загрузки программы и данных в память
в счетчик команд записывается адрес первой команды программы. УУ считывает из памяти содержимое ячейки памяти, адрес которой находится в
счетчике команд, и помещает его в специальное устройство — "Регистр команд". УУ определяет операцию команды, "отмечает" в памяти данные,
адреса которых указаны в команде, и контролирует выполнение команды. Операцию выполняет АЛУ или аппаратные средства компьютера.
В результате выполнения любой команды счетчик команд изменяется на единицу и, следовательно, указывает на следующую команду программы.
Когда требуется выполнить команду, не следующую по порядку за текущей, а отстоящую от данной на какое-то количество адресов, то специальная
команда перехода содержит адрес ячейки, куда требуется передать управление.

22.

Архитектура фон Неймана (1945):
Процессор (CPU) - выполняет инструкции.
Память (RAM) - хранит данные и программы.
Устройства ввода/вывода - клавиатура, монитор, диск.
Шины - соединяют всё воедино (шина данных, шина адреса, шина управления).
Ключевой принцип: программа и данные хранятся в одной памяти, машина выполняет инструкции
последовательно.
Компиляция vs интерпретация:
Компиляция (C++): исходный код → компилятор → машинный код → выполняется напрямую
процессором. Быстро, но нужно перекомпилировать при изменениях.
Интерпретация (Python): исходный код → интерпретатор → выполняется построчно. Медленнее, но
удобно для разработки.
На практике Python использует байт-код (.pyc) и виртуальную машину (CPython) - гибрид.
Почему два языка в курсе?
C++ - даёт понимание памяти, указателей, типизации. Основа олимпиадного программирования.
Python - лаконичен, богат библиотеками, идеален для прототипирования, анализа данных, ИИ.
Ну и ЕГЭ на нём писать много проще…

23.

O-нотация - сложность алгоритма
Сложность алгоритмов - это ключевой аспект при проектировании программ и создании вебприложений, особенно при работе с большим объемом данных или выполнении вычислительно
сложных операций. Понимание, как оценивать сложность алгоритмов, помогает принимать
обоснованные решения в выборе алгоритмов и структур данных, а также оптимизировать
производительность своих приложений.
Обозначается типа O(n). Читается как O-нотация («О-большое», big O) описывает, как растёт время работы
алгоритма при увеличении размера входных данных.
Формально: O(f(n)) означает, что при достаточно больших n время работы не превосходит C · f(n) для
некоторой константы C.
На практике: нам важно знать порядок роста, а не точное время.

24.

O-нотация - сложность алгоритма
O-нотация
Название
Пример
Что происходит при n = 1 000 000
O(1)
Константная
Доступ к элементу массива по индексу
1 операция
O(log n)
Логарифмическая
Двоичный поиск
~20 операций
O(n)
Линейная
Проход по массиву
1 000 000 операций
O(n log n)
Логлинейная
Быстрая сортировка
~20 000 000 операций
O(n²)
Квадратичная
Сортировка пузырьком
10¹² операций (часы!)
O(2ⁿ)
Экспоненциальная
Наивная рекурсия Фибоначчи
10³⁰⁰⁰⁰⁰ (не дождётесь!)
Как это считается?
Анализируем алгоритм:
• Один проход по массиву длиной n → O(n).
• Вложенные циклы: внешний n раз, внутренний n раз → O(n²).
• Рекурсия, где на каждом шаге делаем 2 вызова → O(2ⁿ).
Почему это важно? Алгоритм с O(n) на n=1 000 000 отработает за миллисекунды. Алгоритм с O(2ⁿ) на том же n
будет работать дольше жизни Вселенной.

25.

O-нотация - сложность алгоритма
Наглядно
Время выполнения алгоритма с определённой сложностью в зависимости от размера входных
данных при скорости 106 операций в секунду:

26.

И снова про численные методы и их место в нашей жизни
Мы уже выяснили, что программирование сегодня - это суперсила. С его помощью мы
моделируем черные дыры, создаем нейроинтерфейсы, предсказываем погоду и лечим болезни. Но в
основе всего этого лежит математика и численные методы.
Компьютер не умеет решать уравнения «в уме», как мы. Он умеет только быстро перебирать варианты.
Давайте посмотрим на два метода, которые превращают сложные задачи в простые алгоритмы.
Метод половинного деления (Дихотомия)
Задача: Нужно найти, в какой точке график функции f(x)=x3−x−2
пересекает ось X (то есть найти корень уравнения x3−x−2=0).
Аналитически (по формулам) это решить достаточно сложно. Но
мы знаем, что на отрезке [1,2] функция меняет знак (в точке 1
она отрицательная, в точке 2 - положительная).
Суть метода: Мы делим отрезок пополам. Смотрим на
середину. Если знак не совпал с левой границей - отбрасываем
правую половину. Если совпал - левую. И так, например, 50 раз.
Пока не достигнем нужной точности.

27.

И снова про численные методы и их место в нашей жизни
Причём данный способ поиска решения (алгоритм метода половинного деления) применим не
только в программировании, но и в других областях знаний и науки. Например, можно искать
неисправность в схеме, если мы знаем точно, что должен делать тот или иной блок, и какие он должен
выдавать параметры:

28.

И снова про численные методы и их место в нашей жизни
Итак: Задача: Мы ищем в какой точке график функции f(x)=x3−x−2 пересекает ось X (то есть ищем
корень уравнения x3−x−2=0).
Пример на Python:
def f(x):
return x**3 - x - 2
a, b = 1.0, 2.0 # Наш отрезок
for i in range(50):
c = (a + b) / 2 # Делим пополам
if f(a) * f(c) < 0:
b = c
else:
a = c
print(f"Корень уравнения: {c:.10f}")
Таким образом, за 50 простых шагов мы нашли корень с точностью до десятимиллиардных долей!
Сегодня такой подход к решению - это основа всех инженерных расчетов.

29.

C++ против Python: Формула-1 против Швейцарского ножа
Почему мы учим оба языка программирования (спойлер: С++ и Python)?
Python - это швейцарский нож. Он невероятно удобен, читается как английский текст, на нем можно за час написать
прототип, почти не нужно заморачиваться описанием переменных и многое другое.
Но он медленный, потому что переводит код «на лету», в момент выполнения.
Такой подход к обработке программы называется Интерпретацией (иногда - Трансляцией).
C++ - это, своего рода, болид Формулы-1. Он строгий, в нем нужно вручную управлять памятью, он сложнее.
Но он выжимает из «железа» максимум скорости, потому что компилирует программу в машинный код – ту же
последовательность нулей и единиц, которую процессор выполняет напрямую.
Поэтому на «тяжёлых» циклах C++ опережает Python в 40 - 200 раз.
Характеристика
Python
C++
Что это
Интерпретатор (читает код построчно)
Компилятор (переводит в машинный код целиком)
Скорость
Медленнее в сотни раз на «сырых» вычислениях
Максимально быстрый
Синтаксис
Минималистичный, похож на псевдокод
Строгий, требует объявления типов
Типизация
Динамическая (переменная сама «понимает», что в ней)
Статическая (вы сами говорите: это целое, это дробное)
Память
Автоматическое управление
Ручное или полуавтоматическое (вы контролируете всё)
Где используется
ИИ, веб, автоматизация, обучение, ИБ (что это?)
Игры, операционные системы, робототехника,
высоконагруженные расчёты
Сложность для новичка
Низкая
Средняя/высокая

30.

Пример кода №1 – сумма квадратных корней
Давайте это докажем. Напишем программу, которая вычисляет сумму квадратных корней для 10 миллионов чисел. Это простая
математическая задача, но она требует от процессора тяжелых вычислений с плавающей точкой. В коде мы добавим счетчик
операций и таймер, чтобы увидеть разницу.
Python
import time
import math
def main():
n = 10_000_000
total_sum = 0.0
operations = 0
# Засекаем время
start_time = time.perf_counter()
C++
#include <iostream>
#include <cmath>
#include <chrono>
#include <iomanip> // для форматированного вывода
using namespace std; // Чтобы не писать std:: перед cout, endl и т.д.
int main() {
setlocale(LC_ALL, "Russian"); // для корректного вывода кириллицы в консоли
long long n = 10000000;
double total_sum = 0.0;
long long operations = 0;
for i in range(1, n + 1):
total_sum += math.sqrt(i)
operations += 1
// Засекаем время
auto start_time = std::chrono::high_resolution_clock::now();
end_time = time.perf_counter()
print(f"Сумма: {total_sum:.2f}")
print(f"Операций: {operations}")
print(f"Время выполнения Python: {end_time
- start_time:.4f} сек.")
if __name__ == "__main__":
main()
for (long long i = 1; i <= n; ++i) {
total_sum += sqrt(i);
operations++;
}
auto end_time = chrono::high_resolution_clock::now();
chrono::duration<double> duration = end_time - start_time;
cout << fixed << setprecision(4) << "Сумма: " << total_sum << endl;
cout << "Операций: " << operations << endl;
cout << "Время выполнения C++: " << duration.count() << " сек." << endl;
return 0;
}

31.

Пример кода №1 – сумма квадратных корней
Итог выполнения обеих программ (ОС (что это?) и «железо» - одинаковые).
С++ посчитал быстрее в 40 раз.
А есть ещё отличия? Как Вы думаете – почему?
Python
C++

32.

Пример кода №1 – сумма квадратных корней. «Разбор полётов»
1.
Разница в скорости: C++ выполнил задачу в 40 раз быстрее. Почему? Потому что Python тратит время
на проверку типов переменных в каждой итерации цикла, а C++ заранее (на этапе компиляции)
«договорился» с процессором, как именно считать эти числа, и использует аппаратное ускорение
(SIMD-инструкции).
2. Плюсы Python:
• Код короче
• не нужно указывать типы данных (long long, double)
• не нужно компилировать.
• Идеально для анализа данных, нейросетей, быстрых скриптов.
3. Плюсы C++:
• Скорость
• контроль над памятью
• предсказуемость.
По этому на C++ пишут игры (например, Unreal Engine), операционные системы, драйверы, браузеры и те
самые библиотеки (например, TensorFlow), на которых потом работает Python!
1. Вывод:
Python - это язык, на котором вы думаете и прототипируете.
C++ - это язык, на котором вы можете заставить компьютер работать максимально быстро.

33.

Пример кода №2 - четыре алгоритма Фибоначчи
Многие из тех, кто только приступает к изучению
программирования, с одной из первых, сталкиваются с задачей о
лестнице:
Задача: У нас имеется лесенка из n ступенек. Перед лестницей стоит
человек который за один шаг умеет подниматься либо на следующую
ступеньку, либо перепрыгивать через ступеньку.
Спрашивается сколькими различными самыми оптимальными (то
есть - за меньшее число ходов) способами он может попасть на
последнюю ступеньку?

34.

Пример кода №2 - четыре алгоритма Фибоначчи
Формула для решения этой задачи выводится достаточно просто. Чтобы разобраться в условии задачи и
может быть заметить какие-то закономерности начнем с маленьких лестниц.
Если лестница состоит всего из одной ступеньки, то количество
способов (обозначим его a1) равно единице: можно просто встать на эту
ступеньку. a1 =1.
Если нам нужно попасть на последнюю ступеньку, а их всего 2 то у нас есть два
пути: либо пройти по каждой ступеньке, либо сразу перепрыгнуть на вторую
ступеньку a2 = 2.
Ну и наконец, давайте посмотрим еще на лестницу из трех ступенек.
Первый способ - пойти по всем ступенькам. Второй способ - не наступать на
первую ступеньку. И третий способ - не наступать на вторую ступень.
Итого имеем три способа. a3 =3

35.

Пример кода №2 - четыре алгоритма Фибоначчи
Давайте теперь посмотрим с другой стороны.
Рассмотрим какую-то лестницу из i- ступенек.
Как мы могли попасть на i-ю последнюю ступеньку?
1) Мы могли либо попасть с (i-1) ступеньки. Это - первый способ.
А на (i-1) ступеньку мы могли попасть аi-1 способами.
Теперь, если мы возьмем все эти аi-1 способы и к каждому из них добавим
такой шажок в конце с (i-1) на i, то мы получим столько же способов попасть
на i-ю ступеньку.
То есть, из каждого способа попасть на (i-1) ступеньку получается один
способ попасть на i-ю
(как Вы помните из условий задачи, у нас человек умеет ходить только
на одну или две ступеньки! ).
2) Но кроме этого, есть еще пути второго вида. Это путь, ведущий с (i-2) ступеньки напрямую на эту i-ю
ступеньку. Таких путей аi-2 и также, если каждому из этих путей добавить один шаг, то мы снова
получим путь на i-ю ступеньку.

36.

Пример кода №2 - четыре алгоритма Фибоначчи
Давайте посмотрим, как мы можем попасть на четвертую ступеньку, раскладывая
наши пути на две группы.
У нас нарисованы все пути до второй ступеньки, их две штуки, и к каждому из них,
мы можем добавить один большой шаг (вариант с двумя маленькими шагами мы не
рассматриваем, т.к. он не оптимален – два шага больше чем один!) и получаем тоже
два пути до четвёртой ступеньки.
Ещё, у нас есть три пути попасть на третью ступеньку. И, если мы к каждому из них
добавим еще один маленький шажок, то мы получим, соответственно, ещё три способа
попасть на четвертую ступеньку.
Таким образом, общее количество способов попасть на i-ю ступеньку получается
равным аi = аi-1 + аi-2 .
Давайте посмотрим какие начальные значения нам здесь нужны. У нас есть a1 , это
единичка. Мы можем сказать что а2 равно двум и дальше -> а3 равно 3… Запомним это,
пока. Но сделаем один вывод: задача вышла, по сути комбинаторная, про количество
способов сделать что-то. Она свелась к вычислению некоторой рекуррентной
последовательности. Как ее вычислять – поговорим далее.

37.

Пример кода №2 - четыре алгоритма Фибоначчи
Другая задача. В начале первого месяца вы получаете пару новорождённых кроликов. Через
месяц, эти кролики повзрослеют. Начиная с третьего месяца и далее они будут стабильно давать
приплод - ещё одну пару новорождённых кроликов. Таким образом, каждая появившаяся пара
кроликов, начиная с двух месяцев после своего появления, каждый месяц порождает ещё пару
кроликов. Количество кроликов никогда не уменьшается - кролики не болеют и не умирают. Задача:
рассчитать какое количество пар кроликов будет у вас, на n-й месяц.
Формула для решения этой задачи, совпадает с формулой, полученной нами в задаче о лестнице f(n) = f(n-1) + f(n-2). Вполне очевидно, что каждый месяц к тому количеству кроликов, что было у вас в
прошлом месяце прибавляется приплод, от тех кроликов которые у вас были два месяца назад, так как
все они к этому моменту уже достаточно повзрослели, чтобы начать активно размножаться. К счастью,
у реальных кроликов несколько иные характеристики, иначе всего лишь через 9 лет, после появления
первой пары кроликов, вся поверхность планеты была бы покрыта более чем 100-километровым
плотным слоем кроличьих тушек.
Для решения обеих задач используется одна и та же формула: f(n) = f(n-1) + f(n-2). Это формула
чисел последовательности Фибоначчи. Эта последовательность начинается с элемента под номером 0
и значением 0. За ним следует элемент под номером 1 и значением 1. Значения всех остальных
элементов вычисляются согласно приведённой формуле - значение каждого из элементов равно сумме
значений двух предыдущих.

38.

Пример кода №2 - четыре алгоритма Фибоначчи
Давайте теперь разберёмся что это такое - числа Фибоначчи и как это можно посчитать. Если мы начнём
смотреть литературу/сайты по программированию (или сразу обратимся к ИИ), то с равной вероятностью (если наш
промпт будет очень общим!) мы получим разные алгоритмы. Давайте разберём три базовых и один общий варианта и
поймём, чем они отличаются, почему некоторые работают быстро, а некоторые - катастрофически медленно. И научимся
измерять эту разницу.
Определение: Числа Фибоначчи - это последовательность чисел, в которой каждое следующее число равно сумме двух
предыдущих. Она так названа в честь итальянского математика Леонардо Пизанского, известного как Фибоначчи.
В 1202 году он описал её в книге «Liber Abaci» («Книга абака») в рамках задачи о размножении кроликов: при
упрощённых условиях количество пар кроликов каждый месяц следует именно этой последовательности. При этом
похожие закономерности встречались и раньше - например, в древнеиндийской математике.
Одной из интересных особенностей этой последовательности является следующее: если делить каждое число
Фибоначчи на предыдущее, то результат постепенно приближается к золотому сечению - числу примерно равному 1,618
(обозначается греческой буквой
English     Русский Правила