Witam! Na przedmiocie ASD mam do zrobienia następujące zadanie. Oto co udało mi się zmajstrować. Czy to jest dobrze ?
Pozdrawiam,
TREŚĆ ZADANIA:
Należy wyznaczyć wszystkie liczby pierwszych w przedziale domkniętym [a, b] (2=<a=<b=<1000).
Program powinien:
- Czytać z pliku tekstowego początek i koniec przedziału.
- Zapisać do pliku tekstowego ilość liczb pierwszych, kolejne liczby pierwsze z zadanego przedziału oraz liczbę wykonanych operacji elementarnych (dla każdej z metod).
Dane:
¨W pierwszej linii pliku In0104.txt znajdują się dwie liczby naturalne a, b (takie że 2=<a=<b=<1000) oddzielone pojedynczą spacją.
Wyjście:
¨Plik wyjściowy Out0104.txt powinien mieć następujący format
przedział: [a, b]
I metoda:
... ... ... ...// liczby pierwsze z przedziału [a, b] oddzielone pojedynczą spacją, wyznaczone metodą pierwszą
ilość liczb pierwszych = ... ; ilość wykonanych operacji elementarnych = ...
II metoda:
... ... ... ...// liczby pierwsze z przedziału [a, b] oddzielone pojedynczą spacją, wyznaczone metodą drugą
ilość liczb pierwszych = ... ; ilość wykonanych operacji elementarnych = ...
Przykład
In0104.txt:
2 60
Out0104.txt:
przedział: [2, 60]
I metoda:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59
ilość liczb pierwszych = 16 ; ilość wykonanych operacji elementarnych = ...
II metoda:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59
ilość liczb pierwszych = 16 ; ilość wykonanych operacji elementarnych = ...
KOD W C++ :
#include <iostream>
using namespace std;
#define _FILE_READ "In0104.txt"
#define _FILE_WRITE "Out0104.txt"
#include <fstream>
int get_n(ifstream &file){
string line;
getline(file, line);
stringstream linestream(line);
int n;
linestream >> n;
return n;
}
void alg(){
ifstream file(_FILE_READ);
ofstream file_out(_FILE_WRITE);
string line;
VAR(n,get_n(file));
VI tab;
while(getline(file, line)) {
int a;
stringstream linestream(line);
linestream >> a;
tab.PB(a);
}
/* Algorytm (n) */
int s = 0, w = 0;
int iS = 0, iK = 0;
REP(i,n){
if (w > 0){
w += tab[i]; /* oplaca sie wziac poprzednie w */
iK = i;
}else{
w = tab[i]; /* nie oplaca sie brac poprzedniego w */
iS = i+1;
}
if (w > s) s = w;
}
file_out << s << " " << iS << " " << iK;
file.close();
file_out.close();
}
int main(){
cout << "ASD\n===" << endl;
alg();
}