Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int l, c;
  5.  
  6. int** aloca(int **v){
  7.     int i, j;
  8.     printf("Digite o numero de linhas da matriz: ");
  9.     scanf("%d",&l);
  10.     printf("Digite o numero de colunas da matriz: ");
  11.     scanf("%d",&c);
  12.     v=(int**)malloc(l*sizeof(int*));
  13.     for(i=0;i<l;i++) v[i]=(int*)malloc(c*sizeof(int));
  14.     printf("Digite os valores do vetor: ");
  15.     for(i=0;i<l;i++){
  16.                      for(j=0;j<c;j++) scanf("%d",&v[i][j]);
  17.                      }  
  18.     return v;
  19.     }
  20.    
  21. void imprime(int **v){
  22.      int i,j;
  23.      for(i=0;i<l;i++){
  24.                       for(j=0;j<c;j++) printf("%d\t",v[i][j]);
  25.                       printf("\n");
  26.                       }
  27.      }
  28.    
  29. int** soma(int **a, int **b){
  30.     int i, j, **S;
  31.     S=(int**)malloc(l*sizeof(int*));
  32.     for(i=0;i<l;i++) S[i]=(int*)malloc(c*sizeof(int));
  33.     for(i=0;i<l;i++){
  34.                      for(j=0;j<c;j++) S[i][j] = a[i][j]+b[i][j];
  35.                      }
  36.     return S;
  37.     }
  38.    
  39. int** subt(int **a, int **b){
  40.     int i, j, **sub;
  41.     sub=(int**)malloc(l*sizeof(int*));
  42.     for(i=0;i<l;i++) sub[i]=(int*)malloc(c*sizeof(int));
  43.     for(i=0;i<l;i++){
  44.                      for(j=0;j<c;j++) sub[i][j] = a[i][j]-b[i][j];
  45.                      }
  46.     return sub;
  47.     }
  48.    
  49. int** produ(int **a, int **b, int linha1, int coluna1, int linha2, int coluna2){
  50.       int i, j, k, **prod;
  51.       prod=(int**)malloc(linha1*sizeof(int*));
  52.       for(i=0;i<linha1;i++) prod[i]=(int*)malloc(coluna2*sizeof(int));
  53.       for(i=0;i<linha1;i++){
  54.         for(j=0;j<coluna2;j++){
  55.             prod[i][j]=0;
  56.             for(k=0;k<coluna1;k++) prod[i][j] = prod[i][j] + (a[i][k]*b[k][j]);
  57.         }
  58.      }
  59.      return prod;
  60.   }
  61.  
  62. int** in_mat(int **a){
  63.     int i, j, inmat, **inm;
  64.     inm=(int**)malloc(l*sizeof(int*));
  65.     for(i=0;i<l;i++) inm[i]=(int*)malloc(c*sizeof(int));
  66.     printf("Digite o inteiro que deseja multiplicar pelo vetor: ");
  67.     scanf("%d",&inmat);
  68.     for(i=0;i<l;i++){
  69.                      for(j=0;j<c;j++) inm[i][j] = inmat*a[i][j];
  70.                      }
  71.     return inm;
  72.     }
  73.    
  74. int main(){
  75.     int **a, **b, i, op, **k;
  76.     int linha1,coluna1,linha2,coluna2;
  77.     k=(int**)malloc(l*sizeof(int*));
  78.     for(i=0;i<l;i++) k[i]=(int*)malloc(c*sizeof(int));        
  79.     menu:
  80.     system("cls");
  81.     printf("Opcoes:\n1 - Calcular a soma entre duas matrizes;\n2 - Calcular a subtracao entre duas matrizes;\n");
  82.     printf("3 - Calcular o produto entre duas matrizes;\n4 - Calcular o produto entre um inteiro e uma matriz;\n5 - Sair.\nDigite a opcao: ");
  83.     scanf("%d",&op);
  84.     switch(op){
  85.                case 1:
  86.                     system("cls");
  87.                     a = aloca(a);
  88.                     linha1 = l;
  89.                     coluna1 = c;
  90.                     b = aloca(b);
  91.                     linha2 = l;
  92.                     coluna2 = c;
  93.                     if(linha1 != linha2 || coluna1 != coluna2){
  94.                               system("cls");
  95.                               printf("A soma so e possivel se as matrizes possuirem o mesmo numero de linhas e colunas");
  96.                               getch();
  97.                               goto menu;
  98.                               }
  99.                     k = soma(a,b);
  100.                     printf("A matriz resultante e: \n");
  101.                     imprime(k);
  102.                     free(a);
  103.                     free(b);
  104.                     getch();
  105.                     goto menu;
  106.                     break;
  107.                case 2:
  108.                     system("cls");
  109.                     a = aloca(a);
  110.                     linha1 = l;
  111.                     coluna1 = c;
  112.                     b = aloca(b);
  113.                     linha2 = l;
  114.                     coluna2 = c;
  115.                     if(linha1 != linha2 || coluna1 != coluna2){
  116.                               system("cls");
  117.                               printf("A subtracao so e possivel se as matrizes possuirem o mesmo numero de linhas e colunas");
  118.                               getch();
  119.                               goto menu;
  120.                               }
  121.                     k = subt(a,b);
  122.                     printf("A matriz resultante e: \n");
  123.                     imprime(k);
  124.                     free(a);
  125.                     free(b);
  126.                     getch();
  127.                     goto menu;
  128.                     break;
  129.                case 3:
  130.                     free(k);
  131.                     k=(int**)malloc(linha1*sizeof(int*));
  132.                     for(i=0;i<l;i++) k[i]=(int*)malloc(coluna2*sizeof(int));
  133.                     system("cls");
  134.                     a = aloca(a);
  135.                     linha1 = l;
  136.                     coluna1 = c;
  137.                     b = aloca(b);
  138.                     linha2 = l;
  139.                     coluna2 = c;
  140.                     getch();
  141.                     if(coluna1 != linha2){
  142.                               system("cls");
  143.                               printf("O produto so e possivel se a quantidade de colunas da primeira matriz for a mesma quantidade de linhas da segunda matriz");
  144.                               getch();
  145.                               goto menu;
  146.                               }
  147.                     k = produ(a,b,linha1,coluna1,linha2,coluna2);
  148.                     printf("A matriz resultante e: \n");
  149.                     imprime(k);
  150.                     free(a);
  151.                     free(b);
  152.                     k=(int**)malloc(l*sizeof(int*));
  153.                     for(i=0;i<l;i++) k[i]=(int*)malloc(c*sizeof(int));
  154.                     getch();
  155.                     goto menu;
  156.                     break;
  157.                case 4:
  158.                     system("cls");
  159.                     a = aloca(a);
  160.                     k = in_mat(a);
  161.                     printf("A matriz resultante e: \n");
  162.                     imprime(k);
  163.                     free(a);
  164.                     getch();
  165.                     goto menu;
  166.                     break;
  167.                case 5:
  168.                     system("cls");
  169.                     printf("Fim do Programa");
  170.                     sleep(1000);
  171.                     free(k);
  172.                     return 0;
  173.                default:
  174.                        system("cls");
  175.                        printf("Opcao Invalida");
  176.                        getch();
  177.                        goto menu;
  178.                        break;
  179.                }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement