Binary Road
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Trabalho com matrizes

Ir para baixo

Trabalho com matrizes Empty Trabalho com matrizes

Mensagem  Renancr 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:

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Renancr
Renancr

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

Ir para o topo Ir para baixo

Trabalho com matrizes Empty Programa para calculo com matriz

Mensagem  Renancr 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++;
      }
   }
}
Renancr
Renancr

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

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos