Parcours
/
Ruby
Ruby
/
Exercices
/
Chaîne de montage
Chaîne de montage

Chaîne de montage

Exercice d'apprentissage

Introduction

Nombres

Les deux types de nombres les plus courants en Ruby sont :

  • Les nombres entiers : les nombres sans chiffres après la virgule (des entiers). Par exemple -6, 0, 1, 25, 976 et 500000.
  • Les nombres à virgule flottante : les nombres avec un ou plusieurs chiffres après la virgule. Par exemple -2.4, 0.1, 3.14, 16.984025 et 1024.0.

Ils sont implémentés par les classes Integer et Float.

Ces classes disposent de méthodes qui convertissent les valeurs de l'une à l'autre. Les nombres Integer sont précis à l'unité près, tandis que Float a une précision fractionnaire par rapport à un nombre entier :

  • Integer#to_f : convertit en un nouveau nombre à virgule flottante
  • Float#ceil : arrondit à l'entier supérieur
  • Float#floor : arrondit à l'entier inférieur
  • Float#round : arrondit à l'entier le plus proche
  • Float#to_i : tronque à l'entier le plus proche

Les structures conditionnelles

Ruby dispose de ce qu'on appelle des expressions de contrôle de flux : elles servent à contrôler la manière dont le programme s'exécute et prennent une valeur truthy ou falsey. Il existe des opérateurs qui permettent de créer des valeurs truthy ou falsey : ce sont les opérateurs de comparaison.

Il existe deux expressions de contrôle principales qui déterminent quel code s'exécute et lequel ne s'exécute pas, autrement dit quelle branche donnée sera exécutée.

Ces deux expressions sont if et unless.

Les opérateurs de comparaison

Les opérateurs de comparaison servent à comparer des valeurs et renvoient une valeur true ou false. Les opérateurs suivants exigent que les deux valeurs comparées soient du même type. Si les valeurs ne sont pas du même type, le compilateur lèvera une erreur. Voici une liste des opérateurs avec un exemple où ils donnent une valeur true :

Méthode Description Exemple
< inférieur à 4 < 5
<= inférieur ou égal à 4 <= 4
> supérieur à 3 > 1
>= supérieur ou égal à 2 >= 2

Les opérateurs d'égalité et de non-égalité peuvent comparer n'importe quel type de valeur, contrairement aux opérateurs déjà mentionnés. L'opérateur == sert à vérifier si deux valeurs sont égales, ce qui inclut la vérification du type de la valeur. L'opérateur != fonctionne de la même manière, mais il renvoie true si les valeurs ne sont pas égales et false si elles le sont. Voici une liste des opérateurs d'égalité et de non-égalité avec un exemple où ils donnent une valeur true :

Méthode Description Exemple
== égal à 4 == 4
!= différent de 5 != 4

L'instruction if

L'instruction if sert à vérifier si une condition donnée est truthy ou falsey. Si la condition est truthy, le code à l'intérieur de l'instruction if s'exécute. Une instruction if se termine par le mot-clé 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'instruction unless

L'instruction unless fonctionne de façon très similaire à l'instruction if, mais elle exécute le code qu'elle contient si la condition est 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'instruction else

L'instruction else s'utilise conjointement avec l'instruction if. L'instruction else s'exécute si la branche if ne s'exécute pas.

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

Les instructions if en cascade

L'instruction elsif s'utilise conjointement avec l'instruction if. L'instruction elsif s'exécute si la branche if ne s'exécute pas et si la condition de l'instruction elsif est truthy. Les instructions elsif peuvent s'enchaîner, et la première condition truthy sera exécutée. Il peut aussi y avoir une instruction else à la fin de l'instruction if, qui s'exécutera si aucune des instructions précédentes n'a été vraie.

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"

Instructions

Dans cet exercice, tu vas écrire du code pour analyser la production d'une chaîne de montage dans une usine de voitures. La vitesse de la chaîne de montage peut aller de 0 (à l'arrêt) à 10 (maximum).

À sa vitesse la plus lente (1), 221 voitures sont produites chaque heure. La production augmente linéairement avec la vitesse. Ainsi, avec une vitesse réglée sur 4, elle devrait produire 4 * 221 = 884 voitures par heure. Cependant, des vitesses plus élevées augmentent la probabilité que des voitures défectueuses soient produites, et celles-ci doivent alors être mises au rebut. Le tableau suivant montre comment la vitesse influence le taux de réussite :

  • 1 à 4 : taux de réussite de 100 %.
  • 5 à 8 : taux de réussite de 90 %.
  • 9 : taux de réussite de 80 %.
  • 10 : taux de réussite de 77 %.

Tu as deux tâches.

1. Calcule le taux de production horaire

Implémente la méthode AssemblyLine#production_rate_per_hour pour calculer le taux de production horaire de la chaîne de montage, en tenant compte de son taux de réussite. Note que la valeur renvoyée est une instance de Float.

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

2. Calcule le nombre de voitures fonctionnelles produites par minute

Implémente la méthode AssemblyLine#working_items_per_minute pour calculer combien de voitures terminées et fonctionnelles sont produites par minute. Note que la valeur renvoyée est une instance de Integer.

AssemblyLine.new(6).working_items_per_minute
#=> 19
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Chaîne de montage ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.