В одном из прошлых заданий вы уже создавали программу для чтения и анализа ведомости выплат. Теперь попробуйте создать простую программу для записи в эту ведомость.
Формат ведомости прежний:
- Сначала идёт имя и фамилия получателя денежных средств, далее — дата выдачи в формате ДД.ММ.ГГГГ.
- Запись завершает сумма выплаты в рублях.
- Данные разделяются между собой пробелами.
- В конце каждой записи должен быть расположен перевод строки.
- При старте программы пользователь последовательно вводит данные для новой записи, которые затем записываются в файл в текстовом режиме. Программа должна добавлять новые записи в конец файла, не удаляя его текущее содержимое.
- Валидируйте введённые файлы перед записью, хотя бы минимально.
- Для валидации даты в указанном формате можно использовать функции
std::stoi и std::subtrс корректно указанным диапазоном символов в дате. К примеру, вызовstd::stoi(date.substr(3, 2))вычленит из строковой даты целочисленный месяц для последующего анализа.
Напишите программу, которая с помощью генератора случайных чисел будет создавать бинарные картины.
Бинарные картины — разновидность цифровых растровых изображений, когда каждый пиксель может представлять только один из двух цветов. На вход от пользователя принимается размер картины: высота и ширина в пикселях. На выходе нужно создать файл pic.txt, содержимое которого будет наполнено случайными нулями и единицами в рамках размера картины.
Если вы запустите программу несколько раз на одних и тех же исходных данных (ширина и высота картины), то обнаружите, что всё время выводится одна и та же картина.
У генератора случайных чисел есть ещё и зерно, от которого он отталкивается. Если это зерно не меняется, то и серия из rand() всегда будет возвращать одни и те же случайные числа.
Чтобы разнообразить вывод, можете использовать вызов std::srand(std::time(nullptr)); в самом начале программы. Эта операция задаёт начальное зерно случайных чисел в зависимости от текущего времени. Для её корректной работы не забудьте также включить заголовочный файл <ctime>.
Реализуйте простую симуляцию игры в рыбалку. В исходном текстовом файле реки (river.txt) задайте список из разных видов рыб, которые можно в ней поймать. Рыбок может быть сколько угодно, а виды могут повторяться.
Как должна работать симуляция:
- В начале программы пользователь указывает, какую именно рыбу он собирается ловить (её вид).
- После этого из первого файла друг за другом осуществляется чтение его содержимого, вид за видом.
- Если на отдельных шагах вид совпал с указанным пользователем, в выходной файл basket.txt (корзинка) записывается этот вид.
- В конце программы показывается, сколько было поймано рыб за текущую ловлю.
- Программу можно запускать несколько раз, при этом уже пойманные рыбы должны сохраняться в файле-корзинке.
Пример содержания исходного файла:
sunfish
shad
carp
bass
bullhead
carp
walleye
catfish
carp
Реализуйте упрощённую симуляцию работы банкомата.
Учтите следующее:
- В банкомате могут храниться только бумажные купюры номиналом 100, 200, 500, 1 000, 2 000 и 5 000 рублей.
- Максимально в банкомате может храниться только 1 000 купюр. Все они записываются в отдельный файл.
- У банкомата, как у устройства, две основных операции — снятие денег пользователем и наполнение деньгами инкассаторами банка.
- Состояние банкомата должно храниться в отдельном бинарном файле, автономно. Хранение в бинарном виде улучшает производительность программы и уменьшает размер данных. Банкомат работает следующим образом:
- При старте программа проверяет наличие файла .bin. Если он есть (данные по банкомату были сохранены), данные загружаются и на экран выводится информация о текущем состоянии банкомата: сколько сейчас купюр каждого номинала и общая сумма. Если файла нет — банкомат «пустой».
- При вводе «+» заполняются недостающие купюры и выводится информация о текущем состоянии банкомата: сколько сейчас купюр каждого номинала и общая сумма. Количество купюр рассчитывается так, чтобы банкомат был заполнен полностью. Все купюры при этом выбираются случайным образом.
- При вводе «−» симулируется снятие пользователем денег. Пользователь указывает сумму с точностью до 100 рублей. Считайте, что каждый клиент обладает неограниченным балансом в системе и теоретически может снять любую сумму. Выдача происходит начиная с купюр большего номинала. Если запрошенная сумма не может быть снята из-за отсутствия подходящих купюр в * машине, показывается сообщение, что эта операция невозможна. После выдачи денег на экран выдаётся информация о текущем состоянии банкомата: сколько сейчас купюр каждого номинала и общая сумма.
- При выходе из программы сохраняем состояние банкомата в файл.
- Вы можете хранить массив купюр целиком, помечая отсутствующие позиции нулями.
- Выход из программы рекомендуется сделать по отдельной команде, а команды «+» и «−» получать в цикле.
- Соблюдены все условия заданий.
- Программы работают корректно.