Apostar y ganar

Click Now!

jueves, 2 de mayo de 2013

C Programa de estadística basica


C
Lenguaje de programación C  estadisticas numeros


include    <iostream.h>
#include    <iomanip.h>
#include    <fstream.h>
#include    <graphics.h>
#include    <math.h>
#include    <conio.h>
#include    <stdlib.h>

const int MaxArreglo = 20;
//===========================================================================
//Definici¢n de todos los prototipos de funciones
int CapturarDatos(float *Datos);
void MarcoPresentacion();
char CaracterEstaEn(char ch, char *s);
float CalcularPromedio(float *Datos, int N);
void IntercambiarValoresDosVariables(float *a, float *b);
void ClasificarMuestraAscendentemente(float *Datos, unsigned int N);
float CalcularMediana(float *Datos, unsigned int N);
float EncontrarModa(float *Datos, int N);
float BuscarMenorYMayor(float *Datos, int N, float &mayor);
float DesviacionEstandard(float *Datos, int max);
void GraficarPorcentajes(float *Datos, int max);
void ImprimirEnImpresora(float *Datos, int max);
void LeerArchivoYCargarEnDatos(float *Datos, int &N);
void GrabarDatosEnArchivo(float *Datos, int N);
char OpcionMenu();
//===========================================================================
int CapturarDatos(float *Datos) {
int t, Max;

gotoxy(38,1);
cout << "n£mero items?(M ximo " << MaxArreglo<<"):         ";
gotoxy(66,1);
cin >> Max;
if(Max>0 && Max<=MaxArreglo){
for(t=0; t<Max; ++t) {
gotoxy(40, 2+t);
cout << "Digite n£mero real " << t+1 << ": ";
cin >> Datos[t];
}
gotoxy(40, 3+t);
cout << "Cualquier tecla y seguir..." ;
getch();
}
return Max;
}

void MarcoPresentacion(){
int indice;

window(1,1,80,25);
clrscr();
cout<<"ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
cout<<"º                        EJEMPLO DE ESTADISTICA BASICA                         º";
cout<<"ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹";
for(indice = 5; indice < 25; ++indice)
cout<<"º                                                                              º";
cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ";
window(2,7,70,23);
}

char AMayuscula(char c){  //PRUEBA DE ESCRITORIO
if(c>='a' && c<='z')
c = c - (97-65);    //convierte a may£scula si es min£scula

return c;
}

char CaracterEstaEn(char ch, char *s){  //PRUEBA ESCRITORIO
while(*s) {
if(ch == *s) return ch;
else s++;
}
return 0;
}

float CalcularPromedio(float Datos[], int N){ //PRUEBA ESCRITORIO
int t;
float Promedio=0, *P;

P = Datos;
for(t = 0; t < N; ++t){
Promedio += *P;   // Promedio = Promedio + *P; es lo mismo
P++;
}
Promedio /= N;
return Promedio;
}

float CalcularMediana(float Datos[], unsigned int N){ //PRUEBA ESCRITORIO
register int t;
float temporal[MaxArreglo];

for (t=0; t<N; ++t)
temporal[t] = Datos[t]; /* copiar Datos*/

ClasificarMuestraAscendentemente(temporal, N);
return (temporal[(N-1)/2]);
}

void IntercambiarValoresDosVariables(float *a, float *b){
float aux;

aux = *a;
*a = *b;
*b = aux;
}

void ClasificarMuestraAscendentemente(float *Datos, unsigned int N){
//PRUEBA ESCRITORIO cuando sea invocada desde la funci¢n CalcularMediana()
int i,j;
float aux;

for (i = 0; i < N; i++)
for (j = i; j < N; j++)
if (Datos[i] > Datos[j])
IntercambiarValoresDosVariables(&Datos[i], &Datos[j]);

}

float EncontrarModa(float *Datos, int N){ //PRUEBA ESCRITORIO
register int t, w;
float md, AnteriorModa;
int cont, antcont;

AnteriorModa=0;
antcont=0;
for (t=0; t< N; ++t) {
md = Datos[t];
cont = 1;
for(w=t+1; w < N; ++w)
if(md == Datos[w])
cont++;
if(cont > antcont) {
AnteriorModa = md;
antcont = cont;
}
}
return AnteriorModa;
}

float BuscarMenorYMayor(float *Datos, int N, float &mayor){//PRUEBA ESCITORIO
int t;
float menor;

menor = mayor = Datos[0];

for(t=1; t < N; ++t)
if(Datos[t] < menor)
menor = Datos[t];
else
if(Datos[t] > mayor)
mayor = Datos[t];

return menor;
}

void Mostrar(float *Datos, int Max){
register int t;
float total=0, porcentajes[MaxArreglo];

for (t = 0; t < Max; t++)
    total += Datos[t];
for (t = 0; t < Max; t++)
    porcentajes[t] =  Datos[t] / total;
for(t = 0; t < Max; ++t) {
gotoxy(32,1+t);
cout << setfill('.') << setw(2) << t+1 << setiosflags(ios::fixed)
<< setiosflags(ios::showpoint) << setiosflags(ios::right)
        << setprecision(2)  << setw(10) << Datos[t]
 << setw(10) << porcentajes[t]*100 << "%";
}
gotoxy(35,4+t); cout <<"Cualquier tecla y seguir...   "; getch();
}

float DesviacionEstandard(float *Datos, int Max){//PRUEBA ESCRITORIO
register int t;
float DesvStd=0, Promedio;
double aux;

Promedio = CalcularPromedio(Datos,Max);
for(t = 0; t < Max; ++t)
DesvStd += ((Datos[t] - Promedio) * (Datos[t] - Promedio));
if(Max) DesvStd /= Max;
DesvStd = sqrt(DesvStd);
return DesvStd;
}

void GraficarPorcentajes(float *Datos, int Max){//PRUEBA ESCRITORIO
int   ManejadorGrafico, ModoGrafico;
int  i, izquierda, arriba, ancho, abajo, profundidad;
float total=0;
float porcentajes[MaxArreglo];

if (Max){
for (i = 0; i < Max; i++)
      total += Datos[i];
for (i = 0; i < Max; i++)
      porcentajes[i] = ((float) Datos[i]) / total;

detectgraph(&ManejadorGrafico, &ModoGrafico);
initgraph(&ManejadorGrafico, &ModoGrafico, "");
ancho = (int)( (getmaxx()) / ((Max * 2 ) + 1) );
abajo = getmaxy() - 10;
profundidad = (int) (ancho / 4);
izquierda = ancho;
setbkcolor(WHITE);
for (i = 0; i < Max; i++) {
arriba = (abajo) - ((int)(porcentajes[i] * (getmaxy() - 25)));
setcolor(RED); //color de las l¡neas de cada barra
setfillstyle(i+1, i+1); //setfillstyle(tipodeRelleno, ColorRelleno)
bar3d(izquierda,arriba,(izquierda+ancho),abajo,profundidad,1);
izquierda += (ancho * 2);
}
getch();
closegraph();
MarcoPresentacion();
}
}

void ImprimirEnImpresora(float *Datos, int Max){
register int t;
float total=0, porcentajes[MaxArreglo];
ofstream Imprimir("PRN");

for (t = 0; t < Max; t++)
total += Datos[t];
for (t = 0; t < Max; t++)
porcentajes[t] =  Datos[t] / total;
gotoxy(35,4); cout <<"Imprimiendo...   ";
  Imprimir << "\n     Registro       Datos         Porcentajes \n\n";
for(t = 0; t < Max; ++t) {
Imprimir << setfill('.') <<setw(5) << t+1 << setiosflags(ios::fixed)
<< setiosflags(ios::showpoint) << setiosflags(ios::right)
          << setprecision(2)  << setw(15) << Datos[t]
<< setw(15) << porcentajes[t]*100 << "%" << endl;
}
Imprimir << "\f";
}

void LeerArchivoYCargarEnDatos(float *Datos, int &N){
int IDArchivo;
fstream Archivo;

N=0;
Archivo.open("Estadist.ica", ios::in | ios::binary);
if(Archivo){
    while(  Archivo.read( (char *)&Datos[N], sizeof(float) ) )
N++;
Archivo.close();
cout << "Le¡dos desde disco: " ;  Mostrar(Datos, N);
}
else
cout << "Archivo no existe";
}

void GrabarDatosEnArchivo(float *Datos, int N){
int i;
fstream Archivo;

Archivo.open("Estadist.ica", ios::out|ios::binary|ios::trunc);//borra archivo si existe
if (!Archivo)
cout << "Error en la apertura del archivo \a";
else{
for(i=0; i<N; i++)
Archivo.write((char *)&Datos[i], sizeof(float));

Archivo.close();
}
}

char OpcionMenu(){
char entrada;

clrscr();
do {
gotoxy( 3, 1); cout << "MENU PRINCIPAL";
gotoxy( 3, 2); cout << "==============";
gotoxy( 3, 3); cout << "Capturar Datos";
gotoxy( 3, 4); cout << "Estad¡sticas b sicas";
gotoxy( 3, 5); cout << "Ordenar de menor a mayor";
gotoxy( 3, 6); cout << "Mostrar Datos";
gotoxy( 3, 7); cout << "Graficar en barras";
gotoxy( 3, 8); cout << "Imprimir en papel";
gotoxy( 3, 9); cout << "Terminar";
gotoxy( 3,13); cout << "Elija letra inicial (C E O M G I T): ";
gotoxy(39,13); entrada = AMayuscula(getch());
} while (!CaracterEstaEn(entrada, "CEOMGIT"));
return entrada;
}

void main(){ //ESTADISTICA BASICA FUNCION PRINCIPAL
float Datos[MaxArreglo];  // almacena valores de la muestra
int N=0; //N£mero verdadero de elementos
float Promedio=0,Mediana=0,DesvStd=0, Varianza=0, Moda=0, Mayor=0, Menor=0;

MarcoPresentacion();
LeerArchivoYCargarEnDatos(Datos, N);
for(;;) {
switch( OpcionMenu() ) {
case 'C': N = CapturarDatos(Datos);
break;
case 'E': Promedio = CalcularPromedio(Datos, N);
Mediana = CalcularMediana(Datos, N);
Moda = EncontrarModa(Datos, N);
Menor = BuscarMenorYMayor(Datos, N, Mayor);
DesvStd = DesviacionEstandard(Datos, N);
Varianza = DesvStd*DesvStd;
gotoxy(30, 1); cout << "Promedio       : " << Promedio;
gotoxy(30, 2); cout << "Mediana        : " << Mediana;
gotoxy(30, 3); cout << "Desviaci¢n Std : " << DesvStd;
gotoxy(30, 4); cout << "Varianza       : " << Varianza;
gotoxy(30, 5); cout << "Moda           : " << Moda;
gotoxy(30, 6); cout << "M ximo         : " << Mayor;
gotoxy(30, 7); cout << "M¡nimo         : " << Menor;
gotoxy(30, 9); cout << "Cualquier tecla y seguir...      ";
getch();
break;
case 'M': Mostrar(Datos, N);
break;
case 'O': ClasificarMuestraAscendentemente(Datos, N);
Mostrar(Datos, N);
break;
case 'G': GraficarPorcentajes(Datos, N);
break;
case 'I': ImprimirEnImpresora(Datos, N);
break;
case 'T': GrabarDatosEnArchivo(Datos, N); exit(0);
}
}
}