Este programa en C++ permite calcular el valor y la tolerancia de una resistencia en ohmios, mediante la conversión numérica de su banda de colores y posterior tratamiento matemático. En electrónica, las resistencias se identifican mediante un código de colores que indica su valor nominal y su margen de tolerancia.

Recordemos que el procedimiento general para medir una resistencia es el siguiente:

1.- Se identifican las bandas de color en la resistencia. Normalmente cuentan con 4 bandas, aunque algunas pueden llegar a tener 5 o incluso 6 bandas.

2.- Se anotan los colores de las bandas de izquierda a derecha. La primera y segunda banda representan los primeros dígitos del valor de la resistencia, la tercera banda representa el multiplicador y la cuarta la tolerancia.

3.- El valor de la resistencia se calcula multiplicando los primeros dos dígitos por el multiplicador, que se indica en la tercera banda de color. Por ejemplo, si los primeros dos dígitos fueran 56 y el multiplicador fuera 100, el valor de la resistencia sería de 5600 Ω.

4.- La tolerancia se indica por la cuarta banda de color y puede tener un valor de entre ±1% hasta el ±20%.

Ahora sí, pasemos al código:

#include <iostream>
#include <string>
#include <map>
#include <cmath>

using namespace std;

// Mapa de colores a valores numéricos
map<string, int> colors = {{"negro", 0}, {"marron", 1}, {"rojo", 2}, {"naranja", 3},
                           {"amarillo", 4}, {"verde", 5}, {"azul", 6}, {"purpura", 7},
                           {"gris", 8}, {"blanco", 9}};

// Mapa de colores de la banda de tolerancia a porcentajes de tolerancia
map<string, double> tolerance = {{"negro", 0.1}, {"marron", 0.01}, {"rojo", 0.02},
                                 {"dorado", 0.05}, {"plateado", 0.1}, {"verde", 0.005}, 
                                 {"azul", 0.0025}, {"purpura", 0.001}};

int main() {  
    // Input de cada banda de color
    string color1, color2, color3, color4;
    cout << "Introduce el color de la primera banda: ";
    cin >> color1;
    cout << "Introduce el color de la segunda banda: ";
    cin >> color2;
    cout << "Introduce el color de la tercera banda: ";
    cin >> color3;
    cout << "Introduce el color de la cuarta banda: ";
    cin >> color4;
    
    // Convertir los colores a valores numéricos
    int val1 = colors[color1];
    int val2 = colors[color2];
    int val3 = colors[color3];
    
    // Calcular el valor en ohmios
    double value = val1 * 10 + val2;
    value *= pow(10, val3);
    
    // Calcular el margen de tolerancia
    double tol = (value * tolerance[color4]) / 100;
    
    // Mostrar el resultado
    cout << "El valor en ohmios es: " << value << " ohmios ±" << tol << " ohmios" << endl;
    
    return 0;
}

El programa utiliza dos mapas o diccionarios para relacionar los colores con los valores numéricos de las bandas de la resistencia y con los valores de tolerancia correspondientes. El mapa 'colors' asigna valores a las bandas de valor, mientras que el mapa 'tolerance' asigna valores a la banda de tolerancia. A continuación, se solicita al usuario ingresar los colores de las cuatro bandas de la resistencia. Los colores de las primeras tres bandas se convierten a valores numéricos y se utilizan para determinar el valor de la resistencia mediante la siguiente fórmula:

valor = (valor1 * 10 + valor2) * 10^valor3

Mientras que el valor de la cuarta banda se utiliza para determinar la tolerancia:

tolerancia = (valor * tolerancia4) / 100

Finalmente, el programa imprime el resultado en la consola del compilador.

Puedes descargar el código .CPP aquí.

NOTA: Si al correr el programa los acentos o caracteres especiales no se muestran correctamente, puedes usar esta solución: ¿Cómo mostrar acentos y caracteres especiales en programas escritos en C++?

Código cortesía de: Circuitoselectronicos.org