Ir ao conteúdo

salvando dados


osvaldo182

Posts recomendados

Postado

Preciso fazer um programa que faça calculos com matrizes e me retorne um resultado que depois será usado em um programa matematico.

Como e possivel salvar essa matriz em algum arquivo?

Existe algum algoritmo pronto para isso?

Obrigado.

Postado

Crudo,

procurei no fórum mas a maioria fala sobre estruturas que à medida que as informaçoes sao adicionadas ao programa ele as grava em arquivos de texto.

no meu caso será gerada uma matriz de numeros aleatorios e eu desejo salvar o resultado apos alguns calculos serem realizados. nenhum dado será adicionado ao programa( por exemplo usando scanf()), portanto nao tenho ideia do que fazer para salvar esses dados.

Postado

A manipulação de arquivos é a mesma, não importa se é com estrutura ou com matrizes.

Dá uma nesse site. Lá tem uma boa explicação sobre manipulação de arquivos.

Abaixo segue um exemplo próximo ao que você quer.

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *arquivo;
int matriz[3][3];
int i, j;

/* Abre o arquivo */
if((arquivo = fopen("C:\\teste.txt","w")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n\n");
exit(1);
}

srand((unsigned)time(NULL));

/* Preenche a matriz com números aleatórios */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
matriz[i][j] = rand()%100;
printf("[%i] ", matriz[i][j]);
}
printf("\n");
}

/* ...faça seus calculos */

/* Escreve a matriz no arquivo */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
fprintf(arquivo, "[%i] ", matriz[i][j]);
}
fprintf(arquivo, "\n");
}

fclose(arquivo);

printf("\nGravado com sucesso!\n\n");

return(0);
}

abs

Postado

Salve, osvaldo182.

O código abaixo salva a matriz, byte por byte.

você precisa implementar a parte que salva em disco, e se quiser mudar o tamanho dos dados que serão gravados no disco, é só mudar o comprimento do dado passado como parâmetro. Ou então, passar o ponteiro da matriz, e salvá-la de uma vez só.

[]'s


{

}

int main ( void )
{
int matriz [ 50 ] [ 50 ];

int tamanho_vetor = 0;
int *ptr_matriz = matriz[0]; // pega o endereço do primeiro elemento da matriz
int contador = 0;
void *ptr_nulo;
char *ptr_byte;

tamanho_vetor = sizeof matriz; // tamanho da matriz; em bytes;
ptr_nulo = ( void * ) ptr_matriz;
ptr_byte = ( char *) ptr_nulo;
for ( contador = 0; contador < tamanho_vetor; contador++ )
{
salvar_dado ( *ptr_byte );
ptr_byte++;
}
return ( 0 );
}
void salvar_dado ( unsigned char dado )

Postado

Voltando o tópico :wacko:

existe alguma maneira de botar um loop no nome do arquivo de texto a ser criado. Exemplo:

for ( i=1 ; i<=100; i++){

FILE *arquivo;

if((arquivo = fopen("C:\\Osvaldo\\teste.txt","w")) == NULL)

{

printf("Erro ao abrir arquivo!!!\n\n");

exit(1);

}

}

Eu tinha pensado em fazer um array de ponteiros ( contendo endereços de strings assim o nome da string dependeria de i), porém não consigo pensar em uma maneira de colocar o nome dessa string no arquivo de texto.

Fazendo isso depois eu quero utilizá-las como argumento de um loop for, mas dai eu acho que colocando o nome da pra usar o array de ponteiros como argumento e sera aberto o arquivo desejado.

Obrigado,

Osvaldo.

Postado

Pode fazer assim:

char file[64];
for ( i=1 ; i<=100; i++){

FILE *arquivo;

sprintf(file, "C:\\Osvaldo\\teste[%d].txt", i);
if((arquivo = fopen(file,"w")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n\n");
exit(1);
}
}

Postado

ta dando erro, o compilador n reconhece a palavra "file"

e ele n aceita aquele i no final, ele diz que é "invalid conversion from int to const char*"

to tentanu muito aqui mas to sem ideias

Postado

Cara compilei ele no CodeBlocks/GCC e foi de boa..

A string ali que fica no const char ta certa, acho que ele n ta achando o "file", por isso deu esse erro.. Verifique que declarou a variavel file

Codigo que compilou no CodeBlocks/GCC:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i;
char file[64];

for ( i=1 ; i<=100; i++)
{
FILE *arquivo;

sprintf(file, "C:\\Osvaldo\\teste[%d].txt", i);
if((arquivo = fopen(file,"w")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n\n");
exit(1);
}
}
}

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!