Ir ao conteúdo

Como gravar matriz aleatória tipo float em arquivo txt ?


Nandaa

Posts recomendados

Postado

No programa abaixo, o usuário insere as dimensões manualmente e a matriz é gerada aleatoriamente (no intervalo de 0 a 10, considerando os números DECIMAIS), além disso, o programa calcula a média de cada linha formando uma nova coluna, como pode ser visto na saída logo a seguir:

#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 */float matriz(void){int i,j;int n,o;float soma[100];float media[100];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[i][j] = (rand() %105 + 1)/10.5;        soma[i] = soma[i] + m[i][j];        media[i] = (soma[i])/o;        }    }for(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]);    }}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");	matriz();	return 0;}

SAÍDA:

                           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): 30                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                9.52    2.29    3.81    0.48            4.02                6.38    7.71    3.05    2.57            4.93                6.86    5.62    3.81    9.52            6.45                5.43    8.48    7.43    1.33            5.67                5.14    8.38    3.81    5.43            5.69                0.38    3.43    1.90    4.67            2.60                2.38    5.81    1.24    9.71            4.79                6.57    2.10    8.29    7.71            6.17                4.29    6.48    7.24    5.24            5.81                0.29    3.24    5.52    2.67            2.93--------------------------------Process exited with return value 0Press any key to continue . . . 

Como devo gravar essa matriz e essa coluna em um arquivo txt, na forma como está acima, e depois ler a partir desse arquivo !?

Postado

Usa uma função para abrir um arquivo de texto e uma para fechar.

para abrir para escrever recomendo que use   ponteiro=fopen("arquivo.txt","a");

 

para gravar faça da mesma forma que fez com o printf, so que com o fprintf(ponteiro,o que vai ser impresso);

 

nao entendi sua duvida para ler este arquivo. quer que buscque um valor no arquivo??

Postado

É importante que o arquivo seja de texto mesmo?

Se você quiser gravar os dados em modo binário num arquivo e depois acessar os dados novamente a partir desse arquivo, é simples:

float matriz[100][50] = { ... };FILE *f = fopen("arquivo.bin", "wb");fwrite (matriz , sizeof(float), sizeof(matriz), f);fclose(f);
E pra resgatar os valores, você usa a função fread(), que faz o inverso.

Nesse caso os dados serão gravados em modo binário, se você abrir o arquivo com um editor de textos normal, vai ver apenas um monte de simbolos estranhos.

Se você quiser salvar os dados como um arquivo de texto mesmo, vai precisar usar a função fprintf():

float matriz[100][50] = { ... };FILE *f = fopen("arquivo.txt", "w");...fprintf (f, " %f \t", matriz[0][0]);...fclose(f);
Pra ler os dados de volta do arquivo, você usa a função fscanf(). Mas aí você vai precisar filtrar o resultado porque nem sempre a função sabe o que é número e o que é apenas um caracter normal (os espaços, tabs, mudanças de linha, etc).
Postado

Consegui resolver. Obrigada pela colaboração de todos mesmo assim!  ;)

#include <iostream>#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.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;    //Escrevendo a matriz e a coluna de médias no arquivo:    void Arquivo(){    int i,j;    int n,o;    float soma[100];    float media[100];    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[i][j] = (rand() %105 + 1)/10.5;            soma[i] = soma[i] + m[i][j];            media[i] = (soma[i])/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(dados)){		 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++){		printf("\n");		for(j=0;j<o;j++){			fscanf(stdout,"\t%f\t",m[i][j]);			printf("%.2f\t",m[i][j]);		}		fscanf(stdout,"%f",media[i]);		printf("\t%.2f",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();	return 0;}

Arquivado

Este tópico foi arquivado e está fechado para 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...