Сигналы и связь · Вводный курс Глава 0
Ананко Софья Михайловна · Качур Анна Юрьевна 01 / 51
● ● ●glava0.exe□ _ ✕
Глава 0

От бутерброда к байту

данные, числа и первые программы

Ананко Софья Михайловна · Качур Анна Юрьевна
VK · Telegram

0.1 · Большая картина

Синтез: от замысла к электрону

1 · Идея2 · Алгоритм 3 · Код4 · Данные 5 · Числа6 · Физика
Всё есть число. Любая инженерная задача — от отправки эмодзи до видеозвонка в 4K — это лишь последовательность точно выверенных шагов. Эта глава пройдёт конвейер слева направо.
0.0 · Связь

Связь = ЧТО? КАК? КАКИМ ОБРАЗОМ?

ЧТО КАК КАКИМ ОБРАЗОМ
видео аудио голос фото текст игры

Всё, что передаётся — данные. Как именно передать — технология. Каким образом это физически устроено — сигнал.

● ● ●вопросы.txt□ _ ✕

Где? — в канале связи

Куда? — от источника к получателю

Откуда? — от микрофона, камеры, клавиатуры

Когда? — в реальном времени или с задержкой

Насколько? — скорость, задержка, потери

Почему? — физические законы (Шеннон, Найквист)

Зачем? — чтобы человек получил информацию

0.2 · Данные

Что такое данные

Данные — информация, записанная так, чтобы машина могла её хранить, передавать и обрабатывать.

💬

Сообщение

🐱

Фото

🎵

Песня

▶️

Видео

🎮

Игра CS

📡

Wi-Fi

Отправляете другу «Привет» — на экране 6 букв. Но внутри телефона букв нет: только электрические сигналы в двух состояниях — «вкл» и «выкл».

Бит (bit, binary digit) — один сигнал: 0 или 1. Один ответ «да/нет», один переключатель.

Байт = 8 бит. Кодирует число 0–255: один символ, одна RGB-компонента, один отсчёт звука.

Кто решил, что «П» = такой набор бит? Люди договорились. Как ценник «20 руб.» понятен всем — есть таблицы кодирования, связывающие символы с числами, а числа — с битами.
0.2b · Интерактив

Системы счисления: один принцип

Цифра доросла до максимума (DEC 9 · BIN 1 · HEX F) → сбрасывается в 0, а +1 переносится в старший разряд. Жми ▶| по шагам или — авто.

0.2a · Бит и байт

8 переключателей = 1 байт

Каждый бит — переключатель с весом. Включённые складываем:

2⁷=1282⁶=64 2⁵=322⁴=16 2³=82²=4 2¹=22⁰=1 1 1 0 1 0 0 1 0 128 + 64 + 16 + 2 = 210₁₀ = D2₁₆ = 11010010₂

1 бит → 2 значения

да / нет, вкл / выкл

1 байт = 8 бит

0–255: символ, RGB-компонента, отсчёт

2⁸ = 256

комбинаций. 255 = 2⁸−1 — максимум байта

0.2a · Единицы

От бита до терабайта

ПриставкаДесятичноеДвоичное (точное)Пример
кило · кБ10³ = 1 0002¹⁰ = 1 024Страница текста ≈ 2 кБ
мега · МБ10⁶2²⁰ = 1 048 576MP3-песня ≈ 5 МБ
гига · ГБ10⁹2³⁰ ≈ 1,07×10⁹Фильм HD ≈ 4 ГБ
тера · ТБ10¹²2⁴⁰ ≈ 1,10×10¹²Жёсткий диск 1–4 ТБ
Канал 100 Мбит/с ÷ 8 = 12,5 МБ
→ файл 1 ГБ скачается за 1000 / 12,5 = 80 с

1 кБ ≈ полстраницы · 1 МБ ≈ минута MP3 · 1 ГБ ≈ 250 песен · 1 ТБ ≈ 500 ч HD-видео.

Ловушка ×8 и 1024 Провайдер обещает «100 мегабит» — это в 8 раз меньше мегабайт/с. Диск «500 ГБ» (10⁹) → Windows показывает 465 ГиБ (2³⁰). Большая «Б» — Байт, маленькая «б» — бит.
0.3 · Текст

Таблица ASCII (1963)

128 символов = 2⁷ → 7 бит. + 8-й бит для контроля = байт. Ниже — все 95 печатаемых символов с кодами (DEC слева, символ справа): 33–47 знаки, 48–57 цифры, 65–90 заглавные, 97–122 строчные.

● ● ●под капотом: буква A□ _ ✕
A = код 65₁₀ (десятичный) 65 = 64 + 1 = 2⁶ + 2⁰ = 0100 0001₂ = 41₁₆ "Hello" — байты в HEX: H e l l o 48 65 6C 6C 6F₁₆ ← HEX 72 101 108 108 111₁₀ ⚠ 48₁₆=72='H', а 48₁₀='0'

'A'→'a' = +32 = 1 бит. Смена регистра = переключить один бит. '7'−48 = 7 — цифра из символа.

Коды 0–31 — управляющие: LF=10 (новая строка), CR=13, TAB=9, Ctrl+C=3, SP=32 (пробел). Наследие телетайпов.

● ● ●ascii_printable.txt · 32–126□ _ ✕
32
33!
34"
35#
36$
37%
38&
39'
40(
41)
42*
43+
44,
45-
46.
47/
480
491
502
513
524
535
546
557
568
579
58:
59;
60<
61=
62>
63?
64@
65A
66B
67C
68D
69E
70F
71G
72H
73I
74J
75K
76L
77M
78N
79O
80P
81Q
82R
83S
84T
85U
86V
87W
88X
89Y
90Z
91[
92\
93]
94^
95_
96`
97a
98b
99c
100d
101e
102f
103g
104h
105i
106j
107k
108l
109m
110n
111o
112p
113q
114r
115s
116t
117u
118v
119w
120x
121y
122z
123{
124|
125}
126~
0.3 · Кириллица

Кракозябры → UTF-8

Проблема 90-х

Код 192 в КОИ-8 — одна буква, в Windows-1251 — другая. Письмо в чужой кодировке → каша.

«Привет» → «╧ЁштхЄ»

Решение: UTF-8

Один стандарт для всех языков. ASCII (0–127) = 1 байт, кириллица = 2, иероглифы = 3, эмодзи = 4.

● ● ●«Привет» в UTF-8□ _ ✕
П р и в е т D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 6 букв × 2 байта = 12 байт
«Привет» = 12 байт   «Privet» (ASCII) = 6 байт

Unicode: 154 000+ символов. 98 % веба — UTF-8. Цена универсальности.

0.4 · Фото

Фото = сетка пикселей

Фотография разбивается на пиксели. Каждый пиксель — три числа R, G, B (0–255 = 1 байт). Кликни по фото или сетке — выбери пиксель; кнопки ниже запускают авто-обход: фото → сетка → пиксель → код.

клик по ① фото или ② сетке — выбрать пиксель

FFFFFF = белый, 000000 = чёрный, FFFF00 = жёлтый, FF0000 = красный. Так задают цвет в HTML/CSS: #RRGGBB.

реальное фото
любое фото — это прямоугольная таблица из R · G · B чисел
12 Мп = 4000×3000 = 12 млн пикс
× 3 байта = 36 МБ один снимок
JPEG сжимает ≈ ×10 → 3,4 МБ
Как это работает Матрица камеры меряет яркость света → АЦП превращает в число. Фото — это прямоугольная таблица чисел, и по сети идёт как последовательность нулей и единиц.
0.5 · Звук

Звук = отсчёты во времени

Микрофон превращает колебания воздуха в напряжение. АЦП измеряет его N раз в секунду и округляет до ближайшего уровня → поток чисел.

t плавная волна → отсчёты (палочки)
fд × разрядность × каналы = поток
Телефон: 8000 × 8 × 1 = 64 кбит/с
CD: 44100 × 16 × 2 = 1411 кбит/с
Теорема Котельникова Чтобы восстановить сигнал, fд ≥ 2·fmax. Ухо слышит до 20 кГц → CD берёт 44,1 кГц. MP3/Opus сжимают в 10 раз.
0.6 · Видео

Видео = 25 картинок/сек

Видео — это последовательность кадров, каждый кадр = фотография. Меняются так быстро, что глаз видит движение.

1 кадр Full HD = 1920×1080×3 = 5,93 МБ
× 30 fps = 178 МБ/с · 1 мин = 10,7 ГБ
без сжатия передать невозможно

Секрет сжатия: соседние кадры почти одинаковы. Кодируем не каждый кадр, а разницу.

I P P B I P P

I-frame — опорный (полный JPEG). P/B-frame — только изменения. H.264 → H.265 → AV1, каждый на 30–50 % лучше.

Итог: фильм 1,5 ч сжимается с ~950 ГБ до 4–8 ГБ. Поток 1080p ≈ 5 Мбит/с.

0.7 · Counter-Strike

Игра = быстрая передача чисел

Онлайн-игра — это быстрая передача огромного количества данных. Сервер хранит «истинный» мир, клиент шлёт ваши действия и рисует картинку.

● ● ●пакет клиента → сервер□ _ ✕
Номер тика 4 байта (uint32) Координаты прицела 8 байт (2×float32) Нажатые клавиши 2 байта (битовая маска) Активное оружие 1 байт ──────────────────────── Итого: ~20 байт + заголовки
киберспорт
матч идёт по сети не картинкой, а потоком чисел — координаты и клавиши

Каждый кусок кодируется своим числом и шлётся 64–128 раз в секунду.

~80 байт × 128 тик ≈ 82 кбит/с
меньше мегабита — в 10–60 раз меньше видео

Картинку рисует ваша видеокарта; по сети идут координаты и события. Клавиши = битовая маска: бит 0 — вперёд, бит 7 — стрельба.

0.7 · Пинг

Скорость света не обманешь

2 800 км ÷ 200 000 км/с ≈ 14 мс
Новосибирск → Москва (только физика, без обработки)
МаршрутПинг
Сервер рядом5–20 мс
Москва40–60 мс
Франкфурт70–100 мс
Нью-Йорк150–200 мс
ПингОщущение
20 мсИдеально
50 мсКомфортно
100 мсЗаметные лаги
300 мсИграть невозможно
Задержка Свет в оптоволокне идёт ~200 000 км/с (⅔ от c). Плюс задержки на маршрутизаторах. Поэтому сервер должен быть географически близко.
0.8 · Системы счисления

Цифра число

Цифра

Символ для записи. В DEC: 0–9 (их 10). Набор конечен.

Число

Количество чего-либо. Чисел бесконечно.
Двадцать = 20₁₀ = 10100₂ = 14₁₆ = XX

Позиционная запись: позиция цифры задаёт её вес.

356 = 3×10² + 5×10¹ + 6×10⁰ = 300+50+6
1101₂ = 1×2³+1×2²+0+1×2⁰ = 8+4+1 = 13
F4₁₆ = 15×16¹+4×16⁰ = 240+4 = 244
356₈ = 3×64+5×8+6 = 238
СистемаBaseЦифры
BIN20, 1
OCT80–7
DEC100–9
HEX160–9, A=10…F=15
0.8 · Три системы счисления

DEC · BIN · HEX

Одно число — разные записи. Основание = сколько цифр в системе и во сколько раз тяжелеет разряд влево.

DEC · основание 10

Цифры 0–9. Разряд левее — ×10. Ценники, счёт.

365 = 3·10² + 6·10¹ + 5·10⁰ = 365

BIN · основание 2

Цифры 0 и 1 (выкл/вкл). Разряд — ×2. Биты, маски.

1101₂ = 8 + 4 + 0 + 1 = 13₁₀

HEX · основание 16

Цифры 0–9, A–F (A=10…F=15). Разряд — ×16. Цвета, дампы.

D2₁₆ = 13·16 + 2 = 210₁₀
Одно число — три записи 210₁₀ = 1101 0010₂ = D2₁₆ — один и тот же байт. 2 hex-цифры = 1 байт (4 бита на цифру). Дальше счётчик +1 покажет перенос в каждой системе.
0.8 · Переполнение

Барабан крутится

Последняя цифра → перенос в старший разряд. DEC: 9→10. BIN: 1→10. HEX: F→10. Смотрите, как счётчик идёт +1 → жёлтым подсвечены биты, которые переключились (перенос).

DECBINHEX
701117
810008← BIN: перенос через 3 разряда
910019
101010A← DEC переполнился, HEX идёт
151111F← максимум 4 бит
161000010← HEX переполнился
25511111111FF← максимум байта
Логика счёта Прибавили 1: младший бит 0→1. Если он был 1 — сбрасывается в 0, а «+1» переносится в соседний бит слева. Цепочка единиц 01111→10000. После 11111111 барабан обнуляется.
0.9 · Перевод

DEC → BIN: деление на 2

Делим на 2, записываем остаток, читаем снизу вверх.

● ● ●73₁₀ → ?₂□ _ ✕
73 ÷ 2 = 36 ост. 1 36 ÷ 2 = 18 ост. 0 18 ÷ 2 = 9 ост. 0 9 ÷ 2 = 4 ост. 1 4 ÷ 2 = 2 ост. 0 2 ÷ 2 = 1 ост. 0 1 ÷ 2 = 0 ост. 1 ↑ Читаем: 1001001₂

Зачем связисту:

BIN — язык аппаратуры

HEX — компактная запись

DEC — повседневность

Быстрый способ 150 = 128+16+4+2 = 2⁷+2⁴+2²+2¹ → 10010110₂. Проверка: 64+8+1 = 73 ✓

Тот же алгоритм с делением на 16 → перевод в HEX. Скоро запрограммируем его.

0.8 · Справочник

Степени двойки

● ● ●powers.dat□ _ ✕
n2ⁿПрименение
416Тетрада (hex-цифра)
7128Полная ASCII (0–127)
8256Один байт, одна RGB-компонента
101 0241 КиБ
1665 536Порт TCP/UDP
2416 777 216True Color
324 294 967 296IPv4 (~4,3 млрд)
482,81 × 10¹⁴MAC-адрес
1283,4 × 10³⁸IPv6
Правило +10 к показателю ≈ ×1000. 2²⁰ ≈ миллион, 2³⁰ ≈ миллиард, 2⁴⁰ ≈ триллион.
0.9a · Hex-дамп

Читаем данные как инженер

● ● ●wireshark.cap□ _ ✕
0000 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 0A Hello, world!. H e l l o , w o r l d ! LF Ethernet-кадр (14 байт): 0000 FF FF FF FF FF FF 00 1A 2B 3C 4D 5E 08 00 ├── MAC dst ──────┤ ├── MAC src ──────┤ ├IPv4

FF:FF:FF:FF:FF:FF — broadcast (всем)

08 00 = 0x0800 = IPv4

IP 192.168.1.1 = C0.A8.01.01

MAC = 6 байт = 48 бит через «:»

0.9 · Тетрады

BIN ↔ HEX: 4 бита = 1 hex-цифра

16 = 2⁴ → каждая hex-цифра = ровно 4 бита. Как тетрис: кубики «щёлкают» по четыре.

F₁₆ = 1111₂    4₁₆ = 0100
F4₁₆ = 1111 0100

Обратно: разбиваем справа по 4:

0100 10014 9 → 49₁₆
4×16+9 = 73 ✓

Аналогично 8 = 2³ → триады (BIN ↔ OCT):

3₈=011 5₈=101 7₈=111
357₈ = 011101111

IP 192.168.1.1:

DEC: 192.168.1.1

HEX: C0.A8.01.01

BIN: 11000000.10101000.00000001.00000001

0.8a · Арифметика

HEX-сложение + BIN-вычитание

HEX: 3A₁₆ + 4F₁₆

● ● ●hex□ _ ✕
Мл. разряд: A+F = 10+15 = 25 25 = 16 + 9 → пишем 9, перенос 1 Ст. разряд: 3+4+1 = 8 Результат: 89₁₆ Проверка: 58+79=137; 8×16+9=137 ✓

BIN: 1101₂ − 1011₂

● ● ●bin□ _ ✕
1 1 0 1 (13₁₀) − 1 0 1 1 (11₁₀) ───────── 0 0 1 0 (2₁₀) ✓
Зачем HEX-арифметика нужна при анализе адресов и дампов: маска подсети, смещение в заголовке.
0.6 · Форматы

Сравнение форматов

Фото

ФорматПотериГде
RAWнетпроф.
PNGнетсхемы
JPEGдавеб
WebPда/нетвеб

Аудио

ФорматПотокГде
PCM1411 кбCD
MP3128–320плееры
Opus48–128VoIP
G.71164телефон

Видео

Кодек1080pГде
H.2643–8 Мбвезде
H.2652–5 Мб4K
VP92–5 МбYouTube
AV11,5–4новый
Тренд Каждое поколение кодеков на 30–50 % эффективнее. AV1 — открытый и бесплатный.
0.1 · Бутерброд с вареньем

Декомпозиция: разбей на шаги

СЦЕНКА

Банка варенья, хлеб, ложка. Опиши рецепт для робота-повара — он понимает только точные команды.

● ● ●recipe.sh — идеальный алгоритм□ _ ✕
1. Открыть хлебницу 2. Достать один ломтик хлеба 3. Положить на разделочную доску 4. Открыть банку с вареньем 5. Взять чайную ложку 6. Набрать полную ложку варенья 7. Намазать на верхнюю сторону 8. Положить бутерброд на тарелку 9. Закрыть банку

Большая задача → маленькие шаги, каждый = одна команда. Компьютер педантичен: не додумает, не переспросит.

Пропустили шаг 4? Робот набирает варенье из закрытой банки → ошибка.

Перепутали 7 и 8? Варенье на тарелке, а не на хлебе.

Зачем связисту Настройка роутера — тот же рецепт: создать интерфейс → назначить IP → поднять протокол → разрешить трафик. Пропустил шаг — связь не встанет.
0.1 · Определения

Алгоритм программа

● ● ●алгоритм□ _ ✕

Последовательность шагов для решения задачи, записанная на человеческом языке, блок-схеме или псевдокоде.

Не зависит от языка. Один алгоритм → Python, Си, Java.

● ● ●программа□ _ ✕

Алгоритм, записанный на конкретном языке программирования и готовый к выполнению.

Зависит от языка: одна задача на Python и Си выглядит по-разному.

Аналогия Рецепт блюда — это алгоритм. Тот же рецепт на конкретном языке для конкретного повара — программа. Блюдо одно.
0.1б · ГОСТ 19.701-90

5 элементов блок-схемы

Каждая фигура — свой смысл. Из них собирается любая схема.

Начало / Конец Терминатор скруглённый овал Действие Процесс прямоугольник Да / Нет? Решение ромб → ветвление Ввод / Вывод параллелограмм чтение, печать Линия потока направление
Правило Из ромба всегда выходят две подписанные стрелки (Да / Нет). Из процесса — одна. У схемы один вход и хотя бы один выход.
0.1б · Линейный алгоритм

Бутерброд = конвейер

Все шаги идут последовательно, без ветвлений и повторов. Стрелка — только вниз.

На практике Чистая линейность редка — обычно есть хотя бы одно условие. Линейные участки — «прямые» между ветвлениями.

Нужен второй ломтик? Добавь ещё один прямоугольник перед «Конец». Нужна проверка «есть ли варенье?» — нужен ромб (следующий слайд).

Начало Открыть хлебницу Достать ломтик Открыть банку Взять ложку Набрать варенье Намазать на хлеб Положить на тарелку Конец
0.1б · Ветвление

Ромб: чётное или нечётное?

Начало Ввод n n % 2== 0 ? Да Нет «Чётное» «Нечётное» Конец

Из ромба выходят два пути: «Да» и «Нет». Каждый ведёт к своему действию, потом они сходятся.

● ● ●python□ _ ✕
if n % 2 == 0: print('Чётное') else: print('Нечётное')
Теорема Бёма–Якопини (1966) Любой алгоритм = последовательность + ветвление + цикл. Других конструкций не нужно.
0.1б · Цикл

Стрелка назад = цикл

Возвратная стрелка возвращает поток к проверке. Тело повторяется, пока условие истинно.

Начало N > 0 ? Нет Конец Да бит = N % 2 N = N ÷ 2 повтор

Когда N станет нулём — условие ложно, цикл завершается. Это и есть перевод в двоичную делением на 2.

● ● ●python□ _ ✕
while n > 0: бит = n % 2 n = n // 2
Соответствие ромб → while, прямоугольник → присваивание, стрелка назад → закрывающая } цикла.
0.10 · Три инструмента

Mathcad · Python · Си

📐

Mathcad

Умный лист бумаги. Формулы считаются сразу. Графики мгновенно.

Подставить, покрутить параметры

🐍

Python

Умный собеседник. Простой синтаксис, огромная библиотека.

Повторить расчёт, обработать файл

⚙️

Си

Близость к железу. Полный контроль над битами.

Разобрать заголовок, написать прошивку

В лабораторных Каждое задание решается во всех трёх средах. Три взгляда → если результаты совпали, расчёт верен. Дальше — с нуля, по чуть-чуть.
0.10 · Mathcad

Умный лист бумаги

Бесконечный лист, на котором формулы сразу считаются. Никакого «запуска», никаких командных строк — просто пишете, а он считает.

  • Дробь — горизонтальная черта, не «/»
  • Корень — значок √, не «sqrt»
  • Интеграл — привычный ∫
  • Греческие буквы — α, β, ω

Рабочий лист — одновременно расчёт и документация: распечатал и вставил в отчёт.

● ● ●Mathcad — интерфейс□ _ ✕
Интерфейс Mathcad
0.10 · Mathcad — панели

Панели инструментов

Каждая панель — набор кнопок для своей задачи. Щёлкнул по нужной — вставил оператор в лист.

Калькулятор

sin cos ln √ n! |x| — арифметика и базовые функции

Вычисления

:= задать значение, = показать результат

Символьные

simplify · factor · solve — ответ формулой, не числом

График

2D (y от x) и 3D — перестраивается мгновенно

Матрица

создать, обратить, Tᵀ — для MIMO, четырёхполюсников

Программ.

if · for · while · return внутри формулы

Греческий

ω — частота, λ — длина волны, σ — СКО

Булева

∧ ∨ ¬ · сравнения < > ≤ ≥ ≠

0.10 · Mathcad — операторы

Два знака равенства: := и =

:=  «задать значение»

Набираешь : (двоеточие) — Mathcad сам превращает в :=. «Запомни, что a равно пяти».

=  «покажи результат»

Mathcad подставляет и считает. «Чему сейчас равно?»

● ● ●лист Mathcad□ _ ✕
a := 5
b := a² + 3
b = 28
Магия пересчёта Меняешь a := 7 — и весь лист пересчитывается: b автоматически станет 52. В математике := и = — одно, в Mathcad их различают.
0.10 · Mathcad — пример

Затухание в кабеле: пошагово

ЗАДАЧА

Кабель 500 м, погонное затухание 0,05 дБ/м. Найти полное затухание.

  1. 1Набрать L, нажать :, ввести 500 → L := 500
  2. 2Ввести α (Ctrl+G), :, 0.05 → α := 0.05
  3. 3A := α · L → подставит значения
  4. 4A =  → Mathcad показывает 25 дБ

Меняете L на 1000 → A = 50.

Меняете α на 0.03 → A = 30.

Идеально для инженера Без кода, без компиляции — «крутишь» параметры и чувствуешь, как одно зависит от другого.
0.10 · Mathcad — графики

Графики в один щелчок

Указал, что по оси X и что по оси Y — Mathcad рисует. Меняешь формулу → график перестраивается мгновенно.

x := 0, 0.1 .. 10

y(x) := sin(2·π·x) · e−0.3·x

→ затухающая синусоида

x y ось X — аргумент ось Y — y(x)
0.10 · Mathcad — символьные

Символьные преобразования

Ответ — не число, а формула. Mathcad работает с буквами как Wolfram Alpha, но локально.

(a + b)² → simplify → a² + 2ab + b²

∫ sin(x) dx → −cos(x) + C

solve(x² − 5x + 6 = 0, x) → 2, 3

simplify
упростить

factor
на множители

expand
раскрыть скобки

solve
решить уравнение

Где пригодится Преобразования Фурье и Лапласа, упрощение передаточных функций — всё в символьном виде, формулой.
0.10 · Python

Установка + первый запуск

Если Mathcad — лист бумаги, то Python — умный собеседник, понимающий команды на почти-английском. Python уже скачан — осталось писать код в VS Code.

  1. 1Python установлен (✓ Add to PATH). Проверка в терминале: python --version → 3.12
  2. 2Открыть VS Code → вкладка Extensions (Ctrl+Shift+X) → поставить расширение Python от Microsoft
  3. 3Создать файл hello.py, написать код
  4. 4Нажать ▶ Run (или F5) → результат в нижней панели «Терминал»
● ● ●VS Code · hello.py  ▶ Run□ _ ✕
# hello.py — редактор VS Code print("Привет, связь!") for i in range(5): print(i) ─── ТЕРМИНАЛ ───────────── PS> python hello.py Привет, связь! 0 1 2 3 4
0.10 · Python — переменные

Переменная = коробка с наклейкой

Именованное место в памяти. Кладёшь в коробку «a» число 5 — дальше «a» означает 5.

● ● ●vars.py□ _ ✕
a = 5 # создай a, положи 5 b = 3 c = a + b # 5 + 3 print(c) # 8
Разбор a = 5 — «создай переменную и положи 5». c = a + b — «возьми из a, прибавь из b, результат в c». # — комментарий для человека.

В Python тип указывать не нужно — он сам поймёт. В Си — нужно (увидим дальше).

0.10 · Python — типы

Типы данных

int

a = 42
целое, без ограничения размера (даже 2¹⁰⁰⁰)

float

pi = 3.14
дробное. Точка, не запятая!

str

name = "Привет"
текст в кавычках

list

nums = [10,20,30]
набор значений

● ● ●индексация с нуля□ _ ✕
nums = [10, 20, 30] nums[0] # 10 (первый!) nums[1] # 20 nums[2] # 30
Важно Нумерация элементов списка начинается с нуля, а не с единицы. nums[0] — это первый элемент. Эта же логика — в адресах, портах, битах.
0.10 · Python — арифметика

7 операций

● ● ●arith.py□ _ ✕
print(2 + 3) # 5 сложение print(10 - 4) # 6 вычитание print(3 * 7) # 21 умножение print(15 / 4) # 3.75 деление (дробное) print(15 // 4) # 3 целая часть print(15 % 4) # 3 остаток (!) print(2 ** 10) # 1024 степень
Связь с переводом в двоичную 73 % 2 = 1 → младший бит. 73 // 2 = 36 → сдвиг вправо. Деление на 2 с остатком = перевод в BIN. Эти две операции скоро соберём в программу.
0.10 · Python — ввод/вывод

print и input

● ● ●io.py□ _ ✕
# вывод print("Привет, связь!") # ввод (всегда строка!) s = input("Введите число: ") n = int(s) # строка → целое # вывод с подстановкой (f-строка) print(f"n = {n}, n² = {n**2}")

input() всегда возвращает строку.

Чтобы считать — обернуть в int() или float().

f-строка: f"...{выражение}..."

f"C = {C:.0f}" — округлить до целого.

0.10 · Python — условие

if / else

ЗАДАЧА

Если температура выше 30° — вывести «Жарко», иначе — «Нормально».

① Блок-схема

temp > 30 ? Да Нет «Жарко» «Нормально»

② Программа

● ● ●weather.py□ _ ✕
temp = 35 if temp > 30: print("Жарко") else: print("Нормально")
Ромб = if Каждый ромб блок-схемы — один if. Отступы (4 пробела) — часть синтаксиса, не для красоты.
0.10 · Python — цикл for

for: повторить N раз

ЗАДАЧА

Сложить все числа от 1 до 100. Ответ должен получиться 5050.

① Блок-схема

total=0, i=1 i ≤ 100 ? Да total += i ; i++ Нет вывод total

② Программа

● ● ●sum.py□ _ ✕
total = 0 for i in range(1, 101): total += i print(total) # 5050
range range(5) → 0,1,2,3,4. range(1,101) → от 1 до 100. Как у Гаусса, только грубой силой — 100 итераций за микросекунды.
0.10 · Python — цикл while

while: пока условие истинно

for — когда знаем, сколько раз. while — когда повторяем «пока выполняется условие».

● ● ●countdown.py□ _ ✕
n = 5 while n > 0: print(n) n = n - 1 # 5, 4, 3, 2, 1
● ● ●та же сумма через while□ _ ✕
total = 0; i = 1 while i <= 100: total += i i += 1 print(total) # 5050
Осторожно Если условие никогда не станет ложным — бесконечный цикл. Внутри тела должно меняться то, что в условии. while — основа нашей программы перевода в двоичную.
0.10 · Python — функции

def: именованный блок

● ● ●func.py□ _ ✕
def celsius_to_fahrenheit(c): return c * 9/5 + 32 print(celsius_to_fahrenheit(0)) # 32.0 print(celsius_to_fahrenheit(100)) # 212.0

def — define (определить)

c — параметр (вход)

return — верни результат

Декомпозиция в коде Функция делает одно дело. Имя — глагольное: is_even, to_binary, calculate_snr. Из имени понятно, что она делает.
0.10 · Python — первая программа

to_binary(): DEC → BIN

ЗАДАЧА

Перевести десятичное число в двоичную запись делением на 2 с остатком (как в §0.9 на бумаге).

① Блок-схема

bits = [ ] n > 0 ? Да bits += n%2 ; n //= 2 Нет reverse → вывод

② Программа

● ● ●to_binary.py□ _ ✕
def to_binary(n): if n == 0: return '0' bits = [] while n > 0: bits.append(n % 2) # остаток n = n // 2 # сдвиг → bits.reverse() return ''.join(str(b) for b in bits) print(to_binary(73)) # 1001001 print(to_binary(255)) # 11111111
Встроенная bin(73) → '0b1001001'. Написав свою — понимаешь, как она работает.
0.10 · Си

Hello World + компиляция

● ● ●hello.c□ _ ✕
#include <stdio.h> int main(void) { printf("Привет, связь!\n"); return 0; }
gcc hello.c -o hello./hello
  • #include — подключить библиотеку
  • int main — точка входа
  • printf — напечатать. \n = LF (код 10)
  • return 0 — «всё ОК»
  • { } — границы блока (вместо отступов)
  • Каждая команда — ;

Python = устный переводчик (выполняет на лету). Си = письменный: сначала весь текст переводит компилятор (gcc), потом читаете готовое.

0.10 · Си — типы

Типы указываем явно

● ● ●types.c□ _ ✕
int a = 5; // 4 байта double pi = 3.14; // 8 байт char ch = 'A'; // 1 байт = 65 printf("%d\n", a); // 5 printf("%.2f\n", pi); // 3.14 printf("%c=%d\n",ch,ch); // A=65
ТипРазмерДиапазон
char1 байт0–255
int4 байта±2,1 млрд
double8 байт~15 цифр
printf форматы %d — целое, %f — дробное, %c — символ, %s — строка, %x — hex. В Python тип не указываешь, в Си — обязательно.

char ch = 'A' и char ch = 65 — одно и то же: символ в Си это его ASCII-код.

0.10 · Си — условие

if / else: скобки вместо отступов

● ● ●cond.c□ _ ✕
int temp = 35; if (temp > 30) { printf("Жарко\n"); } else { printf("Нормально\n"); }

Сравнение с Python

ЭлементPythonСи
Условиеif x:if (x) {
Блокотступы{ }
Конец строки;
Та же блок-схема Ромб «temp > 30?» → две ветки. Логика одна — меняется только запись: где Python ставит отступ, Си ставит { }.
0.10 · Си — циклы

for и while

● ● ●sum.c · for□ _ ✕
int total = 0; for (int i=1; i<=100; i++) { total += i; } printf("%d\n", total); // 5050
Разбор for for (int i=1; i<=100; i++): «начни с i=1; продолжай, пока i≤100; после каждой итерации i++». i++ = i+1.
● ● ●while□ _ ✕
int n = 5; while (n > 0) { printf("%d ", n); n--; }

Си ближе к процессору: задать счётчик, проверить условие, увеличить.

0.10 · Си — побитовые

Зачем Си незаменим

● ● ●bits.c□ _ ✕
unsigned char byte = 0xC0; // = 11000000₂ = 192₁₀ // Старшая тетрада: int hi = (byte >> 4) & 0x0F; printf("%X\n", hi); // C (12) // Бит 7: if (byte & 0x80) printf("Бит 7 = 1\n");
ОперацияСимволНазначение
>>Сдвиг →Деление на 2ⁿ
&ИМаскирование
|ИЛИУстановка бит
^XORПереключение
Где нужно Разбор IP-заголовков, Ethernet-кадров, CRC — всё побитово. В Си это «родные» операции: одна машинная инструкция.
0.10 · Си vs Python

DEC → BIN: бок о бок

ЗАДАЧА

Тот же перевод в двоичную — блок-схема та же (деление на 2 с остатком), меняется только язык программы.

● ● ●python · 8 строк□ _ ✕
def to_binary(n): if n == 0: return '0' bits = [] while n > 0: bits.append(n % 2) n = n // 2 bits.reverse() return ''.join(str(b) for b in bits)
● ● ●c · 15 строк□ _ ✕
#include <stdio.h> int main() { int n; char buf[33]; scanf("%d", &n); int i = 0; while (n > 0) { buf[i++] = n%2 + '0'; n /= 2; } for (int j=i-1; j>=0; j--) putchar(buf[j]); putchar('\n'); }
Итог Код длиннее, но быстрее и ближе к железу. Тот же алгоритм — другой уровень контроля.
0.10 · Шеннон–Хартли

Одна задача — три решения

ЗАДАЧА

C = B · log₂(1 + SNR). Канал B = 3100 Гц, SNR = 30 дБ. Найти предельную пропускную способность.

● ● ●Mathcad□ _ ✕
B := 3100
SNRdB := 30
SNR := 10^(SNRdB/10)
C := B·log(1+SNR, 2)
C = 30 899
● ● ●Python□ _ ✕
import math B = 3100 SNR = 10 ** (30/10) C = B * math.log2(1+SNR) print(f"C={C:.0f}") # C=30899
● ● ●Си□ _ ✕
#include <math.h> double B=3100; double S=pow(10,30/10.0); double C=B*log2(1+S); printf("%.0f",C); // 30899 (gcc -lm)
Три программы — одно число C ≈ 30 899 бит/с ≈ 31 кбит/с — предел телефонного канала. Модем V.34 достигал 33,6 кбит/с — почти потолок Шеннона. Совпали — расчёт верен.
0.10 · Итог

Когда какой инструмент

MathcadPythonСи
Сильная сторонаФормулы как в учебнике, мгновенные графикиПростой синтаксис, гигантская экосистемаПолный контроль над битами и байтами
ЗадачаПодставить, покрутить параметры, графикПовторить с разными данными, автоматизироватьРазобрать заголовок, написать прошивку
СкоростьСредняя (интерпретатор)Максимальная (компилятор)
Порог входаНизкийНизкийВысокий
Где встретимЛабораторные расчётыОбработка данных, скриптыЯдра ОС, драйверы, прошивки

Одна задача → три взгляда. Если совпали — расчёт верен.

← → или пробел · 🛠 слева — инструменты (рисование · редактор)
инструменты