Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

Liczby parzyste i kwadratowe


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:

  • if(liczba%2==0) - jeśli reszta z dzielenia liczby przez 2 jest równa 0, oznacza to, że jest to liczba parzysta
  • if(liczba&1==0) - jeśli pierwszy bit na prawo jest równy 0, oznacza to, że jest to liczba parzysta

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:

  • if(liczba%2==0) - jeśli reszta z dzielenia liczby przez 2 jest równa 0, oznacza to, że jest to liczba parzysta
  • if(liczba&1==0) - jeśli pierwszy bit na prawo jest równy 0, oznacza to, że jest to liczba parzysta
//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;
}