Francelmo

Estrutura tipada

Nov 4th, 2020 (edited)
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.79 KB | None | 0 0
  1. //Estrutura tipada.
  2. #include <stdio.h>
  3.  
  4. typedef enum {mat='m', vet='v'} ver;
  5.  
  6. typedef struct {
  7.   int v[20];
  8.   int tamanho_v;
  9.   int linhas, colunas;
  10.   ver verifica;
  11. } vec_mat;
  12.  
  13. void zera_m (vec_mat *vm_ptr) {
  14.     for (int i=0; i<vm_ptr->linhas; i++)
  15.         for (int j=0; j<vm_ptr->colunas; j++)
  16.             vm_ptr->v[i*vm_ptr->linhas+j] = 0;
  17. }
  18.  
  19. void inicia_m (vec_mat *vm_ptr) {
  20.     for (int i=0; i<vm_ptr->linhas; i++)
  21.         for (int j=0; j<vm_ptr->colunas; j++)
  22.             scanf ("%d", &vm_ptr->v[i*vm_ptr->linhas+j]);
  23. }
  24.  
  25. void inicia_v (vec_mat *vm_ptr) {
  26.     for (int i=0; i<vm_ptr->linhas; i++)
  27.         scanf ("%d", &vm_ptr->v[i]);
  28. }
  29.  
  30. void print (vec_mat *vm_ptr) {
  31.     if (vm_ptr->verifica==mat) {
  32.         for (int i=0; i<vm_ptr->linhas; i++) {
  33.             for (int j=0; j<vm_ptr->colunas; j++) {
  34.                 printf ("%d ", vm_ptr->v[i*vm_ptr->linhas+j]);
  35.             }
  36.             printf ("\n");
  37.         }
  38.     }
  39.     else if (vm_ptr->verifica==vet) {
  40.         printf ("%d", vm_ptr->v[0]);
  41.     }
  42. }
  43.  
  44. void mult (vec_mat *vm1_ptr, vec_mat *vm2_ptr) {
  45.     vec_mat mvm;
  46.  
  47.     mvm.verifica = vm1_ptr->verifica;
  48.    
  49.     if (vm1_ptr->verifica==mat) {
  50.         mvm.linhas = vm1_ptr->linhas;
  51.         mvm.colunas = vm2_ptr->colunas;
  52.  
  53.         zera_m (&mvm);
  54.        
  55.         for (int i=0; i<vm1_ptr->linhas; i++)
  56.             for (int j=0; j<vm2_ptr->colunas; j++)
  57.                 for (int k=0; k<vm2_ptr->linhas; k++) {
  58.                     mvm.v[i*mvm.linhas+j] = mvm.v[i*mvm.linhas+j] +
  59.                     (vm1_ptr->v[i*vm1_ptr->linhas+k] * vm2_ptr->v[k*vm2_ptr->linhas+j]);
  60.                 }
  61.                
  62.         print (&mvm);
  63.     }
  64.     else if (vm1_ptr->verifica==vet) {    
  65.         mvm.linhas = vm1_ptr->linhas;
  66.         mvm.v[0] = 0;
  67.  
  68.         for (int i=0; i<vm1_ptr->linhas; i++)
  69.             mvm.v[0] = mvm.v[0] + vm1_ptr->v[i] * vm2_ptr->v[i];
  70.        
  71.         print (&mvm);
  72.     }    
  73. }
  74.  
  75. int main () {
  76.     vec_mat vm1, vm2;
  77.     char op;
  78.    
  79.     scanf ("%c", &op);
  80.  
  81.     vm1.verifica = op;
  82.    
  83.     if (vm1.verifica==mat) {
  84.         scanf("%d %d", &vm1.linhas, &vm1.colunas);
  85.        
  86.         inicia_m (&vm1);
  87.        
  88.         scanf("%d %d", &vm2.linhas, &vm2.colunas);
  89.        
  90.         inicia_m (&vm2);
  91.        
  92.         if (vm1.colunas != vm2.linhas) {
  93.             printf ("Inválido");
  94.             return 0;
  95.         }
  96.        
  97.         mult (&vm1, &vm2);
  98.     }
  99.     else if (vm1.verifica==vet) {
  100.         scanf ("%d", &vm1.linhas);
  101.        
  102.         inicia_v (&vm1);
  103.        
  104.         scanf ("%d", &vm2.linhas);
  105.        
  106.         inicia_v (&vm2);
  107.        
  108.         if (vm1.linhas != vm2.linhas) {
  109.             printf ("Inválido");
  110.             return 0;
  111.         }
  112.            
  113.         mult (&vm1, &vm2);
  114.     }
  115.    
  116.     return 0;    
  117. }
Advertisement
Add Comment
Please, Sign In to add comment