Jaka to liczba?


Przykład 1

//*************************************************************************

//           PROGRAM WYSZUKUJE LICZBY PIERWSZE Z PLIKU LICZBY.TXT

//               - liczba pierwsza to taka, ktora ma tylko 2 podzielniki, czyli 1 oraz sama siebie

//               - w pliku sa liczby calkowite dodatnie (w rozumieniu matematyki)

//               - w petli for sprawdza czy liczba jest pierwsza czy zlozona

//               - gdy pierwsza to zapisuje ja do pliku pierwsze.txt

//*************************************************************************

 

// UWAGA  przypominam o sprawdzeniu pliku liczby.txt i poprawnym go zapisaniu - kursor ustawic -zeby nie bylo pustego wiersza bo zle wyniki

 

#include<iostream>

#include<fstream>

 

using namespace std;

 

 int main()

 {

               

     int a;   // zmienna na wczytana liczbe ze strumienia danych czyli z pliku

                 // poniewaz nie interesuja mnie cyfry tej liczby tylko wartosc liczby

                 // to deklaruje ja jako int                  

               

      bool czy_pierwsza;           // zmienna pomocnicza, taki wskaźnik,

                                                  // ktory przyjmuje wartosc prawda lub falsz          

     

     ifstream odczyt("liczby.txt");      // definicja obiektu odczyt z wywolaniem konstruktora

                                                             // i konstruktor otwiera plik do odczytu

     ofstream zapis("pierwsze.txt");    // definicja obiektu zapis z wywolaniem konstruktora

                                                               // i konstruktor otwiera plik do zapisu

   

  while(!odczyt.eof())            // dopóki nieprawda, ze natrafilismy na koniec pliku   

  {

  

    odczyt>>a;                      // czyta pierwsza liczbe z pliku

                    

    czy_pierwsza = true;    // ustawienie zmiennej pomocniczej na -prawda-

                                           // jak zmieni się na -falsz- to wtedy jest zlozona    

     

                       

    for (int i=2; i<a; i++)     // ustawienie -i- na wartosc 2, bo sprawdzam

                                           // czy 2 jest podzielnikiem tej odczytanej liczby

                                           // zakres sprawdzania ustawilam na -i<a- bo nie ma sensu

                                           // sprawdzać tego, czy liczba sama przez siebie jest podzielna 

 

    {

        if (a%i==0)                // dzielenie modulo (symbol %) jest tylko dla liczb calkowitych

          {

             czy_pierwsza = false;   // jak -i- jest podzielnikiem tzn, że liczba jest zlożona,

                                                    // dlatego zmienna pomocnicza ma przyjac wartosc -false-

             break;                    // przerywa sprawdzanie po napotkaniu pierwszego podzielnika

           }

   }

 

 

       if (czy_pierwsza==true && a!=1)       // sprawdzam, jaka wartosc po wyjsciu z petli for                                                                        // ma zmienna czy_pierwsza

                                         // eliminuje 1 bo nie jest ona liczba pierwsza a moze byc w pliku

                                         // && jest to operator logicznego iloczynu 

                                         // zeby wykonal sie zapis to obydwa warunki musza byc spelnione

                                               

        zapis<<a<<endl;      // zapisuje wyszukana liczbe pierwsza do pliku

   

  } 

     

     odczyt.close();

     zapis.close();

     return 0;

 }

Przykład 2 - bazujący na Przykładzie 1

#include<iostream>

#include<fstream>

 

using namespace std;

 

 int main()

 {               

     int a;                 

     bool czy_pierwsza; 

     int lp=0;    // zmienna na ilosc liczb pierwszych zainicjowana wartoscia zero

     int lz=0;     // zmienna na ilosc liczb zlozonych zainicjowana wartoscia zero          

     

     ifstream odczyt("liczby.txt");     

     ofstream zapis("pierwsze_zlozone.txt");   

   

          while(!odczyt.eof())           

          {  

                odczyt>>a;             

                czy_pierwsza = true;   

 

                for (int i=2; i<a; i++)     

                {

                        if (a%i==0)

                        {

                             czy_pierwsza = false;   

                             break;   

                        }

               }

 

              if (czy_pierwsza==true && a!=1) 

              {   

                  lp=lp+1;                                                         // jak pierwsza to ja zliczam                  

                  zapis<<a<<"- liczba pierwsza"<<endl;

              }

 

              if (czy_pierwsza==false)   

             {             

                 lz=lz+1;                                                            // jak zlozona to ja zliczam

                 zapis <<a<<"- liczba zlozona"<<endl;

             }

          } 

  zapis<<"Liczb pierwszych jest "<<lp<<endl;       // po sprawdzeniu wszystkich liczb z pliku

  zapis<<"Liczb zlozonych jest "<<lz<<endl;          // zapisuje ilosc pierwszych i zlozonych

 

     odczyt.close();

     zapis.close();

     return 0;

 }