Iteracyjnie


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

//           PROGRAM OBLICZA SILNIE WCZYTANEJ LICZBY Z PLIKU TEKSTOWEGO

//               - silnia ma w matematyce symbol ! (wykrzyknik)  np. 3! , 5!

//               - zapis taki rozumie sie w nastepujacy sposob: 3!=1*2*3   5!=1*2*3*4*5  oraz //                 przyjeto, ze 0!=1

//               - te obliczenia wykonuje wykorzystujac ITERACJE

//               - iteracja to taki sposob pisania algorytmu, ze powtarza sie dana instrukcje 

//                  kilkakrotnie np. dzieki petli

//               - lub mozna tez powiedziec, ze iteracja to metoda algorytmiczna, gdzie

//                  operacje elementarne sa powtarzane

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

 

#include<iostream>

#include<fstream>

 

using namespace std;

 

 

 int main()

 {

               

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

     

     double silnia;     // zmienna przechowujaca wartosc obliczanej silni z danej liczby a

 

                

     ifstream odczyt("dane_silnia.txt");  

     ofstream zapis("wynik_silnia_iteracyjnie.txt"); 

 

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

  {

  

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

    

    silnia=1;                // przypisanie zmiennej -silnia- wartosci 1 bo 0! oraz 1! wynosi 1

    

    for (int i=2; i<=a; i++)          // w petli for iteracyjne obliczenie silni 

                                                  // rozpoczyna sie od i=2 bo i=1 oraz i=0 juz "zalatwilam"                                                            // przypisujac zmiennej silnia wartosc 1

       {

        silnia=silnia*i;

       }

zapis<<silnia<<endl;          //zapisuje do pliku wartosc silni i przechodzi do nowej lini

  } 

     

     odczyt.close();

     zapis.close();

     return 0;

 }

Rekurencyjnie


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

//           PROGRAM OBLICZA SILNIE WCZYTANEJ LICZBY Z PLIKU TEKSTOWEGO

//               - silnia ma w matematyce symbol ! (wykrzyknik)  np. 3! , 5!

//               - zapis taki rozumie sie w nastepujacy sposob: 3!=1*2*3   5!=1*2*3*4*5  oraz //                  przyjeto, ze 0!=1

//               - te obliczenia wykonuje wykorzystujac REKURENCJE

//               - rekurencja to taki sposob pisania algorytmu, ze funkcja wywoluje sama siebie

//               - lub mozna tez powiedziec, ze rekurencja to metoda algorytmiczna, gdzie cos //                 definiuje sie przez sama siebie

//               - np. przekladajac rekurencje na jezyk potoczny powiedzielibysmy, ze maslo

//                   sklada sie z masla :-)

//               - albo, kiedy chcemy wytlumaczyc co to jest maslo to mowimy: cale maslo to

//                  kawalek masla i jeszcze jeden kawalek masla :-)

//               - rekurencyje algorytmy sa bardzo proste i elegancko zapisane pod wzgledem //                  kodu C++

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

 

#include<iostream>

#include<fstream>

 

using namespace std;

 

// tutaj pisze definicje rekurencyjna obliczania silni

// pisze wiec funkcje -silnia- ktora wywolam w programie

// to miejsce w kodzie zrodlowym jest przeznaczone zawsze na pisanie definicji funkcji

 

 

float silnia (int a)     // zadeklarowana jako float bo w pliku sa duze liczby

                                  // mozna tez od razu zadeklarowac jako double (bardzo duze liczby)

{

if (a==0)               // jesli liczba =0 to od razu zwroc wartosc ze silnia wynosi 1

                             // bo tak jest z definicji silni

return 1;

else                                // gdy a ma inna wartosc to wykonaj ponizsza linie kodu

return silnia(a-1)*a;    // wlasnie tutaj wywolanie funkcji samej przez siebie 

                                      // czyli np. 3!=2!*3  

                                      // zwraca wartosc obliczonej silni

}

 

 

// teraz dopiero funkcja glowna czyli    main()

 

 int main()

 {

               

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

                    

     ifstream odczyt("dane_silnia.txt");  

     ofstream zapis("wynik_silnia.txt");  

   

  while(!odczyt.eof())   

  {

  

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

    

    silnia (a);  // wywoluje wczesniej zdefiniowana funkcje silnia,

                     // wywoluje ja przekazujac do obliczen wartosc liczby wczytanej z pliku

                     // ta linie kodu moge pominac

                    // bo w zapisie jeszcze raz wywoluje funkcje silnia(a)

                    // zostawilam dlatego, zeby pokazac

                    // jak wywoluje sie funkcje wczesniej zdefiniowane

   

zapis<<silnia(a)<<endl;  //zapisuje do pliku wartosc silni i przechodzi do nowej lini

  } 

     

     odczyt.close();

     zapis.close();

     return 0;

 }