ler um arquivo de uma matriz

1. ler um arquivo de uma matriz

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/11/2010 - 09:47h

Bom dia pessoal estou iniciando em programacao e tenho um exercicio
para resolver, consegui fazer o exercicio, mas não sei como se faz
o arquivo para ler o programa, será que podem me auxiliar.
segue o problema:

2) Crie um programa que leia de um arquivo os elementos inteiros de uma matriz
10x10, imprimir a soma dos valores que estão acima da diagonal principal, imprimir a
multiplicação dos valores que estão abaixo da diagonal principal, e imprimir os
elementos cuja soma dos valores das posições seja um número impar. Todas as
impressões devem ser feitas tanto na tela quanto no arquivo Q2-S1.txt.

segue o exercicio mas sem a parte do arquivo

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
float mat[MAX][MAX];
int i,j,x;
int n; // delimitador da ordem da matriz
float soma; // soma dos termos desejados da matriz
float aux,mult; // multiplicacao os termos desejados

aux=0;

printf("\n\nDIGITE A ORDEM DA MATRIZ: ");
scanf("%d",&n);
printf("\n");
printf("\n\nENTRE COM OS VALORES DA MATRIZ:\n");
printf("\n");
for(i = 0;i < n;i++)
for(j = 0;j < n;j++)
{
printf("mat[%d][%d]= ",i+1,j+1);
scanf("%f",&mat[i][j]);

}

// Somando os termos desejados da matriz
soma = 0;
for (i = 0; i < n; i++){
for (j = i + 1; j < n; j++){
soma += mat[i][j];
}
}

printf("A SOMA DOS VALORES QUE ESTAO ACIMA DA DIAGONAL PRINCIPAL E= %.0f\n",soma);
printf("\n");

{

// multiplicacao os termos desejados da matriz
mult= 1;
for (i = 0; i < n; i++){
for (j = 0 ; j < n; j++){


if(j<i){
mult = mult* mat[i][j];
}
}
}

printf("A MULTIPLICACAO DOS VALORES QUE ESTAO ABAIXO DA DIAGONAL PRINCIPAL E= %.0f\n",mult);
printf("\n");

for (i = 0; i < n; i++){
for (j = 0 ; j < n; j++){
x=i+j;
if (x % 2>0) {

printf("OS ELEMENTOS CUJA A SOMA DOS VALORES DAS POSICOES E IMPAR E= %.0f\n",mat[i][j]);


}
}

}
scanf("%d",&n);
}

system("cls");

return(0);

}



  


2. Re: ler um arquivo de uma matriz

André
andrezc

(usa Debian)

Enviado em 22/11/2010 - 09:56h

Você teria de "pegar" os elementos da matriz em um arquivo de texto, e logo após soma-los ?


3. Re: ler um arquivo de uma matriz

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 22/11/2010 - 11:34h

Primeiro, para abrir (criar ou editar) um arquivo, siga os passos:
http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node34.html

Depois, leia a matriz (m[][] é a matriz, arq é o ponteiro para o arquivo aberto)
for(i=0;i<10;i++)
for(j=0;j<10;j++)
fscanf(arq, "%d", &m[i][j]);

Para gravar a matriz no arquivo, utilize
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
fprintf(arq, "%d", m[i][j]);
fprintf(arq, "\n");//Mudando de linha
}

Após todas as operações com o arquivo, favor, feche-o:

fclose(arq);

Se preciso, cheque isto:
http://www.vivaolinux.com.br/artigo/Manipulando-arquivos-em-C-(parte-1)/

Espero ter ajudado.

Embraces!


4. Re: ler um arquivo de uma matriz

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/11/2010 - 12:13h




Fiz ele ,mas não está dando certo alguem pode me ajudar a concluir.



#include<conio.h>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define MAX 10

int main()
{
int mat[MAX][MAX];
int i,j,x;
int n; // delimitador da ordem da matriz
float soma; // soma dos termos desejados da matriz
float aux,mult; // multiplicacao os termos desejados




FILE * matriz, * q1;


if (!(matriz = fopen("U:\\matrizz.txt", "r")))
{
printf("não foi possivel abrir o arquivo da matriz!\n");
return 1;
}

if (!(q1 = fopen("U:\\Q1-S1.txt", "w+")))
{
printf("Nao foi possivel abrir/criar o arquivo Q1-S1.txt\n");
return 1;
}




for (i = 0; i < MAX; i++)
for (j = 0; j < MAX; j++)
fscanf(matriz, "%d", &mat[i][j]);



for (i = 0; i < MAX; i++)
{
for (j = 0; j < MAX; j++)

fprintf(matriz, "%d", mat[i][j]);
fprintf(matriz, "\n");
}

if (!feof(matriz))
{
fscanf(matriz, "%d", &mat[i][j]);
}


// imprime a matriz
for (i = 0; i < MAX; i++)
{
for (j = 0; j < MAX; j++)
printf("%d ", mat[i][j]);
printf("\n");
}








// Somando os termos desejados da matriz
soma = 0;
for (i = 0; i < n; i++){
for (j = i + 1; j < n; j++)
soma += mat[i][j];
printf("%d ", soma);
printf("\n");
scanf( "%d", &soma);
printf("A SOMA DOS VALORES QUE ESTAO ACIMA DA DIAGONAL PRINCIPAL E= %.0f\n",soma);
printf("\n");
}
// imprime a soma desejada no arquivo Q1-S1.txt

soma = 0;
for (i = 0; i < n; i++){
for (j = i + 1; j < n; j++)
soma += mat[i][j];
fprintf(q1, "%d ", soma);
fprintf(q1, "\n");


}




// multiplicacao os termos desejados da matriz
mult= 1;
for (i = 0; i < n; i++){
for (j = 0 ; j < n; j++)

if(j<i){
mult = mult* mat[i][j];
printf("%d ", mult);

printf("A MULTIPLICACAO DOS VALORES QUE ESTAO ABAIXO DA DIAGONAL PRINCIPAL E= %.0f\n",mult);
printf("\n");

}
}


// imprime a multiplicacao dos termos no arquivo Q1-S1.txt
mult= 1;
for (i = 0; i < n; i++){
for (j = 0 ; j < n; j++){

if(j<i){
mult = mult* mat[i][j];
fprintf(q1, "%d ", mult);
fprintf(q1, "\n");
}
}
}



// imprime a multiplicacao dos termos na matriz
x=i+j;
for (i = 0; i < n; i++){
for (j = 0 ; j < n; j++){

if (x % 2>0) {
printf("%d ", mat[i][j]);

printf("OS ELEMENTOS CUJA A SOMA DOS VALORES DAS POSICOES E IMPAR E= %.0f\n",mat[i][j]);
}
}
}


// imprime a multiplicacao dos termos no arquivo Q1-S1.txt

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

if (x % 2>0){

fprintf(q1, "%d ", mat[i][j]);
fprintf(q1, "\n");

}
}
}




fclose(matriz);
fclose(q1);

getchar();
}


5. Re: ler um arquivo de uma matriz

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 22/11/2010 - 13:02h

Que erro está dando (que mensagem o compilador mostra, se erro de lógica, se erro com manipulação de arquivos, etc)?

Embraces!


6. ler um arquivo de uma matriz

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/11/2010 - 14:31h

ele tem que imprimir tudo que é solicitado na tela e no arquivo, mas esta imprimindo somente a matriz na tela e no arquivo nao aparece nada.


7. Re: ler um arquivo de uma matriz

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 22/11/2010 - 14:59h

Provavelmente ele não está conseguindo abrir o(s) arquivo(s).

Faça o seguinte:
1 - Transfira os arquivos envolvido para a pasta do projeto (ou executável), portanto, no momento de abri-lo não precisa indicar o path:
matriz = fopen("matrizz.txt", "r");
q1 = fopen("Q1-S1.txt", "w");//Abra apenas como "w", destruindo tudo o mais que existir no arquivo.

2 - Faça um teste mais tradicional de abertura de arquivos:
if(q1 == NULL);//e, também

if(matriz == NULL)//ambas condição de erro (fopen retorna NULL qd naum consegue abrir arquivo.

Embraces!


8. ler arquivo

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/11/2010 - 10:26h


Fiz dessa forma esta rodando , todas as impressoes estao sendo feitas tanto no arquivo como na tela,mas só que quando abre a tela esta pedindo para colocar todos os valores da matriz, mas não quero que faça isso, quero que pegue os valores dentro do arquivo.e o arquivo que criei com os valores da matriz é apagado e imprime tudo igual que é impresso na tela.

1-Crie um programa que leia de um arquivo os elementos inteiros de uma matriz
2- Todas as impressões devem ser feitas tanto na tela quanto no arquivo Q2-S1.txt.

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
float mat[MAX][MAX];
int i,j,x;
int n; // delimitador da ordem da matriz
float soma; // soma dos termos desejados da matriz
float aux,mult; // multiplicacao os termos desejados
aux=0;
FILE *FP;

printf("\n\nDIGITE A ORDEM DA MATRIZ: ");
scanf("%d",&n);
printf("\n");
printf("\n\nENTRE COM OS VALORES DA MATRIZ:\n");
printf("\n");
for(i = 0;i < n;i++)
for(j = 0;j < n;j++)
{
printf("mat[%d][%d]= ",i+1,j+1);
scanf("%f",&mat[i][j]);

}

// Somando os termos desejados da matriz
soma = 0;
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
soma += mat[i][j];
}
}

printf("A SOMA DOS VALORES QUE ESTAO ACIMA DA DIAGONAL PRINCIPAL E= %.0f\n",soma);
printf("\n");

{

// multiplicacao os termos desejados da matriz
mult= 1;
for (i = 0; i < n; i++){
for (j = 0 ; j < n; j++){


if(j<i)
{
mult = mult* mat[i][j];
}
}
}

printf("A MULTIPLICACAO DOS VALORES QUE ESTAO ABAIXO DA DIAGONAL PRINCIPAL E= %.0f\n",mult);
printf("\n");

for (i = 0; i < n; i++)
{
for (j = 0 ; j < n; j++)
{
x=i+j;
if (x % 2>0)
{

printf("OS ELEMENTOS CUJA A SOMA DOS VALORES DAS POSICOES E IMPAR E= %.0f\n",mat[i][j]);

// grava no arquivo

if((FP=fopen("Q2-S1.txt","w"))==NULL)
{
printf("arquivo não pode ser criado\n");
exit(1);
}

{
//matriz
for(i = 0;i < n;i++)
for(j = 0;j < n;j++)
{
fprintf(FP,"mat[%d][%d]= %f ",i+1,j+1,mat[i][j]);
fprintf(FP,"\n");
}
fprintf(FP,"\n");
//soma

soma = 0;
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
soma += mat[i][j];
}
}
{


fprintf(FP, "A SOMA DOS VALORES QUE ESTAO ACIMA DA DIAGONAL PRINCIPAL E= %.0f\n",soma);
fprintf(FP,"\n");
}
}

// multiplicacao os termos desejados da matriz
mult= 1;
for (i = 0; i < n; i++)
{
for (j = 0 ; j < n; j++)
{
if(j<i)
{
mult = mult* mat[i][j];
}
}
}
{
fprintf(FP,"A MULTIPLICACAO DOS VALORES QUE ESTAO ABAIXO DA DIAGONAL PRINCIPAL E= %.0f\n",mult);
fprintf(FP,"\n");
}


for (i = 0; i < n; i++)
{
for (j = 0 ; j < n; j++)
{
x=i+j;
if (x % 2>0)
{



fprintf(FP,"OS ELEMENTOS CUJA A SOMA DOS VALORES DAS POSICOES E IMPAR E= %.0f\n",mat[i][j]);
fprintf(FP,"\n");
}
}
}


fclose(FP);

}
}

}
scanf("%d",&n);
}

system("cls");

return(0);

}





9. Analise seu programa

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 23/11/2010 - 11:21h

Bem, vc precisa olhar com mais calma o que fez, pois, neste caso, vc fez o programa pedir os elementos da matriz ao usuário (printf("\n\nENTRE COM OS VALORES DA MATRIZ:\n");)

Olhe com mais calma e faça as alterações necessárias. Quanto à ler uma matriz, já te foi passado o modo de se realizar isto.


Embraces!


10. Re: ler um arquivo de uma matriz

Estudante
estudante2010

(usa Outra)

Enviado em 23/11/2010 - 13:54h

Prezados,

Estou fazendo um projeto de soma,subtracao, multiplicacao e outras aplicacoes de matrizes. Mas estou tendo algumas dificuldades, sao elas:
* Quero usar argv argc para o usuario determinar onde esta o arquivo das matrizes, mas quando escrevo os argumentos o programa me retorna um erro ao abrir o arquivo.
* E nao entendi a explicacao de ler as matrizes a partir do arquivo, por que como farei para separar os elementos da matriz(A11,A12...An)???Sei q quando conseguir terei de transformar em inteiros atraves da funcao atoi...
Agradecida,



11. Re: ler um arquivo de uma matriz

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 23/11/2010 - 15:14h

Seria bom saber quem é "estudante" antes de prosseguir.

Embraces!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts