elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejercicio, una renta de automóviles desea un programa para emitir las facturas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio, una renta de automóviles desea un programa para emitir las facturas  (Leído 4,114 veces)
luischidalee

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ejercicio, una renta de automóviles desea un programa para emitir las facturas
« en: 31 Octubre 2017, 06:50 am »

Hola ncesito apoyo para corregirlo lo que debe hacer el programa es esto

Una compañía de renta de automóviles desea un programa para emitir las facturas de sus clientes. La forma de cobro es la siguiente:
a.   Se cobra la cantidad fija de $1,000 si no se rebasan los 300 Km.
b.   Para distancias mayores a 300 km:
•   Si distancia > 300 km y <= 1,000 km: $1,000 + ($5 por cada km arriba de los 300).
•   Si la distancia es mayor que 1,000 km: $1,000 + ($5 por cada km arriba de los 300 hasta los 1,000) + ($3 por cada km arriba de los 1,000).

Ejemplos:
Kilometraje   Cantidad a cobrar
30   $1,000
300   $1,000
310   $1,000 + (10 km * $5) = $1,050
1,000   $1,000 + (700 km * $5) = $4,500
1,010   $1,000 + (700 km * $5) + (10 km * $3) = $4,530



mi codigo


Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. double totalPago(int numKilometros);
  6.  
  7. int main() {
  8.  
  9. int numKilometros;
  10.  
  11. cout << "Introduce el numero de Km que has utilizado: ";
  12. cin >> numKilometros;
  13.  
  14. cout << "La Cantidad a pagar por sus Km es: "<< totalPago(numKilometros) <<"$";
  15.  
  16.  
  17. return 0;
  18. }
  19.  
  20. double totalPago(int numKilometros)
  21. {
  22. double pago;
  23. int kmAdicionales;
  24.  
  25. if(numKilometros<=300)
  26. {
  27. pago = 1000;
  28. }
  29. if(numKilometros>300 || numKilometros<1000)
  30. {
  31. kmAdicionales = numKilometros - 300;
  32.  
  33. kmAdicionales = kmAdicionales % 10;
  34.  
  35. pago = 1000 +(kmAdicionales * 5);
  36. }
  37. if(numKilometros==1000)
  38. {
  39. pago = 4500;
  40. }
  41. if (numKilometros>1000)
  42. {
  43. kmAdicionales = numKilometros - 700;
  44.  
  45. kmAdicionales = kmAdicionales % 700;
  46.  
  47. pago = 1000 + (kmAdicionales*5);
  48.  
  49. kmAdicionales = kmAdicionales % 10;
  50.  
  51. pago = pago + (kmAdicionales*3);
  52.  
  53. }
  54. return pago;
  55.  
  56. }


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex


« Última modificación: 31 Octubre 2017, 12:20 pm por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ejercicio, una renta de automóviles desea un programa para emitir las facturas
« Respuesta #1 en: 31 Octubre 2017, 12:33 pm »

el programa tiene un error logico

primero se recomienda uso de if, else-if, else

segundo operadores logicos mal usados
Código
  1. numKilometros>300 || numKilometros<1000

"si kilomentros mayor que 300 o kilometros menor que 1000", se puede ver como "se hará si 1 mayor que 300 o 1 menor que mil" como uno es menor que mil, se cumple la condición, las acotaciones deben cumplir ambas condiciones (and)

tercero error matemático

Código
  1. kmAdicionales = kmAdicionales % 10;

esto carece de sentido... esto te retorna es simplemente el ultimo digito de los km adicionales... es decir si son 15km adicionales tendrá el mismo resultado que si son 565 kilometros adicionales... esta operación no tiene sentido aquí (ni en ningún punto de este ejercicio)

cuarto error de formulación

justamente el else-if te ayuda a acotar los rangos,
Código
  1. if(numKilometros==1000)

no debe estar ahí porque no es una condición solicitada, se obtiene calculada

quinto error sintactico

Código
  1. double totalPago(int numKilometros)

estás retornando un tipo double, pero tu parámetro de entrada es un entero y tus operaciones internas son solo entre enteros, por consecuencia toda operación interna tendrá como resultado enteros (incluso divisiones) por un asunto de promoción de operandos, a demás tienes enteros y solo se multiplican por enteros, el resultado nunca será decimal... el resultado carece de sentido como double



el algoritmo debe ser algo como
sopniendo el ejericio
"se venden caramelos en 1$, si son más de 5 caramelos en 0.95 cada uno y si son más de 10, en 0.9 cada uno"

Código
  1. if(caramelos > 10){
  2.  precio = caramelos*0.9;
  3. }else if(caramelos > 5){
  4.  precio = caramelos *0.95;
  5. }else{
  6.  precio = caramelos;
  7. }

tu caso es el mismo solo que con operaciones adicionales





« Última modificación: 31 Octubre 2017, 12:36 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines