Files
dz5/eminidinahuy.cpp
2024-12-07 00:12:57 +03:00

294 lines
8.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <iostream>
#include <fstream>
#include <cctype>
#include <limits>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip> // Для форматирования вывода
#include <vector>
#include <map>
#include <random>
#include <ctime>
#include <set>
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<int> numbers;
int number;
while (inputFileRead >> number) {
numbers.push_back(number);
}
inputFileRead.close();
// Подсчет количества повторений каждого числа
map<int, int> frequency;
for (int num : numbers) {
frequency[num]++;
}
// Нахождение максимального количества повторений
int maxFrequency = 0;
for (const auto& pair : frequency) {
if (pair.second > maxFrequency) {
maxFrequency = pair.second;
}
}
// Сохранение чисел с максимальным количеством повторений
vector<int> 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<int> array(n);
cout << "Введите элементы массива: ";
for (int i = 0; i < n; ++i) {
cin >> array[i];
}
// Словарь для хранения частоты элементов и их индексов
map<int, vector<int>> frequency;
// Заполнение словаря
for (int i = 0; i < n; ++i) {
frequency[array[i]].push_back(i);
}
// Проверка наличия повторяющихся элементов
vector<int> 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();
}