Anda di halaman 1dari 3

e llamado al archivo "18.txt" por ninguna razn en especial.

Lo que quiero hacer e


s leer los nmeros en el archivo y realizar algunas operaciones matemticas con ello
s. Como estn en formato de texto, primero debo convertirlos a nmeros decimales.
Para ello uso la funcin "atof", pero hay un problema: mis nmeros usan coma decimal
, y la funcin "atof" considera punto decimal. Debo leer los nmeros, lnea por lnea, y
ponerlos en el formato con el que puede trabajar "atof", as que declaro un aray
de caracteres llamado "palabra". Ninguno de los nmeros guardados en "18.txt" ocu
pa ms de cinco caracteres, as que "palabra" es declarada como: char palabra[6];
Luego recorro cada caracter dentro de "palabra" y si encuentro una coma, la reem
plazo por un punto.
El array "beta", separa espacio en memoria para 150 nmeros decimales ya que slo qu
iero operar con 150 nmeros en total.
El cdigo fuente es el siguiente (el ejecutable compilado est en la misma carpeta q
ue "18.txt"):
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
void main(int argc, char* argv[])
{ FILE *fp;
int i;
double *beta, c, promedio, rms, desviacion;
char palabra[6];
beta = (double *)malloc(sizeof(double)*151);
i=0;
fp = fopen("18.txt", "r");
if (fp==NULL)
cout<<"no existe el archivo \n";
else {
do
{
c = fscanf(fp, "%s", palabra);
for(int j=0; j<6; j++)
if (palabra[j]== ',')
{ palabra[j]='.'; break; }
beta[i] = atof(palabra);
cout<<beta[i];
cout<<"\n";
i++;
}
while (c != EOF && i != 151);
//valores estadsticos:
promedio=0; desviacion=0; rms=0;
//Promedio
for (int j= 0; j<=150; j++)
promedio= promedio+ beta[j];
promedio = promedio/151;
cout<<"Promedio "; cout<<promedio;
cout<<"\n";
//Desviacin Estndar
for (int j= 0; j<=150; j++)
desviacion= desviacion + pow((beta[j]-promedio),2);
desviacion=pow(desviacion,0.5)/pow(151,0.5);
cout<<"la desviacion estandar es: "; cout<<desviacion;
cout<<"\n";
//Valor Cuadrtico Medio
for (int j= 0; j<=150; j++)
rms= rms + pow(beta[j],2);
rms=pow(rms,0.5)/pow(151,0.5);
cout<<"El valor RMS: "; cout<<rms;
cout<<"\n";
fclose(fp);
}
system("PAUSE");
}
Pero si quiero operar con todos los nmeros en un archivo de texto sin importar cun
tos sean, usar este cdigo:
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
void main(int argc, char* argv[])
{ FILE *fp;
double i;
double beta, c, promedio, rms, desviacion;
char palabra[6];
//valores estadsticos:
promedio=0; desviacion=0; rms=0;
i=0;
fp = fopen("18.txt", "r");
if (fp==NULL)
cout<<"no existe el archivo \n";
else {
do
{
c = fscanf(fp, "%s", palabra);
for(int j=0; j<6; j++)
if (palabra[j]== ',')
{ palabra[j]='.'; break; }
beta = atof(palabra);
cout<<beta;
cout<<"\n";
i++;
promedio = promedio + beta;
rms = rms + pow(beta,2);
}
while (c != EOF);
promedio = promedio/i;
rms=pow(rms,0.5)/pow(i,0.5);
i=0;
rewind(fp);
do
{
c = fscanf(fp, "%s", palabra);
for(int j=0; j<6; j++)
if (palabra[j]== ',')
{ palabra[j]='.'; break; }
beta = atof(palabra);
i++;
desviacion= desviacion + pow((beta-promedio),2);
}
while (c != EOF);
desviacion=pow(desviacion,0.5)/pow(i,0.5);
cout<<"Promedio "; cout<<promedio;
cout<<"\n";
cout<<"la desviacion estandar es: "; cout<<desviacion;
cout<<"\n";
cout<<"El valor RMS: "; cout<<rms;
cout<<"\n";
fclose(fp);
}
system("PAUSE");
}
Ambos cdigos han sido probados con el compilador gratuito de Borland.
Cmo usar el compilador, lo explico aqu.
En este link hay informacin sobre "fscanf" y "rewind". Y aqu hay un tutorial sobre
lectura y escritura de archivos con C++.

Anda mungkin juga menyukai