Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/04/2013, 16:24
nandaarea
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Respuesta: Matrices con apuntadores y funciones

Cita:
Iniciado por sam90 Ver Mensaje
Ahora si!!

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int menu();
  4. void leerv(int t,int *a);
  5. void sumarv(int t,int *a,int *b);
  6. void imprv(int t,int *a);
  7. void leerm(int f,int c,int **a);
  8. void imprm(int f,int c,int **a);
  9. void sumam(int f,int c,int **a,int **b);
  10. void multim(int m,int n, int s,int **b,int **d,int **e);
  11. int menu(){
  12.     int x;
  13.     do{
  14.      printf("\tMENU\n");
  15.      printf(" 1.- Suma de Vectores\n");
  16.      printf(" 2.- Suma de Matrices\n");
  17.      printf(" 3.- Multiplicacion de Matrices\n");
  18.      printf(" 4.- Salir\n");
  19.      printf(" Elige una opcion => ");
  20.      scanf("%d",&x);
  21.     }while(x<1&&x>4);
  22.   return x;
  23.  }
  24. void leerv(int t,int *a){
  25.       for(int i=0;i<t;i++){
  26.           printf("[%d]= ",i);
  27.           scanf("%d",&a[i]);    
  28.          }
  29.  }
  30. void sumarv(int t,int *a,int *b){
  31.     for(int i=0;i<t;i++){
  32.       a[i]=a[i]+b[i];
  33.      }
  34.  }
  35. void imprv(int t,int *a){
  36.     for(int i=0;i<t;i++){
  37.         printf("%d\t",a[i]);
  38.        }
  39.     printf("\n");
  40.  }
  41. void leerm(int f,int c,int **a){
  42.     for(int i=0;i<f;i++){
  43.         for(int j=0;j<c;j++){
  44.             printf("[%d][%d] = ",i,j);
  45.             scanf("%d",&a[i][j]);
  46.            }
  47.         }
  48.  }
  49. void imprm(int f,int c,int **a){
  50.     for(int i=0;i<f;i++){
  51.         for(int j=0;j<c;j++){
  52.             printf("%d\t",*(*(a+i)+j));
  53.            }
  54.         printf("\n");
  55.         }
  56.  }
  57. void sumam(int f,int c,int **a,int **b){
  58.     for(int i=0;i<f;i++){
  59.         for(int j=0;j<c;j++){
  60.             a[i][j]=a[i][j]+b[i][j];
  61.            }
  62.         }
  63.   }
  64. void multim(int m,int n,int s,int **b,int **d,int **e){
  65.     for(int i=0;i<m;i++){
  66.         for(int j=0;j<s;j++){
  67.             for(int k=0;k<n;k++){
  68.         printf("i=%d  k=%d  j=%d \n", i , k , j);
  69.                 e[i][j]=e[i][j]+b[i][k]*d[k][j];
  70.                }
  71.             }
  72.         }
  73.  }
  74.  
  75. int ** New_Matriz(int p,int q)
  76. {
  77.     int ** m , j;
  78.     m =(int **)malloc(sizeof(int *)*p);
  79.     for(j=0;j<p;j++)
  80.         m[j]=(int *)malloc(sizeof(int)*q);
  81.     return m;          
  82. }
  83.  
  84. void To_Cero(int ** m,int p,int q)
  85. {
  86.     int i, j;
  87.     for(i=0;i<p;i++)
  88.         for(j=0;j<q;j++)
  89.             m[i][j]=0;
  90.     return;        
  91. }
  92.  
  93. main(){
  94.    int c,f,i,j,x,t,m,n,q,s;
  95.    int *a,**b,**e,*d,**g;
  96.    x=menu();
  97.    switch(x){
  98.      case 1: printf("\nDame el tamaño del Vector = ");
  99.              scanf("%d",&t);
  100.              a=(int *)malloc(sizeof(int)*t);
  101.              d=(int *)malloc(sizeof(int)*t);
  102.              printf("\nElementos del Vector A\n");
  103.              leerv(t,a);
  104.              printf("\nElementos del Vector B\n");
  105.              leerv(t,d);
  106.              printf("\nVector A\t");
  107.              imprv(t,a);
  108.              printf("Vector B\t");
  109.              imprv(t,d);
  110.              sumarv(t,a,d);
  111.              printf("\n\tSuma=\t");
  112.              imprv(t,a);
  113.              break;
  114.      case 2: printf("\nDame el Numero de Filas de la Matriz = ");
  115.              scanf("%d",&f);
  116.              printf("\nDame  el Numero de Columnas de la Matriz = ");
  117.              scanf("%d",&c);
  118.              b=(int **)malloc(sizeof(int *)*f);
  119.              e=(int **)malloc(sizeof(int *)*f);
  120.              for(j=0;j<c;j++){
  121.                 b[j]=(int *)malloc(sizeof(int)*c);
  122.                 e[j]=(int *)malloc(sizeof(int)*c);
  123.              }
  124.              printf("\nElementos de la Matriz A\n");
  125.              leerm(f,c,b);
  126.              printf("\nElementos de la Matriz B\n");
  127.              leerm(f,c,e);
  128.              printf("\n Matriz A\n");
  129.              imprm(f,c,b);
  130.              printf("\n Matriz B\n");
  131.              imprm(f,c,e);
  132.              sumam(f,c,b,e);
  133.              printf("\nSuma es\n");
  134.              imprm(f,c,b);
  135.              break;
  136.      case 3: do{
  137.               printf("Numero de Filas de la Matriz A = ");
  138.               scanf("%d",&m);
  139.               printf("Numero de Columnas de la Matriz A = ");
  140.               scanf("%d",&n);
  141.               printf("Numero de Filas de la Matriz B = ");
  142.               scanf("%d",&q);
  143.               printf("Numero de Columnas de la Matriz B = ");
  144.               scanf("%d",&s);
  145.              }while(n!=q);
  146.              
  147.              b = New_Matriz(m,n);
  148.              e = New_Matriz(q,s);
  149.              g = New_Matriz(m,s);
  150.              To_Cero(g,m,s);
  151.  
  152.             printf("\nElemetos de la Matriz A\n");
  153.             leerm(m,n,b);
  154.             printf("\nElementos de la Matriz B\n");
  155.             leerm(q,s,e);
  156.  
  157.  
  158.             multim(m,n,s,b,e,g);
  159.             printf("\n");
  160.             imprm(m,s,g);
  161.             break;
  162.         }  
  163.   getchar();
  164. }

Tenes un problema al reservar memoria. Al querer ahorrar tiempo reservando memoria estabas metiendo la pata. Fíjate que ahí cree un función que según dos entero reserva memoria para una matriz. Eso aclarece las cosas un poco.

Saludos
¡EH! era ese el error
ahora pondre mas atencion al reservar la memoria.
Muchas gracias sam90