Ejercicio, una renta de automóviles desea un programa para emitir las facturas

Iniciado por luischidalee, 31 Octubre 2017, 06:50 AM

0 Miembros y 1 Visitante están viendo este tema.

luischidalee

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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

double totalPago(int numKilometros);

int main() {

int numKilometros;

cout << "Introduce el numero de Km que has utilizado: ";
cin >> numKilometros;

cout << "La Cantidad a pagar por sus Km es: "<< totalPago(numKilometros) <<"$";


return 0;
}

double totalPago(int numKilometros)
{
double pago;
int kmAdicionales;

if(numKilometros<=300)
{
pago = 1000;
}
if(numKilometros>300 || numKilometros<1000)
{
kmAdicionales = numKilometros - 300;

kmAdicionales = kmAdicionales % 10;

pago = 1000 +(kmAdicionales * 5);
}
if(numKilometros==1000)
{
pago = 4500;
}
if (numKilometros>1000)
{
kmAdicionales = numKilometros - 700;

kmAdicionales = kmAdicionales % 700;

pago = 1000 + (kmAdicionales*5);

kmAdicionales = kmAdicionales % 10;

pago = pago + (kmAdicionales*3);

}
return pago;

}



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

engel lex

el programa tiene un error logico

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

segundo operadores logicos mal usados
Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
if(numKilometros==1000)

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

quinto error sintactico

Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
if(caramelos > 10){
 precio = caramelos*0.9;
}else if(caramelos > 5){
 precio = caramelos *0.95;
}else{
 precio = caramelos;
}


tu caso es el mismo solo que con operaciones adicionales



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.