Zad. 1. W pliku dane.txt znajduje się w kolejnych wierszach 1000 liczb z przedziału [0;999999].
a) do pliku a.txt wpisz ilość liczb parzystych znajdujących się w pliku dane.txt w następującej postaci: "Liczb parzystych jest [ilość liczb]"
b) do pliku b.txt skopiuj wszystkie liczby z pliku dane.txt, w których cyfra dziesiątek jest równa 7 lub 0
c) do pliku c.txt skopiuj wszystkie liczby, które są kwadratami liczb całkowitych, np. taką liczbą jest liczba 225, ponieważ
$$225 = 15^2$$.
Rozwiązanie
Podpunkt a)
W tym zadaniu należy wprowadzić zmienną całkowitą, która będzie zliczała kolejne liczby parzyste. Wartość początkowa tej zmiennej jest równa 0 (na początku programu nie mamy znalezionej żadnej liczby całkowitej).
Do sprawdzenia parzystości liczby można skorzystać z jednej z dwóch warunków:
Rozwiązanie
//algorytm.edu.pl
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream odczyt("dane.txt");
ofstream zapis("a.txt");
int liczba;
int ile=0; //zmienna licząca liczby parzyste
while(!odczyt.eof())
{
odczyt>>liczba;
if(liczba%2 == 0)
ile++;
}
zapis<<"Liczb parzystych jest "<<ile;
odczyt.close();
zapis.close();
return 0;
}
Podpunkt b)
W tym przypadku rozwiązanie będzie wyglądało podobnie do podpunktu a. Należy tylko sprawdzić, czy cyfrą jedności jest cyfra 0 lub 7. Wystarczy określić czy reszta z dzielenia przez 10 jest równa 0 lub 7:
if(liczba%10==0 || liczba%10 == 7) ...
Podpunkt c)
Aby sprawdzić, czy dana liczba jest pierwiastkiem liczby całkowitej należy porównać jej pierwiastek z częścią całkowitą pierwiastka tej liczby. Jeśli zachodzi równość, oznacza to, że liczba spełnia kryteria zadania, np.:
$$\left [ \sqrt{225}\right ] = \sqrt{225}$$,
a więc liczba 225 spełnia kryteria zadania, natomiast
$$\left [ \sqrt{15}\right ] \neq \sqrt{225}$$,
a więc liczba 15 nie spełnia kryteriów zadania, gdzie nawias [] oznacza część całkowitą z liczby.
W rozwiązaniu zadania, potrzebna będzie znajomość teorii z zakresu rzutowania typów.
Rozwiązanie
//algorytm.edu.pl
#include <iostream>
#include <fstream>
#incldue <cmath>
using namespace std;
int main()
{
ifstream odczyt("dane.txt");
ofstream zapis("b.txt");
int liczba;
while(!odczyt.eof())
{
odczyt>>liczba;
if((int)sqrt(liczba)==sqrt(liczba)) //sprawdzenie czy część całkowita
zapis<<liczba<<endl; // liczby jest równa pierwiastkowi tej liczby
}
odczyt.close();
zapis.close();
return 0;
}
Rozwiązanie
Podpunkt a)
W tym zadaniu należy wprowadzić zmienną całkowitą, która będzie zliczała kolejne liczby parzyste. Wartość początkowa tej zmiennej jest równa 0 (na początku programu nie mamy znalezionej żadnej liczby całkowitej).
Do sprawdzenia parzystości liczby można skorzystać z jednej z dwóch warunków:
//algorytm.edu.pl #include <iostream> #include <fstream> using namespace std; int main() { ifstream odczyt("dane.txt"); ofstream zapis("a.txt"); int liczba; int ile=0; //zmienna licząca liczby parzyste while(!odczyt.eof()) { odczyt>>liczba; if(liczba%2 == 0) ile++; } zapis<<"Liczb parzystych jest "<<ile; odczyt.close(); zapis.close(); return 0; }
Podpunkt b)
W tym przypadku rozwiązanie będzie wyglądało podobnie do podpunktu a. Należy tylko sprawdzić, czy cyfrą jedności jest cyfra 0 lub 7. Wystarczy określić czy reszta z dzielenia przez 10 jest równa 0 lub 7:
if(liczba%10==0 || liczba%10 == 7) ...
Podpunkt c)
Aby sprawdzić, czy dana liczba jest pierwiastkiem liczby całkowitej należy porównać jej pierwiastek z częścią całkowitą pierwiastka tej liczby. Jeśli zachodzi równość, oznacza to, że liczba spełnia kryteria zadania, np.:
$$\left [ \sqrt{225}\right ] = \sqrt{225}$$,
a więc liczba 225 spełnia kryteria zadania, natomiast
$$\left [ \sqrt{15}\right ] \neq \sqrt{225}$$,
a więc liczba 15 nie spełnia kryteriów zadania, gdzie nawias [] oznacza część całkowitą z liczby.
W rozwiązaniu zadania, potrzebna będzie znajomość teorii z zakresu rzutowania typów.
Rozwiązanie
//algorytm.edu.pl #include <iostream> #include <fstream> #incldue <cmath> using namespace std; int main() { ifstream odczyt("dane.txt"); ofstream zapis("b.txt"); int liczba; while(!odczyt.eof()) { odczyt>>liczba; if((int)sqrt(liczba)==sqrt(liczba)) //sprawdzenie czy część całkowita zapis<<liczba<<endl; // liczby jest równa pierwiastkowi tej liczby } odczyt.close(); zapis.close(); return 0; }