Files
dz5/eminidinahuy.cpp
2024-12-14 17:11:23 +03:00

320 lines
10 KiB
C++
Raw Permalink 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 customSort(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
// Меняем местами элементы
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
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);
}
}
// Сортировка чисел с максимальным количеством повторений
customSort(mostFrequentNumbers);
// Запись результатов в файл
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) { // auto - объявление переменной со сложным типом; const - переменнеая не может быть изменена
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()
{
setlocale(LC_ALL, "");
cout << "Задание 2"<<endl;
z2();
cout << "Задание 3.13";
z3_13();
cout << "Задание 4.13";
z4_13();
cout << "Задание 5.13";
z5_13();
cout << "Задание 5.47";
z5_47();
}
// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
// Советы по началу работы
// 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
// 2. В окне Team Explorer можно подключиться к системе управления версиями.
// 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
// 4. В окне "Список ошибок" можно просматривать ошибки.
// 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
// 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.