segunda-feira, 11 de abril de 2011

Projeto “Asa de Águia”

Mais um projeto de conclusão de bimestre da faculdade, nomeado pelo Mateus (mesmo autor do primeiro nome do Projeto “Meia Noite”). Dessa vez, tivemos que fazer um programa que efetuava soma e multiplicação de polinômios. Além de eu e o Mateus, tivemos a ilustre participação do Jake Sully! Sim, o Avatar… Bom, o nome dele é Vitor Reis, mas quase ninguém sabe disso.

O projeto foi desenvolvido em DevC++ e CDT, usando os GCCs padrão do Windows 7 e XP. Em relação ao “versionamento”, usamos um muito bom… E-mails! E isso foi o motivo do nome de nosso projeto, pois ao “versionarem” o somador de polinômios, não anexaram o projeto ao e-mail… Né?!

Mas no final deu tudo certo e saiu um ótimo programa, usando classes e orientação a objeto em C++.

E abaixo o o .CPP principal:

   1: /*
   2:  * ProjetoAsaDeAguia
   3:  *
   4:  *      Authors: Idemax Green . 7481
   5:  *               Mateus Padua . 7575
   6:  *               Vitor Reis   . 8932
   7:  */
   8:  
   9: #include <cstdlib>
  10: #include <iostream>
  11: #include <vector>
  12: #include <string>
  13:  
  14: #include "headers/PolinomioUtil.h"
  15: #include "headers/PolinomioReduzido.h"
  16:  
  17: using namespace std;
  18: using namespace ProjetoAsaDeAguia;
  19:  
  20: // Requisita ao usuário as equações
  21: void getEquations(string &equation1, string &equation2, bool &showWarning);
  22:  
  23: // Manipula as equações para o cálculo.
  24: void manipulateEquations(string equation1, string equation2, PolinomioReduzido &polinomioRed1, PolinomioReduzido &polinomioRed2);
  25:  
  26: // Faz o cálculo necessário e mostra na tela.
  27: void makeCalc(PolinomioReduzido polinomioRed1, PolinomioReduzido polinomioRed2, char operation);
  28:  
  29: int main(int argc, char *argv[])
  30: {
  31:     bool warning = true;
  32:  
  33:     char operation;
  34:     string equation1; // = "5x2 + 7x2 + 1x50 + 10 + 4x1 - 40x1 - 27 + 1x45";
  35:     string equation2; // = "10x2 + 67x7 + 3x5 + 77 + 3x1 - 3x90 - 15 + 2x34";
  36:     PolinomioReduzido polinomioRed1, polinomioRed2;
  37:  
  38:     while (true)
  39:     {
  40:         system("cls");
  41:  
  42:         cout << "Operacoes com Polinomios" << endl << endl;
  43:         cout << "Digite + para somar ou * para multiplicar:" << endl;
  44:         cin >> operation;
  45:  
  46:         // "limpa" o buffer depois do \n
  47:         cin.ignore();
  48:  
  49:         switch (operation)
  50:         {
  51:         case '+':
  52:         case '*':
  53:             getEquations(equation1, equation2, warning);
  54:             manipulateEquations(equation1, equation2, polinomioRed1, polinomioRed2);
  55:             makeCalc(polinomioRed1, polinomioRed2, operation);
  56:  
  57:             break;
  58:         default:
  59:             cout << "Operacao invalida!" << endl << endl;
  60:  
  61:             break;
  62:         }
  63:  
  64:         cout << endl << endl;
  65:         system("pause");
  66:     }
  67:  
  68:     return EXIT_SUCCESS;
  69: }
  70:  
  71: void getEquations(string &equation1, string &equation2, bool &showWarning)
  72: {
  73:     if(showWarning)
  74:     {
  75:         showWarning = false;
  76:  
  77:         cout << endl << "=============================================" << endl;
  78:         cout << endl << "TUTORIAL" << endl << "Exemplos de como descrever seu polinomio:" << endl;
  79:         cout << "\tA*x^B\t\tAxB" << endl;
  80:         cout << "\tA*x\t\tAx1" << endl;
  81:         cout << "\tA\t\tA ou Ax0" << endl;
  82:         cout << "\tx\t\t1x1" << endl;
  83:         cout << "\tx^B\t\t1xB" << endl;
  84:         cout << endl << "=============================================" << endl;
  85:     }
  86:  
  87:     cout << endl << "Digite o primeiro polinomio:\tEx.: 2x9 + 1x4 + 8x1 - 5x0 + 10" << endl;
  88:     getline(cin, equation1);
  89:  
  90:     cout << endl << "Digite o segundo polinomio:\tEx.: 2x9 + 1x4 + 8x1 + 10" << endl;
  91:     getline(cin, equation2);
  92: }
  93:  
  94: void manipulateEquations(string equation1, string equation2, PolinomioReduzido &polinomioRed1, PolinomioReduzido &polinomioRed2)
  95: {
  96:     polinomioRed1 = PolinomioUtil::transformInPolinomioReduzido(equation1);
  97:     polinomioRed2 = PolinomioUtil::transformInPolinomioReduzido(equation2);
  98: }
  99:  
 100: void makeCalc(PolinomioReduzido polinomioRed1, PolinomioReduzido polinomioRed2, char operation)
 101: {
 102:     PolinomioReduzido result = PolinomioReduzido();
 103:  
 104:     if (operation == '+')
 105:         result = polinomioRed1.somaPolinomio(polinomioRed2);
 106:     else if (operation == '*')
 107:         result = polinomioRed1.multiplicacao(polinomioRed2);
 108:     else
 109:         return;
 110:  
 111:     int loopSize = result.getGrau();
 112:  
 113:     cout << endl << endl << "Resultado:" << endl;
 114:  
 115:     for (int i = loopSize; i >= 0; i--)
 116:         if (result.getTermoValue(i) != 0)
 117:             cout << (result.getTermoValue(i) > 0 ? "+" : "") << result.getTermoValue(i) << "x" << i << " ";
 118: }

Provavelmente esse bimestre começaremos a ver Java, não vejo a hora. Conheço um pouco bem pouco, mas sei que é idêntico o Actionscript, então não vou ter muito o que aprender em relação a sintaxe e OOP, e sim como usá-lo.

Baixe o projeto clicando aqui.