Cześć
Jestem co prawda w 3 gim, ale interesuje się programowaniem i natrafiłem na takie zadanie z matury:
W pliku o nazwie liczby.txt umieszczono w kolejnych wierszach 500 liczb całkowitych dodatnich, po jednej w wierszu, z których każda liczba ma co najwyżej 6 cyfr. Napisz program, za pomocą którego otrzymasz tylko te liczby z pliku liczby.txt, które są kwadratami liczb pierwszych. Na przykład liczba 49 jest kwadratem liczby pierwszej – 49 = 72 . Wyniki zapisz w pliku zad_5.txt.
Nie potrafiłem sam tego napisać, więc znalazłem program i chciałem go przeanalizować, ale gdy go uruchomiłem okazuje się, że nie działa poprawnie, a ja nie wiem co trzeba poprawić. Bardzo proszę o wskazanie błędu i ewentualną poprawę :)
Tak wygląda program:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int main()
{
double liczba;
double pierw;
int pierwcalk;
bool pierwsza;
char tekst[500];
ifstream plik("liczby.txt");
ofstream wynik ("zad5.txt");
if (plik.is_open()){
while(!plik.eof()){
plik.getline(tekst,100);
// konwersja tekstu na double
liczba = strtod(tekst, NULL);
// obliczenie pierwiastka
pierw = sqrt(liczba);
pierwcalk = (int)pierw;
if(pierw == pierwcalk){
// sprawdzenie czy pierwsza
pierwsza = 0;
for (int i=2; i<pierw; i++){
if(pierwcalk%i==0){
pierwsza = 1;
}
}
if(pierwsza == 0){
// kontrolne wypisanie na ekran
cout << liczba << endl
// zapis do pliku
wynik << liczba <<endl;
}
}
}
plik.close();
wynik.close();
}
system("PAUSE");
return EXIT_SUCCESS;
}
Chodzi mi o to, że wypisuje mi 9 i 4 a przeciez to nie sa liczby 1...
Pozdrawiam