ProgrammingFA
785 subscribers
5 photos
3 files
19 links
Все про программирование. Статьи, видео, обсуждения.

Бот - @ProgrammingFAbot
Чат - @ProgrammingFAchat
По вопросам и рекламе - @abinba
Download Telegram
Channel created
Channel name was changed to «ProgrammingFA»
Какой у вас опыт в программировании?

▪️ 88% (104) Я начинающий
🔸🔸🔸🔸🔸🔸🔸🔸

▫️ 8% (10) Я любитель


▪️ 2% (3) Я продвинутый

👥 117 - всего голосов
Какой язык программирования вы бы хотели изучать?

▪️ 13% (14) C++

▫️ 6% (7) Java

▪️ 7% (8) Javascript

▫️ 0% (1) C#

▪️ 65% (70) Python

▫️ 3% (4) PHP

▪️ 0% Ruby

▫️ 2% (3) Другой
👥 107 - всего голосов
Вот и начало!

Начиная курс по программированию на C++, важно установить на ваш компьютер нужные программы.

Если вы любитель или продвинутый программист, можете смело проигнорировать следующую статью. Но если вы не знаете, с чего начать, советуем обязательно прочитать эту небольшую подборку сред разработки, которые, по нашему мнению, являются оптимальными вариантами для начинающих разработчиков.

Позже ждите первый урок, где вы напишите свою первую (а может, и не первую) программу на C++ 🔥

При возникновении вопросов, пишите в наш чат, ссылку на которую вы можете найти наверху ⬆️

Вот и сама статья
👍2
УРОК №1 - Hello, I'm Rayb1t

Итак, надеюсь, вы установили нужную программу / среду разработки и готовы начать работу. Чтобы начать программировать, вам необходимо создать новый проект / файл на C++, сохранить его в определенном каталоге.

Рекомендую создать отдельную папку с вашими программами, чтобы вы не мучились искать ваши предыдущие программы. Начнем с простого. Напишите следующий код. (вместо Raybit вставьте своё имя)

1 #include <iostream> 
2 #include <cstdlib>
3 using namespace std;
4
5 int main()
6 {
7 cout << "Hello, I'm Rayb1t!" << endl;
8 system("pause");
9 }

Ну, а теперь давайте разберемся во всем этом.
[Очень важно не полениться и внимательно прочитать все]

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

Строка #include <iostream>, будет заменена содержимым файла «iostream.h», который находится в стандартной библиотеке языка и отвечает за ввод и вывод данных (в этом случае, выводим "Hello, I'm Rayb1t!") на экран.

#include <cstdlib> подключает стандартную библиотеку языка С. Это подключение необходимо для работы функции system (строка 8).

Содержимое третьей строки — using namespace std; указывает на то, что мы используем по умолчанию пространство имен с названием «std».

Все то, что находится внутри фигурных скобок функции int main() {} будет автоматически выполняться после запуска программы.

Строка cout << "Hello, I'm Rayb1t!" << endl; говорит программе выводить сообщение с текстом «Hello, I'm Rayb1t» на экран.

Оператор cout предназначен для вывода текста на экран командной строки. После него ставятся две угловые кавычки (<<) - она может быть использована для связи разных строк. То есть, допустимо написать:

cout « "Hello, I'm " « "Rayb1t!" « endl;

И будет точно такой же результат.

Далее идет текст, который должен выводиться. Он помещается в двойные кавычки. Оператор endl переводит строку на следующую строку.

ВАЖНО! В конце каждой инструкции ставится точка с запятой [ ; ]

Запустите программу и посмотрите результат. Программа должна вывести Hello, I'm Rayb1t! Если нет, то скорее всего вы допустили ошибку в коде. Перепроверьте код, проверьте наличие точки с запятой после инструкций (очень часто ученики пропускают её и ломают голову, в чем проблема).

Заскриньте свой результат и отправьте в чат, чтобы все увидели, как же вас все-таки зовут и что вы смогли, да-да, смогли создать программу на C++! Хоть и самую простую, но все же, это первые шаги!

При возникновении вопросов - вас ждет наш приветливый чат.
УРОК №2 - Переменные, типы данных, ввод данных. Пишем простой калькулятор!

Переменная — это «ячейка» оперативной памяти компьютера, в которой может храниться какая-либо информация. Её значение может меняться на протяжении выполнения программы.

В программировании переменная, как и в математике, может иметь название, состоящее из одной латинской буквы, но также может состоять из нескольких символов, целого слова или нескольких слов.

В языке С++ все переменные имеют определенный тип данных. Например, переменная, имеющая целочисленный тип не может содержать ничего кроме целых чисел, а переменная с плавающей точкой — только дробные числа.

Основные типы данных в C++
int
— целочисленный тип данных. То есть, в переменных такого типа содержатся целые числа.

float — тип данных с плавающей запятой.

double — тип данных с плавающей запятой двойной точности. Такой тип может принимать большие значения, чем float. Соотвественно, она занимает больше памяти.

char — символьный тип данных. Может содержать один любой символ.

bool — логический тип данных. Может принимать значения true (истина) - 1 или false (ложь) - 0.

Также есть тип string (строка), для которой нужно подключать библиотеку string (#include <string>). Но про неё в следующих уроках.

Объявление переменной
Объявление переменной в C++ происходит таким образом: сначала указывается тип данных для этой переменной, а затем название этой переменной.
Тип данных присваивается переменной при ее объявлении или инициализации.

На заметку
Вы можете оставлять в коде комментарии, чтобы тот, кто читал ваш код, понимал, что какой-то фрагмент программы делает. Строчные комментарии можно оставить, поставив
// и после него писать свой комментарий. Большие части можно закомментировать, используя /* ваш код */.

Как говорил мой любимый учитель, важно уметь читать код. См. комментарии в коде.

int a; // объявляем переменную a целого типа. 

float b; // объявляем переменную b типа данных с плавающей запятой.

double halloween = 31.18; // присваеваем переменной halloween типа double значение 31.18

char d = 's'; // присваеваем переменной d типа char значение 's'

bool
wannasleep24 = true;
// присваеваем переменной wannasleep24 типа bool значение true (истина)

Приступим к калькулятору:

1 #include <iostream> 
2 using namespace std;
3
4 int main()
5 {
6 setlocale(LC_ALL, "Russian"); // функция, позволяющая вывод на русском языке

7 int a, b; // объявление переменных a и b целочисленного типа

8 cout << "Введите первое число: ";
9 cin >> a; // ввод переменной a
10
11 cout << "Введите второе число: ";
12 cin >> b; // ввод переменной b
13
14 int c = a + b; // объявление переменной c, принимающей значение a + b, которые были введены пользователем

15 cout << "Сумма чисел = " << c << endl;
16
17 return 0;
18 }

Итак, давайте вникнем в наш код.
Функция setlocale (строка 6) предназначена для того, чтобы вывод, который осуществляется в строчках 8, 11, 15 на русском языке, был отображен. При отсутвии функции вместо текста будут непонятные иероглифы, так как по умолчанию нужно выводить на английском.

Дальше, int a, b; Из этого можно догадаться, что можно объявлять несколько переменных за один раз, написав их тип, как общий. Но при этом инициализировать (присваивать какое-либо значение) переменные нужно отдельно.

cin, как вы поняли, это ввод данных. При cin мы ставим >>, а не <<, как в cout. Сам в начале часто ошибался, поэтому не путать!
С её помощью мы делаем так, чтобы значение переменной вводил сам пользователь.

Вот и все! Мы сделали программу, которая вычисляет сумму двух чисел! Теперь если вам нужно будет вычислить сумму двух чисел, можете смело запускать свою программу и вычислять всё там! (легче просто открыть калькулятор, знаю, но нужно же свои программы как-то использовать😂🤷‍♂️)
2
Домашнее задание
Создайте программу, которая будет выполнять 5 операций над введенными числами: сложение (a + b), вычитание (a - b), умножение (a * b), деление (a / b), возведение в квадрат (a*a, b*b). Отправьте результат вашей программы в чат, ссылку на которую вы можете найти наверху, если вы не являетесь участником чата. Удачи!
УРОК №3 - Конструкция ветвления в C++

В повседневной жизни мы часто сталкиваемся с ситуациями, когда нам нужно сделать выбор.

"Если я не выпью кофе утром, то буду весь день сонным".

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

Допустим, если введенное число четное, программа выводит "Число четное", в противном случае - "Число нечетное". Мы можем реализовать такой алгоритм на C++ с помощью конструкции ветвления - IF (если).

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 setlocale(LC_ALL, "Russian");
7 int num;
8
9 cout << "Введите произвольное число: ";
10 cin >> num;
11
12 int ost = num % 2; // знак % берет остаток от деления

13
14 if (ost == 0) {
15 cout << "Число четное" << endl;
16 } else {
17 cout << "Число нечетное" << endl;
18 }
19
20 return 0;
21 }

Оператор if служит для того, чтобы выполнить какую-либо операцию в том случае, когда условие является верным. Условная конструкция в С++ всегда записывается в круглых скобках после оператора if.

Внутри фигурных скобок указывается тело условия. Если условие выполнится, то начнется выполнение всех команд, которые находятся между фигурными скобками.

Заметьте, что в условии, при проверке равенства, мы используем оператор равенства (==), а не оператор присваивания (=), потому что мы не изменяем значение переменной при проверке, а сравниваем значение переменной с каким-то числом.

Здесь говорится: «Если переменная ost равна нулю, то есть если число делится на два (проверка четности) — вывести соответствующее сообщение. Иначе, вывести другое сообщение». else (иначе) выполняется, если условие (или несколько условий) ложно.

Несколько условий можно определить с помощью связки else if. Рассмотрим такую конструкцию:

if (num < 10) {  // Если введенное число меньше 10.
cout << "Это число меньше 10." << endl;
} else if (num == 10) {
cout << "Это число равно 10." << endl;
} else { // иначе
cout << "Это число больше 10." << endl;
}

Если после оператора if, else или их связки else if должна выполняться только одна команда, то фигурные скобки можно не ставить.

if (num < 10)
cout << "Это число меньше 10." << endl;
else if (num == 10)
cout << "Это число равно 10." << endl;
else
cout << "Это число больше 10." << endl;

И будет точно такой же результат.
Такой метод записи выглядит более компактно.

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

Если при выполнении условия нам требуется выполнить более одной команды, то фигурные скобки необходимы.
Теперь давайте внедрим конструкцию if в наш калькулятор с прошлого урока. Нам нужно сделать так, чтобы пользователь сам вводил, какую операцию над числами он хочет сделать. Здесь нам поможет оператор if.

1 #include <iostream>
2 #include <cmath> // библиотека, нужная для работы функции pow - возведение в степень

3 using namespace std;
4
5 int main() {
6 setlocale(LC_ALL, "Russian");
7
8 double a, b, result;
9 bool error = false; // переменная типа bool для проверки ошибки

10 char s;
11
12 cout << "Введите первое число: ";
13 cin >> a;
14
15 cout << "Введите второе число: ";
16 cin >> b;
17
18 cout << "Введите операцию: ";
19 cin >> s;
20
21 if (s == '+') // char мы проверяем с помощью одинарных ковычек

22 result = a + b;
23 else if (s == '-')
24 result = a - b;
25 else if (s == '*')
26 result = a *b;
27 else if (s == '/')
28 result = a/b;
29 else if (s == '^') // ^ - возведение в степень

30 result = pow(a, b);
31 else
32 error = true;
33
34 if (!error) // !error можно записать, как error == false

35 cout << "Результат = " << result << endl;
36 else
37 cout << "Ошибка!" << endl;
38
39 return 0;
40 }

Итак, мы написали наш умный калькулятор, можете похвалить себя, если ваша программа заработала, а если нет, то...

else
tryAgain();
Домашняя работа
Проявите свою фантазию и создайте программу с несколькими условиями (например, можно создать тесты). Результат скидывайте в наш чат.
УРОК №4 - Циклы в C++ (FOR)

Внимание! Одна из самых важных тем! Просим делать домашку!

Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. В этом уроке мы научимся программировать циклы на C++, после чего посчитаем сумму всех чисел от 1 до 1000.

ЦИКЛ for

Если
мы знаем точное количество действий (итераций) цикла, то можем использовать цикл for. Синтаксис его выглядит примерно так:

for (действие до начала цикла;
условие продолжения цикла;
действия в конце каждой итерации цикла) {
инструкция цикла;
инструкция цикла 2;
инструкция цикла N;
}

Итерацией цикла называется один проход этого цикла.

Существует частный случай этой записи, который мы сегодня и разберем:

for (счетчик = значение; счетчик < значение; шаг цикла) {
тело цикла;
}

Счетчик цикла — это переменная, в которой хранится количество проходов данного цикла.

Получается, цикл for работает по следующему алгоритму:

1) Сначала присваивается первоначальное значение счетчику, после чего ставится точка с запятой.

2) Затем задается конечное значение счетчика цикла. После того, как значение счетчика достигнет указанного предела, цикл завершится. Снова ставим точку с запятой.

3) Задаем шаг цикла. Шаг цикла — это значение, на которое будет увеличиваться или уменьшаться счетчик цикла при каждом проходе.

Напишем программу, которая будет считать сумму всех чисел от 1 до 1000.

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 setlocale(LC_ALL, "Russian");
7 int sum = 0; // сумма чисел
8 int i; // счетчик цикла
9 for (i = 1; i <= 1000; i++) // задаем начальное значение 1, конечное 1000 и задаем шаг цикла +1.

10 { // помните, что их можно опустить, если операция одна

11 sum = sum + i;
12 }
13 cout << "Сумма чисел от 1 до 1000 = " << sum << endl;

14 return 0;
15 }

Если мы скомпилируем этот код и запустим программу, то она покажет нам ответ: 500500. Это и есть сумма всех целых чисел от 1 до 1000. Если считать это вручную, понадобится очень много времени и сил. Цикл выполнил всю рутинную работу за нас.

Заметьте, что конечное значение счетчика я задал нестрогим неравенством ( <= — меньше либо равно), поскольку, если бы я поставил знак меньше, то цикл произвел бы 999 итераций, т.е. на одну меньше, чем требуется. Это довольно важный момент, т.к. здесь новички часто допускают ошибки, особенно при работе с массивами (о них будет рассказано в следующем уроке). Значение шага цикла я задал равное единице. i++ — это тоже самое, что и i = i + 1.

В теле цикла, при каждом проходе программа увеличивает значение переменной sum на i. Еще один очень важный момент — в начале программы я присвоил переменной sum значение нуля. Если бы я этого не сделал, программа выдала бы ошибку.

На следующем уроке рассмотрим другие виды циклов, а пока домашнее задание, которое, как ни иронично, почти никто не выполняет:

Составить программу, которая будет выводить сумму всех четных чисел от 1 до 100. Подсказка: можно выполнить это, используя только цикл for или же можно использовать конструкцию if в цикле for. По вашему желанию! Присылайте результат в наш чат и обращайтесь по вопросам!
Важная новость!

На следующей неделе запускаем нашего бота, который будет, как мы предполагаем, очень полезным для изучения языков программирования.

Задачи, компилятор, обсуждения и ваш собственный рейтинг! 🔥

Для поддержки канала и проекта:
998935097243, 998974230835 - Qiwi
УРОК №5 - Циклы в C++ (while, do while)

Когда мы не знаем, сколько итераций должен произвести цикл, нам понадобится цикл while или do...while. Синтаксис цикла while в C++ выглядит следующим образом.

while (Условие) {
Тело цикла;
}

Данный цикл будет выполняться, пока условие, указанное в круглых скобках является истиной. Решим ту же задачу с помощью цикла while. Хотя здесь мы точно знаем, сколько итераций должен выполнить цикл, очень часто бывают ситуации, когда это значение неизвестно.

Ниже приведен исходный код программы, считающей сумму всех целых чисел от 1 до 1000.

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 setlocale(LC_ALL, "Russian");

7 int i = 0; // инициализируем счетчик цикла.

8 int sum = 0; // инициализируем счетчик суммы.

9 while (i < 1000)
10 {
11 i++;
12 sum += i;
13 }
14 cout << "Сумма чисел от 1 до 1000 = " << sum << endl;

15 return 0;
16 }

После компиляции программа выдаст результат, аналогичный результату работы предыдущей программы. Но поясним несколько важных моментов. Я задал строгое неравенство в условии цикла и инициализировал счетчик i нулем, так как в цикле while происходит на одну итерацию больше, потому он будет выполняться, до тех пор, пока значение счетчика перестает удовлетворять условию, но данная итерация все равно выполнится. Если бы мы поставили нестрогое неравенство, то цикл бы закончился, когда переменная i стала бы равна 1001 и выполнилось бы на одну итерацию больше.

Теперь давайте рассмотрим по порядку исходный код нашей программы. Сначала мы инициализируем счетчик цикла и переменную, хранящую сумму чисел.

В данном случае мы обязательно должны присвоить счетчику цикла какое-либо значение, т.к. в предыдущей программе мы это значение присваивали внутри цикла for, здесь же, если мы не инициализируем счетчик цикла, то в него попадет «мусор» и компилятор в лучшем случае выдаст нам ошибку, а в худшем, если программа соберется — сегфолт практически неизбежен.

Затем мы описываем условие цикла — «пока переменная i меньше 1000 — выполняй цикл». При каждой итерации цикла значение переменной-счетчика i увеличивается на единицу внутри цикла.

Когда выполнится 1000 итераций цикла, счетчик станет равным 999 и следующая итерация уже не выполнится, поскольку 1000 не меньше 1000. Выражение sum += i является укороченной записью sum = sum + i.

После окончания выполнения цикла, выводим сообщение с ответом.
Цикл do while

Цикл do while очень похож на цикл while. Единственное их различие в том, что при выполнении цикла do while один проход цикла будет выполнен независимо от условия. Решение задачи на поиск суммы чисел от 1 до 1000, с применением цикла do while.

1 #include <iostream>
2 using namespace std;
3
4 int main ()
5 {
6 setlocale(0, "");
7 int i = 0; // инициализируем счетчик цикла.

8 int sum = 0; // инициализируем счетчик суммы.

9 do {// выполняем цикл.
10 i++;
11 sum += i;
12 } while (i < 1000); // пока выполняется условие.

13 cout << "Сумма чисел от 1 до 1000 = " << sum << endl;

14 return 0;
15 }

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

Попрактикуйтесь, поэкспериментируйте над собственными примерами задач.

Циклы — очень важная вещь, поэтому им стоит уделить побольше внимания.
Домашнее задание

1) Уровень: легкий
Вводится число. Преобразовать его в другое число, цифры которого будут следовать в обратном порядке по сравнению с введенным числом.

2) Уровень: средний (логика + тонкости языка)
Написать программу которая может вывести целые числа от 0 до 255 включительно при этом
МОЖНО воспользоваться только:
- одной переменной;
- одним оператором цикла (do while);
НЕЛЬЗЯ пользоваться:
- логическими операторами;
- условными операторами if, switch;
- тернарным оператором (?:).

3) Уровень: выше среднего
Дано число n. Переведите его в двоичную систему счисления.

Пишем в наш чат при возникновении вопросов
УРОК №6 - Массивы

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

Возьмем группу студентов из десяти человек. У каждого из них есть фамилия. Создавать отдельную переменную для каждого студента — не рационально. Создадим массив, в котором будут храниться фамилии всех студентов.

Пример инициализации массива

string students[10] = {
"Иванов", "Петров", "Сидоров", "Ахмедов", "Ерошкин", "Выхин", "Андеев", "Вин Дизель", "Картошкин", "Чубайс"
};

Массив создается почти так же, как и обычная переменная. Для хранения десяти фамилий нам нужен массив, состоящий из 10 элементов. Количество элементов массива задается при его объявлении и заключается в квадратные скобки.

Чтобы описать элементы массива сразу при его создании, можно использовать фигурные скобки. В фигурных скобках значения элементов массива перечисляются через запятую. В конце закрывающей фигурной скобки ставится точка с запятой.

Попробуем вывести первый элемент массива — фамилию студента Иванова.

1 #include <iostream>
2 #include <string>
3
4 int main()
5 {
6 std::string students[10] ={
7 "Иванов", "Петров", "Сидоров",
8 "Ахмедов", "Ерошкин", "Выхин",
9 "Андеев", "Вин Дизель", 10 "Картошкин", "Чубайс"
11 };
12 std::cout << students[0] << std::endl;

13 return 0;
14 }

Смотрим, компилируем, запускаем. Убедились, что вывелся именно «Иванов». Заметьте, что нумерация элементов массива в C++ начинается с нуля. Следовательно, фамилия первого студента находится в students[0], а фамилия последнего — в students[9].

В большинстве языков программирования нумерация элементов массива также начинается с нуля.

Попробуем вывести список всех студентов. Но сначала подумаем, а что если бы вместо группы из десяти студентов, была бы кафедра их ста, факультет из тысячи, или даже весь университет? Ну не будем же мы писать десятки тысяч строк с cout?

Конечно же нет! Мы возьмем на вооружение циклы, о которых были написаны 2 предыдущих урока.

1 #include <iostream>
2 #include <string>
3
4 int main()
5 {
6 std::string students[10] = {
7 "Иванов", "Петров", "Сидоров",
8 "Ахмедов", "Ерошкин", "Выхин",
9 "Андеев", "Вин Дизель", "Картошкин", "Чубайс"
10 };
11 for (int i = 0; i < 10; i++)
12 {
13 std::cout << students[i] << std::endl;
14 }
15 return 0;
16 }

Если бы нам пришлось выводить массив из нескольких тысяч фамилий, то мы бы просто увеличили конечное значение счетчика цикла — строку for (...; i < 10; ...) заменили на for (...; i < 10000; ...).

Заметьте что счетчик нашего цикла начинается с нуля, а заканчивается девяткой. Если вместо оператора строгого неравенства — i < 10 использовать оператор «меньше, либо равно» — i <= 10, то на последней итерации программа обратится к несуществующему элементу массива — students[10]. Это может привести к ошибкам сегментации и аварийному завершению программы. Будьте внимательны — подобные ошибки бывает сложно отловить.

Объявление массива без инициализации

string students[10];
// или
string teachers[5];

При создании статического массива, для указания его размера может использоваться только константа. Размер выделяемой памяти определяется на этапе компиляции и не может изменяться в процессе выполнения.
Домашнее задание

1) Уровень: легкий
Написать программу для зеркального переворота элементов в массиве ([1, 2, 3, 4] -> [4, 3, 2, 1]).

2) Уровень: средний
Найдите произведение элементов массива с нечетными номерами.

3) Уровень: выше среднего
Вывести на экран значения массива по спирали. Будем понимать под этим следующее. Если массив состоит из 100 элементов, то выводить по 10 элементов в каждой строке, при этом каждая вторая строка должна выводиться "задом наперед": сначала последние элементы строки, а затем первые.