Библиотека задач по C++ | тесты, код, задания
5.23K subscribers
576 photos
1 video
162 links
Задачи и тесты по C++ для тренировки и обучения.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/7a480301

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
-35% на курс по алгоритмам

🎄 Новый год начинается с подарков, а хороший подарок для себя — новые знания со скидкой 35%!

🌟«Алгоритмы и структуры данных» — 23 390 ₽ (вместо 35 990 ₽)

Полугодовая программа от преподавателей МФТИ и НИУ ВШЭ, которая включает в себя все необходимые знания по алгоритмам для работы.

Самое ценное — это развернутая обратная связь по всем вашим домашним заданиям, а также ссылки на полезные дополнительные материалы.

У вас не будет шансов не усвоить какие-то темы курса👌

🔥 Переходите и активируйте вводные занятия курсаhttps://proglib.io/w/ff97c30a
Напишите программу на C++, которая запрашивает у пользователя два числа и выполняет одну из простых математических операций: сложение, вычитание, умножение или деление. Пользователь должен вводить операцию в виде символа (+, -, *, /).

Подсказка: Используйте конструкцию switch для выполнения различных операций.

Решение:

1. Переменные: Определить переменные для чисел и операции.
2. Ввод данных: Запросить у пользователя два числа и символ операции.
3. Выбор операции: Использовать switch для определения типа операции.
4. Выполнение операции: Выполнить выбранную операцию, учитывая возможные ошибки (деление на ноль).
5. Вывод результата: Вывести результат операции.
6. Обработка ошибок: В случае ошибки вывести сообщение и завершить программу.
7. Возвращение значения: Вернуть 0 при успешном завершении, ненулевой код при ошибке.
program_invocation_name

Переменная program_invocation_name содержит имя, которое было использовано для запуска вызвавшей программы. Это значение совпадает с argv[0] в main(); отличие в том, что program_invocation_name — глобальная переменная.

Переменная program_invocation_short_name содержит базовую часть имени, которое было использовано для запуска вызвавшей программы. То есть её значение совпадает с началом program_invocation_name до последней косой черты (/).

Эти переменные автоматически инициализируются glibc при запуске программы.
SFML

SFML (Simple and Fast Multimedia Library) — это библиотека, предназначенная для разработки мультимедийных приложений, включая 2D и 3D игры, аудио и видео. Она предоставляет доступ к различным мультимедийным ресурсам и упрощает работу с графикой, аудио, сетью и вводом.

Вот основные шаги для использования SFML в C++:

1. Сначала установите библиотеку SFML на вашем компьютере. Вы можете скачать библиотеку с официального сайта SFML (https://www.sfml-dev.org/) и следовать инструкциям по установке для вашей операционной системы.
2. Создайте новый проект C++ в вашей среде разработки (например, Visual Studio, Code::Blocks, CLion и др.).
3. Вам нужно убедиться, что ваш проект настроен для использования SFML. Для этого укажите пути к заголовочным файлам и библиотекам SFML в настройках проекта.
4. Ваш код будет включать заголовочные файлы SFML и вызов функций для работы с графикой, аудио и другими мультимедийными ресурсами.
5. Скомпилируйте свой проект с учетом настроек SFML, и запустите его.
Преобразование вектора в массив

Для этого есть довольно простой трюк, поскольку спецификация теперь гарантирует, что векторы хранят свои элементы последовательно.
std::optional

std::optional — это шаблонный класс, введенный в стандарте C++17, который предоставляет возможность представлять объект, который может отсутствовать (не иметь значения). Это бывает полезно, когда у вас есть ситуации, когда значение может быть или не быть, и вам не хочется использовать какие-то специальные значения (например, нулевые указатели) для представления отсутствия значения.

В примере выше функция divide возвращает std::optional, чтобы указать, что результат деления может быть или не быть (если делитель равен нулю). В функции main мы проверяем, есть ли значение в result, и если есть, выводим его значение. В противном случае выводим сообщение об ошибке.
Аллокатор

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

В стандартной библиотеке C++ есть несколько аллокаторов, таких как new и delete, которые предоставляют базовую функциональность выделения и освобождения памяти. Однако C++ также предоставляет механизмы для создания собственных аллокаторов, которые могут быть настроены и оптимизированы под конкретные нужды приложения.
Рекурсивный мьютекс

Рекурсивный мьютекс (recursive mutex) — это специальный тип мьютекса, который позволяет одному и тому же потоку многократно захватывать мьютекс, не приводя к блокировке. Это полезно в ситуациях, когда один и тот же поток может вызывать функции, которые используют мьютекс, несколько раз вложено, и без рекурсивных мьютексов это могло бы привести к блокировке потока.

В C++ стандартная библиотека предоставляет класс std::recursive_mutex для работы с рекурсивными мьютексами. Код с примера создает два потока, каждый из которых вызывает функцию foo, которая захватывает рекурсивный мьютекс несколько раз. Благодаря рекурсивному мьютексу, это не вызывает блокировки, и программа корректно работает.

Обратите внимание, что необходимо быть осторожным при использовании рекурсивных мьютексов, чтобы избежать возможных проблем с блокировкой и дедлоками.
Что такое TDD?

TDD (Test-Driven Development) — это подход к разработке программного обеспечения, при котором сначала пишутся автоматические тесты, определяющие желаемое поведение кода, а затем реализуется минимально необходимый код, чтобы пройти эти тесты.

Основные принципы TDD:
— Написание теста перед кодом: сначала пишется тест, определяющий желаемую функциональность. Затем пишется минимальный код, чтобы пройти этот тест.
— Рефакторинг: после прохождения теста код рефакторится для улучшения структуры и читаемости, при этом все тесты должны оставаться пройденными.
— Повторение: цикл повторяется — новый тест, код, рефакторинг.
— Тесты должны быть автоматизированными и запускаться очень часто.

Преимущества TDD: предотвращение дефектов, улучшение структуры кода, быстрая обратная связь.
TDD позволяет создавать код, удовлетворяющий требованиям и хорошо тестируемый.
std::memory_order_acquire

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

В этом примере два потока выполняют операции записи и чтения на двух атомарных переменных x и y.
— Операции записи выполняются с std::memory_order_relaxed, что означает, что они не устанавливают никаких ограничений на порядок операций с памятью.
— Операции чтения выполняются с std::memory_order_acquire, что гарантирует, что все записи в других потоках, которые освобождают ту же атомарную переменную, будут видны в текущем потоке после этого вызова load.
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣C#

Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
Что выведет код сверху?

Эта программа завершится аварийно. throw 32 начнет раскручивать стек и уничтожит класс A. Деструктор класса A выдаст еще одно исключение во время обработки исключения, что приведет к сбою программы. Этот вопрос проверяет, есть ли у разработчика опыт работы с исключениями.
Метод difftime()

Метод difftime() используется для вычисления разницы между двумя временными точками, представленными в виде объектов time_t. Она возвращает разницу между двумя временами в секундах в виде числа с плавающей запятой (тип double).
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Pcap

Pcap — это библиотека для захвата и анализа сетевого трафика.

Она используется для:
- Сниффинга сети;
- Анализа протоколов;
- Отладки сетевых приложений.

Код из примера открывает устройство для захвата пакетов, в цикле считывает пакеты и выводит их длину.
Что выведет код сверху?
Anonymous Quiz
29%
30
19%
36
14%
42
38%
35
Что делает данный код?

Правильный ответ: ничего не делает.

int main() // Функция main без аргументов.
{
[] // Объявление лямбда-функции без списка захвата...
() // ... с пустым списком аргументов ...
{} // ... и пустым телом, ...
(); // ... которая тут же вызывается.
}