Rutas
/
C++
C++
/
Ejercicios
/
Tarifas de freelance
Tarifas de freelance

Tarifas de freelance

Ejercicio de aprendizaje

Introducción

Los tipos numéricos integrados de C++ se pueden dividir en enteros y números de coma flotante. Los enteros son números sin parte decimal, como 0, 691 o -2. Los números de coma flotante son números con parte decimal, como 6.02214076, 0.1 o -1.616.

Enteros

El siguiente ejemplo muestra la declaración y la inicialización de cuatro variables diferentes

int m_morales{9241};              // base 10: 0-9
int a_apaec{0x24CD};              // base 16: 0-9 and A-F
int m_gargan{0b10010000011001};   // base  2: 0-1
int b_reilly{022031};             // base  8: 0-7
                                  // Leading with a 0 not the letter o.

Cuando asignas un valor a una variable int, puedes hacerlo directamente con un literal. Un literal es un número escrito directamente en el código, como 9241. Existen distintos literales enteros para varias bases de representación. Los literales enteros decimales son los más comunes y usan los dígitos del 0 al 9. Añadiendo un prefijo especial, como 0x, es posible usar otras bases. El ejemplo anterior muestra el número 9241 en sus cuatro representaciones y prefijos. Todas las variables se inicializan con el mismo valor.

Para más detalles sobre los distintos sistemas de representación, echa un vistazo a un pequeño tutorial.

Puedes usar un apóstrofo para separar los dígitos y que sean más fáciles de leer. 9'241 es lo mismo que 0b0100'100'0001'1001 o 92'4'1.

Números de coma flotante

Los literales de coma flotante se presentan de dos formas. Además del intuitivo 0.0024, es posible usar su notación científica 2.4e-3. El tipo de coma flotante más común es double.

Aritmética

C++ admite +, -, *, /, ( y ) y % para formar expresiones. El resultado de la operación entre dos enteros también es un entero. 5 / 2 devolverá 2. Cuando uno de los tipos implicados es de coma flotante, el resultado también será de coma flotante. 5.0 / 2 y 5 / 2.0 devolverán 2.5. % es el operador de residuo y devuelve el residuo de una división entera: 5%3 es 2.

Operador de asignación

El operador de asignación asigna un literal a una variable. Siempre se realiza de derecha a izquierda, y nunca al contrario.

int length = 5;
int width = 2;
length = width;

Aquí, el valor entero 5 se asigna a la variable length. Después, el valor entero 2 se asigna a la variable width. Por último, el valor de width se copia a la variable length y el valor anterior, 5, se pierde. Ten en cuenta también que solo asignamos el valor de width a length en el momento de la operación de asignación. Por lo tanto, si el valor de width cambia más adelante, no afectará al valor que toma length.

El operador de asignación puede combinarse con los demás operadores (aritméticos y a nivel de bits); se conocen como operadores de compound assignment: +=, -=, *=, /=, %=. Estos operadores modifican el valor actual de una variable realizando una operación sobre ella.

// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6

Las variables people y eggs se inicializan a 0. Después, sumamos el valor entero 2 al valor existente 0 de la variable people y lo asignamos de nuevo a people. Ahora people pasa a valer 2. Más tarde, añadimos 3 huevos por cada persona, lo que da un total de 6 huevos. Ahora sumamos este 6 al valor existente 0 de la variable eggs y lo asignamos de nuevo a eggs. eggs ahora será 6. La expresión equivalente sería people = people + 2 y eggs = eggs + (3 * people).

Instrucciones

En este ejercicio, vas a escribir código para ayudar a una persona freelance a comunicarse con la persona que gestiona un proyecto. Tu tarea consiste en crear unas cuantas utilidades para calcular rápidamente tarifas diarias y mensuales, opcionalmente con un descuento dado.

Primero establecemos unas cuantas reglas entre la persona freelance y la persona que gestiona el proyecto:

  • La tarifa diaria es 8 veces la tarifa por hora.
  • Un mes tiene 22 días facturables.

En ocasiones, la persona freelance ofrece aplicar un descuento sobre su tarifa diaria (por ejemplo, para sus clientes más fieles o para clientes sin ánimo de lucro).

Los descuentos se modelan como números decimales que representan porcentajes, por ejemplo, 25.0 (25 %).

1. Calcula la tarifa diaria a partir de una tarifa por hora

Implementa una función llamada daily_rate que calcule la tarifa diaria a partir de una tarifa por hora que se pasa como parámetro. El contrato establece que un día tiene 8 horas facturables.

daily_rate(60)
// => 480.0

La tarifa diaria devuelta debe ser de tipo double.

2. Calcula un precio con descuento

Implementa una función apply_discount que calcule el precio después de aplicar un descuento. Debe aceptar dos parámetros: el precio original y el porcentaje de descuento.

apply_discount(150, 10)
// => 135.0

El valor devuelto debe ser siempre de tipo double, sin redondear de ninguna manera.

3. Calcula la tarifa mensual a partir de una tarifa por hora y un descuento

Implementa una función monthly_rate que calcule la tarifa mensual con el descuento aplicado. Debe tener dos parámetros: una tarifa por hora y el porcentaje de descuento.

monthly_rate(77, 10.5)
// => 12130

La tarifa mensual devuelta debe redondearse hacia arriba (tomar el techo) al número entero más próximo.

4. Calcula el número de días de trabajo completos a partir de un presupuesto, una tarifa por hora y un descuento

Implementa una función days_in_budget que reciba un presupuesto, una tarifa por hora y un descuento, y calcule cuántos días completos de trabajo cubre.

days_in_budget(20'000, 80, 11.0)
// => 35

El número de días devuelto debe redondearse hacia abajo (tomar el suelo) al número entero inferior.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
C++ Exercism

¿Listo para empezar Tarifas de freelance?

Regístrate en Exercism para aprender y dominar C++ con 19 conceptos100 ejercicios y mentoría humana real, todo gratis.