Track
/
Ruby
Ruby
/
Esercizi
/
Catena di montaggio
Catena di montaggio

Catena di montaggio

Esercizio di apprendimento

Introduzione

Numeri

I due tipi di numeri più comuni in Ruby sono:

  • Numeri interi: numeri senza cifre dopo il separatore decimale (numeri interi). Esempi: -6, 0, 1, 25, 976 e 500000.
  • Numeri in virgola mobile: numeri con una o più cifre dopo il separatore decimale. Esempi: -2.4, 0.1, 3.14, 16.984025 e 1024.0.

Sono implementati tramite le classi Integer e Float.

Queste classi hanno metodi che convertono i valori da un tipo all'altro. I numeri Integer sono precisi all'unità intera, mentre Float ha una precisione frazionaria rispetto a un numero intero:

  • Integer#to_f: Converte in un nuovo numero in virgola mobile
  • Float#ceil: Arrotonda per eccesso all'intero più vicino
  • Float#floor: Arrotonda per difetto all'intero più vicino
  • Float#round: Arrotonda all'intero più vicino
  • Float#to_i: Tronca all'intero più vicino

Strutture condizionali

Ruby ha quelle che vengono chiamate espressioni di controllo del flusso: servono a controllare il modo in cui il programma verrà eseguito e assumono un valore «truthy» o «falsey». Esistono operatori che possono essere usati per creare valori «truthy» o «falsey», noti come operatori di confronto.

Ci sono due espressioni di controllo principali che determinano quale codice verrà eseguito e quale no. In altre parole, quale ramo verrà eseguito.

Queste due sono: l'espressione if e l'espressione unless.

Operatori di confronto

Gli operatori di confronto servono a confrontare valori e restituiscono un valore true o false. Gli operatori seguenti richiedono che i due valori confrontati siano dello stesso tipo. Se i valori non sono dello stesso tipo, il compilatore restituirà un errore. Ecco un elenco degli operatori e un esempio di quando restituiscono un valore true:

Metodo Descrizione Esempio
< minore di 4 < 5
<= minore o uguale a 4 <= 4
> maggiore di 3 > 1
>= maggiore o uguale a 2 >= 2

Gli operatori di uguaglianza e disuguaglianza, a differenza di quelli appena visti, possono essere usati per confrontare valori di qualsiasi tipo. L'operatore == serve a verificare se due valori sono uguali, e questo include il controllo del tipo del valore. L'operatore != funziona allo stesso modo, ma restituisce true se i valori non sono uguali e false se sono uguali. Ecco un elenco degli operatori di uguaglianza e disuguaglianza e un esempio di quando restituiscono un valore true:

Metodo Descrizione Esempio
== uguale 4 == 4
!= non uguale 5 != 4

L'istruzione if

L'istruzione if serve a verificare se una determinata condizione è «truthy» o «falsey». Se la condizione è truthy, il codice all'interno dell'istruzione if verrà eseguito. Un'istruzione if termina con la parola chiave end.

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

L'istruzione unless

L'istruzione unless funziona in modo molto simile all'istruzione if, ma esegue il codice al suo interno se la condizione è falsey.

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

L'istruzione else

L'istruzione else può essere usata insieme all'istruzione if. L'istruzione else viene eseguita se il ramo if non viene eseguito.

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

Le istruzioni «if a cascata»

L'istruzione elsif può essere usata insieme all'istruzione if. L'istruzione elsif viene eseguita se il ramo if non viene eseguito e la condizione dell'istruzione elsif è truthy. Le istruzioni elsif possono essere concatenate tra loro e verrà eseguita la prima condizione truthy. Alla fine dell'istruzione if può esserci anche un'istruzione else, che verrà eseguita se nessuna delle istruzioni precedenti è risultata vera.

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

Istruzioni

In questo esercizio scriverai codice per analizzare la produzione di una catena di montaggio in una fabbrica di automobili.
La velocità della catena di montaggio può variare da 0 (spenta) a 10 (massima).

Alla sua velocità più bassa (1) vengono prodotte 221 automobili ogni ora.
La produzione aumenta linearmente con la velocità.
Quindi, con la velocità impostata su 4, dovrebbe produrre 4 * 221 = 884 automobili all'ora.
Tuttavia, velocità più elevate aumentano la probabilità che vengano prodotte automobili difettose, che poi devono essere scartate.
La tabella seguente mostra come la velocità influenzi il tasso di successo:

  • da 1 a 4: tasso di successo del 100%.
  • da 5 a 8: tasso di successo del 90%.
  • 9: tasso di successo dell'80%.
  • 10: tasso di successo del 77%.

Hai due attività da svolgere.

1. Calcolare il tasso di produzione orario

Implementa il metodo AssemblyLine#production_rate_per_hour per calcolare il tasso di produzione orario della catena di montaggio, tenendo conto del suo tasso di successo. Nota che il valore restituito è un'istanza di Float.

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. Calcolare il numero di pezzi funzionanti prodotti al minuto

Implementa il metodo AssemblyLine#working_items_per_minute per calcolare quante automobili finite e funzionanti vengono prodotte al minuto. Nota che il valore restituito è un'istanza di Integer.

AssemblyLine.new(6).working_items_per_minute
#=> 19
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Ruby Exercism

Vuoi iniziare Catena di montaggio?

Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.