
Enviado em 16/03/2017 - 22:02h
Eae pessoal, estava fazendo um algoritmo pra ler os dados de um arquivo separado por vírgula, passar esses dados para uma matriz do tipo float para poder realizar contas com os dados do arquivo. Então usei a função fgets pra pegar cada linha e percorre-la de virgula em virgula, salvando os valores em uma variável (char) e depois convertendo essa variável para uma outra variável tipo float, mas a função atof() está modificando alguns valores na hora da conversão. Exemplo:#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<locale.h>
#include<string.h>
float** alocamatriz(float **m, int l, int c){
int cont;
m=(float**)malloc(sizeof(float*)*l);
for(cont=0;cont<l;cont++){
m[cont]=(float*)malloc(sizeof(float)*c);
}
return m;
}
int main(){
FILE *arq,*arquivo;
char vetor[5000],*valor,*valor2,vetor2[5000];
float **m,ventomedio,soma=0,aux=-999.989990,vento,v,z;
int l=0,c=0,cont,linha=0,coluna;
//Leitura do coeficiente
printf("Digite o valor de z:");
scanf("%f",&z);
//Abertura do arquivo
arq = fopen("Dados.txt","rt");
if(arq==NULL){
printf("Erro na abertura do arquivo!\n");
exit(0);
}
//Verificação do arquivo para saber o numero de linhas e colunas(Necessario na alocação da matriz)
while (fgets(vetor, sizeof(vetor), arq)){
valor = strtok(vetor,",");
while (valor != NULL){
valor = strtok(NULL, ",");
if(l==0){
c++;
}
}
l++;
}
//Alocação da matriz
m=alocamatriz(m,l,c);
fclose(arq);
//Reabertura do arquivo
arq = fopen("Dados.txt","rt");
if(arq==NULL){
printf("Erro na abertura do arquivo!\n");
exit(0);
}
//Passagem dos dados do arquivo para a matriz
while (fgets(vetor2, sizeof(vetor2), arq)){
valor2=strtok(vetor2, ",");
if(linha!=0){
m[linha][0]=atof(valor2);
}
coluna=1;
while (valor2 != NULL){
valor2 = strtok(NULL, ",");
if(linha!=0){
m[linha][coluna]=atof(valor2); //Revisar essa função
}
coluna++;
}
linha++;
}
// Calculo do vento medio, raiz(u^2+v^2)
for(linha=1;linha<l;linha++){
if(m[linha][8]!=aux && m[linha][9]!=aux){
vento=sqrt(pow(m[linha][8],2)+pow(m[linha][9],2)); // raiz de u^2+v^2
soma=soma+vento;
}
}
//Vento medio na altura de 3 metros
ventomedio=soma/(l-1);
//Cria o arquivo onde sera salvo o resultado
arquivo=fopen("Resultado.txt","wt");
//Simulações
for(cont=10;cont<=100;cont=cont+10){
v=ventomedio*(log(3/z)/log(cont/z));
fprintf(arquivo,"Vento medio a Altura de %dm: %f\n ",cont,v);
}
//Fecha os arquivos
fclose(arq);
fclose(arquivo);
system("pause");
return 0;
}
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Trazendo de volta o Serviços em Segundo Plano no Plasma6
É normal não gostar de KDE? (21)
Servidor para arquivos e banco de dados (4)
780 mil usuários do Janelas baIxaram Linux em um mês (4)
Atualizei meu ubuntu e desliguei e ele não inicia corretamente (12)









