Ir ao conteúdo
  • Cadastre-se

Como gravar uma matriz de tipo float em um arquivo txt?


Nandaa

Posts recomendados

No programa a seguir, eu aleatorizei a matriz de forma que o usuário possa inserir o seu tamanho manualmente e de forma que os valores dessa matriz variem de 0 ate 10 (considerando valores decimais). Até aí tudo bem. O problema começou quando eu tentei gravar essa matriz em um arquivo. 


 


Esses são os ERROS que ocorrem:


 


C:\Users\Annanda\Documents\lal.cpp                                   In function 'void Arquivo()':


61 28 C:\Users\Annanda\Documents\lal.cpp                         [Error] invalid types 'float[int]' for array subscript


64 29 C:\Users\Annanda\Documents\lal.cpp                         [Error] invalid types 'float[int]' for array subscript


77 28 C:\Users\Annanda\Documents\lal.cpp                         [Error] invalid types 'float[int]' for array subscript


79 29 C:\Users\Annanda\Documents\lal.cpp                         [Error] invalid types 'float[int]' for array subscript


29 C:\Users\Annanda\Documents\Makefile.win                     recipe for target 'lal.o' failed


 


Não sei mais o que fazer!!!    


 


#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#include <time.h>

#include <string.h>

 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

FILE *dados;

float matriz(void){

int i,j;

int n,o;

float soma[50];

float media[50];

printf("\n\tEntre com o numero de provas (Ex.: 4): ");

scanf("%d",&o);

printf("\n\tEntre com o numero de alunos (Ex.: 30): ");

scanf("%d",&n);

float m[100][50];

for(i=0;i<n;i++){

for(j=0;j<o;j++){

m[j] = (rand() %105 + 1)/10.5;

soma = soma + m[j];

media = (soma)/o;

  }

}

for(i=0;i<n;i++){

printf("\n\t");

for(j=0;j<o;j++){

printf("\t%.2f",m[j]);

}

printf("\t\t%.2f\t",media);

}

}

    void Arquivo(){

    float media,m;

    int i,n,j,o;

dados = fopen("dados.txt","w");

if(dados != NULL) printf("\n\n\tArquivo aberto com sucesso\n\t");

else{

printf("\n\tERRO ao abrir o arquivo\n\t");

system("pause");

exit(1);


for(i=0;i<n;i++){

for(j=0;j<o;j++){

fprintf(dados,"%f\t",m[j]);

fprintf(dados,"%t");

}

fprintf(dados,"%f",media);

fprintf(dados,"%t");

fprintf(dados,"\n");

}

if (ferror){

printf("\n\tErro ao gravar no arquivo\n\t");

system("pause");

exit(2);

}

fclose(dados);

dados = fopen("dados.txt","r");

for(i=0;i<n;i++){

for(j=0;j<o;j++){

fscanf(dados,"%f\t",&m[j]);

}

fscanf(dados,"%f",&media);

}

fclose(dados);

 

 

}

 

int main(){

printf("\n\t\t\tNotas das provas e media de cada aluno\n\t\n");

printf("\n\tObs.: Cada linha representa um aluno e as colunas representam as provas, sendo que a ultima representa a media de cada aluno.\n\n");

Arquivo ();

matriz();

return 0;

}

Link para o comentário
Compartilhar em outros sites

Ok!

Não estou conseguindo, ler quase nada, porém o conceito de uma vetor automático que em consegui ver está errado.

Observe:


/*Aqui você já tem a memoria necessária, ou limitada, então não faz sentido*/float soma[50]; float media[50];

Esqueça também essa 'estoria' de que as variáveis e vetores devem ser declaradas e inicializadas no topo da função

isso é uma normatização trivial muito conceituadas nas faculdades, nas ruas é uma besteira total;

Vamos, ao que interessa


Observe como é o conceito de vetor automático.

#include <stdio.h>#include <stdlib.h>/*Funçao Principal chamadora*/int main(){    int valor = 0;  //matriz[9999]; antigamente        puts("Entre com valor da matriz:");        scanf("%d", &valor);    if(valor > 0) /*Matriz somente será feita mediante valor valido, hoje em dia*/    {        int matriz[valor];        int i;        for(i = 0; i < valor; i++)        {               matriz[i] = 0;               printf("%d ", matriz[i]);        }    }    return (0);}
Neste exemplo matriz, não pode ser acessado fora do Block if,
Apenas coloque dentro de um bloco para entendermos melhor o conceito.
normalmente if não entre neste algoritmo.
:)
  • Curtir 2
Link para o comentário
Compartilhar em outros sites

O código está muito bagunçado. Você devia usar a tag code antes de postar.

Acontece que você declarou float m e está tratando essa variável se fosse uma matriz.

Você parece estar fazendo confusão entre float m[100][50] declarada na função matriz com float m declarada na função Arquivo.

Link para o comentário
Compartilhar em outros sites

A intenção do programa é aleatorizar uma matriz mesmo, e ao lado dela imprimir a coluna das médias de cada linha. Eu talvez tenha confundido alguma coisa no meio do caminho, porque sou iniciante em c++, mas a minha intenção realmente é criar uma MATRIZ. Só estou muito confusa na hora de gravar essas informações em um arquivo.  :confused:

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <conio.h>#include <time.h>#include <string.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */FILE *dados;float matriz(void){int i,j;int n,o;float soma[100];float media[100];printf("\n\tEntre com o numero de colunas (Ex.: 4): ");scanf("%d",&o);printf("\n\tEntre com o numero de linhas (Ex.: 30): ");scanf("%d",&n);float m[100][50];for(i=0;i<n;i++){    for(j=0;j<o;j++){        m[i][j] = (rand() %105 + 1)/10.5; //aleatorizando a matriz        soma[i] = soma[i] + m[i][j]; //soma de cada linha da matriz        media[i] = (soma[i])/o; //média de cada linha (soma/nº de colunas)        }    }//imprimindo a matriz e a coluna das médias ao ladofor(i=0;i<n;i++){    printf("\n\t");    for(j=0;j<o;j++){        printf("\t%.2f",m[i][j]);    }    printf("\t\t%.2f\t",media[i]);    }}    //Escrevendo a matriz e a coluna de médias no arquivo:    void Arquivo(){    	float media;    	int m;    	int i,n,j,o;    		    dados = fopen("dados.txt","w"); //criando arquivo	    	    if(dados != NULL) printf("\n\n\tArquivo aberto com sucesso\n\t");	    else{		     printf("\n\tERRO ao abrir o arquivo\n\t");		     system("pause");		     exit(1);	    } 	    for(i=0;i<n;i++){		    for(j=0;j<o;j++){			    fprintf(dados,"%.2f\t",m[i][j]);  //ERRO			    fprintf(dados,"%t");		    }		    fprintf(dados,"%.2f",media[i]);       //ERRO		    fprintf(dados,"%t");		    fprintf(dados,"\n");	}	if (ferror){		 printf("\n\tErro ao gravar no arquivo\n\t");		 system("pause");		 exit(2);	}	fclose(dados);	dados = fopen("dados.txt","r");	for(i=0;i<n;i++){		for(j=0;j<o;j++){			fscanf(dados,"%f\t",&m[i][j]);        //ERRO		}		fscanf(dados,"%f",&media[i]);             //ERRO	}	fclose(dados);	}int main(){	printf("\n\t\t\tNotas das provas e media de cada aluno\n\t\n");	printf("\n\tObs.: Cada linha representa um aluno e as colunas representam as provas, sendo que a ultima representa a media de cada aluno.\n\n");	Arquivo();	matriz();	return 0;}

No programa eu tentei modificar a matriz m[100][50], para m[n][o], mas deu errado.

A intenção é que fique assim:

                        Notas das provas e media de cada aluno        Obs.: Cada linha representa um aluno e as colunas representam as provas, sendo que a ultima representa a media de cada aluno.        Entre com o numero de provas (Ex.: 4): 4        Entre com o numero de alunos (Ex.: 30): 20                4.00    8.86    3.33    3.90            5.02                5.71    7.62    3.24    6.10            5.67                7.90    10.00   3.43    0.57            5.48                7.33    2.67    8.76    6.86            6.40                5.33    7.43    9.81    7.81            7.60                4.95    0.95    1.71    4.67            3.07                7.90    9.33    9.24    2.57            7.26                8.00    4.86    8.86    9.24            7.74                6.86    8.95    8.10    6.48            7.60                4.57    4.76    2.48    2.38            3.55                3.71    7.81    3.14    8.95            5.90                3.24    4.29    2.10    4.48            3.52                0.86    4.19    3.14    2.86            2.76                0.76    9.81    8.38    4.76            5.93                0.86    7.81    1.90    4.19            3.69                3.05    9.14    3.43    5.52            5.29                7.52    7.33    1.05    1.71            4.40                4.76    7.05    4.00    7.24            5.76                3.43    0.95    1.05    2.00            1.86                9.24    2.10    3.24    8.00            5.64--------------------------------Process exited with return value 0Press any key to continue . . .

A matriz e a coluna das médias de cada linha.


Eu achei alguns erros em uma das funções, e modifiquei, agora o programa não da erros mas ele para de executar, não consigo entrar com os valores ainda.

 void Arquivo(){    	float media[100];    	float m[100][50]; //havia deixado no tipo int por engano    	int i,n,j,o;    		    dados = fopen("dados.txt","w"); //criando arquivo	    	    if(dados != NULL) printf("\n\n\tArquivo aberto com sucesso\n\t");	    else{		     printf("\n\tERRO ao abrir o arquivo\n\t");		     system("pause");		     exit(1);	    } 	    for(i=0;i<n;i++){		    for(j=0;j<o;j++){			    fprintf(dados,"%f\t",m[i][j]);  			    fprintf(dados,"%t");		    }		    fprintf(dados,"%f",media[i]);       		    fprintf(dados,"%t");		    fprintf(dados,"\n");	}	if (ferror){		 printf("\n\tErro ao gravar no arquivo\n\t");		 system("pause");		 exit(2);	}	fclose(dados);	dados = fopen("dados.txt","r");	for(i=0;i<n;i++){		for(j=0;j<o;j++){			fscanf(dados,"%f\t",&m[i][j]);        		}		fscanf(dados,"%f",&media[i]);             	}	fclose(dados);	}int main(){	printf("\n\t\t\tNotas das provas e media de cada aluno\n\t\n");	printf("\n\tObs.: Cada linha representa um aluno e as colunas representam as provas, sendo que a ultima representa a media de cada aluno.\n\n");	Arquivo();	matriz();	return 0;}

So falta terminar de executar.

Link para o comentário
Compartilhar em outros sites

Ok
está função está 'muito louca'.

void Arquivo()
int i,n,j,o; //Não foram inicializados

O logo abaixo você os utiliza em um loop:

for(i=0;i<n;i++)         for(j=0;j<o;j++)

Acredito que esse seja o motivo de está travando.

se n por exemplo tiver algo como por exemplo 268797 imagina o que vai acontecer no vetor !!!

 

Aproposito eu notei que, existe variáveis como mesmo nome repetido em muitas funções,

São elas: o, n, media, m;
se por acaso essas variáveis são de fato as mesma e por tanto devem ter o

mesmos dados, as declare como variáveis globais.

Ainda sim, se o termo variáveis globais lhe é estranho lhe digo

que toda variável declarada no topo do documento pode ser acessadas em qualquer função.

Por Exemplo; 

///Essa é uma Variável Global declarada que existe no seu programa.FILE *dados; 

:)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!