/*****************************************************************
* Ovo delo zaštićeno je licencom Creative Commons CC BY-NC-ND 4.0
* (Attribution-NonCommercial-NoDerivatives 4.0 International License).
* Za detalje pogledati LICENSE.TXT
* Autori: Milena Vujosevic Janicic, Jovana Kovacevic,  
*         Danijela Simic, Andjelka Zecevic, Aleksandra Kocic
******************************************************************/

#include <stdio.h>
#include <math.h>

/* Funkcija racuna vrednost e^x kao parcijalnu sumu reda
   suma(x^n/n!), gde indeks n ide od od 0 do beskonacno, pri cemu
   se sumiranje sprovodi sve dok je sabirak po apsolutnoj vrednosti
   veci od date tacnosti eps. */
double e_na_x(double x, double eps) {
  double s = 1, clan = 1;
  int n = 1;

  /* Parcijalnu suma se formira tako sto se u svakoj iteraciji
     petlje promenljivoj s doda jedan sabirak sume oblika (x^n)/n!
     koji se cuva u promenljivoj clan.

     Svaki sabirak se dobija na osnovu prethodnog tako sto se
     prethodni pomnozi sa x i podeli sa n (n predstavlja redni broj 
     sabirka u sumi).

     Prvi sabirak (kome odgovara n=0) iznosi 1; zbog toga
     promenljive s i clan se inicijalizuju na vrednost 1.

     Sumiranje se sprovodi sve dok je sabirak po apsolutnoj
     vrednosti veci od date tacnosti eps. */
  do {
    clan = (clan * x) / n;
    s += clan;
    n++;
  } while (fabs(clan) > eps);

  return s;
}

int main() {
  /* Deklaracija potrebnih promenljivih. */
  double x, eps;

  /* Ucitavanje vrednosti x i eps. */
  printf("Unesite broj x: ");
  scanf("%lf", &x);
  printf("Unesite eps: ");
  scanf("%lf", &eps);

  /* Ispis rezultata. */
  printf("Rezultat: %f\n", e_na_x(x, eps));
  return 0;
}