/* Programa que dibuja una gra fica senoidal a partir de dos
parametros pasados por referencia desde la linea de comandos,
que seran la longitud de la cadena y el incremento de x */
 
 
#include <stdio.h>            /* Librerias utilizadas*/
#include <math.h>
#include <stdlib.h>
 
 
#define PI 3.141591          /* Usaremos una constante PI */
 
 
void main(int argc, char *argv[])
{
  int largo;           /* Largo se pasara por referencia a main */
  float paso;          /* Paso tambien, sera el 2 valor */
  double x=0,func;     /* x es la variable de la que se calcula el seno */
  char *cadena;        /* Declaramos una cadena de caracteres */
  int col,i,j;         /* Otras variables */
 
  if (argc!=3)         /* Si no se introducen 2 parametros, da error */
    {
      printf("\a\n\n\t\t   ERROR!!!\n\n\n");
            printf("\n\tP.D.: Debes introducir dos parametros\n");
      printf("\n    Por ejemplo: seno longitud_cadena incremento_x\n\n");
      exit(-1);
    }
 
  largo=atoi(argv[1]);    /* Convertimos argv a largo y paso */
  paso=atof(argv[2]);
 
  cadena=malloc((largo + 1) *sizeof(char));      /* Reservamos memoria para cadena */
 
  for(i=0;i<largo;i++)
   {
      *(cadena+i)='_';      /* Rellena la cadena */
   }
 
  *(cadena+largo)='\0';     /* Termina la cadena */
 
  for(j=1;j<26;j++)
   {
      puts("\n");        /*Esto limpia la pantalla*/
   }
 
  /* Generamos el resultado */
 
  do
   {
      func=sin(x);     /* Calculamos el valor donde ira el '*' */
 
      col=(func-1)/2*(largo-1)+(largo-1);     /* Calcula */
      *(cadena+col)='*';
      printf("%s\n",cadena);                  /* Sacamos el resultado a pantalla */
      *(cadena+col)='_';
      x+=paso;                                /* Incrementamos x ... */
 
   }                                          /* ... hasta los 2 pi */
  while (x<(2*PI));
  free(cadena);                               /* Liberamos la memoria */
}