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