-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Maksim Litvinov
committed
Dec 27, 2023
1 parent
c0cf578
commit ffe8217
Showing
114 changed files
with
2,574 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
Наберите в редакторе код из задания символ в символ и нажмите «Проверить». | ||
|
||
```cpp | ||
#include <iostream> | ||
|
||
int main() { | ||
//BEGIN | ||
std::cout << "Hello, World!" << std::endl; | ||
//END | ||
return 0; | ||
} | ||
``` | ||
|
||
> Внимание: если вы напишете `heLLo, woRld!` вместо `Hello, World!`, то это будет считаться другим текстом, потому что заглавные и строчные буквы — это разные символы. Размер буквы называют *регистром*, и говорят: **регистр — важен!** Это касается почти всего в коде, поэтому привыкайте всегда обращать внимание на регистр. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
Изучать язык программирования, по традиции, начинают с программы 'Hello, World!'. | ||
|
||
<pre class='hexlet-basics-output'> | ||
Hello, World! | ||
</pre> | ||
|
||
В языке C++ эта программа будет выглядеть так: | ||
|
||
```cpp | ||
main() { | ||
std::cout << "Hello, World!"; | ||
} | ||
``` | ||
|
||
Текст `Hello, World!` появится на экране благодаря команде `std::cout <<`. | ||
Такая команда выводит на экран информацию, которая указана после оператора << `'Hello, World!'`. | ||
Оператор `<<` позволяет строить цепочки, например: `std::cout << "Hello, World!" << "\n";` | ||
То есть теперь информация после _Hello, World!_ будет выводиться на экране на следующей строке. | ||
|
||
То, что присутствует на экране помимо этой команды, нужно для работы любой программы на языке C++, мы разберём это позднее. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
name: Первая программа на С++ | ||
tips: | ||
- >- | ||
Если в редакторе есть запись `// BEGIN` и `// END`, то код нужно писать | ||
между этими строчками. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
Выведете в консоль строку `Hello Jon Snow!` | ||
|
||
В любом месте программы создайте однострочный комментарий с текстом: `You know nothing, Jon Snow!`. | ||
|
||
Не забудьте добавить перевод строки с помощью функции `std::endl` или символа `\n` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
|
||
Кроме кода, в файлах с исходным кодом могут находиться комментарии. Это текст, который не является частью программы и нужен программистам для пометок. С их помощью добавляют пояснения, как работает код, какие здесь ошибки нужно поправить или не забыть что-то добавить позже. | ||
|
||
```cpp | ||
int main() { | ||
// Удалить вывод в консоль перед запуском в продакшене | ||
std::cout << "Hello World!"; | ||
return 0; | ||
} | ||
``` | ||
|
||
Комментарии в С++ бывают двух видов: | ||
## Однострочные комментарии | ||
_Однострочные комментарии_ начинаются с `//`. После этих двух символов может следовать любой текст, вся строчка не будет анализироваться и исполняться. | ||
Комментарий может занимать всю строчку. Если одной строчки мало, то создаются несколько комментариев: | ||
|
||
```cpp | ||
// For Winterfell! | ||
// For Lanisters! | ||
``` | ||
|
||
Комментарий может находиться на строчке после какого-нибудь кода: | ||
|
||
```cpp | ||
int index { 0 }; // counter initialization | ||
``` | ||
## Многострочные комментарии | ||
_Многострочные комментарии_ начинаются с `/*` и заканчиваются на `*/`. | ||
```cpp | ||
/* | ||
This program | ||
prints a message | ||
to the console | ||
*/ | ||
int main() { | ||
std::cout << "Hello World!" << std::endl; | ||
return 0; | ||
} | ||
``` | ||
|
||
Такие комментарии, обычно, используют для документирования кода, например, функций. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
name: Комментарии в С++ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
Выведите на экран друг за другом три имени: *Robert*, *Stannis*, *Renly*. В результате на экране должно отобразиться: | ||
|
||
<pre class='hexlet-basics-output'> | ||
Robert | ||
Stannis | ||
Renly | ||
</pre> | ||
|
||
Для каждого имени можете используйте свой собственный вызов `std::cout <<`. | ||
|
||
Вывод в поток `std::cout` не умеет самостоятельно делать перевод строки, по этому это надо указать явно управляющим символом "\n" или воспользоваться функцией `endl`. | ||
|
||
```cpp | ||
std::cout << "Mother of Dragons\n"; | ||
std::cout << "Mother of Dragons" << "\n"; | ||
std::cout << "Mother of Dragons" << std::endl; | ||
``` | ||
|
||
Подсказка: | ||
- С помощью оператора вставки `<<` можно выстраивать цепочки: | ||
|
||
```cpp | ||
std::cout << "Mother of Dragons\n" << "Dracarys!\n"; | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
Инструкция — это команда для компьютера. Код на C++ — это набор инструкций, которые, обычно, отделяются друг от друга символом `;`. Вот пример кода с двумя инструкциями: | ||
|
||
```cpp | ||
std::cout << "Mother of Dragons\n"; | ||
std::cout << "Dracarys!\n"; | ||
``` | ||
|
||
При запуске этого кода на экран последовательно выводятся два предложения: | ||
|
||
<pre class='hexlet-basics-output'> | ||
Mother of Dragons | ||
Dracarys! | ||
</pre> | ||
|
||
Почему это важно знать? Инструкция — это единица исполнения. Программа которая запускает код на C++, выполняет инструкции строго по очереди. И мы, как разработчики, должны понимать этот порядок и уметь мысленно разделять программу на независимые части, удобные для анализа. | ||
Теоретически инструкции можно написать последовательно друг за другом без переноса на новую строчку: | ||
|
||
```cpp | ||
std::cout << "Mother of Dragons\n"; std::cout << "Dracarys!\n"; | ||
``` | ||
|
||
Результат на экране будет таким же, но на практике такой подход считается плохим. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
name: Инструкции (Statements) | ||
tips: | ||
- > | ||
[Функция | ||
endl](https://learn.microsoft.com/ru-ru/cpp/standard-library/ostream-functions?view=msvc-170#endl) | ||
[Что такое | ||
поток](https://learn.microsoft.com/ru-ru/cpp/standard-library/what-a-stream-is?view=msvc-170) | ||
[Использование printf в современном | ||
С++](https://learn.microsoft.com/ru-ru/archive/msdn-magazine/2015/march/windows-with-c-using-printf-with-modern-c) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
В этом упражнение мы сново потренируемся выводом в консоль, только теперь вы напишите функцию `main` самостоятельно. | ||
|
||
Не забудьте подключить библиотеку для ввода/вывода. | ||
|
||
Выведете в консоль фразу Hello, Code Basics! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
Давайте посмотрим на листинг программы из прошлого урока. | ||
|
||
```cpp | ||
#include <iostream> | ||
|
||
int main() { | ||
std::cout << "Mother of Dragons\n"; | ||
std::cout << "Dracarys!\n"; | ||
return 0; | ||
} | ||
``` | ||
|
||
В верхней части листинга мы видим такую запись: | ||
|
||
```cpp | ||
#include <iostream> | ||
``` | ||
|
||
`#include` - это директива препроцессора, с помощью неё мы подключаем заголовочные файлы различных библиотек. В данном случае мы подключили `iostream` - библиотека для организации ввода/вывода. | ||
|
||
Далее идет определение функции main. В С++ любая программа начинается с функции `main` - это её входная точка. | ||
|
||
Функция может принимать аргументы, например, если это консольное приложение, то это будут аргументы командной строки: | ||
|
||
```cpp | ||
int main (int argc, char *argv[]) { | ||
// some code | ||
} | ||
``` | ||
или же быть без аргументов: | ||
```cpp | ||
int main() { | ||
// some code | ||
} | ||
``` | ||
|
||
Тело функции обрамлено фигурными скобками, внутри идет набор инструкций, которые выполняет функция, каждая инструкция должна оканчиваться точкой с запятой ;. | ||
|
||
## Код возврата | ||
|
||
Когда наша программа завершает свою работу, операционной системе важно понимать как отработала программа: успешно или нет. Рассмотрим минимальное определение функции `main`: | ||
|
||
```cpp | ||
int main() { | ||
return 0; | ||
} | ||
``` | ||
|
||
Обратите внимание на `return` - это инструкция возврата из функции(подробнее о возвращаемых значениях мы познакомимся в уроках про функции). | ||
|
||
Стандарт C++ определяет значение только трех кодов состояния: `0`, `EXIT_SUCCESS` и `EXIT_FAILURE`. `0` и `EXIT_SUCCESS` означают, что программа выполнена успешно. `EXIT_FAILURE` означает, что программа не была успешно выполнена. `EXIT_SUCCESS` и `EXIT_FAILURE` определены в заголовочном файле `<cstdlib>`: | ||
|
||
```cpp | ||
#include <cstdlib> | ||
|
||
int main() { | ||
return EXIT_SUCCESS // эквивалентно 0 | ||
} | ||
``` | ||
|
||
Если вы хотите максимизировать портируемость, вы должны использовать только `0` или `EXIT_SUCCESS`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
name: Структура программы в С++ | ||
tips: | ||
- > | ||
[Директива | ||
#include](https://learn.microsoft.com/ru-ru/cpp/preprocessor/hash-include-directive-c-cpp?view=msvc-170) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
Просто тренировка. Выведите на экран число 420262531. | ||
|
||
<pre class='hexlet-basics-output'> | ||
420262531 | ||
</pre> | ||
|
||
Поэкспериментируйте с выводом. Передайте туда другое число или строку. Посмотрите на ответ системы, попробуйте его перевести и понять. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
Наш сайт автоматически проверяет ваши решения. Как это работает? | ||
|
||
В самом простом случае система просто запускает ваш код и смотрит на то, что вывелось на экран. А потом сверяет с тем, что мы «ожидали» по заданию. | ||
|
||
В следующих, более сложных уроках вы будете писать методы — некие мини-программы, принимающие информацию из внешнего мира и производящие какие-то операции. Проверка ваших решений в таких случаях выглядит немного сложнее: система запускает ваше решение и передаёт какую-то информацию. Система также знает — «ожидает» — какой именно ответ должен вернуть правильный метод при таких входных данных. | ||
|
||
Например, если ваша задача — написать код для сложения двух чисел, то проверочная система будет передавать ему разные комбинации чисел и сверять ответ вашего кода с реальными суммами. Если во всех случаях ответы совпадут, то решение считается верным. | ||
|
||
Вот простой пример: помните задание из 1го упражнения, где вам надо было вывести на экран "Hello, World!"?. Допустим, вы допустили небольшую опечатку. Система ответит примерно так: | ||
|
||
<pre class='hexlet-basics-output'> | ||
Assertion `result == expected` failed in test.cpp line 26: | ||
Expected: "Hello, World" to be: "Hello, World!" | ||
</pre> | ||
|
||
Читать это следует так: в ответе ожидалось строка с "Hello, World!" (первая строчка после двойного '='), но в вместо него пришла строка "Hello, World". Строки отличаются символом под номером 12. В данном примере пропущен восклицательный знак. | ||
|
||
Иногда в процессе решения будет казаться, что вы сделали все правильно, но система "капризничает" и не принимает решение. Подобное поведение практически исключено. Нерабочие тесты просто не могут попасть на сайт, они автоматически запускаются после каждого изменения. В подавляющем большинстве таких случаев, (а все наши проекты в сумме провели миллионы проверок за много лет), ошибка содержится в коде решения. Она может быть очень незаметной, вместо английской буквы случайно ввели русскую, вместо верхнего регистра использовали нижний или забыли вывести запятую. Другие случаи сложнее. Возможно ваше решение работает для одного набора входных данных, но не работает для другого. Поэтому всегда внимательно читайте условие задачи и вывод тестов. Там почти наверняка есть указание на ошибку. | ||
|
||
Однако, если вы уверены в ошибке или нашли какую-то неточность, то вы всегда можете указать на нее. В конце каждой теории есть ссылка на содержимое урока на гитхабе (этот проект полностью открытый!). Перейдя туда, вы можете написать issue, посмотреть содержимое тестов (там видно, как вызывается ваш код) и даже отправить pullrequest. Если для вас это пока темный лес, то подключитесь в наше сообщество [Telegram Hexlet](https://t.me/hexletcommunity/12), там в канале Волонтеры мы всегда поможем. | ||
|
||
Кроме наших тестов, будет крайне полезно экспериментировать с кодом в вашем собственном консольном приложении. [Установите Visual Studio](https://visualstudio.microsoft.com/ru/downloads/) и попробуйте создать [простое консольное приложение](https://learn.microsoft.com/ru-ru/cpp/build/vscpp-step-1-create?view=msvc-170). Оцените мощь IDE, которая может сама автодополнять выражения и подчеркивать места с ошибками. | ||
|
||
Если вы используете Linux, то у вас уже установлен компилятор g++ и вы можете скомпилировать программу с помощью него, а код набирать в любом текстовом редакторе, например [VScode](https://code.visualstudio.com/). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
name: Как мы проверяем ваши решения | ||
definitions: | ||
- name: Тесты | ||
description: > | ||
специальный код, проверяющий программы на корректность, сверяя правильный | ||
результат с реальным. | ||
tips: | ||
- | | ||
[g++](https://gcc.gnu.org/onlinedocs) | ||
- | | ||
[TDD](https://ru.wikipedia.org/wiki/Разработка_через_тестирование) | ||
- | | ||
[Сообщество Хекслета в Telegram](https://t.me/hexletcommunity/12) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Это задание не связано с уроком напрямую. Но будет полезным потренироваться с выводом на экран. Выведите на экран *What Is Dead May Never Die*. |
Oops, something went wrong.