• XSS.stack #1 – первый литературный журнал от юзеров форума

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

network work

HDD-drive
Пользователь
Регистрация
11.07.2024
Сообщения
47
Реакции
5
Гарант сделки
3
Автор network work
Источник https://xss.pro


Всем доброго вечера друзья , я решил создать статью где объясню что такое с++ , для чего он предназначен и т.п. Всего думаю будет 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++:
#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++:
#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++:
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++:
#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++:
#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 .

Благодарю вас за прочитанную мной статью я старался объяснить все как можно проще .Если проявите хотя-бы какой-то актив то думаю напишу еще статью на тему изучения с++ но уже более серьезный скрипт ( а так же предлагайте свои тематики для написание скриптов , был бы очень рад )
 
Последнее редактирование модератором:
Модераторы , будьте любезны .Перенести статью в другой раздел . статью писал поздно ночью , ошибся ¯\_(ツ)_/¯
 
Вчера в планах было написать статью для python а если быть точнее крипто обменик в тг + работа по апи ,но потом вспомнил что готовил материал для ++ . извиняюсь за ошибку
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Давайте разберем скрипт
называть это скриптом некорректно. Скрипт всё таки интерпретируется, а не компилируется.
int count_characters(const string& str, bool ignore_spaces) { int count = 0; for (char ch : str) { if (ignore_spaces && ch == ' ') { continue; } count++; } return count; }
писать велосипед, имея решение в стандартной библиотеке плохое решение. std::string::size если считать пробелы. Если не считать пробелы, то count_if(x.begin(), x.end(), [](char s) {return s != ' ';});
Вообще <algorithm> может решить большое количество рутиных задач. В большинстве случаев гораздо быстрее, чем своим велосипедом.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Модераторы , будьте любезны .Перенести статью в другой раздел . статью писал поздно ночью , ошибся ¯\_(ツ)_/¯
Нормально не ошибся, пусть питонисты прочувствуют так сказать всю тягость нормального программирования.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх