Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chaneque_14 en 4 Diciembre 2020, 04:59 am



Título: Ayuda con un programa de C++ de resistencias de bandas 4, 5, 6 bandas
Publicado por: chaneque_14 en 4 Diciembre 2020, 04:59 am
Nose como añadir una opcion para 5 y 6 bandas, y como darle la opcion de mostrarle la demas tolerancias ademas del dorado y plateado. Necesito Ayuda. Gracias.
Código
  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4.  
  5. int n1, n2, n3;
  6. cout<<"\nNegro     = 1 ";
  7. cout<<"\nCafe      = 2 ";
  8. cout<<"\nRojo      = 3 ";
  9. cout<<"\nNaranja   = 4 ";
  10. cout<<"\nAmarillo  = 5 ";
  11. cout<<"\nVerde     = 6 ";
  12. cout<<"\nAzul      = 7 ";
  13. cout<<"\nPurpura   = 8 ";
  14. cout<<"\nGris      = 9 ";
  15. cout<<"\nBlanco    = 10 ";
  16.  
  17. cout<<"\n¿Cual es el primer color? :";cin>>n1;
  18. cout<<"\n¿Cual es el segundo color? :";cin>>n2;
  19. cout<<"\n¿Cual es el tercer color? :";cin>>n3;
  20.  
  21. cout<<n1<<n2;
  22.  
  23. for(int i=0; i<n3; i++){
  24.  
  25. cout<<0;
  26. }
  27.  
  28. int n4;
  29. cout<<"\nDigite el numero que aparecio :"; cin>>n4;
  30.  
  31. float n5, n6;
  32.  
  33. cout<<"\nDorado = 5%";
  34. cout<<"\nPlateado = 10%";
  35.  
  36. cout<<"\nEscribe el porcentaje dependiendo el color: "; cin>>n5;
  37.  
  38. if((n5>=5)and(n5>=10)){
  39.  
  40. n6=((5)*(4))/100;
  41. cout<<"\nSu porcentaje = "<<n6<<endl;
  42. }
  43. else{
  44. n6=((10)*(n4))/100;
  45. cout<<"\nSu porcentaje = "<<n6<<endl;
  46. }
  47.  
  48. int suma= 0,resta=0;
  49.  
  50. suma= n4+ n6;
  51. resta= n4 - n6;
  52.  
  53. cout<<"\nSu limite de rango mayor es de : "<<suma<<endl;
  54. cout<<"\nSu limite de rango menor es de : "<<resta<<endl;
  55.  
  56. return 0;
  57.  
  58. }


Título: Re: Ayuda con un programa de C++ de resistencias de bandas 4, 5, 6 bandas
Publicado por: K-YreX en 4 Diciembre 2020, 06:08 am
Problemas que le veo a ese programa:
  • Los nombres de las variables no ayudan a entender el código.
  • Siempre hay que suponer que un usuario se puede equivocar por lo que cuantas menos veces dependamos de él mejor. Con esto quiero decir que las líneas 21-29 es mejor evitarlas. Es un cálculo que puedes hacer internamente sin necesidad del usuario.
  • La condición de la línea 38 se puede simplificar: (n >= 5) && (n >= 10) es lo mismo que: (n >= 10). Siempre que la segunda condición sea cierta, la primera también lo será y es imposible que la segunda sea cierta sin serlo la primera también. De todas formas este bloque de if-else no tiene mucho sentido tal y como está planteado.
  • En la línea 40 utilizas 4 en vez de n4.

No sé mucho de resistencias (recuerdo un poco de cuando estudiaba física o tecnología) y mirando por Internet veo que hay diferentes tablas de medida sobre todo para el porcentaje final.
Por lo tanto es importante que especifiques las necesidades que tiene que suplir tu código.

De momento te puedo ayudar en lo siguiente, si quieres hacer el programa válido para un número diferente de bandas, haz lo siguiente:
Código
  1. // Definimos una constante para el maximo de bandas:
  2. const int MAX_BANDAS = 6;
  3.  
  4. int main(){
  5.  // Creamos un array para guardar el valor de cada banda:
  6.  int bandas[MAX_BANDAS]; // Pueden sobrar espacios pero la solucion mas correcta requiere de memoria dinamica y es mas avanzado
  7.  int numeroBandas;
  8.  // Con este do-while evitas que el usuario pueda introducir numeros fuera del rango indicado en el while() -> [4, 6]
  9.  do {
  10.    cout << "Introduce el numero de bandas de la resistencia: ";
  11.    cin >> numeroBandas;
  12.  } while(numeroBandas < 4 || numeroBandas > 6);
  13.  // la ultima banda es diferente pero las demas son iguales por lo que repetimos lo de preguntar color numeroBandas-1 veces:
  14.  // AQUI muestras los colores como lo haces ahora...
  15.  for(int i = 0; i < numeroBandas - 1; ++i){
  16.    // Con este do-while evitas que introduzcan valores no validos
  17.    // PD: He estado revisando algunas tablas y el negro corresponde al 0, no al 1
  18.    do {
  19.      cout << "Introduce el valor numerico de la banda " << (i+1) << ": ";
  20.      cin >> bandas[i];
  21.    } while(bandas[i] < 0 || bandas[i] > 9);
  22.  }
  23.  // Una vez que llegas aqui ya tienes todos los colores menos el ultimo
  24.  // Este tendras que hacerlo por separado segun los colores que consideres validos
  25.  // El ultimo lo guardas en bandas[numeroBandas-1] que es la ultima posicion valida del array
  26.  
  27.  // Ahora toca calcular el valor:
  28.  int resistencia = 0;
  29.  for(int i = 0; i < numeroBandas - 1; ++i){
  30.    resistencia = bandas[i] * pow(10, i); // Para usar pow() tienes que incluir la biblioteca cmath al principio: #include <cmath>
  31.    // La funcion pow() en este caso es innecesaria pero es para que veas la operacion
  32.    // Tambien puedes usar un multiplicador que empiece en 1 y en cada vuelta se multiplique por 10 <- Mas eficiente, intentalo
  33.  }
  34.  
  35.  // Ahora toca calcular el minimo y maximo del rango segun el porcentaje de la ultima banda:
  36.  // Esto lo puedes hacer con un switch-case o guardando todos los valores posibles en otro array: porcentajes
  37.  // Suponiendo la segunda opcion, utilizas el valor del array guardado en la posicion elegida por el usuario al mostrarle las opciones
  38.  float variacion = resistencia * porcentajes[bandas[numeroBandas-1]];
  39.  float resistenciaMinima = resistencia - variacion;
  40.  float resistenciaMaxima = resistencia + variacion;
  41. }

Aunque el código parece bastante grande, hay muchos comentarios y fragmentos que tienes que completar tú.
Si tienes algún problema, coméntalo teniendo en cuenta los comentarios que he ido haciendo a lo largo del código.


Título: Re: Ayuda con un programa de C++ de resistencias de bandas 4, 5, 6 bandas
Publicado por: chaneque_14 en 4 Diciembre 2020, 06:17 am
Muchas gracias por la ayuda, fue de mucha ayuda que me hicieras notar mis errores.