Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Estrutura tipada.
- #include <stdio.h>
- typedef enum {mat='m', vet='v'} ver;
- typedef struct {
- int v[20];
- int tamanho_v;
- int linhas, colunas;
- ver verifica;
- } vec_mat;
- void zera_m (vec_mat *vm_ptr) {
- for (int i=0; i<vm_ptr->linhas; i++)
- for (int j=0; j<vm_ptr->colunas; j++)
- vm_ptr->v[i*vm_ptr->linhas+j] = 0;
- }
- void inicia_m (vec_mat *vm_ptr) {
- for (int i=0; i<vm_ptr->linhas; i++)
- for (int j=0; j<vm_ptr->colunas; j++)
- scanf ("%d", &vm_ptr->v[i*vm_ptr->linhas+j]);
- }
- void inicia_v (vec_mat *vm_ptr) {
- for (int i=0; i<vm_ptr->linhas; i++)
- scanf ("%d", &vm_ptr->v[i]);
- }
- void print (vec_mat *vm_ptr) {
- if (vm_ptr->verifica==mat) {
- for (int i=0; i<vm_ptr->linhas; i++) {
- for (int j=0; j<vm_ptr->colunas; j++) {
- printf ("%d ", vm_ptr->v[i*vm_ptr->linhas+j]);
- }
- printf ("\n");
- }
- }
- else if (vm_ptr->verifica==vet) {
- printf ("%d", vm_ptr->v[0]);
- }
- }
- void mult (vec_mat *vm1_ptr, vec_mat *vm2_ptr) {
- vec_mat mvm;
- mvm.verifica = vm1_ptr->verifica;
- if (vm1_ptr->verifica==mat) {
- mvm.linhas = vm1_ptr->linhas;
- mvm.colunas = vm2_ptr->colunas;
- zera_m (&mvm);
- for (int i=0; i<vm1_ptr->linhas; i++)
- for (int j=0; j<vm2_ptr->colunas; j++)
- for (int k=0; k<vm2_ptr->linhas; k++) {
- mvm.v[i*mvm.linhas+j] = mvm.v[i*mvm.linhas+j] +
- (vm1_ptr->v[i*vm1_ptr->linhas+k] * vm2_ptr->v[k*vm2_ptr->linhas+j]);
- }
- print (&mvm);
- }
- else if (vm1_ptr->verifica==vet) {
- mvm.linhas = vm1_ptr->linhas;
- mvm.v[0] = 0;
- for (int i=0; i<vm1_ptr->linhas; i++)
- mvm.v[0] = mvm.v[0] + vm1_ptr->v[i] * vm2_ptr->v[i];
- print (&mvm);
- }
- }
- int main () {
- vec_mat vm1, vm2;
- char op;
- scanf ("%c", &op);
- vm1.verifica = op;
- if (vm1.verifica==mat) {
- scanf("%d %d", &vm1.linhas, &vm1.colunas);
- inicia_m (&vm1);
- scanf("%d %d", &vm2.linhas, &vm2.colunas);
- inicia_m (&vm2);
- if (vm1.colunas != vm2.linhas) {
- printf ("Inválido");
- return 0;
- }
- mult (&vm1, &vm2);
- }
- else if (vm1.verifica==vet) {
- scanf ("%d", &vm1.linhas);
- inicia_v (&vm1);
- scanf ("%d", &vm2.linhas);
- inicia_v (&vm2);
- if (vm1.linhas != vm2.linhas) {
- printf ("Inválido");
- return 0;
- }
- mult (&vm1, &vm2);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment