Обновить main.cpp

This commit is contained in:
oltnd
2024-11-30 18:41:13 +03:00
parent e963593ef9
commit f16edceccb

View File

@@ -7,6 +7,7 @@
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip> // Для форматирования вывода
using namespace std;
@@ -177,6 +178,14 @@ void z3_16() {
findWordCombination(fileName, combination);
}
bool isBinary(const string& str) {
for (char c : str) {
if (c != '0' && c != '1') {
return false;
}
}
return true;
}
void z4_22() {
int n;
@@ -188,7 +197,13 @@ void z4_22() {
for (int i = 0; i < n; ++i) {
string binary;
cin >> binary;
binaryArray.push_back(binary);
if (isBinary(binary)) {
binaryArray.push_back(binary);
}
else {
cout << "Ошибка: '" << binary << "' не является двоичным числом. Попробуйте снова.\n";
--i; // Повторить ввод для текущей итерации
}
}
vector<string> base5Array;
@@ -236,22 +251,26 @@ string convertToBase(int number, int base) {
return result.empty() ? "0" : result; // Если число 0, вернуть "0"
}
void sieveOfEratosthenes(int n) {
// Создаем вектор для хранения простоты чисел. Изначально считаем, что все числа простые.
vector<bool> isPrime(n + 1, true);
// 0 и 1 не являются простыми числами.
// Создаем динаический массив для хранения информации о простых числах
bool* isPrime = new bool[n + 1];
// Изначально предполагаем, что все числа простые
memset(isPrime, true, (n + 1) * sizeof(bool));
// 0 и 1 не являются простыми числами
isPrime[0] = isPrime[1] = false;
// Решето Эратосфена
for (int i = 2; i * i <= n; ++i) {
if (isPrime[i]) {
// Отмечаем все кратные i как составные.
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
// Выводим все простые числа.
// Вывод всех простых чисел
cout << "Простые числа до " << n << ": ";
for (int i = 2; i <= n; ++i) {
if (isPrime[i]) {
@@ -259,7 +278,11 @@ void sieveOfEratosthenes(int n) {
}
}
cout << endl;
// Освобождаем память
delete[] isPrime;
}
void z2() {
int n;
cout << "Введите предел для поиска простых чисел: ";
@@ -325,38 +348,42 @@ struct Country {
points = gold * 7 + silver * 6 + bronze * 5;
}
};
// Функция для сравнения стран по золотым медалям
bool compareByGold(const Country& a, const Country& b) {
if (a.gold != b.gold) {
return a.gold > b.gold; // Сортировка по золотым медалям
}
return a.totalMedals > b.totalMedals; // Вторичная сортировка по общему количеству медалей
}
void z5_22() {
vector<Country> countries;
int n;
cout << "Введите количество стран: ";
cin >> n;
// Динамическое выделение памяти для массива стран
Country* countries = new Country[n];
// Ввод данных
for (int i = 0; i < n; ++i) {
Country country;
cout << "Введите название страны (пожалуйста на Английском): ";
cin >> country.name;
cin >> countries[i].name;
cout << "Введите количество золотых, серебряных и бронзовых медалей: ";
cin >> country.gold >> country.silver >> country.bronze;
country.calculate();
countries.push_back(country);
cin >> countries[i].gold >> countries[i].silver >> countries[i].bronze;
countries[i].calculate();
}
// Сортировка стран
sort(countries.begin(), countries.end(), compareByGold);
sort(countries, countries + n, compareByGold);
// Сохранение данных в файл
ofstream outFile("olympic_results.txt");
if (!outFile) {
cerr << "Ошибка открытия файла для записи!" << endl;
delete[] countries; // Освобождение памяти перед выходом
return;
}
outFile << left << setw(15) << "Страна"
@@ -366,13 +393,13 @@ void z5_22() {
<< setw(15) << "Всего Медалей"
<< setw(10) << "Очки" << endl;
for (const auto& country : countries) {
outFile << left << setw(15) << country.name
<< setw(10) << country.gold
<< setw(10) << country.silver
<< setw(10) << country.bronze
<< setw(15) << country.totalMedals
<< setw(10) << country.points << endl;
for (int i = 0; i < n; ++i) {
outFile << left << setw(15) << countries[i].name
<< setw(10) << countries[i].gold
<< setw(10) << countries[i].silver
<< setw(10) << countries[i].bronze
<< setw(15) << countries[i].totalMedals
<< setw(10) << countries[i].points << endl;
}
outFile.close();
@@ -384,28 +411,30 @@ void z5_22() {
<< setw(15) << "ВсегоМедалей"
<< setw(10) << "Очки" << endl;
for (const auto& country : countries) {
cout << left << setw(15) << country.name
<< setw(10) << country.gold
<< setw(10) << country.silver
<< setw(10) << country.bronze
<< setw(15) << country.totalMedals
<< setw(10) << country.points << endl;
for (int i = 0; i < n; ++i) {
cout << left << setw(15) << countries[i].name
<< setw(10) << countries[i].gold
<< setw(10) << countries[i].silver
<< setw(10) << countries[i].bronze
<< setw(15) << countries[i].totalMedals
<< setw(10) << countries[i].points << endl;
}
cout << "Результаты сохранены в файл 'olympic_results.txt'." << endl;
// Освобождаем память
delete[] countries;
}
void showMenu() {
cout << "Меню задач:\n";
cout << "1. «Алгоритм Евклида»\n";
cout << "2. «Решето какого-то чела»\n";
cout << "2. «Решето какого-то чела»\n"; // готов
cout << "3. 3.16\n";
cout << "4. 3.22\n";
cout << "6. 4.16\n";
cout << "7. 4.22\n";
cout << "7. 4.22\n";// готов
cout << "8. 5.16\n";
cout << "9. 5.22\n";// Динамическй массив country ????
cout << "9. 5.22\n";// готово
cout << "0. Выход\n";
}
void launchTasks() {