Создать двоичный файл, куда записать n целых чисел. Из файла создать массив, элементы которого являются простыми числами
Нужна помощь со второй частью задачи. Массив я сделал, но нужно чтобы элементы которые являются простыми числами должны располагаться после максимального значения файла. Не могу додуматься как сделать.
Вот прога:
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
int main()
{
ofstream out("Q:\\C++\\massiv.txt");
setlocale(LC_ALL, "Rus");
srand(time(NULL));
const int n = 10;
int m[n],i=0;
for (int i = 0; i < n; i++)
{
m[i] = rand() % 21 - 10;
out << m[i] << " ";
}
out << endl;
ifstream fin("Q:\\C++\\massiv.txt");
int m1[n];
for (int i = 0; i < n; ++i);
{
fin >> m[i];
}
cout << "Массив = ";
for (int i = 0; i < n; ++i)
{
cout << m[i] << " ";
}
cout << endl;
system("pause");
fin.close();
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, я бы делал вашу задачу примерно так - учитывая, что требуется бинарный файл, а не текстовый, как сделали вы:
#include <iostream>
#include <fstream>
#include <ctime>
bool is_prime(unsigned int k)
{
if (k < 2 ||k%2 == 0) return false;
for(unsigned int j = 3; j*j <= k; ++j)
if (k%j == 0) return false;
return true;
}
using namespace std;
int main()
{
ofstream out("massiv.txt",ios::binary);
srand(time(NULL));
const int n = 100;
for (int i = 0; i < n; i++)
{
unsigned int x = rand() % 121 + 10;
out.write((char*)&x,sizeof(x));
}
out.close();
ifstream fin("massiv.txt",ios::binary);
unsigned int m[n];
unsigned int m_size = 0;
unsigned int k;
while(fin.read((char*)&k,sizeof(k)))
{
if (is_prime(k)) m[m_size++] = k;
}
cout << "Массив = ";
for (unsigned int i = 0; i < m_size; ++i)
{
cout << m[i] << " ";
}
cout << endl;
fin.close();
}
Хотя на самом деле я бы работал с вектором. Да, и числа я брал беззнаковые, чтобы иметь дело только с натуральными числами (все же по определению простое число - это число натуральное, которое...), и не думать - скажем, -5 - это простое или нет?...