domingo, 21 de noviembre de 2010

C Multiplicación de matrices y el método montante

Hola compañeros les muestro como se hace la multiplicación de matrices en C:




#include <stdio.h>


int main(int argc, char** args){
int af, ac, bf, bc, i, j, k;
printf("Numero de renglonesde la matriz A-->");
scanf("%d", &af);
printf("Numero de columnas de la matriz A-->");
scanf("%d", &ac);
printf("Numero de renglones de la matriz B-->");
scanf("%d", &bf);
printf("Numero de columnas de la matriz B-->");
scanf("%d", &bc);
if(ac!=bf){
printf("no es posible hacer la multiplicación\n");
system("pause");
return 0;
}
int A[af][ac], B[bf][bc], C[af][bc]; /*Rutina para cargar los valores*/
for(i=0;i<af;i++){
for(j=0;j<ac;j++){
printf("Escribe el valor de la matriz 1 (%d, %d)-->",i+1, j+1);
scanf("%d", &A[i][j]);
}
}
printf("\n\n");
for(i=0;i<bf;i++){
for(j=0;j<bc;j++){
printf("Escribe el valor de la matriz 2 (%d, %d)-->", i+1, j+1);
scanf("%d", &B[i][j]);
}
}

for(i=0;i<af;i++){
for(j=0;j<bc;j++){
C[i][j]=0;
for(k=0;k<ac;k++){
C[i][j]=(C[i][j]+(A[i][k]*B[k][j]));
}
}
}

/*Rutina para imprimir*/
printf("\n\n\t\t\t Matriz A");
printf("\n");
for(i=0;i<af;i++){
printf("\n\t\t");
for(j=0;j<ac;j++){
printf(" %6d ", A[i][j]);
}
}
printf("\n\n\t\t\t Matriz B");
printf("\n");
for(i=0;i<bf;i++){
printf("\n\t\t");
for(j=0;j<bc;j++){
printf(" %6d ", B[i][j]);
}
}

printf("\n\n\t\t\t Matriz C");
printf("\n");
for(i=0;i<af;i++){
printf("\n\t\t");
for(j=0;j<bc;j++){
printf(" %6d ", C[i][j]);
}
}
printf("\n");
}


Ejecución:




Y el método Montante, este es un código que empecé el semestre pasado, hoy lo retomé y lo he podido concluir :D, este es el código:


#include<stdio.h>
#include <stdlib.h>
#define R 3
#define C 4

int main (void){

int i, j, num[R][C], matriz[R][C], pivote, pivant = 1, iteracion = 0;
//Lectura
for(i=0;i<R;i++){
for(j=0;j<C - 1;j++){
printf("Los valores de la matriz [%d,%d]= ",i + 1, j + 1);
scanf("%d",&matriz[i][j]);
}
printf("El costo fue----------------> ");
scanf("%d",&matriz[i][j]);
}

while(iteracion < R) {
pivote = matriz[iteracion][iteracion];
for(i=0;i<C;i++) {
num[iteracion][i] = matriz[iteracion][i];
}
for(i=0;i<R;i++) {
if(iteracion != i) {
num[i][iteracion] = 0;
}
}
for(i=0;i<R;i++){
for(j=0;j<C;j++){
if(i != iteracion) {
if( j!= iteracion) {
num[i][j] = (((matriz[i][j] * pivote) - (matriz[iteracion][j] * matriz[i][iteracion])) / pivant);
}
}
}
}

iteracion++;
pivant = pivote;
for(i=0;i<R;i++) {
for(j=0;j<C;j++) {
matriz[i][j] = num[i][j];

}
}
}
printf("\n\n\n\n");
for(i=0;i<R;i++){
printf("\t\t");
for(j=0;j<C - 1;j++){
printf("\t%d",matriz[i][j]);
}
printf("\t= %d\n", matriz[i][j]);
}
return 0;
}


Ejecución:



Cualquier duda sobre alguna línea o sugerencia comenten con confianza :D

32 comentarios:

  1. Dos días más para completar entradas. El lunes a las 8:30 es el corte.

    ResponderEliminar
  2. En lab ya completaste cien. En la clase puedes todavía acumular puntos extra.

    ResponderEliminar
  3. Muchas gracias por el código nos ayudo a mi amigo y a mi con una tareita que teniamos.

    ResponderEliminar
  4. Me has salvado la vida mi cerebro se estaba secando mas de 12 horas tratando de hacer el primero ya son las 2: 35 am y mañana tengo clases a las 6 . _ .' GRACIASSS :D ire a dormir!!!

    ResponderEliminar
  5. Cecilia, les has salvado la vida, a unos compañeros, saludos :D

    ResponderEliminar
  6. Muchas gracias!! podria besarte por esto, le salvaste la vida a mi equipo (cambie tu implementacion a java y genere una forma de aceptar los puntos dinamicamente detectando puntos iguales, si lo ocupas contactame)

    ResponderEliminar
  7. ESTA MUY BIEN TU CODIGO PERO YO TENGO UN PROBLEMA COMO SE HARIA PERO CON PUNTEROS TE LO AGRDECERIA

    ResponderEliminar
  8. te llamas cecilia???,,,,, bonito nombre ^^

    ResponderEliminar
  9. Gracias de vdd que no encontraba la forma de hacerlo jajaja gracias

    ResponderEliminar
  10. Oye una pregunta, en el primer código, la variable k, cual fue el uso que le diste?

    ResponderEliminar
    Respuestas
    1. yo te puedo responder esa pregunta.., ya que K es el valor de i en la primera matriz y de j en la segunda. tienen que variar(contabilizar) para efectuar su multiplicación y suma ... :) espero lo entiendas...!!!

      Eliminar
  11. puedes explicar la parte del algoritmo por que k

    ResponderEliminar
  12. Hola!!!

    ¿Quería preguntarte si por casualidad has realizado algún código en C++ para obtener la inversa de una matriz?

    ResponderEliminar
    Respuestas
    1. Holaa! :D te dieron alguna solucion a tu pregunta?? tienes el codigo? jajaja

      Eliminar
  13. Oye el resultado de la multiplicación no me sale bien donde lo chequeo ?

    ResponderEliminar
  14. Gracias por el aporte, me sirvio de mucho!

    ResponderEliminar
  15. disculpen me pueden ayudar con este programa en c
    El producto de una Matriz por un escalar en el cual el usuario elija el tamaño y el escalar

    ResponderEliminar
  16. oyes yo no entiendo esta línea
    printf("El costo fue----------------> ");
         scanf("%d",&matriz[i][j]);
    como saca el resultado de
    El costo fue-------------------> 32

    ResponderEliminar
  17. Bro muchas gracias, te mereces un 20 de 10

    ResponderEliminar
  18. I:\MultiMatrMetodomontante.cpp In function 'int main(int, char**)':

    ResponderEliminar
  19. Buen código bro
    Me has salvado el trasero xd

    ResponderEliminar
  20. En lugar de la condición IF donde preguntas que si el numero de columnas es diferentes al numero de filas puedes ponder una condicion do-while hasta que el no de columnas sea igual al numero de filas y así no pausas el sistema

    ResponderEliminar
  21. Yo tambien soy ITS en la UANL y me acabas de salvar el semestre, te amooooooooooooooooooooooooooooooooooooooooooooooooooo

    ResponderEliminar