Kod był wyświetlany 2536 razy.
/*
Name: Liczby niekompletne, doskonale,zasobne
Copyright: GPL GNU
Data: 17-03-07 15:53
Zadanie: tworzenie plku z losowymi danymi
odczytanie pliku przez program, następnie wyrzucenie na ekran oraz
do pliku roz.txt liczb zosobnych, niekompletnych oraz doskonalych.
*/
#include <cstdlib>
#include <iostream>
#include <fstream>
char * nazwa = "dane.dt";
using namespace std;
void wypelnij();
int sumaDzielnikow(int);
void sortuj();
const int n = 500; // ile liczb losowac?
int * dane = new int[n];
int main()
{
wypelnij();
int *pomocnicza = new int;
ifstream rplik;
rplik.open(nazwa);
int i = n;
while(rplik>>*pomocnicza)
{
dane[i - 1] = *pomocnicza;
i--;
}
delete pomocnicza;
rplik.close();
sortuj();
int *niekompletne = new int[n];
for(int i = 0;i<n;i++)
niekompletne[i] = -1;
int *doskonale = new int[n];
for(int i =0;i<n;i++)
doskonale[i] = -1;
int *zasobne = new int[n];
for(int i =0;i<n;i++)
zasobne[i] = -1;
int ileZasobnych = 0,ileDoskonalych = 0, ileNiekompletnych = 0;
for(int i = 0;i<n;i++)
{
if(sumaDzielnikow(dane[i])>2 * dane[i])
{
zasobne[ileZasobnych] = dane[i];
ileZasobnych++;
}
if(sumaDzielnikow(dane[i])==2 * dane[i])
{
doskonale[ileDoskonalych] = dane[i];
ileDoskonalych++;
}
if(sumaDzielnikow(dane[i])<2 * dane[i])
{
niekompletne[ileNiekompletnych] = dane[i];
ileNiekompletnych++;
}
}
ofstream roz;
roz.open("roz.txt");
int q=0;
roz<<"Niekompletne:"<<endl;
cout<<"Niekompletne:"<<endl;
while(niekompletne[q] != -1)
{
if(q%11==0)roz<<endl;
roz<<niekompletne[q]<<"\t";
cout<<niekompletne[q]<<"\t";
q++;
}
cout<<endl<<endl;
roz<<endl<<endl;
q = 0;
roz<<"Doskonale:"<<endl;
cout<<"Doskonale:"<<endl;
while(doskonale[q] != -1)
{
if(q%11==0)roz<<endl;
roz<<doskonale[q]<<"\t";
cout<<doskonale[q]<<"\t";
q++;
}
cout<<endl<<endl;
roz<<endl<<endl;
q = 0;
cout<<"Zasobne:"<<endl;
roz<<"Zasobne:"<<endl;
while(zasobne[q] != -1)
{
if(q%11==0)roz<<endl;
roz<<zasobne[q]<<"\t";
cout<<zasobne[q]<<"\t";
q++;
}
delete pomocnicza;
cin.ignore();
getchar();
return 0;
}
void wypelnij()
{
ofstream wplik;
wplik.open(nazwa);
int dol = 10,gora = 10000;
//if(dol > gora) swap(dol,gora);
srand(time(NULL));
for(int i = 0;i<n;i++)
wplik<<(rand() % (gora - dol + 1)) + dol<<endl;
wplik.close();
}
int sumaDzielnikow(int liczba)
{
int suma = 0;
for(int i = 1;i<=liczba;i++)
{
if(liczba % i == 0) suma += i;
}
return suma;
}
void sortuj()
{
for(int i = 0; i<n; i++)
for(int q = n - 1; q>=1;q--)
if(dane[q] < dane[q - 1])
{
swap(dane[q],dane[q-1]);
}
}
Pobierz plik tekstowy