320 lines
10 KiB
C++
320 lines
10 KiB
C++
#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-файл.
|