Ir ao conteúdo

Posts recomendados

Postado

termine a função lerMatrizArquivo. A função em questão deve
receber o nome de um arquivo que contenha uma matriz, por exemplo "matrizA.dat", e dois
parâmetos que sejam referências para inteiros que irão armazenar as dimensões (quantidade de
linhas e quantidade de colunas) da matriz lida do arquivo. Após ler as dimensões da matriz
armazenada no arquivo, a função deve alocar dinamicamente uma matriz do tamanho exato
registrado no arquivo e armazenar os dados do arquivo na matriz alocada, além de atualizar as
referências m e n para conterem as dimensões da matriz lida. A matriz lida deve ser retornada ao final da funçao

#include <stdio.h>

#include <stdlib.h>



float **lerMatrizArquivo(char *nomeArquivo, int *m, int *n){

//Q1: Le o arquivo cujo nome eh passado no primeiro parametro (nomeArquivo), retorna a matriz que esta armazenada no arquivo lido e atualiza os parametros m e n com as dimensoes da matriz lida.



}



float **produtoMatrizes(float **A, int mA, int nA, float **B, int mB, int nB){

//Q2: Calcula o produto de matrizes A * B. Retorna o resultado do produto.



}



void imprimeMatriz(float **A, int m, int n){

//Q3: Imprime na tela a matriz passada como parametro.



}



int main(){

float **A, **B, **R;

int mA, nA, mB, nB;

  

A = lerMatrizArquivo( "matrizA.dat", &mA, &nA);

B = lerMatrizArquivo( "matrizB.dat", &mB, &nB);

  

if(nA == mB){

R = produtoMatrizes(A, mA, nA, B, mB, nB);

printf(" A = ");

imprimeMatriz(A, mA, nA);

printf("\n B = ");

imprimeMatriz(B, mB, nB);

printf("\n A * B = ");

imprimeMatriz(R, mA, nB);

return 0;

} else {

printf("As dimensoes das matrizes nao permitem o calculo do produto entre elas na ordem pedida\n");

return 1;

}

}

 

  • Haha 1
  • Membro VIP
Postado

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 1
Postado

até aqui eu consegui....

 

#include<stdio.h>

#include<stdlib.h>

 

int main()

{

int matriz[2][3];

int i,j;

int a,b;

 

FILE *file;

file= fopen("matrizA.dat","r");

while(!feof(file))

{

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

fscanf(file,"%d",&matriz[i][j]);

}

}

}

 

printf("Matriz lida com sucesso\n");

 

for(a=0;a<3;a++)

{

for(b=0;b<3;b++)

{

printf("%d",matriz[a][b]);

}

printf("\n");

}

 

fclose(file);

return 0;

}

Postado

@RafaLorenzzo    você precisa saber o Formato como os dados estão gravados no arquivo , por exemplo se estiverem gravados assim :

1 2 3
4 5 6

com espaço entre os números  e se puder ser gravados como .txt , o código para inserir os dados na matriz poderia ser assim   :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i = 0, j = 0, a, b;
    int matriz[2][3];
    FILE* f;
    f = fopen("matrizA.txt", "r");
    printf("lendo a matriz\n");
    while (fscanf(f, "%d", &matriz[i][j]) != EOF)
    {
        printf("%d ", matriz[i][j]);
        j++;
        if (j > 2)
        {
            printf("\n");
            j = 0;
            i++;
        }
    }
    fclose(f);
    return 0;
}

e para a função de seu código funcionar substitua o nome enviado para a função por uma string que contenha o mesmo nome que está escrito ali nela ,

float** lerMatrizArquivo(char* nomeArquivo, int* m, int* n) 
{
	printf("%s\n", nomeArquivo);
	return 0;
}

char MA[] = {"matrizA.dat"};
char MB[] = {"matrizB.dat"};

// na função main
A = lerMatrizArquivo(MA/*"matrizA.dat"*/, &mA, &nA);
B = lerMatrizArquivo(MB/*"matrizB.dat"*/, &mB, &nB);

 

  • Curtir 1
Postado

O que ta errado?

Matriz A;                Matriz B;                      Matriz C;

1.4 2.5.6.2          -1.3 4.2 -0.4 4.4            2.1 6.5 -9.4
9.9 -2.3 -0.2        4.2 0.0 -0.1 0.6             4.2 4.4 6.0
                           -2.2 3.1 -4.0 3.0            0.3 -4.7 -7.7

 

 

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int main()

{

  int i = 0, j = 0, a, b;

  int matriz[2][3];

  FILE* f;

  f = fopen("matrizA.dat", "r");

  printf("lendo a matriz\n");

  while (fscanf(f, "%d", &matriz[i][j]) != EOF)

  {

    printf("%d ", matriz[i][j]);

    j++;

    if (j > 2)

    {

      printf("\n");

      j = 0;

      i++;

    }

  }

  int main();

{

 

int i,j,k1,k2;

int linA,colA,linB,colB;

printf("PRODUTO A X B \n \n");

printf("Quantidade de linhas da Matriz A = ");

scanf("%d",&linA);

printf("Quantidade de colunas da Matriz A = ");

scanf("%d",&colA);

printf("Quantidade de linhas da Matriz B = ");

scanf("%d",&linB);

printf("Quantidade de colunas da Matriz B = ");

scanf("%d",&colB);

 

float A[2][3];

float B[3][4];

float C[3][3];

float temp;

}

/ Imprimindo a matriz A

 

printf("\n MATRIZ A \n \n");

for(i=0;i< 3;i++)

{

for(j=0;j< 3;j++)

{

if(j!=(3-1))

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

 

else

printf("%.2f \n",A[i][j]);

}

}

printf("\n \n");

system("pause");

 

// Imprimindo a matriz B

 

printf("\n MATRIZ B \n \n");

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

if(j!=(3-1))

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

 

else

printf("%.2f \n",B[i][j]);

}

}

 

for(k1=0;k1<3;k1++)

{

for(k2=0;k2<3;k2++)

{

temp=0.0;

for(i=0;i<3;i++)

{

temp=temp+A[k1][i]*B[i][k2];

}

C[k1][k2]=temp;

}

}

 

printf("\n \n");

system("pause");

 

printf("\n MATRIZ C = A x B \n \n");

 

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

if(j!=(3-1))

{

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

}

else

{

printf("%.2f \n",C[i][j]);

}

}

}

 

return 0;

 

}

 

}

                      

Postado
3 horas atrás, RafaLorenzzo disse:

O que ta errado?

A princípio não ter a função enunciada.

 

Vejamos:

11 horas atrás, RafaLorenzzo disse:

Após ler as dimensões da matriz armazenada no arquivo, a função deve alocar dinamicamente uma matriz do tamanho exato registrado no arquivo

A extensão do arquivo.dat: não deu indicação precisa de formatação, podendo ser dados binários ou texto.

 

Decerto se sabe que: os valores necessários para definir o tamanho da matriz e alocar memória estão linearmente localizadas antes dos valores da matriz.

 

Logo os exemplos teriam que começar com as dimensões da matriz, antes de seus valores.

3 horas atrás, RafaLorenzzo disse:

Matriz A;                Matriz B;                      Matriz C;

1.4 2.5.6.2          -1.3 4.2 -0.4 4.4            2.1 6.5 -9.4
9.9 -2.3 -0.2        4.2 0.0 -0.1 0.6             4.2 4.4 6.0
                           -2.2 3.1 -4.0 3.0            0.3 -4.7 -7.7

 

 

3 horas atrás, RafaLorenzzo disse:

int main()

{

  int i = 0, j = 0, a, b;

  int matriz[2][3];

  FILE* f;

...

}

A estratégia que consiste na implementação de qualquer algoritmo de função inicialmente dentro da   int main    parece confortável, mas quando chegar o momento de migra-lo  para sua função de acordo é possível que tenha mais trabalho para adaptar aos parâmetros formais.

 

 

Comente as expressões com chamadas a funções que ainda não foram definidas, reserve a  principal (int main)   para testar uma função de cada vez enquanto não tem todas, após completar a coleção de funções necessárias ao programa, redefina ela para como era antes. 

11 horas atrás, RafaLorenzzo disse:

 


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



float **lerMatrizArquivo(char *nomeArquivo, int *m, int *n){

//Q1: Le o arquivo cujo nome eh passado no primeiro parametro (nomeArquivo), retorna a matriz que esta armazenada no arquivo lido e atualiza os parametros m e n com as dimensoes da matriz lida.



}



float **produtoMatrizes(float **A, int mA, int nA, float **B, int mB, int nB){

//Q2: Calcula o produto de matrizes A * B. Retorna o resultado do produto.



}



void imprimeMatriz(float **A, int m, int n){

//Q3: Imprime na tela a matriz passada como parametro.



}



int main(){

float **A, **B, **R;

int mA, nA, mB, nB;

  

A = lerMatrizArquivo( "matrizA.dat", &mA, &nA);

B = lerMatrizArquivo( "matrizB.dat", &mB, &nB);

  

if(nA == mB){

R = produtoMatrizes(A, mA, nA, B, mB, nB);

printf(" A = ");

imprimeMatriz(A, mA, nA);

printf("\n B = ");

imprimeMatriz(B, mB, nB);

printf("\n A * B = ");

imprimeMatriz(R, mA, nB);

return 0;

} else {

printf("As dimensoes das matrizes nao permitem o calculo do produto entre elas na ordem pedida\n");

return 1;

}

}

 

 

 

As funções são independentes, e a obrigação delas é dar uma resposta (saída) conforme a informação (entrada).

[:)]

Postado

@RafaLorenzzo    porque você colocou duas funções int main  ?   ,   não pode e nem precisa ,  e você precisa seguir o que diz o enunciado ,  ele é o chefe ,  e você colocou para imprimir uma matriz C , mas essa não está no enunciado ,  estão apenas as matrizes  A e B e R  ,  e precisa usar as funções que foram criadas  ,  lá da primeira postagem ,  

#define _CRT_SECURE_NO_WARNINGS  // para usar scanf e outras funcoes no visual studio
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
float** lerMatrizArquivo(char* nomeArquivo, int* m, int* n) 
{
	printf("%s\n", nomeArquivo);
	// Q1: Le o arquivo cujo nome eh passado no primeiro parametro (nomeArquivo), 
	// retorna a matriz que esta armazenada no arquivo lido e atualiza os 
	// parametros m e n com as dimensoes da matriz lida.
	return 0;
}
float** produtoMatrizes(float** A, int mA, int nA, float** B, int mB, int nB) 
{
    float res** = (float*)malloc(3 * sizeof(float));
    // Q2: Calcula o produto de matrizes A * B. Retorna o resultado do produto.
    // produto da matriz
    for (k1 = 0; k1 < 3; k1++)
    {
        for (k2 = 0; k2 < 3; k2++)
        {
            temp = 0.0;
            for (i = 0; i < 3; i++)
            {
                temp = temp + A[k1][i] * B[i][k2];
            }
            C[k1][k2] = temp;
        }
    }
    printf("\n \n");
    system("pause");
    return res;
}
void imprimeMatriz(float** A, int m, int n) 
{
    // Q3: Imprime na tela a matriz passada como parametro.
    // Imprimindo a matriz A
    printf("\n MATRIZ A \n \n");
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("%.2f ", A[i][j]);
        }
        printf("\n");
    }
    printf("\n\n");
    system("pause");
}
int main() 
{
    float** A, ** B, ** R;
    int mA, nA, mB, nB;
    char MA[] = { "matrizA.dat" };
    char MB[] = { "matrizB.dat" };
    A = lerMatrizArquivo(MA, &mA, &nA);
    B = lerMatrizArquivo(MB, &mB, &nB);
    if (nA == mB) 
    {
        R = produtoMatrizes(A, mA, nA, B, mB, nB);
        printf(" A = ");
        imprimeMatriz(A, mA, nA);
        printf("\n B = ");
        imprimeMatriz(B, mB, nB);
        printf("\n A * B = ");
        imprimeMatriz(R, mA, nB);
        return 0;
    }
    else 
    {
        printf("As dimensoes das matrizes nao permitem o calculo do produto entre elas na ordem pedida\n");
        return 1;
    }
    return 0;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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