//*************************************************************************
// 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;
}
//*************************************************************************
// 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;
}