Tracks
/
C++
C++
/
Ejercicios
/
Tarifas de freelancer
Tarifas de freelancer

Tarifas de freelancer

Ejercicio de aprendizaje

Introducción

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

Enteros

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

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. Hay distintos literales enteros para varias bases de representación. Los literales enteros decimales son los más comunes y usan los dígitos 0 a 9. Al añadir 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 al 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 sea más fácil de leer. 9'241 es lo mismo que 0b0100'100'0001'1001 o 92'4'1.

Números de punto flotante

Los literales de punto flotante vienen en dos formas. Además del intuitivo 0.0024, es posible usar su notación científica 2.4e-3. El tipo de punto 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 involucrados es de punto flotante, el resultado también será de punto flotante. 5.0 / 2 y 5 / 2.0 devolverán 2.5. % es el operador de residuo y devolverá 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 revés.

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

Aquí, el valor entero 5 se asigna a la variable length. Luego, 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á el valor que toma length.

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

// 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. Luego, sumamos el valor entero 2 al valor existente 0 de la variable people y lo asignamos de vuelta a people. Ahora people es 2. Después, sumamos 3 huevos por cada persona, lo que da 6 huevos en total. Ahora sumamos este 6 al valor existente 0 de la variable eggs y lo asignamos de vuelta a eggs. Ahora eggs 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 un freelancer a comunicarse con un gerente de proyecto. Tu tarea es crear algunas utilidades para calcular rápidamente tarifas diarias y mensuales, opcionalmente con un descuento dado.

Primero establecemos algunas reglas entre el freelancer y el gerente del proyecto:

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

A veces, el freelancer ofrece aplicar un descuento sobre su tarifa diaria (por ejemplo, para sus clientes más leales o para clientes sin fines de lucro).

Los descuentos se modelan como números fraccionarios 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 como parámetro. El contrato define 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 un descuento. Debe aceptar dos parámetros: el precio original y la tasa de descuento en porcentaje.

apply_discount(150, 10)
// => 135.0

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

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 descuento. Debe tener dos parámetros: una tarifa por hora y el descuento en porcentaje.

monthly_rate(77, 10.5)
// => 12130

La tarifa mensual devuelta debe redondearse hacia arriba (tomar el techo) al entero más cercano.

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 piso) al entero inferior.

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

¿Todo listo para empezar Tarifas de freelancer?

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