AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



-17%
Le deal à ne pas rater :
Casque de réalité virtuelle Meta Quest 2 128 Go Blanc (+29,99€ ...
249.99 € 299.99 €
Voir le deal

Partagez
 

 Cours #2 : Les Tableaux et les contrôles.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeMer 6 Aoû 2008 - 20:23

Niveau : Débutant.

Prérequis : Cours #1 réussi.

Sujets traités : Les tableaux (array et hash), les commentaires, les controles (if else, for, while)

Cours :

Théories

Nous avons vu au cours précédent qu'il existait différents types. Nous avons appris les opérations de base sur les integers (int), les floats et les strings. Passons maintenant à deux types un peu plus corsés, les tableaux.

La différence entre les 2 tableaux? Les arrays (vecteurs) sont unidimentionnel et sont référés par index. Un index est un nombre allant de 0 à taille du vecteur -1. Les hashes sont bidimentionnel et sont référé par une clé de référence et il n'y a pas d'index.

Bon pour faire les exercises, si vous ne voulez pas perdre le contenu du cours 1, je vous suggère de le mettre en commentaire. Permettez moi donc une pause dans les explication en cours pour vous présenté les deux façons de mettre des commentaires. La première est la plus simple et est rencontré partout. L'utilisation du symbole #. Dès que ce symbole est rencontrer, tout ce qui suit sur la ligne est un commentaire et n'est pas exécuté. La deuxième méthode est plus capricieuse sur la syntaxe, mais permet de commenter un gros bloc de code. La ligne précédent le code à commenté doit commencer par =begin. Il ne doit y avoir ni espace, ni tabulation, rien. Immédiatement collé sur la marge, =begin. Pour terminer le bloc de commentaire... je vous laisse deviner.... =end Wink. Donc commentez votre précédent script. Vous pouvez vous créer une nouvelle page de script pour ne pas voir votre bloc de commentaire, ou simplement écrire en dessous, peu importe... N'oubliez pas que pour s'exécuter, vous devez commencer par begin et terminer par end.

Bon ceci étant fait, on peut commencer. Comment affecte-t-un une valeur de tableau? Facile. Les arrays sont encadrés par des corchets [] et les éléments sont séparés par des virgules. Donc [0,1,2,3,4,5] est un array de 6 éléments. Dans ce cas-ci, l'index est égale à la valeur dans l'index. Le premier élément est donc à l'index 0 et le dernier à l'index 5. Pour les tableaux, on peut également compter à rebours. L'index -1 est le dernier élément, -2 l'avant dernier et ainsi de suite. Important!! La valeur de l'index est toujours comprise entre ±(taille du array -1).to_i, toute valeur sortant de ce domaine retourne une valeur nil, qui est considéré comme une erreur par le compilateur (car nil ne peut pas être converti à un autre type que lui-même).

Pour donner une valeur de array à une variable, c'est simple, prep = ["mais", "ou", "et", "donc", "car", "ni", "or"]. Est-ce qu'on est obligé de mettre des valeurs de type identique dans un talbeau? Non. On pourrait penser à un tableau du genre stat=["Hikari", 20, 1.0, ["Admin","Scritpeur"], {"script" => 50, "event" => 3}]. Dans l'ordre, les valeurs du tableau sont un string, un int, un float, un array, un hash. Eh oui. Un tableau est une valeur valables pour un tableau.

Tant qu'à l'avoir abordé, voyons le hash. Contrairement au array qui est encadré par des [], le hash est encadré par des accolades {} et les membres sont aussi séparé par des virgules. La façon de donner une valeur à un hash est de définir le référent et sa veleur avec un opérateur =>. Donc info = {"nom" => "Hikari", "script" => 50, "event" => 3} est un hash dont nom à la valeur Hikari, script a une valeur de 50 et event une valeur de 3.

Comment récupéré les valeur de ces deux tableaux? Ça dépends du tableau. Pour le array, vous demandez uniquement l'index. Dans notre exemple, print prep[1] afficherais à l'écran «ou». Pour le hash, c'est la même chose, mais les index n'existe pas, vous devez demander la valeur de la clé. Dans notre exemple, print info["nom"] afficherait «Hikari». Remarquez que cette fois, dans les 2 cas, on utilise les crochets [], et non pas les accolades. Les accolades servent uniquement lors de l'initialisation de la variables pour la différencier du hash, mais par la suite, les deux sont considéré comme tableau, l'un ayant des index, l'autre ayant des clés de recherches. L'un et l'autre ont leurs avantages. L'array a un accès plus rapide et peut être rapidement parcouru grâce à une boucle (que nous verrons dans quelques instants) et le hash permet de conserver plusieurs informations avec des référent facile à se rappeler. C'est à vous de décider lequel prendre pour telle ou telle situation.

Comment changer, ajouter et retirer des valeurs des talbeaux? Pour modifier, c'est très simple. Vous donner l'élément à chager et vous donner sa nouvelle valeur. info["nom"] = "MirainoHikari" aura pour effet de remplacer le hash comme ceci : {"nom" => "MirainoHikari", "script" => 50, "event" => 3} et écrire prep[0] = "sur" aura pour effet de modifier l'array comme suit : ["sur", "ou", "et", "donc", "car", "ni", "or"].

Pour ajouter une valeur, cette fois aussi c'est différent. Pour l'array, on utilise l'opérateur +, pour le hash, l'opérateur =. L'opérateur = !?!... Et oui. Commençons par le array puisque ça compréhension se fait plus naturellement. Si on écrit tab = [1, 2] + [3, 4], la valeur finale de tab sera [1,2,3,4] vraiment simple. on veut ajouté [5,6], pas de problème, tab += [5, 6]. La valeur de tab est maintenant [1,2,3,4,5,6]. C'est quoi l'opérateur += déjà?? Cet opérateur nous permet de ne pas écrire tab = tab + [5,6]. C'est seulement un racourci de programmation. Apprenez à vous en servir rapidement car il est particulièrement pratique. La soustraction, la multiplication, la division et l'exponentiel ont également ce raccourci, dans l'ordre, -=, *=, /= et **=. Pour le hash, il n'y a pas d'index, donc du coup, il ne sait pas trop où il est rendu. Donc en écrivant info["vie"] = 100, info devient {"nom" => "MirainoHikari", "script" => 50, "event" => 3, "vie" = 100}. Donc, lors de l'affectation, si un valeur n'existe pas, elle est ajouter à la suite. C'est aussi simple que ça. On ne peux malheureusement pas ajouter des éléments en groupe comme un tableau. Il faut donc s'assurer que le hash est déjà bien consturuit. Vous pouvez faire un print sur un tableau, mais le résultat est difficile à lire vu que tous les éléments sont mis bout à bout, sans espaces ni virgule.

Bon maintenant, pour effacer un élément. Pour une fois, les deux s'entendent pour une même méthode. La fonction delete existe. Pour le tableau, l'argument est la valeur à retirer, pour le hash, la clé. Exemple tab.delete(1) retire la valeur 1 du tableau tab et info.delete("vie") retire la clé vie et sa valeur (100) du hash info. Pour retirer à l'index d'un tableau, on utilisera la fonction delete_at. Donc tab.delete_at(-1) retire la dernière valeur du tableau, soit 6 dans notre exemple.

Nous avons vu des clés de types string, mais en fait les clé peuvent également être de n'importe quel type. disons un hash qui ressemble à ceci. mon_hash = {5 => "cinq", [1,2] => "tab", "trois" => 3, "array" => ["b",5,6,"a"]}, est parfaitement valide. Se rappeler cependant que c'est la clé qui est désignée. Donc print hash[5] affiche «cinq» à l'écran. Lorsque la clé est un entier, il faut faire attention de ne pas le confondre avec un array. Mais cela reste parfaitement légale. Il faut juste trouver une nomenclature qui nous convienne. Les valeurs peuvent également être un autre hash.

Quand on a un tableau dans un tableau, comment accède-t-on au données? Simplement en mettant plusieurs crochet. Disons que ma_var = [[1,2],[3,4]], si je veux accèdé à la valeur 4, je dois écrire ma_var[1][1] (on n'oublie pas, les index commencent à 0). Si ma_var = {"cle1" => [1,2,3], "cle2" => {"key1" => "me", "key2" => "you"}}, pour affiché le 3, ont fait ma_var["cle1"][2] et pour obtenir le you, on fait ma_var["cle2"]["key2"].

Pour connaitre le longeur d'un array, la fonction size et la fonction length existe. La fonction size est cependant préféré par le fait qu'elle est plus courte à écrire. C'est d'autant plus vrai dans VX où l'espace est limité dans les scripts des events. Il est possible également de convertir les données en type array avec .to_a.

Il existe encore plusieurs fonctions et opération possible sur les tableaux, mais là, ça commence à être plus avancé. Gardons ça pour une autre leçon.

==========
Les contrôles sont des mots clés qui servent à faire des trucs moins linéaires. Les controles que nous regarderons aujourd'hui sont les suivants : les conditions et les boucles.

Les conditions sont très simple. Si la condition est vrai alors fait quelque chose, sinon fait autre chose. La façon habituelle de le faire est

Code:
if CONDITION
  ...
else
 ...
end

Le bloc if est également terminé par un end pour indiquer la fin de la condition. L'utilisation du else n'est pas obligatoire. S'il n'y a rien a exécuter dans le cas ou la condition est fausse, on omet tout simplement le else.

Code:
if CONDITION
  ...
end

Donc supposons qu'on ait une variable contenant un entier. Si cet entier est supérieur à un nombre on affiche quelque chose et on affiche autre chose dans le cas contraire. Voyons l'exemple.

Code:
begin
  mon_age = 26
  if mon_age < 18
    print "Tu es un enfant"
  else
  print "Tu es un adulte"
  end
end

Il y a moyen d'imbriqué les conditions IF...

Code:
begin
  mon_age = 26
  if mon_age < 18
    if mon_age >= 12
      print "Tu es adolescent"
    else
      print "Tu est un enfant"
    end
  else
    if mon_age <= 65
      print "Tu es adult"
    else
      print "Tu est un vieillard"
    end
  end
end

Ce code indique que lorsque l'âge se situe entre [12,18[ c'est un adolescent, strictement inférieur à 12 c'est un enfant, entre [18,65] c'est un adult et strictement supérieur à 65 c'est un vieillard. Modifier manuellement la valeur de mon_age pour vous aperçevoir de cette réalité. Malheureusement, comme indiquer dans le premier cours, get n'est pas disponible dans le RGSS. Pour le moment, vous devez modifier manuellement cette valueur. Mais nous verrons éventuellement comment faire une capture de valeur. Pourquoi get n'est pas disponible? Parce que RPG Maker a sa propre interface de capture pour les string et les entiers. Ce n'est pas très grave pour le moment. D'ici la fin des cours, vous pourrez coder la fonction get pour utiliser votre clavier. Pour le moment, vivons avec ce handicape.

Parfois, on veut donner une valeur conditionnel à une autre. Au lieu d'écrire

Code:
if condition
  ma_val = qqc
else
  ma_val = autre
end

on peut écrire simplement ma_val = condition ? qqc : autre. C'est un peu vague, mais je vous explique. Prenons un exemple concret. ma_val = ma_var >= 15 ? 15 : ma_var. Cela veux dire, si la variable ma_var est supérieur ou égale à 15, ma_val prend la valeur 15, sinon, elle prend la valeur de ma_var. Cela peut s'avérer fort pratique dans certaine situation.

Le deuxième contrôle est la boucle. Il existe deux type de boucle: for et while. Tout deux se termine avec end, bien entendu. Les deux syntaxes sont différentes, mais font la même chose. Il faut les voir comme étant «jusqu'à» et «tant que».

Voici 2 syntaxes pour for. Nous étudierons leur différence immédiatement après les avoir vu.

Code:
begin
  a = ["a : "]
  b = ["b : "]
 
  for i in 1..10 
    a += [i.to_s+" "]
  end
 
  for i in 1...10 
    b += [i.to_s+" "]
  end
 
  print a
  print b
end

Exécuter ce code. Vous comprendrez la différence. Pourtant, il n'y a qu'un point de différence. Ce point supplémentaire se rend jusqu'à la 2e valeur sans utilisé cette deuxième valeur. for i in 1..10 se traduirait en français en «pour les i de 1 jusqu'à 10 inclusivement» alors que for i in 1...10 se traduirait par «pour les i partant de 1 jusqu'à ce que i soit 10». La nuance est difficile à deceler dans ses phrases, mais voyons comment le compilateur le traite. Il faut savoir que lorsque le end jumelé au for est atteint, la variable i est incrémentée de 1 automatiquement. Dans le premier cas le test invisible if i == 10 est effectuer après l'exécution de la boucle alors que dans le second cas, il est effectué avant. Faites des tests avec ces boucles pour comprendre cette différence, car elle sera très importante pour la suite.

Vous vous rappelez, avant de commencer la théorie des contrôles, nous avions vu la fonction size. Pour parcourir un array, une boucle est très agréable. Si vous ne voulez pas avoir à faire plusieur print, je vous suggère un symbole littéral. Il existe plusieurs de ces symboles réservé pour tous les types de données. Nous en apprendrons à l'occasion selon les besoin. Le symbole littéral d'aujourd'hui appratient aux strings. C'est "\n" Celui-ci permet de faire une nouvelle ligne. Je vais l'utiliser dans l'exemple suivant. N'oubliez pas de convertir vos données si vous utilisez ce littéral. Voici comment afficher le contenu d'un tableau.

Code:
begin
 
  a = ["Pseudo : ","Script : ","Vie : "]
  b = ["Hikari",50,100]
  result = ""
  for i in 0...a.size 
    result += a[i].to_s + b[i].to_s + "\n"
  end
  print result
 
end

J'ai utilisé 0...a.size car les array ont un index allant de 0 à size - 1. L'équivalent avec seulement .. aurait été for i in 0..a.size-1. Il existe cependant une autre méthode, qui elle fonctionne autant pour les arrays que pour les hashes : each. Cette fonction permet de prendre chaque membre du tableau un par un. Par contre, les hash ont trois fonction de ce genre : each, each_pair, each_value et each_key. each et each_pair revient au même et renvoie la clé et sa valeur. each_key renvoie uniquement les clés et each_value uniquement la valeur. Voici un exemple avec array.each et hash.each_value.

Code:
begin
  #avec un array
  resp1 = ""
  var_1 = ["des pommes", "des poires", "un melon", "Des abricots"]
  var_1.each do |Choix|
  resp1 += "Je voudrais " + Choix.to_s + " s'il vous plait" + "\n"
  end
  print resp1
 
  #avec un hash
  resp2 = ""
  var_2 = {719928 => "des pommes", 87645 => "des poires", 11998 => "un melon", 65432 => "Des abricots"}
  var_2.each_value do |Choix|
  resp2 += "Vous avez acheté " + Choix.to_s + ". Merci." + "\n"
  end
  print resp2
end

Maintenant, le while. Le while, c'est tant que la condition est vrai. Il existe 2 méthode while, mais je vais délibérément passer par dessus la 2e, car elle nécessite plusieurs codes en parrallèle. Nous y reviendrons peut-être lorsque nous intègrerons RPG Maker aux leçons, mais pour le moment, on va se concentrer sur la première méthode.

Code:
begin
 
  ary = ["Bonjour","à","vous"]
  i = 0
  resp = ""
  while i < ary.size
    resp += ary[i].to_s + " "
    i += 1
  end
  resp += "!"
  print resp
   
end

Vous remarquerez que cette fois, il faut incrémenter i manuellement et le test de validité est écrit à la main. Dans certain cas, ça peut être utile, mais généralement, for est plus que suffisent. C'est pour cette raison que j'utiliserai d'avantage for que while dans mes exemple, mais sachez que les 2 méthode existe. Il est également possible d'imbriquer des for et des while. Seuelement se rappeler d'utiliser des variables différentes pour chaque boucle.

Donc voilà... Ceci mets fin au cours #2. Essayez de comprendre tous les scripts présents avant de faires les exercices.


Dernière édition par MirainoHikari le Sam 4 Oct 2008 - 15:17, édité 4 fois
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeMer 6 Aoû 2008 - 20:23

Désolé du double post, les exercices ne rentraient pas tellement le cours était long...

Suplément pour le for et le while
Il semble que certaines explications n'aient pas été assez claires. Voici donc trois structures équivalentes de for et de while. Si vous en comprenez 1, vous comprendrez l'autre car elles font la même chose par paires (j'ai séparé chaque paire dans un bloc de code distinct).

Code:
for i in 1..3
 print i
end
#=======
i = 1
while i <=3
 print i
 i += 1
end

Code:
for i in [0,2,4,6,8]
  print i*3
end
#=======
i=0
while i <= 8
  print i*3
  i += 2
end

Code:
result = ""
for i in 5...0
  result += i.to_s + "...\n"
end
result += "décolage"
print result
#=======
result = ""
i=5
while i > 0
 result += result += i.to_s + "...\n"
 i -=1
end
result += "décolage"
print result

Voilà. Ce sont les différentes façon d'utiliser le for et l'équivalent avec le while. J'espère que cela en démêlera plus d'un.


Exercices

Référez-vous au solutionnaire pour votre évaluation. Petit détail, codé avec des indentations (c'est plus facile de voir les couples begin/end, while/end, if/else/end). Un code claire et lisible est un code plus facile à comprendre.

#1. 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.»

#2. 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.

#3. 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.

#4. 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.

#5. À l'aide d'une boucle for, faites un script qui fera ce que vous voulez, mais qui utilise le ? servant de condition.

N'oubliez pas de mettre des commentaires dans votre code, ne serait-ce que pour indiquer le début et la fin de chaque exercices avec le numéro de celui-ci.

Pondération des exercices
1. 4pts
2. 4pts
3. 4pts
4. 4pts
5. 4pts

Bonne étude. La prochaine leçon, les classe, les modules et les variables revisitées.


Dernière édition par MirainoHikari le Lun 10 Mai 2010 - 9:24, édité 6 fois
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
Raitosan
† Fondateur du forum †
† Fondateur du forum †
Raitosan


Masculin Age : 31
Inscrit le : 09/02/2008
Messages : 1974

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 7 Aoû 2008 - 8:40

Hum... j' ai rien compris a l' exercice 5...
Je t' envoi les autres exercices, je t' enverais le 5 une fois compris...
Revenir en haut Aller en bas
http://www.zeforiu.fr
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 7 Aoû 2008 - 13:13

En fait, vous utiliser une boucle for qui donnera une valeur à une variable que vous utiliser comme condition pour un contrôle conditionnel de la forme

resultat = i <= 4 ? "i est tout petit" : " 4 est dépassé"

Il est interdit de prendre cet exemple, mais vous voyez le principe.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
ibiky-ushiha
Voyageur Lv.10
Voyageur Lv.10
avatar


Masculin Age : 35
Inscrit le : 07/07/2008
Messages : 498

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeVen 8 Aoû 2008 - 17:02

Excuse moi mais je bloque sur le 3 la ^^.

Tu veux que je fasse une phrase avec par exemple [ Mon psedo+ mon age donc je suis une ... ] ...= Adulte, Enfant, Age d'or, Vieillard.

Ou je me goure complètement ?
Revenir en haut Aller en bas
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeVen 8 Aoû 2008 - 17:57

Pour le #3, je veux juste un array avec des âge de différentes tranche d'âge. Tu parcours le array en le faisant passer dans le if qu'on a vu dans le cours et tu affiche, pour chaque élément de ton array, à quel tranche d'âge l'élément appartient.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
Rai The One
Noble Lv.8
Noble Lv.8
Rai The One


Masculin Age : 38
Inscrit le : 23/08/2008
Messages : 228

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeMar 9 Sep 2008 - 0:55

Ya pas mal d'exos dans celui-là !!! Je risque de prendre un moment, pour tous les faire... lol!
Revenir en haut Aller en bas
Invité
Invité
avatar



Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 28 Sep 2008 - 19:54

Allez je vais me lancer un défi dans trois jours ce TP sera fini... Je vais creveeeeeeeer Cours #2 : Les Tableaux et les contrôles. 588830
Revenir en haut Aller en bas
Rai The One
Noble Lv.8
Noble Lv.8
Rai The One


Masculin Age : 38
Inscrit le : 23/08/2008
Messages : 228

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeMer 1 Oct 2008 - 20:35

Arayashiki a écrit:
Allez je vais me lancer un défi dans trois jours ce TP sera fini... Je vais creveeeeeeeer Cours #2 : Les Tableaux et les contrôles. 588830

Cé vrai moi aussi... ! geek
Jé déja fini sur papier, maintenant fo ke je teste ça sur VX, et à mon avis, ce sera ptèt pas bon du premier coup. T_T !! lol!
Revenir en haut Aller en bas
pattes
Templier Lv.15
Templier Lv.15
pattes


Masculin Age : 29
Inscrit le : 29/11/2008
Messages : 1272

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeSam 21 Mar 2009 - 22:41

Excusez-moi mais je bloque un peu à ce code :
Code:
begin
  a = ["a : "]
  b = ["b : "]
 
  for i in 1..10 
    a += [i.to_s+" "]
  end
 
  for i in 1...10 
    b += [i.to_s+" "]
  end
 
  print a
  print b
end
Je pense que c'est un Array vu qu'il y a des crochets mais j'aimerai savoir ce que font les : ici... et si i est une lettre de ton choix ou une lettre spécifique pour ce code-là.

EDIT : En fait, le i est une lettre que tu as choisi ( j'ai testé avec un x et ça a marché aussi ). Mais j'ai une autre question : que signifient les " " dans les 6ème et 10ème lignes ? Seraient-il égaux aux valeurs précedemment mises entre guillemets anglais ? ( a : et b : )...
Revenir en haut Aller en bas
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 33
Inscrit le : 15/10/2008
Messages : 351

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 0:29

ils servent juste a rajouter un espace après la variabale
on aurait pu faire:
Code:
a += ["#{i} "]
dans un bloc d'enumeration comme for, on a souvent tendance a mettre i comme integer (nombre entier)

berka
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
pattes
Templier Lv.15
Templier Lv.15
pattes


Masculin Age : 29
Inscrit le : 29/11/2008
Messages : 1272

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 0:32

Merci beaucoup ! Il va donc falloir que je corrige certains points de mes exercices pour les espaces vu que c'est ce à quoi doit s'attendre Miraino...
Revenir en haut Aller en bas
La Meche
Flibustier Lv.21
Flibustier Lv.21
La Meche


Masculin Age : 30
Inscrit le : 24/05/2008
Messages : 3234

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 8:05

Tiens, je crois que tu as fait une pitite erreur Razz
Code:
for i in 1..10
Dans ce cas i prendra la valeur de 1 jusqu'a... 9
Et non 10,
Si tu souhaites que cela prenne aussi 10 rajoute un . !
Revenir en haut Aller en bas
pattes
Templier Lv.15
Templier Lv.15
pattes


Masculin Age : 29
Inscrit le : 29/11/2008
Messages : 1272

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 9:12

C'est le code de la leçon LaMèche x).Mais merci de ton aide :p
Revenir en haut Aller en bas
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 33
Inscrit le : 15/10/2008
Messages : 351

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 9:47

La Meche: c'est le contraire:
.. est inclusif
... est exclusif

berka
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
pattes
Templier Lv.15
Templier Lv.15
pattes


Masculin Age : 29
Inscrit le : 29/11/2008
Messages : 1272

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 9:55

Ah oui, c'est vrai^^.Sinon, je ne comprends pas...Je met ceci :
Code:
begin
 
sports = {" bilboquet" =>"  : yes, "," bowling" => " : bien, ", " football" => " : bueno,", " basketball" => " : good."}
  print sports
 
  end
Et dès que je démarre mon jeu, ça m'affiche :
bowling : bien, football : bueno,basketball : good,bilboquet : yes.
Ce n'est pas dans l'ordre alors je ne comprends pas et j'ai fait ça dans un projet vierge(sans aucun script)...Merci d'avance Wink.
Revenir en haut Aller en bas
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 33
Inscrit le : 15/10/2008
Messages : 351

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 10:57

C'est là, la différence entre un tableau et un hash:
le tableau est index, rangé selon son ordre d'initialisation, un hash est dynamique: il n'y a pas d'index, mais des clés.

En revanche tu peux ranger tes clés lors de l'affichage par ordre alphabétique :
Code:
print sports.sort

berka
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
pattes
Templier Lv.15
Templier Lv.15
pattes


Masculin Age : 29
Inscrit le : 29/11/2008
Messages : 1272

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeDim 22 Mar 2009 - 10:59

Merci berka^^.Il n'y a pas de moyens autres que l'ordre alphabétique pour choisir l'ordre d'apparition ?
Revenir en haut Aller en bas
Gothor
Chevalier Lv.17
Chevalier Lv.17
Gothor


Masculin Age : 30
Inscrit le : 27/04/2008
Messages : 1835

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 27 Aoû 2009 - 11:25

Bonjour, je voulais savoir, si j'ai:

Code:
tableau = [[valeur 1, valeur 2], [valeur 3, valeur 4], [valeur 5, valeur 6]]
tableau.delete(2)

Le tableau devient-il:

Code:
tableau = [[valeur 1, valeur 2], [valeur 5, valeur 6]]
Revenir en haut Aller en bas
Sihn
Voyageur Lv.10
Voyageur Lv.10
Sihn


Masculin Age : 35
Inscrit le : 24/04/2009
Messages : 407

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 27 Aoû 2009 - 11:34

Non, ton tableau reste complètement identique.
delete(valeur) sert à effacer tous les éléments du tableau égaux à valeur.
Exemple :
Code:
tab = ["a", "b", "c", "a"]
tab.delete("a")
tab vaudra alors
Code:
["b", "c"]
En revanche, tu peux utiliser delete_at.
Code:
tableau = [[valeur 1, valeur 2], [valeur 3, valeur 4], [valeur 5, valeur 6]]
tableau.delete_at(2)
Et là, ton tableau contiendra...
Code:
[[valeur 1, valeur 2], [valeur 3, valeur 4]]
...et oui, les éléments d'un tableau sont compté à partir de zéro. delete_at(0) supprimera donc le premier élément, delete_at(1) supprimera le deuxième, et donc delete_at(2) supprimera le troisième. (et ainsi de suite)
Revenir en haut Aller en bas
http://www.google.fr/
Gothor
Chevalier Lv.17
Chevalier Lv.17
Gothor


Masculin Age : 30
Inscrit le : 27/04/2008
Messages : 1835

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 27 Aoû 2009 - 11:40

Mais quand je mets mon delete_at, il me met un mesage d'erreur T_T

Script 'Classes et Méthodes' line 104: NoMethodError occured
undefined method for `[]' for nil:NilClass


ligne 104 correspondant à

Code:
if pseudo == @carnet[i][0]

et voilà la méthode complète:

Code:
  def retirer(pseudo)
    found = false
    for i in 0..@total_contacts
      if pseudo == @carnet[i][0]
        @carnet.delete_at(i)
        @total_contacts -= 1
        found = true
      end
    end
    if found == false
      print "Le contact #{pseudo} n'existe pas."
    end
  end

là il devrait bien supprimer l'index i Oo donc pourquoi ce message d'erreur au lieu de supprime mon index? T_T

Edit: j'ai modifié

Code:
    for i in 0..@total_contacts

en

Code:
    for i in 0...@total_contacts

Mais pourquoi ça ne marchait pas avant? je vois vraiment pas là OO
Revenir en haut Aller en bas
Sihn
Voyageur Lv.10
Voyageur Lv.10
Sihn


Masculin Age : 35
Inscrit le : 24/04/2009
Messages : 407

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 27 Aoû 2009 - 12:04

Je vois.^^ C'est les boucles for qui font ça...
for i in 0..5
Ici, i prendra successivement les valeurs de 0 à 5.

for i in 0...5
(note que j'ai rajouté un point, donc)
Cette fois, i prendra successivement les valeurs de 0 à... 4, et non 5.
Avec trois point, donc, le dernier élément n'est pas compté.

De plus, n'oublie pas que les index des éléments d'un tableau se comptent de 0 à "taille du tableau - 1"...
Exemples :
Code:
tab = ["a", "b", "c"]
for i in 0...tab.size
  p tab[i]
end
Là, tous les élément du tableau seront lu correctement.
En revanche...
Code:
tab = ["a", "b", "c"]
for i in 0..tab.size
  p tab[i]
end
Cette fois, tous les éléments du tableau seront lu... plus 1. Quand i vaudra 3, il y aura un risque de plantage... (l'index du dernier élément de ce tableau étant 2, les index commençant à 0)
Revenir en haut Aller en bas
http://www.google.fr/
Gothor
Chevalier Lv.17
Chevalier Lv.17
Gothor


Masculin Age : 30
Inscrit le : 27/04/2008
Messages : 1835

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 27 Aoû 2009 - 12:10

Aaaaaaaaah, j'avais oublié cette fonction .size qui permet en fait d'éviter d'utiliser une variable qui va compter le nombre d'éléments.

Ca va m'être très utile, merci beaucoup à toi Sihn ^^'

(Remarque que c'est quand même étrange que ça ne fonctionnait pas avec le ... vu que j'avais fait à la base @total_contacts = -1 et qu'il ne faisait que rajouter ou supprimer des éléments.)
Revenir en haut Aller en bas
fablemai
Va-nu-pieds Lv.4
Va-nu-pieds Lv.4
fablemai


Masculin Age : 27
Avertissements : 1
Inscrit le : 10/07/2009
Messages : 60

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeJeu 18 Fév 2010 - 23:39

Désolé du nécropost mais j'ai un problème avec les each
voila j'ai fait ça
Code:
begin
  prep1 = {4553 => "C'est", "gder" => "de", 6434 => "la", "gfdhe" => "marde"}
  mess = ""
  prep1.each_value do |Choix|
  mess += Choix.to_s + " "
  end
  print mess
end
mais quand je test, les valeur des clés apparaissent dans nimporte quel ordre!
Revenir en haut Aller en bas
Gothor
Chevalier Lv.17
Chevalier Lv.17
Gothor


Masculin Age : 30
Inscrit le : 27/04/2008
Messages : 1835

Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitimeVen 19 Fév 2010 - 12:58

Mmmmh... j'ai fait quelques essais et j'en suis venu à la conclusion suivante:
Ce n'est pas dans n'importe quel ordre! <3

Je sais que quand on ne met que des nombres pour clés, ils sont rangés par ordre croissant.
Lorsque les clés ne sont que du texte, ils sont rangés par ordre alphabétique.
Mais quand les clés sont des deux types, je n'arrive pas à trouver l'ordre... En même temps on met rarement comme nom de clé un mélange de textes et de nombres selon moi...
Revenir en haut Aller en bas
Contenu sponsorisé




Cours #2 : Les Tableaux et les contrôles. Empty
MessageSujet: Re: Cours #2 : Les Tableaux et les contrôles.   Cours #2 : Les Tableaux et les contrôles. Icon_minitime

Revenir en haut Aller en bas
 

Cours #2 : Les Tableaux et les contrôles.

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

 Sujets similaires

-
» Tableaux
» Tableaux, affiches,sang.
» Tableaux pour mon Projet
» Notation du cours.
» Lecture de tableaux externes au logiciel [résolu]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Apprentissage :: Archives des anciens cours :: Cours de RGSS2-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit