/*             Programa de calculo da magnitude
             de uma estrela a partir das contagens na
           fotomultiplicadora, usado no Obs. Morro Santana 


                 FABRICIO FERRARI,      Poa, 29 III 1996
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include <dos.h>

int i = 0;
float cb[20], cv[20], cbc[20], cvc[20];
float ctb=0, ctv=0, ctbc=0, ctvc=0;
float contmb,stcontmb,contmbc,stcontmbc;
float contmv,stcontmv,contmvc,stcontmvc;

float media(float T, int N);
float stdev(float x[], float med, int N);
void mag(float C,float SC,float CC,float SCC);

void main(void)
{
    system("cls");           /* esta funcao e somente para DOS */
    printf("\n\n\n");
    while ( cb[i-1] != 1 )  {
         printf("\tContagens em B:");
         scanf("%f", &cb[i] );
         ctb += cb[i];
         i++;
    }
    ctb--;
    i--;
    contmb=media(ctb,i);
    stcontmb=stdev(cb,contmb,i);
    printf("\nMedia � desvio = %10.5f � %f\n\n\n", contmb,stcontmb);


    i=0;
    while ( cbc[i-1] != 1 ) {
         printf("\tCeu em B:");
         scanf("%f", &cbc[i] );
         ctbc += cbc[i];
         i++;
    }
    ctbc--;
    i--;
    contmbc=media(ctbc,i);
    stcontmbc=stdev(cbc,contmbc,i);
    printf("\nMedia � desvio= %10.5f � %6.5f\n\n\n", contmbc,stcontmbc);
    mag(contmb,stcontmb,contmbc,stcontmbc);


    i=0;
    while ( cv[i-1] != 1 ) {
         printf("\tContagens em V:");
         scanf("%f", &cv[i] );
         ctv += cv[i];
         i++;
    }
    ctv--;
    i--;
    contmv = media(ctv,i);
    stcontmv = stdev(cv,contmv,i);
    printf("\nMedia � desvio= %10.5f � %6.5f\n\n", contmv,stcontmv);

    i=0;
    while ( cvc[i-1] != 1 ) {
         printf("\tCeu em V:");
         scanf("%f", &cvc[i] );
         ctvc += cvc[i];
         i++;
    }
    ctvc--;
    i--;
    contmvc=media(ctvc,i);
    stcontmvc=stdev(cvc,contmvc,i);
    printf("\nMedia � desvio= %10.5f � %6.5f\n\n\n", contmvc,stcontmvc);
    mag(contmv,stcontmv,contmvc,stcontmvc);

    printf("\n\n\n\n\n\n\t\t\tFabricio Ferrari 1996�FF. ");
    sleep(2);
}



/* FUNCOES */

float media(float T, int N)
{
     return T/N;

}


float stdev(float x[], float med, int N)
{
   int n=0;
   float arg=0;

   while ( n < N ) {
      arg += pow( (med-x[n]),2);
      n++;
   }
   return (sqrt (((1/((pow(N,2))-N)) * arg)));

}


void mag(float C, float SC, float CC, float SCC)
{
    float cont,stcont,mag,stmag;
    cont=C-CC;
    stcont=SC+SCC;
    mag=-2.5*log10(cont);
    stmag=2.5*stcont/cont;
    printf("\tCONT � DESVIO = %10.5f � %6.5f\n",cont, stcont);
    printf("\tMAG  � DESVIO = %3.5f � %2.5f\n\n\n",mag, stmag);
}
