Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Solution des exercices Lun 10 Mai 2010 - 10:05 | |
| Je n'ai malheureusement plus le temps de vous répondre un par un par MP. J'ai donc décidé de mettre les solutions des exercices en lignes. Vous vous auto-évaluerez. Merci de votre intérêt pour le cours. Je continuerai de répondre aux questions par MP, mais ne soyez pas pressé. Il se peut que ce soit long parfois avant d'avoir une réponse car je serai absent parfois assez longtemps. Donc voici les réponses attendues : (Prenez note que pour plusieurs exercices, il n'y a aucun begin/end. Pour faire fonctionner les exemples, vous devrez les encadrer correctement dans une fonction principale.) Cours 1 :- Spoiler:
Pour ces exercices, n'utilisez que des variables locales lorsque vous en aurez besoin. #1. (5pts) Faite un code qui permettra d'afficher le résultat d'une équation complexe (qui utilise ( ) + - * / ) pour montrer la priorité des opérations. - Code:
-
mavar = (2+3)*4.0 / 7 print mavar OU - Code:
-
print ((2+3)*4.0 / 7) Toutefois, pour la réutilisabilité dans les numéros suivants, la première version est à privilégier. Pour ce numéro, on réussit ou non. Donc 5pts ou 0pt. #2. (7pts) Prenez ce résultat et faites afficher une phrase qui explique ce que veut dire ce chiffre. Insérez le résultat à l'intérieur de ce texte. En partant du #1 - Code:
-
mavar = (2+3)*4.0 / 7 print "Le résultat de mon opération complexe sur des nombres réels est : " + mavar.to_s OU - Code:
-
mavar = (2+3)*4.0 / 7 print "Le résultat de mon opération complexe sur des nombres réels est : {mavar}" Le texte est à votre choix. Encore une fois, étant donné que la 2e version n'est pas discuté dans le premier cours, la réponse attendu devrait être dans le format du premier exemple. Pour ce numéro, 3pts pour avoir suivit la consigne de réutiliser le #1 et 4pts pour la concaténation et conversion (ou le "binding" si comme la 2e version) #3. (8pts) À l'aide d'une autre affiche à l'écran, faite une conversion forcée de integer et de float puis afficher les 2 à l'écran en indiquant, grâce à du texte, lequel est lequel. Toujours en repartant de la première version du numéro 1 : - Code:
-
mavar = (2+3)*4.0 / 7 print "Le résultat de mon opération complexe sur des nombres réels est \nen entier : " + (mavar.to_i).to_s + "\nen floatant : " + (mavar.to_f).to_s OU - Code:
-
mavar = (2+3)*4.0 / 7 print "Le résultat de mon opération complexe sur des nombres réels est \nen entier : {mavar.to_i} \nen floatant : {mavar.to_f}" Toujours avec le contenu du cours, la 1re version était celle recherché, mais comme certain avait déjà touché aux scripts, la 2e version est accepté. 2pts pour le respect de la consigne de repartir du #1, 2pts pour avoir concaténer le texte (ou "binding"), 2pts par conversion to_i et to_f imbriqué dans le to_s (pour ceux qui ont fait le binding, vous recevez quand même le 4pts sans l'imbrication de la double conversion). Cours 2 :- Spoiler:
#1. (4pts) Faites un hash qui comprends des informations comme on les vois sur le forum (pseudo, âge, niveau en making, etc.) Soyez imaginatif. Il faut qu'au moins une valeur soit numérique (int ou float) et une soit un string. Le reste, vous êtes libre. Faites aussi au moins une clé qui n'est pas un string. Il est interdit de prendre un des exemples du cours. Faites, à l'aide d'une fonction print, un affiche écran d'une phrase qui reprends les informations contenue dans ce hash. Exemple : «Bonjour Hikari. Ton niveau en making est TrèsBon, du a 50 en script et tu as une note de 20 pour le cours 1.» Pour ce truc vous étiez assez libre. Voici un exemple de hash attendu : - Code:
-
monHash = {"nom" => "Hikari", "niveau" => "Bon", "âge" => 28, 1 => "scripts"} print "Mon nom est {mavar["nom"]}, mon niveau est {mavar["niveau"]}, j'ai {mavar["âge"]} ans et ma spécialité sont les {mavar[1]}" Un équivalent avec concaténation est accepté. N'oubliez pas que votre variable doit être décoré d'un ".to_s" lors de la concaténation. Vous avez 1pt si vous avez une clé string, 1pt si vous avez une clé int, 1pt pour une valeur string et 1pt pour une valeur numérique. Dans cet exemple, les clés "nom", "niveau" et "âge" sont des string et la clé 1 est un int, les valeur "Hikari", "Bon" et "script" sont des strings et la valeur 28 est un numérique (int dans ce cas). #2.(4pts) Faites vous un array avec des données quelconques (au moins un string et un int) et d'au moins 5 membres. Faites affiché chacun des membres en les séparant par un espace dans la même affiche écran. Pour ce truc vous étiez assez libre également. Voici un exemple de code attendu : - Code:
-
monArray = ["Hikari","Miraino",28,5.0,"scripteur"] #5 membres signifie 5 éléments dans le array. monResultat = "" for i = 0...monArray.size monResultat += monArray[i].to_s + " " end print monResultat Plusieurs notation équivalente sont acceptable. 1pt pour avoir fait un array avec au moins 5 éléments, 1pt pour avoir mis des éléments de types différents (strings et numériques), 1pt pour avoir fait une boucle for ou while (même si le for est fortement recommandé dans cette situation) et 1 pt pour avoir fait la concaténation (ou binding) afin d'afficher les résultat dans une seule fenêtre print. #3. (4pts) Faites vous un array d'âge et reprenez l'exemple du if. Faites en sorte d'affiché l'âge de la personne ainsi que si elle est enfant, ado, adulte ou âge d'or. Cela doit être affiché dans une seul affiche écran : Exemple «18 - adulte, 11 - enfant». Vous pouvez séparer vos réponse par un retour de ligne, mais ce n'est pas obligatoire. - Code:
-
mon_age = [2,15,28,14,65,80,30,36,12,10,5] for j = 0...mon_age.size if mon_age[j] < 18 if mon_age[j] < 12 print "Tu es un enfant" else print "Tu es un adolescent" end else if mon_age[j] >= 65 print "Tu es de l'âge d'or" else print "Tu es un adulte" end end end Ce code est loin d'être une réponse unique, mais le principe reste le même. 1pt pour l'Array, 2pts pour le for et 1pt pour le système du if. #4. (4pts) Utilisez l'array suivant [[["Allo","Bonjour","Salut"], ["Au revoir","Bye","Adieu"]],[["Raito-San","fabY","MirainoHikari"], ["LaMeche","Gothor","KakonoYami"]]] . En utilisant uniquement cet array, dites bonjour à un administrateur et au revoir à un membre de votre choix. Vous devez séparer vos deux phrase par un retour de ligne. - Code:
-
exercice = [[["Allo","Bonjour","Salut"], ["Au revoir","Bye","Adieu"]],[["Raito-San","fabY","MirainoHikari"], ["LaMeche","Gothor","KakonoYami"]]] print "{exercice[0][0][1]} {exercice[1][0][1]}\n{exercice[0][1][0]} {exercice[1][1][2]}" Vous pouvez avoir choisi d'autre membre, ça n'a pas d'importance. Cet exercice est un tout ou rien donc 0pt ou 4pts. Vous obtenez vos points en réussissant à aller chercher l'éléments voulu dans l'array d'array. #5. (4pts) À l'aide d'une boucle for, faites un script qui fera ce que vous voulez, mais qui utilise le ? servant de condition. Vous étiez libre pour ce numéro, mais voici un exemple de ce qui aurait pu être présenté : - Code:
-
mon_etat = [0,1,3,0,1,2,1,0,1,2] for k = 0...mon_etat.size maCondition = mon_etat[k] <= 1 ? "mauvais" : "bon" print "Je suis en {maCondition} état." end 1pt pour le for, 3pts pour le "? :" (comme la ligne "maCondition =") Cours 3 :- Spoiler:
#1. (5pts - 1pt par réponse) Expliquez-moi dans vos mots : (Du moment que le sens est le même c'est bon.) a) Qu'est-ce qu'une classe. À quoi sert-elle? Une classe est la définition/représentation d'un objet qui donne ses attributs/membres/propriétés et ses comportements/fonctions. b) Qu'est-ce qu'une méthode. À quoi sert-elle? Une méthode ou fonction, sert à définir le comportement d'un objet. c) À quoi sert la methode initialize? Cette méthode sert à exécuter un certain nombre d'action à la création d'un objet de cette classe. (permet entre autre de donner des valeur par défaut, mais ce n'est pas sa seule fonction) d) Quand la méthode initialize est-elle appelée? À la création d'un objet à l'aide du mot clé new. e) Même si dans certain cas, les accents ne change rien au code, pourquoi essaye-t-on de les éviter le plus possible dans le noms des varriables, des méthodes et des classes? Cela dépend en fait de l'interpréteur (attention pas compilateur, le Ruby n'est pas un code compilé, mais bien un code interprété). Dans certain cas, les interpréteurs sont basé sur le code internationnal ASCII-1. Les accents appartenant à ASCII-2 (les accents et autres caractères internationnaux), ne sont pas supporter par ces interpréteurs. Pour éviter toutes erreurs, nous évitons les accents. OU Les interpréteurs, pour être internationnaux, sont généralement conçus pour que le code soit lu en anglais. Comme il n'y a pas d'accent en anglais, pour éviter des erreur d'interprétation, on évite les accents. #2. (10pts) Reprenez le code créé avec le cours (vous pouvez prendre le vôtre ou celui que j'ai fourni à la fin du cours). Ajouté un tableau (array ou hash, selon votre guise), qui indiquera l'état des 4 pneus individuellement (donc un tableau à 4 éléments). Les états possibles des pneus seront "ok", "flat", "safe" (ou en français "ok", "crevé", "secours"). Ensuite, ajouté une ou des méthode(s) permettant de modifier l'état des pneus. Suggestion. Faites la méthode modifie_pneu avec 2 paramètre ou faites les méthodes crevaison, changement et réparation avec un paramètre. N'oubliez pas de modifier votre initialize. - Code:
-
class Voiture def initialize(marque, modele, annee=1960) @marque = marque @modele = modele @annee = annee @vitesse = 0 @etat = ["ok","ok,"ok","ok"] end
def modifie_etat(pneu,etat) @etat[pneu] = etat end
def etat_pneu() show_etat = "" for i in 0...4 show_etat += "pneu {i}: {@etat[i]} " end return show_etat end
def set_vitesse(v = 0) @vitesse = v end
def get_vitesse return @vitesse end
def accelerer(a) @vitesse += a end
def decelerer(a) accelerer(-a) end
def to_s return "#{@marque} #{@modele} #{@annee} : #{@vitesse} km/h" end
end
begin voiture1 = Voiture.new("Ford","T",1960) voiture2 = Voiture.new("Toyota","Prius",2010) voiture1.set_vitesse(40) voiture2.accelerer(110) print voiture1.to_s + "\n" + voiture2.to_s
print etat_pneu(); modifie_etat(0,"flat") modifie_etat(3,"safe") print etat_pneu(); end OU - Code:
-
class Voiture def initialize(marque, modele, annee=1960) @marque = marque @modele = modele @annee = annee @vitesse = 0 @etat = ["ok","ok,"ok","ok"] end
def etat_pneu() show_etat = "" for i in 0...4 show_etat += "pneu {i}: {@etat[i]} " end return show_etat end
def creve(pneu) @etat[pneu] = "flat" end
def repare(pneu) @etat[pneu] = "ok" end
def secours(pneu) @etat[pneu] = "safe" end
def set_vitesse(v = 0) @vitesse = v end
def get_vitesse return @vitesse end
def accelerer(a) @vitesse += a end
def decelerer(a) accelerer(-a) end
def to_s return "#{@marque} #{@modele} #{@annee} : #{@vitesse} km/h" end
end
begin voiture1 = Voiture.new("Ford","T",1960) voiture2 = Voiture.new("Toyota","Prius",2010) voiture1.set_vitesse(40) voiture2.accelerer(110) print voiture1.to_s + "\n" + voiture2.to_s print etat_pneu(); creve(0); secours(2); print etat_pneu(); end ou tout autre formulation équivalente. 2pts pour l'array d'état, 2pts pour l'affichage d'état, 4pts pour la/les fonction(s) de changement d'état, 2pts pour l'exécution dans le main. #3. (5pts) Faites une nouvelle classe. Donnez-lui un nom représentatif de ce qu'elle fera. Implémenter les méthodes nécessaires et une méthode qui permet de faire autre chose sur les objets de cette classe. Faites un Main qui montre son utilisation. Pas besoin d'être compliqué, je dois juste voir les éléments importants de votre classe. Libre. 1pt pour le mot clé class, 1pt pour la présence du initialize, 1pt pour la présence d'une autre méthode que initialize, 1pt pour le main fonctionnel, 1pt pour l'exécution correcte de votre code. Cours 4 :- Spoiler:
Sera disponible sous peu
Cours 5 :- Spoiler:
Sera disponible sous peu
Cours 6 :- Spoiler:
Sera disponible sous peu
|
|