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#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
#include <utility>
using pair_string = std::pair<std::string, std::string>;
pair_string calculaCapacitor(const std::map<pair_string, double>& medida)
{
// determina el valor mayor de las tres mediciones y
// devuelve el par de cables donde se obtuvo
using mpartype = std::pair<pair_string, double>;
auto maximo = std::max_element(medida.begin(), medida.end(),
[](mpartype a, mpartype b) {
return a.second < b.second;
});
return pair_string(maximo->first.first, maximo->first.second);
}
std::string calculaComun(const std::vector<std::string>& c, const pair_string& parCapacitor)
{
// el cable común es donde no va conectado el capacitor
for(size_t i = 0; i < 3; ++i) {
if(parCapacitor.first != c[i] && parCapacitor.second != c[i]) {
return c[i];
}
}
return "";
}
std::string calculaLinea(const std::map<pair_string, double>& medidas,
const pair_string& parCapacitor,
const std::string& comun)
{
// determina la medida intermedia (inmediata menor a la del capacitor)
// y devuelve el cable que no es el común
// -- el mayor, siempre que no sea ni esto ni aquello --
double max = -1;
std::string linea;
for(const auto& par : medidas) {
if(par.first == parCapacitor)
continue;
if(par.second > max) {
max = par.second;
if(par.first.first != comun)
linea = par.first.first;
else
linea = par.first.second;
}
}
return linea;
}
int main()
{
std::map<pair_string, double> medidas;
std::vector<std::string> c;
c.resize(3);
std::cout << "ingrese los tres colores: ";
std::cin >> c[0] >> c[1] >> c[2];
double m;
auto parcolores = std::pair<std::string, std::string>(c[0], c[1]);
std::cout << "ingrese la resistencia medida entre el " << c[0] << " y el " << c[1] << ": ";
std::cin >> m;
medidas[parcolores] = m;
parcolores = std::pair<std::string, std::string>(c[0], c[2]);
std::cout << "ingrese la resistencia medida entre " << c[0] << " y " << c[2] << ": ";
std::cin >> m;
medidas[parcolores] = m;
parcolores = std::pair<std::string, std::string>(c[1], c[2]);
std::cout << "ingrese la resistencia medida entre " << c[1] << " y " << c[2] << ": ";
std::cin >> m;
medidas[parcolores] = m;
// faltaría controlar la forma y los valores.
std::cout << '\n';
// Capacitor
pair_string parCapacitor = calculaCapacitor(medidas);
std::cout << "el capacitor va entre el " << parCapacitor.first << " y el " << parCapacitor.second << '\n';
// común
std::string comun = calculaComun(c, parCapacitor);
std::cout << "el comun es el " << comun << '\n';
// linea
std::cout << "la linea se conecta al " << calculaLinea(medidas, parCapacitor, comun) << '\n';
}