diff --git a/eminidinahuy.cpp b/eminidinahuy.cpp index d0675f3..0f9c62b 100644 --- a/eminidinahuy.cpp +++ b/eminidinahuy.cpp @@ -1 +1,293 @@ -// 13 47 \ No newline at end of file +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // Для форматирования вывода +#include +#include +#include +#include +#include +using namespace std; + +void sieveOfEratosthenes(int n) { + + // Создаем динаический массив для хранения информации о простых числах + 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]) { + for (int j = i * i; j <= n; j += i) { + isPrime[j] = false; + } + } + } + + // Вывод всех простых чисел + cout << "Простые числа до " << n << ": "; + for (int i = 2; i <= n; ++i) { + if (isPrime[i]) { + cout << i << " "; + } + } + cout << endl; + + // Освобождаем память + delete[] isPrime; +} + +void z2() { + int n; + cout << "Введите предел для поиска простых чисел: "; + cin >> n; + + if (n < 2) { + cout << "Простых чисел нет." << endl; + } + else { + sieveOfEratosthenes(n); + } + +} +void z3_13() { + // Имя файла, куда будем записывать текст + string fileName = "output.txt"; + + // Открываем файл для записи + ofstream outFile(fileName); + + // Проверяем, открылся ли файл + if (!outFile) { + cerr << "Ошибка при открытии файла!" << endl; + + } + + // Текст для записи + string text = "Im not racicst, or anything. I am"; + + // Записываем текст в файл + outFile << text << endl; + + // Закрываем файл + outFile.close(); + + cout << "Текст успешно записан в файл " << fileName << endl; + +} +void z4_13() { + int m; + cout << "Введите натуральное число m (m < 27): "; + cin >> m; + + if (m <= 0 || m >= 27) { + cout << "Число m должно быть больше 0 и меньше 27." << endl; + + } + + cout << "Трехзначные числа, сумма цифр которых равна " << m << ":" << endl; + + // Перебор всех трёхзначных чисел + for (int number = 100; number <= 999; ++number) { + int sum = 0; + int temp = number; + + // Считаем сумму цифр числа + while (temp > 0) { + sum += temp % 10; // Добавляем последнюю цифру + temp /= 10; // Убираем последнюю цифру + } + + // Проверяем сумму + if (sum == m) { + cout << number << " "; + } + } + + cout << endl; +} +void printFile(const string& filename) { + ifstream file(filename); + if (!file) { + cerr << "Не удалось открыть файл: " << filename << endl; + return; + } + + cout << "Содержимое файла \"" << filename << "\":" << endl; + int number; + while (file >> number) { + cout << number << " "; + } + cout << endl; + file.close(); +} +void z5_13() { + const string inputFileName = "input.txt"; + const string outputFileName = "output.txt"; + int M; + + cout << "Введите количество чисел M: "; + cin >> M; + + if (M <= 0) { + cerr << "M должно быть положительным числом." << endl; + + } + + // Генерация M случайных чисел и запись их в файл + ofstream inputFile(inputFileName); + if (!inputFile) { + cerr << "Ошибка при открытии файла для записи: " << inputFileName << endl; + + } + + srand(time(nullptr)); // Инициализация генератора случайных чисел + for (int i = 0; i < M; ++i) { + int randomNumber = rand() % 100; // Генерация числа от 0 до 99 + inputFile << randomNumber << " "; + } + inputFile.close(); + + // Вывод содержимого исходного файла + printFile(inputFileName); + + // Чтение чисел из файла + ifstream inputFileRead(inputFileName); + if (!inputFileRead) { + cerr << "Ошибка при открытии файла для чтения: " << inputFileName << endl; + + } + + vector numbers; + int number; + while (inputFileRead >> number) { + numbers.push_back(number); + } + inputFileRead.close(); + + // Подсчет количества повторений каждого числа + map frequency; + for (int num : numbers) { + frequency[num]++; + } + + // Нахождение максимального количества повторений + int maxFrequency = 0; + for (const auto& pair : frequency) { + if (pair.second > maxFrequency) { + maxFrequency = pair.second; + } + } + + // Сохранение чисел с максимальным количеством повторений + vector mostFrequentNumbers; + for (const auto& pair : frequency) { + if (pair.second == maxFrequency) { + mostFrequentNumbers.push_back(pair.first); + } + } + + // Сортировка чисел с максимальным количеством повторений + sort(mostFrequentNumbers.begin(), mostFrequentNumbers.end()); + + // Запись результатов в файл + ofstream outputFile(outputFileName); + if (!outputFile) { + cerr << "Ошибка при открытии файла для записи: " << outputFileName << endl; + + } + + for (int num : mostFrequentNumbers) { + outputFile << num << " "; + } + outputFile.close(); + + // Вывод содержимого результирующего файла + printFile(outputFileName); + + +} +void z5_47() { + int n; + cout << "Введите размер массива: "; + cin >> n; + + if (n <= 0) { + cerr << "Размер массива должен быть положительным числом." << endl; + + } + + vector array(n); + cout << "Введите элементы массива: "; + for (int i = 0; i < n; ++i) { + cin >> array[i]; + } + + // Словарь для хранения частоты элементов и их индексов + map> frequency; + + // Заполнение словаря + for (int i = 0; i < n; ++i) { + frequency[array[i]].push_back(i); + } + + // Проверка наличия повторяющихся элементов + vector duplicates; // Хранение уникальных повторяющихся элементов + for (const auto& pair : frequency) { + if (pair.second.size() > 1) { // Если элемент повторяется + duplicates.push_back(pair.first); + } + } + + if (duplicates.empty()) { + cout << "В массиве нет повторяющихся элементов." << endl; + + } + + cout << "Повторяющиеся элементы найдены. Их количество: " << duplicates.size() << endl; + + // Сортировка повторяющихся элементов + sort(duplicates.begin(), duplicates.end()); + + cout << "Повторяющиеся элементы: "; + for (int num : duplicates) { + cout << num << " "; + } + cout << endl; + + // Вывод положения каждого повторяющегося элемента + for (int num : duplicates) { + cout << "Элемент " << num << " встречается на позициях: "; + for (int index : frequency[num]) { + cout << index << " "; + } + cout << endl; + } + + +} +int main() +{ + cout << "Задание 2"; + z2(); + cout << "Задание 3.13"; + z3_13(); + cout << "Задание 4.13"; + z4_13(); + cout << "Задание 5.13"; + z5_13(); + cout << "Задание 5.47"; + z5_47(); +}