/* programa para comprobar el funcionamiento de las*/
/* prioridades. puede ejecutarse con xterm -e      */
/* en segundo plano, con la prioridad cambiada     */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>


/* **********************e.c***********************/
/* calcula e imprime n y (1+1/n)^n para n desde 1 */
/*  hasta el valor que se le pasa como parametro  */
/**************************************************/

#define MAXBUCLE  1000

void bucle (int veces)              /* para que no sea tan rapido */
{
  int i,j;
  float x=4.57890;
  for (i=0; i< veces; i++)
     for (j=0; j< veces; j++)
        x=x*x*x;
}

float UnoEntreN (int n)   /*  1/n */
{
  float res;
  res = 1.0 /n;
  return (res);
}

float UnoMasInv (int n)  /* 1 + 1/n */ 
{
  float res;
  res = 1.0 + UnoEntreN (n);
  return (res);
}

float ElevaN ( float val, int n)
{
  int i;
  float res=val;
  for (i=1; i<n; i++) 
     res*=val;
  return (res);
} 

float e (int n)
{
  return (ElevaN (UnoMasInv (n), n));
}
void uso(char * nam)
{
   printf ("%s calcula el valor del numero como limite de la sucesion (1+1/n)^n\n", nam);
   printf ("	recibe como parámetro el numero de iteraciones a realizar\n");
   printf ("	y un factor de enlentencimento opcional (por defecto 1000)\n");
   printf ("	para cada iteracion imprime n y (1+1/n)^n \n");
} 

int main (int argc, char * argv[])
{
  int i,n;
  int lento=MAXBUCLE;
  if (argc < 2){
	 uso(argv[0]);
     exit (0);
  }
  if ((n=atoi(argv[1])) < 1) 
     exit (0);
  if (argv[2]!=NULL)
     lento=atoi(argv[2]);
  for (i=1; i<=n; i++){
     bucle (lento);
     printf ("*%d->%f\n",i,e(i));
  }
  return 0;
}
