0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>20 мар 2023</li>
2
<ul><li>20 мар 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Вводная статья, в которой мы разберёмся, что является предметом информатики, как компьютер хранит данные и что такое алгоритмы.</p>
4
</ul><p>Вводная статья, в которой мы разберёмся, что является предметом информатики, как компьютер хранит данные и что такое алгоритмы.</p>
5
<p>Кадр: сериал "Теория большого взрыва"</p>
5
<p>Кадр: сериал "Теория большого взрыва"</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
7
<p>CS50 (Computer Science 50) - легендарный курс о компьютерных технологиях Гарвардского университета. Практически в любом разговоре о том, как вкатиться в программирование, опытные ребята упоминают этот курс как необходимый фундамент. В нём последовательно разбираются логика работы компьютера, работа с визуальным программированием в Scratch, основы языка C, массивы, основные алгоритмы, работа памяти, структуры данных, основы языка Python, основы SQL, HTML, CSS, JavaScript, Python-фреймворк Flask и даже эмодзи :)</p>
7
<p>CS50 (Computer Science 50) - легендарный курс о компьютерных технологиях Гарвардского университета. Практически в любом разговоре о том, как вкатиться в программирование, опытные ребята упоминают этот курс как необходимый фундамент. В нём последовательно разбираются логика работы компьютера, работа с визуальным программированием в Scratch, основы языка C, массивы, основные алгоритмы, работа памяти, структуры данных, основы языка Python, основы SQL, HTML, CSS, JavaScript, Python-фреймворк Flask и даже эмодзи :)</p>
8
<p>Изучив материалы курса, вы разберётесь в том, как работает компьютер, узнаете универсальные принципы программирования и сможете понимать и читать код, написанный на разных языках.</p>
8
<p>Изучив материалы курса, вы разберётесь в том, как работает компьютер, узнаете универсальные принципы программирования и сможете понимать и читать код, написанный на разных языках.</p>
9
<p>В этой статье мы разберём, как в памяти компьютера выглядят числа, буквы, цвета, картинки, музыка и видео, а также познакомимся с понятиями "алгоритм" и "псевдокод". Эта статья - вводная, поэтому, если какие-то концепции вам уже знакомы, смело переходите к следующим разделам.</p>
9
<p>В этой статье мы разберём, как в памяти компьютера выглядят числа, буквы, цвета, картинки, музыка и видео, а также познакомимся с понятиями "алгоритм" и "псевдокод". Эта статья - вводная, поэтому, если какие-то концепции вам уже знакомы, смело переходите к следующим разделам.</p>
10
<ul><li><a>Почему мы перевели CS50 и как устроены статьи по курсу</a></li>
10
<ul><li><a>Почему мы перевели CS50 и как устроены статьи по курсу</a></li>
11
<li><a>Оригинальное видео</a></li>
11
<li><a>Оригинальное видео</a></li>
12
<li><a>Мотивация в изучении информатики</a></li>
12
<li><a>Мотивация в изучении информатики</a></li>
13
<li><a>Как компьютер представляет числа</a></li>
13
<li><a>Как компьютер представляет числа</a></li>
14
<li><a>Как компьютер понимает буквы</a></li>
14
<li><a>Как компьютер понимает буквы</a></li>
15
<li><a>Как компьютер хранит цвета, картинки и фотографии</a></li>
15
<li><a>Как компьютер хранит цвета, картинки и фотографии</a></li>
16
<li><a>Как компьютер представляет видео и звуки</a></li>
16
<li><a>Как компьютер представляет видео и звуки</a></li>
17
<li><a>Что такое алгоритм</a></li>
17
<li><a>Что такое алгоритм</a></li>
18
<li><a>Эффективность алгоритмов</a></li>
18
<li><a>Эффективность алгоритмов</a></li>
19
<li><a>Что такое псевдокод</a></li>
19
<li><a>Что такое псевдокод</a></li>
20
<li><a>Что общего у языков программирования</a></li>
20
<li><a>Что общего у языков программирования</a></li>
21
</ul><p>CS50 - это самый популярный курс в Гарвардском университете и самый посещаемый массовый открытый онлайн-курс на edX. Все материалы курса<a>доступны бесплатно</a>(в том числе и практические задания), но, если заплатить, можно получить сертификат и <a>разные дополнительные плюшки</a>.</p>
21
</ul><p>CS50 - это самый популярный курс в Гарвардском университете и самый посещаемый массовый открытый онлайн-курс на edX. Все материалы курса<a>доступны бесплатно</a>(в том числе и практические задания), но, если заплатить, можно получить сертификат и <a>разные дополнительные плюшки</a>.</p>
22
<p>Мы перевели видеолекции в текстовый формат, снабдили их иллюстрациями, кое-где дополнили объяснения и выкладываем в открытый доступ. Оригинальный курс доступен по лицензии<a>Attribution-NonCommercial-ShareAlike 4.0 International</a>(CC BY-NC-SA 4.0) - его можно дорабатывать и распространять бесплатно, но только под исходной лицензией. Так что этот цикл материалов вы также сможете использовать в своей работе или общественной деятельности совершенно свободно и бесплатно в рамках той же лицензии.</p>
22
<p>Мы перевели видеолекции в текстовый формат, снабдили их иллюстрациями, кое-где дополнили объяснения и выкладываем в открытый доступ. Оригинальный курс доступен по лицензии<a>Attribution-NonCommercial-ShareAlike 4.0 International</a>(CC BY-NC-SA 4.0) - его можно дорабатывать и распространять бесплатно, но только под исходной лицензией. Так что этот цикл материалов вы также сможете использовать в своей работе или общественной деятельности совершенно свободно и бесплатно в рамках той же лицензии.</p>
23
<p>Каждая статья из цикла CS50 состоит из следующих материалов:</p>
23
<p>Каждая статья из цикла CS50 состоит из следующих материалов:</p>
24
<ul><li>текстовый перевод видео (иногда - половины видео, если тема обширная);</li>
24
<ul><li>текстовый перевод видео (иногда - половины видео, если тема обширная);</li>
25
<li>ссылка на оригинальное видео на английском языке;</li>
25
<li>ссылка на оригинальное видео на английском языке;</li>
26
<li>схемы и пояснения;</li>
26
<li>схемы и пояснения;</li>
27
<li>ссылки на более подробные материалы по теме статьи;</li>
27
<li>ссылки на более подробные материалы по теме статьи;</li>
28
<li>практические задания.</li>
28
<li>практические задания.</li>
29
</ul><p><strong>Лектор</strong></p>
29
</ul><p><strong>Лектор</strong></p>
30
<p>Американский учёный, профессор Гарвардского университета.</p>
30
<p>Американский учёный, профессор Гарвардского университета.</p>
31
<a></a><p>Хотя я уже неплохо разбирался в компьютерах, информатика казалась мне чем-то особенным. Но я быстро понял, что информатика - это не только программирование и личная работа на компьютере. Это ещё и постоянная работа с различными проблемами - причём такая работа становится одним из основополагающих принципов информатики. Вам всё время придётся искать и отлаживать различные ошибки.</p>
31
<a></a><p>Хотя я уже неплохо разбирался в компьютерах, информатика казалась мне чем-то особенным. Но я быстро понял, что информатика - это не только программирование и личная работа на компьютере. Это ещё и постоянная работа с различными проблемами - причём такая работа становится одним из основополагающих принципов информатики. Вам всё время придётся искать и отлаживать различные ошибки.</p>
32
<p>А когда сталкиваешься с ошибками в программах, возникает чувство, будто бьёшься о стену. В такие моменты надо сделать шаг назад, передохнуть или даже переключиться на другие задачи. Зато, когда в итоге всё получается, ты испытываешь ни с чем не сравнимое чувство гордости - особенно когда в конце семестра с нуля создал собственный программный проект!</p>
32
<p>А когда сталкиваешься с ошибками в программах, возникает чувство, будто бьёшься о стену. В такие моменты надо сделать шаг назад, передохнуть или даже переключиться на другие задачи. Зато, когда в итоге всё получается, ты испытываешь ни с чем не сравнимое чувство гордости - особенно когда в конце семестра с нуля создал собственный программный проект!</p>
33
<p>Изучение информатики не было для меня лёгкой прогулкой - у меня тоже постоянно возникали различные проблемы и я регулярно сталкивался с ошибками. Вот подтверждение - на прошлой неделе я заглянул в свою старую папку с материалами по CS50 (она сохранилась с тех пор, когда я сам проходил этот курс) и обнаружил фотографию своей первой компьютерной программы, написанной по заданию преподавателя. Вот она:</p>
33
<p>Изучение информатики не было для меня лёгкой прогулкой - у меня тоже постоянно возникали различные проблемы и я регулярно сталкивался с ошибками. Вот подтверждение - на прошлой неделе я заглянул в свою старую папку с материалами по CS50 (она сохранилась с тех пор, когда я сам проходил этот курс) и обнаружил фотографию своей первой компьютерной программы, написанной по заданию преподавателя. Вот она:</p>
34
Скриншот: Skillbox Media<p>Эта программа печатает на экране "Hello, CS50!". Как видите, я не следовал указаниям преподавателя, из-за чего потерял пару баллов (перевод комментария от преподавателя: "-2 балла за hello.out, надо было выходить из hello, а не из make").</p>
34
Скриншот: Skillbox Media<p>Эта программа печатает на экране "Hello, CS50!". Как видите, я не следовал указаниям преподавателя, из-за чего потерял пару баллов (перевод комментария от преподавателя: "-2 балла за hello.out, надо было выходить из hello, а не из make").</p>
35
<p>Более подробно эту программу мы разберём в следующих статьях этого цикла - она очень простая.</p>
35
<p>Более подробно эту программу мы разберём в следующих статьях этого цикла - она очень простая.</p>
36
<p>Если вы думаете, что любой студент, который изучает этот курс, уже знает больше вас, то по статистике это не так - 2/3 студентов CS50 никогда раньше не посещали курсы по программированию.</p>
36
<p>Если вы думаете, что любой студент, который изучает этот курс, уже знает больше вас, то по статистике это не так - 2/3 студентов CS50 никогда раньше не посещали курсы по программированию.</p>
37
<p>Вернёмся к самой информатике. Для меня информатика - это решение проблем. Конечно, мы и так постоянно их решаем. Но курс информатики поможет научиться мыслить методично и тщательно - компьютер не будет делать то, что вы от него ожидаете, если ваши указания для него не будут максимально точными и корректными.</p>
37
<p>Вернёмся к самой информатике. Для меня информатика - это решение проблем. Конечно, мы и так постоянно их решаем. Но курс информатики поможет научиться мыслить методично и тщательно - компьютер не будет делать то, что вы от него ожидаете, если ваши указания для него не будут максимально точными и корректными.</p>
38
<p>Проще всего понять, в чём заключается суть информатики, можно по такой схеме:</p>
38
<p>Проще всего понять, в чём заключается суть информатики, можно по такой схеме:</p>
39
Изображение: Skillbox Media<p>То есть каждый раз, когда вы пишете программу, вам необходимо создать какое-то решение, которое позволяет перейти от данных на входе к какому-то результату на выходе с помощью языка, понятного вашему девайсу.</p>
39
Изображение: Skillbox Media<p>То есть каждый раз, когда вы пишете программу, вам необходимо создать какое-то решение, которое позволяет перейти от данных на входе к какому-то результату на выходе с помощью языка, понятного вашему девайсу.</p>
40
<p>Поэтому для начала рассмотрим, как компьютер воспринимает данные. Возможно, вы уже слышали, что компьютеры понимают только нули и единицы, но, с другой стороны, вы на личном опыте могли убедиться, что компьютеры могут обрабатывать числа в Excel, отправлять текстовые сообщения, создавать изображения, показывать фильмы и делать многое другое. Чтобы разобраться, как из набора нулей и единичек рождается фильм, посмотрим на то, как компьютер считает.</p>
40
<p>Поэтому для начала рассмотрим, как компьютер воспринимает данные. Возможно, вы уже слышали, что компьютеры понимают только нули и единицы, но, с другой стороны, вы на личном опыте могли убедиться, что компьютеры могут обрабатывать числа в Excel, отправлять текстовые сообщения, создавать изображения, показывать фильмы и делать многое другое. Чтобы разобраться, как из набора нулей и единичек рождается фильм, посмотрим на то, как компьютер считает.</p>
41
<p>Числа, с которыми мы встречаемся в обычной жизни, состоят из цифр от 0 до 9. Как же компьютер их понимает, если работает только с нулями и единицами? Взгляните на шаблон:</p>
41
<p>Числа, с которыми мы встречаемся в обычной жизни, состоят из цифр от 0 до 9. Как же компьютер их понимает, если работает только с нулями и единицами? Взгляните на шаблон:</p>
42
Изображение: Skillbox Media<p>Здесь три нуля. Если мы представим с помощью этого шаблона число 1 в двоичном формате, оно будет выглядеть как 001, число 2 - как 010, 3 - как 011 и так далее до числа 7, которое будет выглядеть как 111.</p>
42
Изображение: Skillbox Media<p>Здесь три нуля. Если мы представим с помощью этого шаблона число 1 в двоичном формате, оно будет выглядеть как 001, число 2 - как 010, 3 - как 011 и так далее до числа 7, которое будет выглядеть как 111.</p>
43
<p>Подробнее о двоичной системе счисления и математических операциях с двоичными числами можно почитать<a>в нашей статье</a>.</p>
43
<p>Подробнее о двоичной системе счисления и математических операциях с двоичными числами можно почитать<a>в нашей статье</a>.</p>
44
<p>Почему мы используем для компьютера именно такой шаблон? Дело в том, что любое электронное устройство упрощённо можно представить в виде набора переключателей (транзисторов), которые можно включать и выключать. В компьютерах используются миллионы транзисторов, и единица измерения информации, привязанная к одному из них, называется битом. Бит может принимать значение 0, если транзистор включён, и 1, если он выключен.</p>
44
<p>Почему мы используем для компьютера именно такой шаблон? Дело в том, что любое электронное устройство упрощённо можно представить в виде набора переключателей (транзисторов), которые можно включать и выключать. В компьютерах используются миллионы транзисторов, и единица измерения информации, привязанная к одному из них, называется битом. Бит может принимать значение 0, если транзистор включён, и 1, если он выключен.</p>
45
<p>Подробнее об истории, принципах работы транзисторов и о том, как компьютер проводит с их помощью разные операции, можно почитать<a>в нашем спецпроекте</a>.</p>
45
<p>Подробнее об истории, принципах работы транзисторов и о том, как компьютер проводит с их помощью разные операции, можно почитать<a>в нашем спецпроекте</a>.</p>
46
<p>Но биты слишком малы - работать с ними неудобно. Поэтому учёные решили использовать для хранения и обработки информации последовательность из 8 бит - то есть байты. Один байт уже может хранить не два значения - единичку или ноль, а целых 256 - от 0 до 255. Это как раз 2 в восьмой степени.</p>
46
<p>Но биты слишком малы - работать с ними неудобно. Поэтому учёные решили использовать для хранения и обработки информации последовательность из 8 бит - то есть байты. Один байт уже может хранить не два значения - единичку или ноль, а целых 256 - от 0 до 255. Это как раз 2 в восьмой степени.</p>
47
<p>Итак, тысячи байтов называются килобайтами, миллионы - мегабайтами, миллиарды - гигабайтами, триллионы - терабайтами.</p>
47
<p>Итак, тысячи байтов называются килобайтами, миллионы - мегабайтами, миллиарды - гигабайтами, триллионы - терабайтами.</p>
48
<p>На самом деле всё несколько сложнее. В разных случаях используются разные кило-, мега- и тому подобные байты. Например, при указании объёма жёстких дисков принято считать килобайтом 10 в третьей степени байтов (то есть 1000). Хотя по классике, чтобы получить килобайт, надо умножить 1 байт на 2 в десятой степени (то есть 1024). Соответственно, классический гигабайт равен 1 073 741 824 байтам, тогда как "жесткодисковый" - всего 1 000 000 000 байтам.</p>
48
<p>На самом деле всё несколько сложнее. В разных случаях используются разные кило-, мега- и тому подобные байты. Например, при указании объёма жёстких дисков принято считать килобайтом 10 в третьей степени байтов (то есть 1000). Хотя по классике, чтобы получить килобайт, надо умножить 1 байт на 2 в десятой степени (то есть 1024). Соответственно, классический гигабайт равен 1 073 741 824 байтам, тогда как "жесткодисковый" - всего 1 000 000 000 байтам.</p>
49
<p>Рассмотрим работу транзисторов на примере трёх лампочек. Если светильники не горят, то у нас будет число 0 (000).</p>
49
<p>Рассмотрим работу транзисторов на примере трёх лампочек. Если светильники не горят, то у нас будет число 0 (000).</p>
50
<p>Теперь включим одну лампочку:</p>
50
<p>Теперь включим одну лампочку:</p>
51
<p>Это будет 1 (001).</p>
51
<p>Это будет 1 (001).</p>
52
<p>Теперь выключим первый светильник и включим второй.</p>
52
<p>Теперь выключим первый светильник и включим второй.</p>
53
<p>Получим число 10 (010), это будет 2 в десятичной системе счисления. А если включить все лампочки, то получится число 111 (7 в десятичной системе). Это - максимальное значение, которое можно записать с помощью трёх бит (2 в третьей степени).</p>
53
<p>Получим число 10 (010), это будет 2 в десятичной системе счисления. А если включить все лампочки, то получится число 111 (7 в десятичной системе). Это - максимальное значение, которое можно записать с помощью трёх бит (2 в третьей степени).</p>
54
Изображение: Skillbox Media<p>Наверняка вы уже догадались, что, когда компьютер производит операции над десятичными числами, он переводит их в двоичную систему счисления.</p>
54
Изображение: Skillbox Media<p>Наверняка вы уже догадались, что, когда компьютер производит операции над десятичными числами, он переводит их в двоичную систему счисления.</p>
55
<p>Например, десятичное число 123 мы можем разложить на степени числа 10 и простые множители:</p>
55
<p>Например, десятичное число 123 мы можем разложить на степени числа 10 и простые множители:</p>
56
<p>123 = 1 × 102 + 2 × 101 + 3 × 100</p>
56
<p>123 = 1 × 102 + 2 × 101 + 3 × 100</p>
57
<p>Аналогичный трюк сработает и в случае двоичного числа 111 - только из цифр у нас будут 1 и 0.</p>
57
<p>Аналогичный трюк сработает и в случае двоичного числа 111 - только из цифр у нас будут 1 и 0.</p>
58
<p>111 = 1 × 22 + 1 × 21 + 1 × 20</p>
58
<p>111 = 1 × 22 + 1 × 21 + 1 × 20</p>
59
<p>С числами разобрались - но как в памяти компьютера выглядят буквы? Люди договорились, что буквы в памяти тоже будут представляться в виде цифр. Заглавная A английского алфавита, например, представлена числом 65 (01000001 в двоичном коде), буква B - числом 66 (01000010), C - числом 67 (01000011) и так далее.</p>
59
<p>С числами разобрались - но как в памяти компьютера выглядят буквы? Люди договорились, что буквы в памяти тоже будут представляться в виде цифр. Заглавная A английского алфавита, например, представлена числом 65 (01000001 в двоичном коде), буква B - числом 66 (01000010), C - числом 67 (01000011) и так далее.</p>
60
<p>Эта система кодирования называется ASCII (<a><em>англ.</em></a><em>American standard code for information interchange - американский стандартный код для обмена информацией</em>). Её разработали в 1963 году. ASCII содержит коды для представления десятичных цифр, букв латинского алфавита, знаков препинания и управляющих символов. Каждый ASCII-символ имеет числовой код в диапазоне от 0 до 255 и, соответственно, фиксированную длину в 8 бит (1 байт).</p>
60
<p>Эта система кодирования называется ASCII (<a><em>англ.</em></a><em>American standard code for information interchange - американский стандартный код для обмена информацией</em>). Её разработали в 1963 году. ASCII содержит коды для представления десятичных цифр, букв латинского алфавита, знаков препинания и управляющих символов. Каждый ASCII-символ имеет числовой код в диапазоне от 0 до 255 и, соответственно, фиксированную длину в 8 бит (1 байт).</p>
61
<p>Представьте, что вам пришло сообщение по электронной почте, текст которого закодирован последовательностью чисел 72 73 33 (или 01001000 01001001 00100001 в двоичной системе). Оно означает "HI!". Это сообщение легко можно расшифровать по таблице ASCII:</p>
61
<p>Представьте, что вам пришло сообщение по электронной почте, текст которого закодирован последовательностью чисел 72 73 33 (или 01001000 01001001 00100001 в двоичной системе). Оно означает "HI!". Это сообщение легко можно расшифровать по таблице ASCII:</p>
62
Таблица ASCII-кодовИзображение: Wikimedia Commons<p>ПК, Мac, смартфоны и другие вычислительные устройства сконструированы так, чтобы понимать эту таблицу.</p>
62
Таблица ASCII-кодовИзображение: Wikimedia Commons<p>ПК, Мac, смартфоны и другие вычислительные устройства сконструированы так, чтобы понимать эту таблицу.</p>
63
<p>Однако с ASCII быстро возникла проблема - с её помощью можно закодировать только 256 символов. Этого достаточно, если вы используете английский язык. Но в мире есть множество других языков, которым требуется гораздо больше символов. Поэтому в 1991 году был принят стандарт Юникод (англ<em>. Unicode</em>), который включает в себя знаки почти всех языков мира: китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, диакритику, символы музыкальной нотной нотации и даже эмодзи. На сегодня в таблице<em>Unicode</em>хранится уже почти 150 000 символов.</p>
63
<p>Однако с ASCII быстро возникла проблема - с её помощью можно закодировать только 256 символов. Этого достаточно, если вы используете английский язык. Но в мире есть множество других языков, которым требуется гораздо больше символов. Поэтому в 1991 году был принят стандарт Юникод (англ<em>. Unicode</em>), который включает в себя знаки почти всех языков мира: китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, диакритику, символы музыкальной нотной нотации и даже эмодзи. На сегодня в таблице<em>Unicode</em>хранится уже почти 150 000 символов.</p>
64
<p>Символы в кодировке Unicode занимают различное число бит - есть стандарты на 8, 16 и 32 бита (1, 2, 4 байта). Рассмотрим вот такой 4-байтный код:</p>
64
<p>Символы в кодировке Unicode занимают различное число бит - есть стандарты на 8, 16 и 32 бита (1, 2, 4 байта). Рассмотрим вот такой 4-байтный код:</p>
65
Изображение: Skillbox Media<p>За ним скрывается эмодзи с медицинской маской:</p>
65
Изображение: Skillbox Media<p>За ним скрывается эмодзи с медицинской маской:</p>
66
Изображение: Skillbox Media<p>Таблицу Юникода мы приводить не будем - уж слишком много в ней символов :)</p>
66
Изображение: Skillbox Media<p>Таблицу Юникода мы приводить не будем - уж слишком много в ней символов :)</p>
67
<p>Для кодирования цветов существует специальная модель - RGB (<em>от англ. red, green, blue</em>), c помощью которой каждый цвет представляется в виде комбинации красного, зелёного и синего цветов разной насыщенности.</p>
67
<p>Для кодирования цветов существует специальная модель - RGB (<em>от англ. red, green, blue</em>), c помощью которой каждый цвет представляется в виде комбинации красного, зелёного и синего цветов разной насыщенности.</p>
68
<p>Чтобы понять, как это работает, используем числа 72, 73 и 33 в <a>онлайн-сервисе</a>, который позволяет смотреть разные цвета в различных цветовых пространствах, - программе для создания и редактирования графических изображений. Пусть 72 - это насыщенность красного цвета, 73 - зелёного, а 33 - синего. Чтобы посмотреть, как выглядит каждый из них в отдельности, введите соответствующее значение цвета в строку RGB, а ненужные цвета в этой строке выставьте на ноль. Например, чтобы посмотреть оттенок синего, поставьте на ноль R и G (то есть красный и зелёный): 0, 0, 33. Вот какие цвета мы получили по отдельности:</p>
68
<p>Чтобы понять, как это работает, используем числа 72, 73 и 33 в <a>онлайн-сервисе</a>, который позволяет смотреть разные цвета в различных цветовых пространствах, - программе для создания и редактирования графических изображений. Пусть 72 - это насыщенность красного цвета, 73 - зелёного, а 33 - синего. Чтобы посмотреть, как выглядит каждый из них в отдельности, введите соответствующее значение цвета в строку RGB, а ненужные цвета в этой строке выставьте на ноль. Например, чтобы посмотреть оттенок синего, поставьте на ноль R и G (то есть красный и зелёный): 0, 0, 33. Вот какие цвета мы получили по отдельности:</p>
69
Изображение: Skillbox Media<p>Смешивая эти цвета, мы получим такой жёлто-зёленый оттенок:</p>
69
Изображение: Skillbox Media<p>Смешивая эти цвета, мы получим такой жёлто-зёленый оттенок:</p>
70
Изображение: Skillbox Media<p>Можете поэкспериментировать с разными значениями и смешивать разные цвета.</p>
70
Изображение: Skillbox Media<p>Можете поэкспериментировать с разными значениями и смешивать разные цвета.</p>
71
<p>Подробнее разобраться в цветовых пространствах поможет<a>наша статья</a>.</p>
71
<p>Подробнее разобраться в цветовых пространствах поможет<a>наша статья</a>.</p>
72
<p>Теперь перейдём к изображениям. Возможно, вы уже слышали слово "пиксель" - точка на экране. На наших ноутбуках и телефонах их уже миллионы. Но если взять "медицинский" смайлик, который мы использовали выше, и очень сильно увеличить его, эти пиксели, то есть "квадратики", станут заметны. Из таких же квадратиков или точек состоит любое изображение на экране.</p>
72
<p>Теперь перейдём к изображениям. Возможно, вы уже слышали слово "пиксель" - точка на экране. На наших ноутбуках и телефонах их уже миллионы. Но если взять "медицинский" смайлик, который мы использовали выше, и очень сильно увеличить его, эти пиксели, то есть "квадратики", станут заметны. Из таких же квадратиков или точек состоит любое изображение на экране.</p>
73
Изображение: Skillbox Media<p>То есть все изображения на компьютерах состоят из отдельных точек, каждая из которых использует 24 бита для представления цвета по модели RGB. А ваша графическая карта понимает, что это за цвета, и выводит их на экран.</p>
73
Изображение: Skillbox Media<p>То есть все изображения на компьютерах состоят из отдельных точек, каждая из которых использует 24 бита для представления цвета по модели RGB. А ваша графическая карта понимает, что это за цвета, и выводит их на экран.</p>
74
<p>Видео добавляет понятие времени - это не просто одно изображение, а уже последовательность изображений, быстро сменяющих друг друга, - например, 24 или 30 кадров в секунду. Мы интерпретируем их с помощью глаз и мозга и видим движение на экране. То же самое происходит со звуком и музыкой.</p>
74
<p>Видео добавляет понятие времени - это не просто одно изображение, а уже последовательность изображений, быстро сменяющих друг друга, - например, 24 или 30 кадров в секунду. Мы интерпретируем их с помощью глаз и мозга и видим движение на экране. То же самое происходит со звуком и музыкой.</p>
75
<p>Посмотрите на эти ноты:</p>
75
<p>Посмотрите на эти ноты:</p>
76
Изображение: Wikimedia Commons<p>Человек, владеющий нотной грамотой, легко исполнит их на музыкальном инструменте. Компьютеры тоже могут воспроизводить эти звуки. Например, популярный формат аудио, который называется MIDI, представляет каждую ноту как последовательность чисел:</p>
76
Изображение: Wikimedia Commons<p>Человек, владеющий нотной грамотой, легко исполнит их на музыкальном инструменте. Компьютеры тоже могут воспроизводить эти звуки. Например, популярный формат аудио, который называется MIDI, представляет каждую ноту как последовательность чисел:</p>
77
Изображение: Skillbox Media<p>Но музыка - это не только ноты до, ре, ми и так далее, есть ещё знаки альтерации: диез, бемоль, бекар. Имеет значение и то, как долго и громко звучит та или иная нота, на каком инструменте её играют. Учитывая все эти детали, мы сможем записывать музыку и воспроизводить её на компьютере. Но в каком бы формате ни хранилась информация, компьютер переводит её во всё те же нули и единицы.</p>
77
Изображение: Skillbox Media<p>Но музыка - это не только ноты до, ре, ми и так далее, есть ещё знаки альтерации: диез, бемоль, бекар. Имеет значение и то, как долго и громко звучит та или иная нота, на каком инструменте её играют. Учитывая все эти детали, мы сможем записывать музыку и воспроизводить её на компьютере. Но в каком бы формате ни хранилась информация, компьютер переводит её во всё те же нули и единицы.</p>
78
<p>В медиафайлах приходится хранить огромные объёмы информации. Так, для голливудского фильма, длящегося час-полтора, используется частота 24 или 30 кадров в секунду. Представьте, сколько картинок одновременно хранится в видеофайле! При этом даже одна фотография может весить несколько мегабайт. Спойлер: полтора часа фильма - это 5400 секунд и 162 000 изображений при частоте 30 кадров в секунду.</p>
78
<p>В медиафайлах приходится хранить огромные объёмы информации. Так, для голливудского фильма, длящегося час-полтора, используется частота 24 или 30 кадров в секунду. Представьте, сколько картинок одновременно хранится в видеофайле! При этом даже одна фотография может весить несколько мегабайт. Спойлер: полтора часа фильма - это 5400 секунд и 162 000 изображений при частоте 30 кадров в секунду.</p>
79
<p>Поэтому со временем люди разработали такие форматы файлов, которые с помощью разных умных алгоритмов уменьшают объём хранимой информации.</p>
79
<p>Поэтому со временем люди разработали такие форматы файлов, которые с помощью разных умных алгоритмов уменьшают объём хранимой информации.</p>
80
<p>Мы ещё рассмотрим их более подробно в последующих статьях.</p>
80
<p>Мы ещё рассмотрим их более подробно в последующих статьях.</p>
81
<p>И вот мы переходим к одному из центральных понятий информатики - алгоритму. Повторим схему, которая уже приводилась выше:</p>
81
<p>И вот мы переходим к одному из центральных понятий информатики - алгоритму. Повторим схему, которая уже приводилась выше:</p>
82
Изображение: Skillbox Media<p>Алгоритм - это пошаговые инструкции для решения какой-либо задачи. Когда вы пишете программу, то реализуете один или несколько алгоритмов и используете тот или иной язык программирования. Но, независимо от языка, компьютер будет представлять то, что вы печатаете, используя только нули и единицы.</p>
82
Изображение: Skillbox Media<p>Алгоритм - это пошаговые инструкции для решения какой-либо задачи. Когда вы пишете программу, то реализуете один или несколько алгоритмов и используете тот или иной язык программирования. Но, независимо от языка, компьютер будет представлять то, что вы печатаете, используя только нули и единицы.</p>
83
<p>Если говорить об этой схеме, то алгоритм - это то, что скрыто в нашем синем квадрате. Входные данные обрабатываются по определённому алгоритму (то есть к ним последовательно применяется набор каких-то операций), и получаются выходные данные, какой-то результат.</p>
83
<p>Если говорить об этой схеме, то алгоритм - это то, что скрыто в нашем синем квадрате. Входные данные обрабатываются по определённому алгоритму (то есть к ним последовательно применяется набор каких-то операций), и получаются выходные данные, какой-то результат.</p>
84
<p>Например, чтобы из огурцов, помидоров, сметаны, соли и перца (входные данные, input) получить вкусный салат (выходные данные, output), необходимо применить следующие операции:</p>
84
<p>Например, чтобы из огурцов, помидоров, сметаны, соли и перца (входные данные, input) получить вкусный салат (выходные данные, output), необходимо применить следующие операции:</p>
85
<ul><li>помыть помидоры и огурцы;</li>
85
<ul><li>помыть помидоры и огурцы;</li>
86
<li>нарезать помидоры и огурцы;</li>
86
<li>нарезать помидоры и огурцы;</li>
87
<li>положить их в миску;</li>
87
<li>положить их в миску;</li>
88
<li>добавить сметану;</li>
88
<li>добавить сметану;</li>
89
<li>добавить соль;</li>
89
<li>добавить соль;</li>
90
<li>добавить перец;</li>
90
<li>добавить перец;</li>
91
<li>тщательно перемешать.</li>
91
<li>тщательно перемешать.</li>
92
</ul><p>Это и есть алгоритм!</p>
92
</ul><p>Это и есть алгоритм!</p>
93
Изображение: Skillbox Media<p>Рассмотрим ещё один пример алгоритма. Допустим, в адресной книге вашего телефона хранится множество контактов - имён, фамилий, номеров, адресов электронной почты и тому подобного. Они отсортированы в алфавитном порядке: по имени или фамилии, от "А" до "Я" или по какому-то другому символу.</p>
93
Изображение: Skillbox Media<p>Рассмотрим ещё один пример алгоритма. Допустим, в адресной книге вашего телефона хранится множество контактов - имён, фамилий, номеров, адресов электронной почты и тому подобного. Они отсортированы в алфавитном порядке: по имени или фамилии, от "А" до "Я" или по какому-то другому символу.</p>
94
<p>Для демонстрации используем бумажную телефонную книгу Гарварда, в которой 1000 страниц и целая куча имён, отсортированных по алфавиту. Предположим, что мы хотим найти Джона Гарварда.</p>
94
<p>Для демонстрации используем бумажную телефонную книгу Гарварда, в которой 1000 страниц и целая куча имён, отсортированных по алфавиту. Предположим, что мы хотим найти Джона Гарварда.</p>
95
<p><strong>Алгоритм 1.</strong>Мы можем просто пролистывать книгу с самого начала, просматривая одну страницу за другой. Если имя Джона Гарварда есть в телефонной книге, то в конце концов мы доберёмся до него. Так что этот алгоритм верен. Но эффективен ли он? Нет, поиск займёт много времени.</p>
95
<p><strong>Алгоритм 1.</strong>Мы можем просто пролистывать книгу с самого начала, просматривая одну страницу за другой. Если имя Джона Гарварда есть в телефонной книге, то в конце концов мы доберёмся до него. Так что этот алгоритм верен. Но эффективен ли он? Нет, поиск займёт много времени.</p>
96
<p><strong>Алгоритм 2.</strong>Мы можем пролистывать и по 2 страницы. Но будет ли это правильно? Нет, ведь если мы начнём с первой страницы, то будем просматривать только нечётные страницы и можем пропустить Джона Гарварда, если его имя находится на чётной странице.</p>
96
<p><strong>Алгоритм 2.</strong>Мы можем пролистывать и по 2 страницы. Но будет ли это правильно? Нет, ведь если мы начнём с первой страницы, то будем просматривать только нечётные страницы и можем пропустить Джона Гарварда, если его имя находится на чётной странице.</p>
97
<p><strong>Алгоритм 3.</strong>А теперь раскроем книгу посередине.</p>
97
<p><strong>Алгоритм 3.</strong>А теперь раскроем книгу посередине.</p>
98
Фото: FERNANDO MACIAS ROMO/Shutterstock<p>Похоже, что я нахожусь на букве "M". Значит, Джон Гарвард будет в левой части книги. Оторвём правую половину книги - она нам больше не нужна. Количество страниц для поиска уменьшилось с 1000 до 500.</p>
98
Фото: FERNANDO MACIAS ROMO/Shutterstock<p>Похоже, что я нахожусь на букве "M". Значит, Джон Гарвард будет в левой части книги. Оторвём правую половину книги - она нам больше не нужна. Количество страниц для поиска уменьшилось с 1000 до 500.</p>
99
<p>Опять раскроем страницы посередине. Сейчас я оказался на букве "Е". Значит, Джон Гарвард, если он вообще тут есть, окажется в левой части книги. Разорвём её и отбросим ещё 250 страниц.</p>
99
<p>Опять раскроем страницы посередине. Сейчас я оказался на букве "Е". Значит, Джон Гарвард, если он вообще тут есть, окажется в левой части книги. Разорвём её и отбросим ещё 250 страниц.</p>
100
<p>Так мы будем повторять до тех пор, пока у нас не останется одна страница. На ней будет имя Джона Гарварда, если оно есть в книге, или его там не будет, если его в книге нет. В тех частях, что я отбросил, его нет 100%.</p>
100
<p>Так мы будем повторять до тех пор, пока у нас не останется одна страница. На ней будет имя Джона Гарварда, если оно есть в книге, или его там не будет, если его в книге нет. В тех частях, что я отбросил, его нет 100%.</p>
101
<p>Почему такой алгоритм лучше, чем первый или второй, даже если во втором случае возвращаться к нечётным страницам, если мы перескочили Джона Гарварда? Чтобы понять это, построим график: на оси X будем отмечать количество просмотренных страниц, а на оси Y - время для их просмотра. Здесь n - количество страниц, которые нужно просмотреть, чтобы найти Джона Гарварда.</p>
101
<p>Почему такой алгоритм лучше, чем первый или второй, даже если во втором случае возвращаться к нечётным страницам, если мы перескочили Джона Гарварда? Чтобы понять это, построим график: на оси X будем отмечать количество просмотренных страниц, а на оси Y - время для их просмотра. Здесь n - количество страниц, которые нужно просмотреть, чтобы найти Джона Гарварда.</p>
102
<p>Два первых алгоритма дадут линейные графики, так как время, потраченное на просмотр страниц, будет прямо пропорционально их количеству. Конечно, во втором случае просмотр пойдёт быстрее, так как мы будем просматривать только нечётные страницы.</p>
102
<p>Два первых алгоритма дадут линейные графики, так как время, потраченное на просмотр страниц, будет прямо пропорционально их количеству. Конечно, во втором случае просмотр пойдёт быстрее, так как мы будем просматривать только нечётные страницы.</p>
103
Изображение: Skillbox Media<p>Но график третьего алгоритма будет выглядеть иначе:</p>
103
Изображение: Skillbox Media<p>Но график третьего алгоритма будет выглядеть иначе:</p>
104
Изображение: Skillbox Media<p>Это логарифмическая кривая. Здесь принципиально иное соотношение между объёмом задачи и количеством времени, необходимого для её решения. Даже если в телефонную книгу добавятся ещё два города и она станет в два раза толще, зелёная линия не намного сдвинется с места. Почему? Да потому, что вы просто разорвёте телефонную книгу пополам, а не будете перелистывать 2000 страниц, чтобы добраться до цели.</p>
104
Изображение: Skillbox Media<p>Это логарифмическая кривая. Здесь принципиально иное соотношение между объёмом задачи и количеством времени, необходимого для её решения. Даже если в телефонную книгу добавятся ещё два города и она станет в два раза толще, зелёная линия не намного сдвинется с места. Почему? Да потому, что вы просто разорвёте телефонную книгу пополам, а не будете перелистывать 2000 страниц, чтобы добраться до цели.</p>
105
<p>Алгоритмы различаются по вычислительной сложности - существует даже специальная система Big O Notation, которая позволяет определять и обозначать сложность алгоритма с точки зрения временных затрат. У нас есть об этом<a>отдельная подробная статья</a>.</p>
105
<p>Алгоритмы различаются по вычислительной сложности - существует даже специальная система Big O Notation, которая позволяет определять и обозначать сложность алгоритма с точки зрения временных затрат. У нас есть об этом<a>отдельная подробная статья</a>.</p>
106
<p>Алгоритм - штука непростая. Например, в них необходимо учитывать все возможные случаи, даже те, которые происходят редко. Если их не учесть в алгоритме, программа просто завершится с ошибкой. В случае с поиском контакта в телефонной книге нам надо обработать ситуацию, при которой такого контакта в книге нет вообще - или есть несколько контактов с одинаковым именем. Что должна делать программа в подобных случаях?</p>
106
<p>Алгоритм - штука непростая. Например, в них необходимо учитывать все возможные случаи, даже те, которые происходят редко. Если их не учесть в алгоритме, программа просто завершится с ошибкой. В случае с поиском контакта в телефонной книге нам надо обработать ситуацию, при которой такого контакта в книге нет вообще - или есть несколько контактов с одинаковым именем. Что должна делать программа в подобных случаях?</p>
107
<p>Описывать алгоритм словами, как в рецепте, - неудобно и долго. Посмотрите на пример реализации алгоритма по поиску контакта в телефонной книге:</p>
107
<p>Описывать алгоритм словами, как в рецепте, - неудобно и долго. Посмотрите на пример реализации алгоритма по поиску контакта в телефонной книге:</p>
108
<ul><li>Взять телефонную книгу.</li>
108
<ul><li>Взять телефонную книгу.</li>
109
<li>Раскрыть её посередине.</li>
109
<li>Раскрыть её посередине.</li>
110
<li>Посмотреть на страницу.</li>
110
<li>Посмотреть на страницу.</li>
111
<li>Если нужное имя человека на этой странице,</li>
111
<li>Если нужное имя человека на этой странице,</li>
112
<li> Позвонить ему.</li>
112
<li> Позвонить ему.</li>
113
<li>Иначе, если имя человека может быть на предыдущих страницах,</li>
113
<li>Иначе, если имя человека может быть на предыдущих страницах,</li>
114
<li> Открыть левую часть книги посередине.</li>
114
<li> Открыть левую часть книги посередине.</li>
115
<li> Перейти к шагу 3.</li>
115
<li> Перейти к шагу 3.</li>
116
<li>Иначе, если имя человека может быть на последующих страницах,</li>
116
<li>Иначе, если имя человека может быть на последующих страницах,</li>
117
<li> Открыть правую часть книги посередине.</li>
117
<li> Открыть правую часть книги посередине.</li>
118
<li> Перейти к шагу 3.</li>
118
<li> Перейти к шагу 3.</li>
119
<li>Иначе</li>
119
<li>Иначе</li>
120
<li> Выход.</li>
120
<li> Выход.</li>
121
</ul><p>Если нужного имени нет ни на открытой странице, ни в левой, ни в правой части, значит, его нет в книге. В нашем псевдокоде это предусмотрено в пунктах 12 и 13.</p>
121
</ul><p>Если нужного имени нет ни на открытой странице, ни в левой, ни в правой части, значит, его нет в книге. В нашем псевдокоде это предусмотрено в пунктах 12 и 13.</p>
122
<p>В принципе, всё довольно понятно - но многословно. Представлять так алгоритмы всё равно неудобно. Гораздо лучше было бы описывать их в какой-то системе нотации, где разные операции обозначаются какими-то краткими, понятными командами и символами.</p>
122
<p>В принципе, всё довольно понятно - но многословно. Представлять так алгоритмы всё равно неудобно. Гораздо лучше было бы описывать их в какой-то системе нотации, где разные операции обозначаются какими-то краткими, понятными командами и символами.</p>
123
<p>Конечно, можно использовать для записи алгоритмов какой-то конкретный язык программирования, но это тоже так себе решение. У каждого языка есть свои синтаксические особенности, которые не нужны для обозначения алгоритма и будут только запутывать - какие-то импорты, вызовы дополнительных процедур и тому подобное. Они отвлекают от сути и как бы "замусоривают" суть.</p>
123
<p>Конечно, можно использовать для записи алгоритмов какой-то конкретный язык программирования, но это тоже так себе решение. У каждого языка есть свои синтаксические особенности, которые не нужны для обозначения алгоритма и будут только запутывать - какие-то импорты, вызовы дополнительных процедур и тому подобное. Они отвлекают от сути и как бы "замусоривают" суть.</p>
124
<p>Именно поэтому был разработан так называемый псевдокод - специальная система нотации для описания компьютерных алгоритмов. Он сделан интуитивно понятным и простым, а кроме того, в нём нет каких-то дополнительных синтаксических "обвесов" - только чистое значение. Хотя "сделан" - слишком громкое слово, потому что единого стандарта для псевдокода, по сути, не существует. Команды псевдокода можно писать по-русски или по-английски "если" - if, "пока" - while и так далее. Главное - чтобы программа, написанная псевдокодом была понятна тем, для кого она пишется.</p>
124
<p>Именно поэтому был разработан так называемый псевдокод - специальная система нотации для описания компьютерных алгоритмов. Он сделан интуитивно понятным и простым, а кроме того, в нём нет каких-то дополнительных синтаксических "обвесов" - только чистое значение. Хотя "сделан" - слишком громкое слово, потому что единого стандарта для псевдокода, по сути, не существует. Команды псевдокода можно писать по-русски или по-английски "если" - if, "пока" - while и так далее. Главное - чтобы программа, написанная псевдокодом была понятна тем, для кого она пишется.</p>
125
<p>Примеры псевдокода можно найти как в учебниках по информатике, так и в статьях и книгах по алгоритмам. Выглядеть они могут примерно так:</p>
125
<p>Примеры псевдокода можно найти как в учебниках по информатике, так и в статьях и книгах по алгоритмам. Выглядеть они могут примерно так:</p>
126
ЕСЛИ строка1 содержит строку2 ВЫВОД ("строка1 содержит строку2")<p>Конечно, чтобы компьютер смог что-то вычислить и выполнить наш алгоритм, его нужно написать на понятном нашему цифровому помощнику языке - то есть на языке программирования. Языков программирования очень много, и они довольно сильно различаются: командами, возможностями, задачами, для которых они подходят, и тому подобным. Но при этом у них есть общие черты.</p>
126
ЕСЛИ строка1 содержит строку2 ВЫВОД ("строка1 содержит строку2")<p>Конечно, чтобы компьютер смог что-то вычислить и выполнить наш алгоритм, его нужно написать на понятном нашему цифровому помощнику языке - то есть на языке программирования. Языков программирования очень много, и они довольно сильно различаются: командами, возможностями, задачами, для которых они подходят, и тому подобным. Но при этом у них есть общие черты.</p>
127
<p>Например, в большинстве языков программирования есть<strong>функции</strong> - выделенные блоки кода, которые решают небольшую задачу. Если последовательно расположить несколько разных функций, то можно решить более крупную задачу. Например, одна функция может искать контакт человека в телефонной книге, а другая - звонить этому человеку или редактировать контакт.</p>
127
<p>Например, в большинстве языков программирования есть<strong>функции</strong> - выделенные блоки кода, которые решают небольшую задачу. Если последовательно расположить несколько разных функций, то можно решить более крупную задачу. Например, одна функция может искать контакт человека в телефонной книге, а другая - звонить этому человеку или редактировать контакт.</p>
128
<p>Однако помимо функций в языках программирования есть ещё несколько фундаментальных сущностей. Посмотрим на наш алгоритм:</p>
128
<p>Однако помимо функций в языках программирования есть ещё несколько фундаментальных сущностей. Посмотрим на наш алгоритм:</p>
129
<ul><li>Взять телефонную книгу.</li>
129
<ul><li>Взять телефонную книгу.</li>
130
<li>Раскрыть её посередине.</li>
130
<li>Раскрыть её посередине.</li>
131
<li>Посмотреть на страницу.</li>
131
<li>Посмотреть на страницу.</li>
132
<li><strong>Если</strong>нужное имя человека на этой странице,</li>
132
<li><strong>Если</strong>нужное имя человека на этой странице,</li>
133
<li> Позвонить ему.</li>
133
<li> Позвонить ему.</li>
134
<li><strong>Иначе, если</strong>имя человека может быть на предыдущих страницах,</li>
134
<li><strong>Иначе, если</strong>имя человека может быть на предыдущих страницах,</li>
135
<li> Открыть левую часть книги посередине.</li>
135
<li> Открыть левую часть книги посередине.</li>
136
<li> Перейти к шагу 3.</li>
136
<li> Перейти к шагу 3.</li>
137
<li><strong>Иначе, если</strong>имя человека может быть на последующих страницах,</li>
137
<li><strong>Иначе, если</strong>имя человека может быть на последующих страницах,</li>
138
<li> Открыть правую часть книги посередине.</li>
138
<li> Открыть правую часть книги посередине.</li>
139
<li> Перейти к шагу 3.</li>
139
<li> Перейти к шагу 3.</li>
140
<li><strong>Иначе</strong></li>
140
<li><strong>Иначе</strong></li>
141
<li> Выход.</li>
141
<li> Выход.</li>
142
</ul><p>Жирным выделены<strong>условия</strong> - места в алгоритме, когда дальнейшее действие зависит от ответа на какой-то простой вопрос: выражение верно или выражение неверно? Условия похожи на дорожные развилки: вы можете пойти налево, направо, прямо или куда-то ещё - в зависимости от того, куда вам надо попасть.</p>
142
</ul><p>Жирным выделены<strong>условия</strong> - места в алгоритме, когда дальнейшее действие зависит от ответа на какой-то простой вопрос: выражение верно или выражение неверно? Условия похожи на дорожные развилки: вы можете пойти налево, направо, прямо или куда-то ещё - в зависимости от того, куда вам надо попасть.</p>
143
<p>Например, если вы оказались на развилке, где одна дорога ведёт в Москву, а другая в Санкт-Петербург, вы можете задаться вопросом: "Хочу ли я в Москву?"<strong>Если да</strong>, то вы выбираете дорогу, ведущую в Москву,<strong>иначе</strong>выбираете дорогу на Санкт-Петербург.</p>
143
<p>Например, если вы оказались на развилке, где одна дорога ведёт в Москву, а другая в Санкт-Петербург, вы можете задаться вопросом: "Хочу ли я в Москву?"<strong>Если да</strong>, то вы выбираете дорогу, ведущую в Москву,<strong>иначе</strong>выбираете дорогу на Санкт-Петербург.</p>
144
<p>Ещё в нашем импровизированном псевдокоде есть<strong>циклы</strong>, то есть команды, которые выполняют какой-то кусочек алгоритма несколько раз (останавливаются циклы как раз благодаря определённым<strong>условиям</strong>).</p>
144
<p>Ещё в нашем импровизированном псевдокоде есть<strong>циклы</strong>, то есть команды, которые выполняют какой-то кусочек алгоритма несколько раз (останавливаются циклы как раз благодаря определённым<strong>условиям</strong>).</p>
145
<ul><li>Взять телефонную книгу.</li>
145
<ul><li>Взять телефонную книгу.</li>
146
<li>Раскрыть её посередине.</li>
146
<li>Раскрыть её посередине.</li>
147
<li>Посмотреть на страницу.</li>
147
<li>Посмотреть на страницу.</li>
148
<li>Если нужное имя человека на этой странице,</li>
148
<li>Если нужное имя человека на этой странице,</li>
149
<li> Позвонить ему.</li>
149
<li> Позвонить ему.</li>
150
<li>Иначе, если имя человека может быть на предыдущих страницах,</li>
150
<li>Иначе, если имя человека может быть на предыдущих страницах,</li>
151
<li> Открыть левую часть книги посередине.</li>
151
<li> Открыть левую часть книги посередине.</li>
152
<li><strong> Перейти к шагу 3</strong>.</li>
152
<li><strong> Перейти к шагу 3</strong>.</li>
153
<li>Иначе, если имя человека может быть на последующих страницах,</li>
153
<li>Иначе, если имя человека может быть на последующих страницах,</li>
154
<li> Открыть правую часть книги посередине.</li>
154
<li> Открыть правую часть книги посередине.</li>
155
<li><strong> Перейти к шагу 3</strong>.</li>
155
<li><strong> Перейти к шагу 3</strong>.</li>
156
<li>Иначе</li>
156
<li>Иначе</li>
157
<li> Выход.</li>
157
<li> Выход.</li>
158
</ul><p>В нашем случае используются самые "глупые" циклы - команды "перейти к такому-то шагу" (или GO TO). В современных языках программирования используются другие команды, потому что каждый раз следить за тем, на какую строку отправляет нас оператор GO TO - настоящее мучение. Особенно в больших программах. Современные циклы выглядят более компактно, как отдельный блок кода:</p>
158
</ul><p>В нашем случае используются самые "глупые" циклы - команды "перейти к такому-то шагу" (или GO TO). В современных языках программирования используются другие команды, потому что каждый раз следить за тем, на какую строку отправляет нас оператор GO TO - настоящее мучение. Особенно в больших программах. Современные циклы выглядят более компактно, как отдельный блок кода:</p>
159
ДЛЯ (а в диапазоне от 1 до 10) { <делай что-нибудь полезное> }<p>Как видите, благодаря условиям и циклам мы можем написать программу всего на 13 строк, и она эффективно найдёт нужный телефон в телефонной книге на 1000 страниц. Настоящая уличная магия!</p>
159
ДЛЯ (а в диапазоне от 1 до 10) { <делай что-нибудь полезное> }<p>Как видите, благодаря условиям и циклам мы можем написать программу всего на 13 строк, и она эффективно найдёт нужный телефон в телефонной книге на 1000 страниц. Настоящая уличная магия!</p>
160
<p>В следующей статье по CS50 мы попробуем реализовать разные алгоритмы в среде визуального программирования Scratch. Будет весело!</p>
160
<p>В следующей статье по CS50 мы попробуем реализовать разные алгоритмы в среде визуального программирования Scratch. Будет весело!</p>
161
<ul><li>Это первая статья из большого цикла материалов по курсу CS50. Статья - вводная, поэтому в ней нет практических заданий.</li>
161
<ul><li>Это первая статья из большого цикла материалов по курсу CS50. Статья - вводная, поэтому в ней нет практических заданий.</li>
162
<li>Мы разобрали, как компьютер видит числа, буквы, картинки, цвета, видео и аудио.</li>
162
<li>Мы разобрали, как компьютер видит числа, буквы, картинки, цвета, видео и аудио.</li>
163
<li>Посмотрели на алгоритмы, немного попользовались псевдокодом.</li>
163
<li>Посмотрели на алгоритмы, немного попользовались псевдокодом.</li>
164
<li>Узнали об основных сущностях, которые присущи почти всем языкам программирования: условия, функции, циклы.</li>
164
<li>Узнали об основных сущностях, которые присущи почти всем языкам программирования: условия, функции, циклы.</li>
165
</ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
165
</ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>