Trabalho com matrizes

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Trabalho com matrizes

Mensagem  Renancr em Dom 19 Jun 2011 - 11:42

1. Desenvolver uma programa em C++ a fim de manipular duas matrizes 3x3 por meio das seguintes opções disponíveis via menu:
a. Inserir valores;
b. Listar valores;
c. Calcular a média de uma linha qualquer;
d. Calcular a média de uma coluna qualquer;
e. Imprimir a matriz resultante a partir do produto de duas matrizes;

Ao selecionar as opções a, b, c ou d, deverá ser solicitada ao usuário qual matriz será manipulada a respectiva operação.
Caso seja selecionada a operação e, o resultado deverá ser uma matriz resultante da operação ilustrada abaixo:

[Você precisa estar registrado e conectado para ver este link.]
avatar
Renancr

Mensagens : 118
Data de inscrição : 08/03/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Programa para calculo com matriz

Mensagem  Renancr em Dom 19 Jun 2011 - 11:47

Programa para calculo com matriz


Código:
#include <iostream>
using namespace std;

const int lin=3, col=3;

int menu();
int menu2(int flag_a, int flab_b, int flagx);
int preenche(int matriz[lin][col]);
void exibe(int matriz[lin][col]);
int calcmedia(int matriz[lin][col], int lin_ou_col, int op);
void prod_matriz(int matriz_a[lin][col], int matriz_b[lin][col],int matriz_result[lin][col]);

void main()
{
   int matriz_a[lin][col], matriz_b[lin][col], matriz_result[lin][col], flag_a=0, flag_b=0, media, op, op2, op3;

   do{
      system("cls");
      op=menu();
      
      if(op == 1)
      {
         op2=menu2(flag_a, flag_b, 0);
         system("cls");
         if(op2 == 1)
         {
            flag_a=preenche(matriz_a);
         }
         else
            if(op2 == 2)
            {
               flag_b=preenche(matriz_b);
            }
      }
      else
         if(op == 2)
         {
            op2=menu2(flag_a, flag_b, 1);
            system("cls");
            if(op2 == 1)
            {
               exibe(matriz_a);
            }
            else
               if(op2 == 2)
               {
                  exibe(matriz_b);
               }
            system("pause");
         }
         else
            if(op == 3)
            {
               system("cls");
               op2=menu2(flag_a, flag_b, 1);

               do{
                  cout<< "Digite o numero da linha para calcular a media.\n";
                  cin>> op3;
                  op3--;

                  if(op3 >= lin || op3 < 0)
                  {
                     system("cls");
                     cout<< "O valor digitado e maior do que a quantidade de linhas.\n\n";
                     system("pause");
                  }
               }while(op3 >= lin || op3 < 0);
               system("cls");
               if(op2 == 1)
               {
                  media = calcmedia(matriz_a, 1, op3);
                  cout<< "A media e: " << media << "\n\n";
                  system("pause");
               }
               else
                  if(op2 == 2)
                  {
                     media = calcmedia(matriz_b, 1, op3);
                     cout<< "A media e: " << media << "\n\n";
                     system("pause");
                  }
            }
            else
               if(op == 4)
               {
                  op2=menu2(flag_a, flag_b, 1);

                  do{
                     cout<< "Digite o numero da coluna para calcular a media.\n";
                     cin>> op3;
                     op3--;

                     if(op3 >= col || op3 < 0)
                     {
                        system("cls");
                        cout<< "O valor digitado e maior do que a quantidade de colunas.\n\n";
                        system("pause");
                     }
                  }while(op3 >= col || op3 < 0);
                  system("cls");
                  if(op2 == 1)
                  {
                     media = calcmedia(matriz_a, 2 ,op3);
                     cout<< "A media e: " << media << "\n\n";
                     system("pause");
                  }
                  else
                     if(op2 == 2)
                     {
                        media = calcmedia(matriz_b, 2 , op3);
                        cout<< "A media e: " << media << "\n\n";
                        system("pause");
                     }
               }
               else
                  if(op == 5)
                  {
                     system("cls");

                     if(flag_a != 0 && flag_b != 0)
                     {
                        prod_matriz(matriz_a, matriz_b, matriz_result);
                        exibe(matriz_result);
                     }
                     else
                        cout<< "As duas matrizes devem estar preenchidas para calcular a matriz resultante.\n\n";

                     system("pause");
                  }
   }while(op != 6);
}

int menu()
{
   int op;

   do{
      system("cls");
      cout<< "=============================================\n";
      cout<< "\t\tMenu\n";
      cout<< "=============================================\n";
      cout<< "1- Preencher a matriz\n";
      cout<< "2- Listar matriz\n";
      cout<< "3- Calcular media de uma linha\n";
      cout<< "4- Calcular media de uma coluna\n";
      cout<< "5- Calcular matriz resultante (1 * 2) = N\n";
      cout<< "6- Sair\n";
      cout<< "=============================================\n";
      cout<< "\tDigite a opcao\n\t";
      cin>> op;
      if(op < 1 || op > 6)
      {
         system("cls");
         cout<< "Opcao invalida, digite novamente.\n\n\n";
         system("pause");
      }
   }while(op < 1 || op > 6);

   return op;
}

int menu2(int flag_a, int flag_b, int flagx)
{
   int op;

   do{
      cout<< "Qual matriz voce deseja, 1 ou 2 ?\n";
      cin>> op;
      if(op < 1 || op > 2)
      {
         system("cls");
         cout<< "O valor para a matriz nao pode ser diferente de 1 ou 2, digite novamente.\n\n";
         system("pause");
      }
   }while(op < 1 || op > 2);

   if(flagx != 0)
   {
      if(flag_a == 0 && op == 1)
      {
         system("cls");
         cout<< "A matriz 1 ainda nao foi preenchida\n\n";
         op=3;
      }
      else
         if(flag_b == 0 && op == 2)
         {
            system("cls");
            cout<< "A matriz 2 ainda nao foi preenchida\n\n";
            op=3;
         }
   }
   
   return op;
}

int preenche(int matriz[lin][col])
{
   int l, c;

   for(l = 0; l < lin; l++)
      for(c = 0; c < col; c++)
      {
         cout<< "Digite o valor para a linha " << l+1 << " coluna " << c+1 << "\n";
         cin>> matriz[l][c];
      }

   return 1;
}

void exibe(int matriz[lin][col])
{
   int l, c;

   cout<< "===================\n";
   for(l = 0; l < lin; l++)
   {
      cout<< "| ";
      for(c = 0; c < col; c++)
      {
         cout<< matriz[l][c] << " ";
      }
      cout << " |\n";
   }
   cout<< "===================\n";
}

int calcmedia(int matriz[lin][col], int lin_ou_col, int op)
{
   int i, media=0;

   if(lin_ou_col == 1)
   {
      for(i = 0; i < lin; i++)
         media+=matriz[op][i];
      media/=lin;
   }
   else
   {
      for(i = 0; i < col; i++)
         media+=matriz[i][op];
      media/=lin;
   }

   return media;
}

void prod_matriz(int matriz_a[lin][col], int matriz_b[lin][col],int matriz_result[lin][col])
{
   int l, c, cont=0;

   for(l=0; l<lin; l++)
      for(c=0; c<col; c++)
         matriz_result[l][c]=0;

   while(cont != col)
   {
      for(l=0; l<lin; l++)
      {
         for(c=0; c<col; c++)
            matriz_result[l][cont]+= matriz_a[l][c] * matriz_b[c][cont];
         if((l+1) == lin)
            cont++;
      }
   }
}
avatar
Renancr

Mensagens : 118
Data de inscrição : 08/03/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum