Como no indicaste las partes que no entendiste, te explicaré las partes en las que el código de mi respuesta es diferente del tuyo.
Línea 2:
En mi código utilicé el header
<string>, porque utilicé las cadenas de C++.
En tu programa utilizaste el header
<string.h>, éste contiene funciones para manipular las cadenas del lenguaje C. Si se quiere tener acceso a estas funciones en C++ (utilizando las cadenas del lenguaje C), se tendría que incluir
<cstring> en lugar de
<string.h>.
Línea 3:
Aquí debo hacer una corrección. El comentario de mi código, en la línea
3, sólo debería incluir a
setprecision().
Al incluir a
<iostream>, se está incluyendo de forma indirecta a
<ios>, que es a donde pertenece
fixed, por eso los comentarios deberían verse así:
Líneas 7, 8 y 9:
Son los prototipos de las funciones
calcularSalario(),
calcularAporte() y
calcularUtilidadNeta(). En general deberían escribirse en otro archivo (header).
En tu código declaraste y definiste las funciones antes de utilizarlas en la función main. Lo que yo hice fue separar la declaración de las funciones (prototipos), y escribí sus definiciones después de la función main.
Líneas 12 y 13:
Los valores del pasaje y el salario mínimo no deben cambiar durante la ejecución del programa, por eso
valPasaje y
salMinimo están definidas como constantes.
Tengo la costumbre de utilizar
constexpr en lugar de
const para estos casos, pero
constexpr requiere que tu comando de compilación le indique al compilador que utilice el estándar C++ del año 2011 o uno más moderno. Si quieres habilitar esta opción en Dev-C++ puedes hacerlo desde el menú de opciones:
Herramientas > Opciones del Compilador > pestaña Configuración > pestaña Generación de Código
Con esa configuración podrás utilizar
constexpr sin errores de compilación.
Líneas 15 a 21:
Son las variables de entrada del programa. Las inicialicé utilizando
inicialización directa, por eso sus valores iniciales están entre paréntesis. La inicialización que utiliza el signo de asignación
= se conoce como
inicialización por copia.
En lugar de
unsigned también se puede escribir
unsigned int. Una variable de este tipo acepta sólo números enteros positivos. Tanto el número de viajes, como el número de pasajeros nunca tendrán decimales y tampoco es lógico que se ingresen números negativos, por eso declaré a
nViajes y a
nPasajeros como variables de tipo
unsigned.
Los valores numéricos con parte decimal, son interpretados por el compilador como valores de tipo
double. La letra
f al final de un número, es el sufijo que indica que se trata de un valor de tipo
float. También puede usarse la
F mayúscula
Lineas 24 y 25:
Como las variables
nombre y
cedula son de tipo string (C++), usé la función getline para leer las cadenas que ingresará el usuario.
Línea 32:
El enunciado del ejercicio indica que no se deben repetir cálculos realizados previamente, por eso realicé aquí el cálculo del valor total de los pasajes, para no tener que hacerlo nuevamente en las funciones
calcularAporte() y
calcularUtilidadNeta().
En esta línea se hizo un casting a
nPasajeros, para que la multiplicación se realice entre dos valores de tipo float. Este casting, escrito al estilo del lenguaje C, se ve de esta manera:
Linea 41:
Modifiqué la precisión de los resultados para que estén expresados con dos cifras decimales, para eso utilicé
setPrecision(), pasándole 2 como argumento. Al usar
fixed, se consigue que se muestre la cantidad de cifras decimales especificada con
setprecision(), aun si estas cifras son ceros. Los cambios afectan a los valores que muestran las líneas 42, 43 y 44.