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

24 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
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
  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