Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/07/2016, 09:54
enrieto
 
Fecha de Ingreso: abril-2016
Mensajes: 31
Antigüedad: 8 años, 7 meses
Puntos: 5
Respuesta: Necesito orientacion con planteamiento de codigo en C

Tengo algo en C++ que para mí es más fácil, pero no calcula todo lo posible, sólo a) dónde va el condensador, b) cuál es el común y c) dónde conectar la línea.

Te quedaría completar lo que necesites y pasarlo a C, y yo controlaría la entrada de datos. Sobre todo porque vi en el video que parece fácil equivocarse en las mediciones, esos números no se quedan quietos y los cables se agarran con los deditos.

La criatura:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string>
  4. #include <map>
  5. #include <vector>
  6. #include <utility>
  7.  
  8. using pair_string = std::pair<std::string, std::string>;
  9.  
  10. pair_string calculaCapacitor(const std::map<pair_string, double>& medida)
  11. {
  12.     // determina el valor mayor de las tres mediciones y
  13.     // devuelve el par de cables donde se obtuvo
  14.     using mpartype = std::pair<pair_string, double>;
  15.     auto maximo = std::max_element(medida.begin(), medida.end(),
  16.     [](mpartype a, mpartype b) {
  17.         return a.second < b.second;
  18.     });
  19.     return pair_string(maximo->first.first, maximo->first.second);
  20. }
  21.  
  22. std::string calculaComun(const std::vector<std::string>& c, const pair_string& parCapacitor)
  23. {
  24.     // el cable común es donde no va conectado el capacitor
  25.     for(size_t i = 0; i < 3; ++i) {
  26.         if(parCapacitor.first != c[i] && parCapacitor.second != c[i]) {
  27.             return c[i];
  28.         }
  29.     }
  30.     return "";
  31. }
  32.  
  33. std::string calculaLinea(const std::map<pair_string, double>& medidas,
  34.                          const pair_string& parCapacitor,
  35.                          const std::string& comun)
  36. {
  37.     // determina la medida intermedia (inmediata menor a la del capacitor)
  38.     // y devuelve el cable que no es el común
  39.     // -- el mayor, siempre que no sea ni esto ni aquello --
  40.     double max = -1;
  41.     std::string linea;
  42.     for(const auto& par : medidas) {
  43.         if(par.first == parCapacitor)
  44.             continue;
  45.         if(par.second > max) {
  46.             max = par.second;
  47.             if(par.first.first != comun)
  48.                 linea = par.first.first;
  49.             else
  50.                 linea = par.first.second;
  51.         }
  52.     }
  53.     return linea;
  54. }
  55.  
  56. int main()
  57. {
  58.     std::map<pair_string, double> medidas;
  59.     std::vector<std::string> c;
  60.     c.resize(3);
  61.     std::cout << "ingrese los tres colores: ";
  62.     std::cin >> c[0] >> c[1] >> c[2];
  63.  
  64.     double m;
  65.     auto parcolores = std::pair<std::string, std::string>(c[0], c[1]);
  66.     std::cout << "ingrese la resistencia medida entre el " << c[0] << " y el " << c[1] << ": ";
  67.     std::cin >> m;
  68.     medidas[parcolores] = m;
  69.  
  70.     parcolores = std::pair<std::string, std::string>(c[0], c[2]);
  71.     std::cout << "ingrese la resistencia medida entre " << c[0] << " y " << c[2] << ": ";
  72.     std::cin >> m;
  73.     medidas[parcolores] = m;
  74.  
  75.     parcolores = std::pair<std::string, std::string>(c[1], c[2]);
  76.     std::cout << "ingrese la resistencia medida entre " << c[1] << " y " << c[2] << ": ";
  77.     std::cin >> m;
  78.     medidas[parcolores] = m;
  79.  
  80.     // faltaría controlar la forma y los valores.
  81.  
  82.     std::cout << '\n';
  83.  
  84.     // Capacitor
  85.     pair_string parCapacitor = calculaCapacitor(medidas);
  86.     std::cout << "el capacitor va entre el " << parCapacitor.first << " y el " << parCapacitor.second << '\n';
  87.  
  88.  
  89.     // común
  90.     std::string comun = calculaComun(c, parCapacitor);
  91.     std::cout << "el comun es el " << comun << '\n';
  92.  
  93.  
  94.     // linea
  95.     std::cout << "la linea se conecta al " << calculaLinea(medidas, parCapacitor, comun) << '\n';
  96.  
  97. }