Rutas
/
Swift
Swift
/
Ejercicios
/
Tarifas de freelance
Tarifas de freelance

Tarifas de freelance

Ejercicio de aprendizaje

Introducción

Números

Swift ofrece dos categorías principales de números: los números enteros y los números de coma flotante.

Puedes insertar guiones bajos en los literales numéricos para mejorar la legibilidad: 1_000_000 es idéntico a 1000000. Los literales de coma flotante pueden escribirse en notación decimal o exponencial.

En la mayoría de los casos, usarás Int para los números enteros y Double para los números de coma flotante:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

Operadores aritméticos

Swift proporciona los operadores aritméticos estándar para realizar cálculos numéricos:

Operador Descripción Ejemplo
+ Suma 4 + 6 da como resultado 10
- Resta 15 - 10 da como resultado 5
* Multiplicación 2 * 3 da como resultado 6
Caution

Swift es de tipado seguro y no permite mezclar tipos numéricos diferentes en las operaciones aritméticas. No puedes sumar ni multiplicar directamente un Int y un Double; antes debes convertir uno de los tipos para que coincida con el otro.

División

El operador / realiza la división. Cuando ambos operandos son números enteros, la división entera trunca cualquier residuo fraccionario:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

Dividir un número de coma flotante distinto de cero entre cero da como resultado inf o -inf. Dividir 0.0 entre 0.0 produce nan (no es un número). En cambio, dividir un número entero entre cero provoca un error en tiempo de compilación o de ejecución:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

Operador de residuo

El operador de residuo (%) calcula el residuo que queda después de dividir dos números enteros:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

En Swift, % es un auténtico operador de residuo y no un operador de módulo. El resultado siempre toma el signo del primer operando (el dividendo), independientemente del signo del segundo operando:

5 % -2  // 1
-5 % 2  // -1

Redondear números de coma flotante

Puedes redondear un número de coma flotante con el método rounded(). De forma predeterminada, rounded() redondea al número entero más cercano. También puedes indicar una regla de redondeo concreta, como .up o .down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

Inferencia de tipos

Cuando declaras una constante o una variable numérica sin anotación de tipo, Swift infiere su tipo:

  • Los números enteros usan Int de forma predeterminada.
  • Los números con parte decimal usan Double de forma predeterminada.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

Conversión de tipos

Para realizar operaciones entre valores de tipos diferentes, convierte uno de los valores con inicializadores de tipo como Double(_:) o Int(_:):

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

Instrucciones

En este ejercicio vas a escribir código para ayudar a un freelance a comunicarse con un jefe de proyecto. Tu tarea es proporcionar unas cuantas utilidades para calcular rápidamente tarifas diarias y mensuales, opcionalmente con un descuento dado.

Primero establecemos unas cuantas reglas entre el freelance y el jefe de proyecto:

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

A veces, el 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 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 dailyRateFrom para calcular la tarifa diaria a partir de una tarifa por hora como parámetro. El contrato define que un día tiene 8 horas facturables.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

La tarifa diaria devuelta debe ser un Double.

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

Implementa una función monthlyRateFrom para calcular la tarifa mensual con descuento. Recibe dos parámetros: una tarifa por hora y el descuento en porcentaje.

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

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

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

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

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

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

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

¿Listo para empezar Tarifas de freelance?

Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.