Logo Hardware.com.br
Thyago Sic
Thyago Sic Membro Senior Registrado
359 Mensagens 6 Curtidas

Multiplicação de matrizes em C

#1 Por Thyago Sic 15/02/2012 - 20:01
É o seguinte, preciso utilizar ponteiros e ponteiros de ponteiros (ex: *p e **p) para construir um programa em C que faça alguma operação com matrizes... pode ser multiplicação, achar determinante, qualquer coisa. Eu escolhi multiplicação mas posso mudar.

Enfim, o objetivo é exercitarmos o uso de ponteiros, mas não sei como vou aplicar estes conceitos na multiplicação de matrizes. Se alguém puder dar uma idéia eu agradeço.

Vlw.
pflynn
pflynn Ubbergeek Registrado
5.5K Mensagens 122 Curtidas
#2 Por pflynn
16/02/2012 - 16:14
Eu recomendo começar da maneira mais simples: multiplicação de uma matriz por um escalar. Primeiro, uma matriz unidimensional. Depois, matrizes com dimensões maiores. Isso vai ajudar a fixar o conceito mais importante nesse trabalho, que é o de aritimética de ponteiros. Quando estiver compreendendo bem esse assunto, você parte para a multiplicação entre matrizes, usando a base que já adquiriu sobre a aritimética de ponteiros.
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
Thyago Sic
Thyago Sic Membro Senior Registrado
359 Mensagens 6 Curtidas
#3 Por Thyago Sic
22/02/2012 - 15:41
Bom, comecei tentando fazer uma linha apenas.

Segue meu código:



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

int main(int argc, char *argv[])
{
int *p_linha,i;

p_linha = (int *)malloc (sizeof(int)*5);//uma linha simples com 5 colunas

for(i=0;i<5;i++) //preenchendo a linha
scanf("%d", *(p_linha+i));

system("PAUSE&quot;
return 0;
}




O que estou tentando fazer?

Criar um ponteiro que aponte para 5 ints que serão digitados pelo usuário, dentro do for.

Porém, lá pela terceira iteração dá um erro.


Se eu fizer algo do tipo:


*(p_linha+0) = 0;
*(p_linha+1) = 1;
*(p_linha+2) = 2;
*(p_linha+3) = 3;
*(p_linha+4) = 4;


Dá certo. Eu consigo ler todos esses valores posteriormente.


O que estou fazendo de errado no primeiro código?


Obrigado.
"Estou de joelhos vendo o céu desabar...."
pflynn
pflynn Ubbergeek Registrado
5.5K Mensagens 122 Curtidas
#4 Por pflynn
22/02/2012 - 16:07
Você fez uma pequena confusão. Na sua chamada a scanf, o segundo argumento deve ser um ponteiro (ou uma expressão que possa representar um ponteiro). A função scanf vai usar esse ponteiro como endereço onde ela deve armazenar os dados obtidos. Mas você está usando o operador unário "*" (asterisco) e extraindo o valor armazenado no ponteiro e passando a scanf. scanf interpreta erroneamente esse valor como ponteiro e ai ocorre o problema.


scanf("%d", *(p_linha+i)); /* errado. '*ponteiro' não é um ponteiro. É o valor que está armazenado nesse ponteiro. */



scanf("%d", (p_linha+i)); /* correto. A expressão entre parenteses representa um ponteiro válido */


Já no segundo caso, o uso do operador '*' unário é correto, porque você mesmo está atribuindo o valor. Não ao ponteiro, mas a região da memória onde ele aponta.
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal