What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Изучаем с++ и разбираем простые программы 1/5

network work

Light Weight
Депозит
$0
Всем доброго вечера друзья , я решил создать статью где объясню что такое с++ , для чего он предназначен и т.п. Всего думаю будет 5 статей , но на данный момент 1/5 будем самой легкий . А так же я покажу пару простых скриптов с объяснением кода. Присаживайтесь поудобнее а мы начинаем , хорошего чтения !!!!

Статья будет делиться на 3 этапов
1.Введение - что такое с++ , кто создал этот язык , для чего предназначен и не только
2. Практика - примеры простых скриптов + объяснения кода
3. Заключение

Введение в с++

С++ - это мощный язык программирование который славиться своей гибкостью (на этом языке можно написать буквально все ) и эффективностью ,что сделало его популярным среди программистов .А так же на этом языке были написаны такие программы как WinRAR,Blender,Firefox,Coogle Chrome и т.п .Создатель данного языка является не мало известный Бьерн Страуструпомв .Данный язык был создан как расширение языка С с добавлением многих возможностей .Про этот язык можно писать буквально вечно , более подробно можете узнать в интернете

Подходящий компиляторы для с++ , я подобрал пару компиляторов для удобного кодинга
1.GNU Compiler Collection - это свободный компилятор .Он поддерживает не только с++ а так же еще множество языков программирования .

Плюсы данного компилятора - Высокая оптимизация кода , Открытый исходный код , Обширная поддержка языков .

Минусы компилятора - Иногда может потребовать время для компиляции большой программы

2.
MSVC (Microsoft Visual c++) - Данный компилятор был создан компанией Microsoft ,компилятор удобный и практичный
Плюсы - поддерживает последние стандарты с++ , проста в использовании , да и сам по себе компилятор приятный

Минусы - Если писать большие проекты то может долго компилировать

Эти компиляторы я сам использовал и могу сказать с уверенностью что они удобны в работе и особо проблем у меня с этими компиляторами не возникало
Практика

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


1722163168083.png


C++: Скопировать в буфер обмена
Code:
#include <iostream>
#include <cstdlib>
#include <ctime>  

using namespace std;

int generate_temperature(const string& season) {
    int temperature;

    if (season == "лето") {
        temperature = rand() % 35;  
    } else if (season == "зима") {
        temperature = -1 * (rand() % 25);  
    } else if (season == "весна" || season == "осень") {
        temperature = -15 + (rand() % 35);  
    } else {
        throw invalid_argument("Неизвестный сезон года :( Попробуйте еще разок ");
    }

    return temperature;
}

int main() {
    srand(static_cast<unsigned int>(time(0)));

    string season;
    cout << "Какое сейчас время года ? ";
    cin >> season;

    try {
        int temperature = generate_temperature(season);
        cout << "Я думаю на улице у вас  " << season << ". А температору +- : " << temperature << "°C." << endl;
    } catch (const invalid_argument& e) {
        cerr << e.what() << endl;
    }

    return 0;
}

Давайте разберем скрипт

C++: Скопировать в буфер обмена
#include <iostream>
- это первая строчка кода отвечает за ввод и вывод .Если простыми словами то эта библиотека дает возможность работать с потоками ввода и вывода cin и cout. Которые предназначены для чтения данных и вывода на экран

C++: Скопировать в буфер обмена
#include <cstdlib>
- В данном случаи я подключил эту библиотеку для работы с функцией генерации случайных чисел .А так если говорить о библиотеке в общих чертах то она содержит функции для работы с памятью и управления программой

C++: Скопировать в буфер обмена
#include <ctime>
- В данном скрипте это библиотека представляет функции для получения текущего времени , которая нужна для генератора случайных чисел

C++: Скопировать в буфер обмена
using namespace std;
- это строчка облегчает работу написание той же программы . если не прописать данную строчку то нам придётся буквально везде прописывать std:: перед какой то функцией . Можно писать "cout" вместо "std::cout" и т.п

C++: Скопировать в буфер обмена
int generate_temperature(const string& season) {
- данная строчка объявляет функцию "generate_temperature" которая будет возвращать целое число а так же принимать один аргумент "const string& season" (const[/CODE] - означает что функция не изменит переданную строку можно сказать , а string& дает возможность избежать копирования строки и делает все передачу более эффективной ).Если простыми словами то это строчка говорит о том что функция generate_temperature будем принимать строку сезона (лето , зима , осень , лето ) и будет возвращать число

C++: Скопировать в буфер обмена
int temperature;
- строчка объявляет переменную "temperature" которая будет отвечать за хранения сгенерированного числа ( в данном случаи температуру )

C++: Скопировать в буфер обмена
if (season == "лето") {
- проверяет если человек ввел в нашем случаи время года "лето" то продолжает работу кода

C++: Скопировать в буфер обмена
temperature = rand() % 35;
- данная команда отвечает за генерацию случайного числа от 0 до 35 и присваивает готовое число к переменной "temperature".

C++: Скопировать в буфер обмена
} else if (season == "зима") {
- данная строчка отвечает за проверку слова "зима". Если юзер ввел слово зима то скрипт выполняет дальнейшие действия .

C++: Скопировать в буфер обмена
temperature = -1 * (rand() % 25);
- Команда генерирует случайное число от 0 до 25 а затем умножает его на -1 чтобы в конце получить реалистичную температуру

C++: Скопировать в буфер обмена
} else if (season == "весна" || season == "осень") {
- команда отвечает за проверку слова "осень,весна" .Если данные слова ввел юзер продолжает работу кода

C++: Скопировать в буфер обмена
temperature = -10 + (rand() % 35);
- генерирует число от 0 до 35 и прибавляет -10 чтобы получать реалистичную температуру

C++: Скопировать в буфер обмена
} else {
- если юзер не ввел ни одно время года то сркипт запустит нижний код

C++: Скопировать в буфер обмена
throw invalid_argument("Неизвестный сезон года :( Попробуйте еще разок ");
- это строчка будет выведана в консоль если произойдёт какая то ошибка.

C++: Скопировать в буфер обмена
return temperature;
- возвращает значения переменной "temperature"

C++: Скопировать в буфер обмена
int main() {
- строчка предназначена для начала основной функции скрипта .

C++: Скопировать в буфер обмена
srand(static_cast<unsigned int>(time(0)));
- Инициализирует генератор случайных чисел с использованием текущего времени , это позволяет скрипту получить разные числа при каждом запуске скрипта

C++: Скопировать в буфер обмена
string season;
- объявления переменную season , для чего она ?Все проста , она будет хранить введенное пользователем значение .

C++: Скопировать в буфер обмена
cout << "Какое сейчас время года ? ";
- выводит в консоль вопрос , чтобы пользователь ввел свой ответ

C++: Скопировать в буфер обмена
cin >> season;
- читает веденное слово или число пользователя и сохраняет ответ в выше сказанную переменную "season"

C++: Скопировать в буфер обмена
try {
- Если простыми словами то сейчас разберем код который предназначен для исключений

C++: Скопировать в буфер обмена
int temperature = generate_temperature(season);
- вызывает в работу функцию generate_temperature передавая введённые данные юзера и сохраняет как итог все в переменную temperature

C++: Скопировать в буфер обмена
cout << "Я думаю на улице у вас " << season << ". А температору +- : " << temperature << "°C." << endl;
- Выводит в консоль окончательное сообщения ( текущий сезон и с рандом температура )

C++: Скопировать в буфер обмена
} catch (const invalid_argument& e) {
- строка отвечает за обработку исключение invalid_argument

C++: Скопировать в буфер обмена
cerr << e.what() << endl;
- выводит сообщение об ошибке на привычный поток ошибок cerr

C++: Скопировать в буфер обмена
return 0;
- Завершает данный скрипт и возвращает 0 , что как правило показывает успешное завершение


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


1722163259850.png



Сам код

C++: Скопировать в буфер обмена
Code:
#include <iostream>
#include <string>

using namespace std;

int count_characters(const string& str, bool ignore_spaces) {
    int count = 0;
    for (char ch : str) {
        if (ignore_spaces && ch == ' ') {
            continue;
        }
        count++;
    }
    return count;
}

int main() {
    string input;
    char choice;

    cout << "Vvedite stroky ";
    getline(cin, input);

    cout << "Ignor probel ? (y/n): ";
    cin >> choice;

    bool ignore_spaces = (choice == 'y' || choice == 'Y');

    int char_count = count_characters(input, ignore_spaces);
    cout << "Kol-vo simvolov v stroke " << char_count << endl;

    return 0;
}

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

C++: Скопировать в буфер обмена
#include <iostream>
- включает библиотеку ввода и вывода .Если своими словами библиотека позволяет работать с такими командами как std::cout и std::cin

C++: Скопировать в буфер обмена
#include <string>
- Включает библиотеку для работы со строками типа string

C++: Скопировать в буфер обмена
using namespace std;
- Дает возможность без необходимости писать чуть что std:: ( чуть подробнее описал в первом скрипте )

C++: Скопировать в буфер обмена
int count_characters(const string& str, bool ignore_spaces) {
- Можно сказать строчка объявляет функции которую принимает строку "str" и логическое значения ignore_spaces

C++: Скопировать в буфер обмена
int count = 0;
- создание переменной "count" которая будет предназначена для хранение в нашем случаи количество символов .

C++: Скопировать в буфер обмена
for (char ch : str) {
- строчка можно сказать запускает цикл for-each который будет проходить по каждому символу строки "str". Что такое цикл for-each ? for-each - это цикл который дает возможность проходить по элементам "сейфа"(например , строки ,список , массивы ) без использования индексов .А так же он упрощает работу , делая код более восприимчивым

C++: Скопировать в буфер обмена
Code:
if (ignore_spaces && ch == ' ') {
continue;
}
- если "ignore_spaces" равен "true" а так же символов является пробелом , пропускает этот символ с помощью "continue"

C++: Скопировать в буфер обмена
count++;
- строчка можно сказать увеличивает значение count на 1 для тех символов которые не были пропущены

C++: Скопировать в буфер обмена
return count;}
- код возвращает итоговое количество символов

C++: Скопировать в буфер обмена
int main() {
- Можно сказать объявляет функцию main , которая является началом входа в основную программу

C++: Скопировать в буфер обмена
string input; char choice;
- строчка объявляет переменные "input" для хранения введённой строки .А "choice" для хранение ответа пользователя

C++: Скопировать в буфер обмена
cout << "Vvedite stroky "; getline(cin, input);
- "cout" выводит сообщение в консоль с просьбой вести данные ( в нашем случаи строчку) .А getline(cin, input); - можно сказать считывает всю введенную строку с пробелами и сохраняет все при все в переменную "input"

C++: Скопировать в буфер обмена
cout << "Ignor probel ? (y/n): "; cin >> choice;
- "cout" выводит сообщение юзеру с просьбой указать стоит ли игнорировать пробелы или нет

C++: Скопировать в буфер обмена
>> choice;
- считывает ответ юзера ( в нашем случаи y или n) и сохраняет в переменной "choice"

C++: Скопировать в буфер обмена
bool ignore_spaces = (choice == 'y' || choice == 'Y');
- строчка можно сказать присваивает "true" переменной "ignore_spaces" если "choise" равен y или Y .В худшем случаи присваивается "false"

C++: Скопировать в буфер обмена
int char_count = count_characters(input, ignore_spaces);
- вызывает функцию count_characters ,а так же передает можно сказать все данные "ignore_spaces" и сохраняет результат в переменной char_count
cout << "Kol-vo simvolov v stroke " << char_count << endl;[/CODE] - Выводит окончательные данные (В нашем случаи итоговую цифру)

C++: Скопировать в буфер обмена
return 0;} -
как и выше сказал , возвращает 0 , что показывает успешное завершение скрипта


Давайте разберем сркипт который будет спрашивать у юзера время а затем запускать обратный отсчет
1722163323925.png



C++: Скопировать в буфер обмена
Code:
#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

void display_time(int hours, int minutes, int seconds) {
    cout << (hours < 10 ? "0" : "") << hours << ":"
         << (minutes < 10 ? "0" : "") << minutes << ":"
         << (seconds < 10 ? "0" : "") << seconds << "\r";
    cout.flush();
}

void countdown(int hours, int minutes, int seconds) {
    while (hours > 0 || minutes > 0 || seconds > 0) {
        display_time(hours, minutes, seconds);
        this_thread::sleep_for(chrono::seconds(1));
        if (seconds > 0) {
            seconds--;
        } else {
            seconds = 59;
            if (minutes > 0) {
                minutes--;
            } else {
                minutes = 59;
                if (hours > 0) {
                    hours--;
                }
            }
        }
    }
    display_time(0, 0, 0);
    cout << "Обратный отсчет завершен!" << endl;
}

int main() {
    int hours, minutes, seconds;
    cout << "Введите количество часов: ";
    cin >> hours;
    cout << "Введите количество минут: ";
    cin >> minutes;
    cout << "Введите количество секунд: ";
    cin >> seconds;

    countdown(hours, minutes, seconds);

    return 0;
}

Давайте разберем довольно легкий скрипт

C++: Скопировать в буфер обмена
#include <iostream>
- подключаем библиотеку для работы с вводом и выводом

C++: Скопировать в буфер обмена
#include <thread>
- Данная библиотека нужна для работы с потоками

C++: Скопировать в буфер обмена
#include <chrono>
- А эту библиотеку мы подключили для работы с временем

C++: Скопировать в буфер обмена
using namespace std;
- Данная строчка дает возможность как и говорил выше не писать std:: что очень удобно придумано

C++: Скопировать в буфер обмена
void display_time(int hours, int minutes, int seconds) {
- строчка отвечает за объявление функции которая будет отображать время в нужном нам формате

C++: Скопировать в буфер обмена
cout << (hours < 10 ? "0" : "") << hours << ":"
- Если количество часов меньше 10 то добавляется ведущий ноль перед числом а затем скрипт выводит двоеточие .Это все сделано для приятной работы юзера

C++: Скопировать в буфер обмена
<< (minutes < 10 ? "0" : "") << minutes << ":"
- Если количество минут меньше 10 то добавляется ведущий ноль перед числом а затем выводится символ возврата , чтобы перезаписать текущую строку на экране

C++: Скопировать в буфер обмена
<< (seconds < 10 ? "0" : "") << seconds << "\r";
- Если количество секунд меньше 10 то добавляется ведущий ноль перед числом а затем скрипт выводит двоеточие .
cout.flush();
}

C++: Скопировать в буфер обмена
cout.flush();
- данная строчка можно сбрасывает буфер вывода , чтобы данные сразу отобразились на экране

C++: Скопировать в буфер обмена
void countdown(int hours, int minutes, int seconds) {
- строчка отвечает можно сказать за начало функции выполнения обратного отсчета

C++: Скопировать в буфер обмена
while (hours > 0 || minutes > 0 || seconds > 0)
- цикл будет продолжаться пока не закончиться время (если простыми словами то обратный отсчет будет идти до тех пор пока не закончиться время )

C++: Скопировать в буфер обмена
display_time(hours, minutes, seconds);
- функция вызывается для отображении текущего времени для юзера

C++: Скопировать в буфер обмена
this_thread::sleep_for(chrono::seconds(1));
- строчка отвечает за задержку выполнения программы в размере одной секунды

C++: Скопировать в буфер обмена
if (seconds > 0) { seconds--; }
- если кол во секунд больше нуля то скрипт уменьшит количество секунд

C++: Скопировать в буфер обмена
else { seconds = 59; if (minutes > 0) { minutes--; } else { minutes = 59; if (hours > 0) { hours--; } } }
- тут чуть труднее , если кол во секунд равно нулю оно сбрасывается на 59 а так скрипт уменьшает количество минут .Если кол во минут тоже равно нулю то оно так же сбрасывается на 59 и уменьшает количество часов

C++: Скопировать в буфер обмена
display_time(0, 0, 0);
- показывает финальное время ( 00:00:00)

C++: Скопировать в буфер обмена
cout << "Обратный отсчет завершен!" << endl;
- дает знать если обратный отсчет указанного юзером времени подошел к концу

C++: Скопировать в буфер обмена
int hours, minutes, seconds;
- объявляем можно сказать переменные для хранения количество часов минут и секунд

C++: Скопировать в буфер обмена
cout << "Введите количество часов: "; cin >> hours;
- запрашивает у пользователя количество часов и сохраняет в переменную "hours "

C++: Скопировать в буфер обмена
cout << "Введите количество минут: "; cin >> minutes;
- Так же запрашивает у пользователя количество уже минут и сохраняет в переменную "minutes"

C++: Скопировать в буфер обмена
cout << "Введите количество секунд: "; cin >> seconds;
- тоже самое делается только уже с секундами а так же все сохраняется в переменную "seconds"

C++: Скопировать в буфер обмена
countdown(hours, minutes, seconds);
- строчка вызывает функцию countdown для выполнения обратного отсчета

C++: Скопировать в буфер обмена
return 0; -
завершение данной программы

Последний бонусный скрипт будет генерировать для вас пароли .Я решил его добавить чтобы вы чуть лучше поняли работу генерации в с++
1722170810307.png


C++: Скопировать в буфер обмена
Code:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;

string generate_password(int length) {
    const string characters = "qwertyuiop[asdfghjkl;'zxcvbnm,./123456789";
    string password = "";

    srand(static_cast<unsigned int>(time(0)));

    for (int i = 0; i < length; ++i) {
        int index = rand() % characters.size();
        password += characters[index];
    }

    return password;
}

int main() {
    int length;
    cout << "Введите длину пароля: ";
    cin >> length;

    if (length < 1) {
        cout << "Длина пароля должна быть положительным числом." << endl;
        return 1;
    }

    string password = generate_password(length);
    cout << "Сгенерированный пароль: " << password << endl;

    return 0;
}

C++: Скопировать в буфер обмена
#include <iostream>
- - это библиотека отвечает за подключение ввода/вывода

C++: Скопировать в буфер обмена
#include <string>
- библиотека для работы со строками

C++: Скопировать в буфер обмена
#include <cstdlib>
- в данном случаи это библиотека отвечает за генерацию случайных чисел

C++: Скопировать в буфер обмена
#include <ctime>
- а это библиотека для работы со временем

C++: Скопировать в буфер обмена
using namespace std;
- а это как и говорил дает возможность не писать постоянно ::std перед какой-то функцией . Проще говоря упрощает написание кода

C++: Скопировать в буфер обмена
string generate_password(int length)
- строчка можно сказать объявляет функцию которая принимает целое число "length" и возвращает строку

C++: Скопировать в буфер обмена
const string characters = "qwertyuiop[asdfghjkl;'zxcvbnm,./123456789";
- определяет строку characters в которой принципе содержится все возможные буквы и цифры для пароля .(вы можете изменить символы для определенной генерации )

C++: Скопировать в буфер обмена
string password = ""
- если простыми слова то в эту строчку будет записываться сгенерированный пароль

C++: Скопировать в буфер обмена
srand(static_cast<unsigned int>(time(0)));
- отвечает за генерацию случайных чисел для разнообразия

C++: Скопировать в буфер обмена
for (int i = 0; i < length; ++i)
- этот цикл выполняет генерацию пароля нужной длины а сама длина пароля храниться в length

C++: Скопировать в буфер обмена
int index = rand() % characters.size();
- генерирует случайное число которое всегда находиться в пределах от 0 до длины строки characters

C++: Скопировать в буфер обмена
password += characters[index]
- characters добавляет случайный символ в строчку password

C++: Скопировать в буфер обмена
return password;
- возвращает уже сгенерированный пароль

C++: Скопировать в буфер обмена
int length;
- объявляет можно сказать переменную length которая будет хранить сам пароль

C++: Скопировать в буфер обмена
cout << "Введите длину пароля: ";
- выводит в коносль запрос для ввода длины пароля

C++: Скопировать в буфер обмена
cin >> length;
- читает и сохраняет выше введенный запрос

C++: Скопировать в буфер обмена
if (length < 1)
- проверка пароля на длину меньше чем один

C++: Скопировать в буфер обмена
cout << "Длина пароля должна быть положительным числом." << endl;
- если что то пошло не так выводит ошибку в консоль

C++: Скопировать в буфер обмена
return 1;
- завершает программу с кодом ошибки 1 ( безуспешная выполнение программы )

C++: Скопировать в буфер обмена
string password = generate_password(length);
- включает в работу generate_password с длинной length и сохраняет результат в переменную password

C++: Скопировать в буфер обмена
cout << "Сгенерированный пароль: " << password << endl;
- выводит на экран юзера уже готовый пароль

C++: Скопировать в буфер обмена
return 0;
- завершает программу и означает успех выполнение


Данные скрипты будет полезны для начинающих в с ++ , я старался как можно проще и понятнее все объяснить. Если вы заинтересованы в изучении ++ то я вам рекомендую тщательно изучить код и постараться изменить его. А если у вас возникнуть вопросы то я всегда смогу их ответить тут или в тг

Заключения
.
Данная статья была создана с целью ознакомления вас с языком с++ .Я постарался объяснить простые скрипты на живом примере , и так . Давайте подведем итоги .Что такое с ++ ? с++ это язык программирования который славиться своей гибкостью и многофункциональностью .Данный язык был создан как улучшенная версия можно сказать языка C .На плюсах было написано много очень интересных и известных программ . Какое направления больше всего подходит для данного языка ? Сам по себе с++ больше подходит для каких то серьезных проектов что не скажешь о том же python .На плюсах можно написать буквально все начиная от системного программного обеспечение заканчивая финансовыми системами или играми .В целом об этом языке можно говорить вечность потому что он действительно мощный и является одним из настолько гибких языков .Стоит ли изучать данный язык ? Ответ зависит от вашего направления если вы стремитесь к успехам в сфере кодинга то однозначно да .А если вы хотите попробовать себя в кодинге то думаю не стоит начинать с данного языка , лучше изучите тот же python .

Благодарю вас за прочитанную мной статью я старался объяснить все как можно проще .Если проявите хотя-бы какой-то актив то думаю напишу еще статью на тему изучения с++ но уже более серьезный скрипт ( а так же предлагайте свои тематики для написание скриптов , был бы очень рад )
 
Модераторы , будьте любезны .Перенести статью в другой раздел . статью писал поздно ночью , ошибся ¯\_(ツ)_/¯
 
Top