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

hola gente de forosdelweb espero su consejo he aqui el programa:
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);
  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 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.                 e[i][j]=e[i][j]+b[i][k]*d[k][j];
  69.                }
  70.             }
  71.         }
  72.  }
  73. main(){
  74.    int c,f,i,j,x,t,m,n,q,s;
  75.    int *a,**b,**e,*d,**g;
  76.    x=menu();
  77.    switch(x){
  78.      case 1: printf("\nDame el tamaño del Vector = ");
  79.              scanf("%d",&t);
  80.              a=(int *)malloc(sizeof(int)*t);
  81.              d=(int *)malloc(sizeof(int)*t);
  82.              printf("\nElementos del Vector A\n");
  83.              leerv(t,a);
  84.              printf("\nElementos del Vector B\n");
  85.              leerv(t,d);
  86.              printf("\nVector A\t");
  87.              imprv(t,a);
  88.              printf("Vector B\t");
  89.              imprv(t,d);
  90.              sumarv(t,a,d);
  91.              printf("\n\tSuma=\t");
  92.              imprv(t,a);
  93.              break;
  94.      case 2: printf("\nDame el Numero de Filas de la Matriz = ");
  95.              scanf("%d",&f);
  96.              printf("\nDame  el Numero de Columnas de la Matriz = ");
  97.              scanf("%d",&c);
  98.              b=(int **)malloc(sizeof(int *)*f);
  99.              e=(int **)malloc(sizeof(int *)*f);
  100.              for(j=0;j<c;j++){
  101.                 b[j]=(int *)malloc(sizeof(int)*c);
  102.                 e[j]=(int *)malloc(sizeof(int)*c);
  103.              }
  104.              printf("\nElementos de la Matriz A\n");
  105.              leerm(f,c,b);
  106.              printf("\nElementos de la Matriz B\n");
  107.              leerm(f,c,e);
  108.              printf("\n Matriz A\n");
  109.              imprm(f,c,b);
  110.              printf("\n Matriz B\n");
  111.              imprm(f,c,e);
  112.              sumam(f,c,b,e);
  113.              printf("\nSuma es\n");
  114.              imprm(f,c,b);
  115.              break;
  116.      case 3: do{
  117.               printf("Numero de Filas de la Matriz A = ");
  118.               scanf("%d",&m);
  119.               printf("Numero de Columnas de la Matriz A = ");
  120.               scanf("%d",&n);
  121.               printf("Numero de Filas de la Matriz B = ");
  122.               scanf("%d",&q);
  123.               printf("Numero de Columnas de la Matriz B = ");
  124.               scanf("%d",&s);
  125.              }while(n!=q);
  126.              b=(int **)malloc(sizeof(int *)*m);
  127.              e=(int **)malloc(sizeof(int *)*q);
  128.              g=(int **)malloc(sizeof(int *)*m);
  129.              for(j=0;j<n;j++){
  130.                 b[j]=(int *)malloc(sizeof(int)*n);
  131.                 }
  132.             for(j=0;j<s;j++){
  133.                 e[j]=(int *)malloc(sizeof(int)*s);
  134.                 g[j]=(int *)malloc(sizeof(int)*s);
  135.                 }
  136.             for(i=0;i<m;i++){
  137.                 for(j=0;j<s;j++){
  138.                     g[i][j]=0;
  139.                    }
  140.                 }
  141.             printf("\nElemetos de la Matriz A\n");
  142.             leerm(m,n,b);
  143.             printf("\nElementos de la Matriz B\n");
  144.             leerm(q,s,e);
  145.             multim(m,n,s,b,e,g);
  146.             printf("\n");
  147.             imprm(m,s,g);
  148.             break;
  149.         }  
  150.   getchar();
  151. }

La duda que tengo es cuando pongo los siguientes datos:
1.- elijo la opcion 3
2.- en numero de filas de la matriz A pongo 2
3.- en numero de columnas de la matriz A pongo 3
4.- en numero de filas de la matriz B pongo 3
5.- en numero de columnas de la matriz B pongo 2
y luego me pide los datos
Elementos de la matriz A
[0][0] = 1
[0][1] = 1
[0][2] = 1
[1][0] = 1
[1][1] = 1
[1][2] = 1
Elementos de la matriz B
[0][0] = 2
[0][1] = 2
[1][0] = 2
[1][0] = 2
[1][1] = 2
[2][0] = 2
luego de dar intro el programa pone una pantalla de "El programa dejo de funcionar". No entiendo porque deja de funcionar. Le pregunte a mi profe y dice que no debe de hacer eso el llama a eso "romperse" pero no me dice en donde esta mal y lo revise pero no veo un error espero poder contar con su ayuda