]> git.llucax.com Git - z.facultad/75.29/dale.git/blob - src/main.cpp
Bugfix (evita potencial pisada de memoria).
[z.facultad/75.29/dale.git] / src / main.cpp
1
2 #include "number.h"
3 #include <cstdlib>
4 #include <iostream>
5 #include <fstream>
6 #include <sstream>
7
8 using namespace std;
9
10 void imprimir_integrantes();
11 void procesar(istream& is, ostream& os);
12
13 int main(int argc, char* argv[])
14 {
15         // Verifico parámetros.
16         if (argc < 3)
17         {
18                 cerr << "Faltan argumentos. Uso: " << argv[0]
19                         << " [archivo_entrada] [archivo_salida]\n";
20                 return EXIT_FAILURE;
21         }
22         ifstream ifs(argv[1]);
23         if (!ifs) // No se abrió bien
24         {
25                 cerr << "No se puede abrir el archivo " << argv[1] << "\n";
26                 return EXIT_FAILURE;
27         }
28         ofstream ofs(argv[2]);
29         if (!ofs) // No se abrió bien
30         {
31                 cerr << "No se puede abrir el archivo " << argv[2] << "\n";
32                 return EXIT_FAILURE;
33         }
34         imprimir_integrantes();
35         procesar(ifs, ofs);
36         return EXIT_SUCCESS;
37 }
38
39 void procesar(istream& is, ostream& os)
40 {
41         string linea;
42         while (getline(is, linea))
43         {
44                 istringstream iss(linea.c_str());
45                 char operador;
46                 string str_op1, str_operador, str_op2;
47                 iss >> str_op1 >> operador >> str_op2;
48                 number<> op1 = str_op1;
49                 number<> op2 = str_op2;
50                 switch (operador)
51                 {
52                         case '+':
53                                 os << (op1 += op2) << "\n";
54                                 break;
55                         case '-':
56                                 os << (op1 -= op2) << "\n";
57                                 break;
58                         case '*':
59                                 os << naif(op1, op2) << "\n";
60                                 break;
61                         case 'k':
62                                 os << karatsuba(op1, op2) << "\n";
63                                 break;
64                         case '^':
65                                 os << pot_dyc_n(op1, op2) << "\n";
66                                 break;
67                         case 'q':
68                                 os << pot_dyc_k(op1, op2) << "\n";
69                                 break;
70                 }
71         }
72 }
73
74 void imprimir_integrantes()
75 {
76         cout <<
77 "Alberto Bertogli 84107\n\
78 Ezequiel González 79872 \n\
79 Leandro Lucarella 77891 \n";
80 }
81