Witam, potrzebuję pomocy w jednym zadaniu. Sprawa wygląda tak, że mam dwa pliki, w pierwszym (doskonale.txt) jest zbiór liczb, a w drugim (doskonale2.txt) wpisane są liczby doskonałe z pierwszego pliku oraz, obok nich, linijki w których występują. Muszę napisać funkcję, która wyświetli największą liczbę doskonałą z tego drugiego pliku.
#include<iostream>
#include<fstream>
#include<cstdlib>
#include <string>
#include<cmath>
using namespace std;
fstream plik1,plik2, wynik, wynik2;
int a, b,c,d,e,f ,licz=0, liczw=0,liczw2=0, suma=0, minx, maxx;
bool czy_doskonala(int a) // zad 1 b)
{
int s = 1, p = sqrt(a);
for(int i=2; i<=p; i++)
if(a%i == 0)
//dodajemy do sumy dwa dzielniki
s+= i + a/i;
//jesli mamy do czynienia z liczbą kwadratową
//to dwa razy dodalismy jej pierwiastek
//więc musimy go raz odjąć
if(a == p*p) s-=p;
//jesli suma dzielników jest równa danej liczbie
//do podana liczba jest doskonała
if(a == s) return 1;
return 0;
}
void dzielniki(int a) // zad1 f) // inny podpunkt z zadania wyświetlający dzielniki
{
for(int i = 1; i <= a; i++)
{
if (a % i == 0)
{
wynik2<<i<<" ";
}
}
wynik2<<" - "<<a<< endl;
}
int main(){
plik1.open("doskonale.txt",ios::in);
wynik.open("doskonale2.txt", ios::out);
while(!plik1.eof())
{
plik1>>a;
liczw++; // zad 1 c)
if(czy_doskonala(a))
{
licz++; // zad1 a)
wynik<<a<<" "<<liczw<<endl; // zad 1 b) i c)
}
}
cout<<licz<<endl; // zad1 a) // inny podpunkt z zadania wyświetlający ile jest liczb doskonałych
wynik.close();
plik1.close();
plik2.open("doskonale2.txt",ios::in);
wynik2.open("doskonale3.txt", ios::out); // jest to plik, do którego mam wypisać dzieliniki liczb doskonałych
while(!plik2.eof())
{
plik2>>c>>d;
liczw2++;
dzielniki(c); //zad1 f)
for(int i = 0; i<liczw2; i++) // zad1 d) wyświetlenie najmniejszej liczby
{
if(i==0)
{
minx=c;
}
else if(c<minx)
{
minx=c;
}
}
}
cout<<"najmniejsza: "<<minx<<endl; //zad1 d)
wynik2.close();
plik2.close();
system("start doskonale2.txt");
system("start doskonale3.txt");
system("pause");
return 0;
}
Jak widać udało mi się napisać kod, który wyświetli najmniejszą liczbę. Niestety nie jest on w postaci funkcji. Jeśli ktoś pomógłby mi w stworzeniu funkcji wybierającej także najmniejszą wartość to byłbym bardzo wdzięczny.