Microsoft Small Basic A la découverte de la programmation
CD ROM Annuaire d'Entreprises France prospect (avec ou sans emails) : REMISE DE 10 % Avec le code réduction AUDEN872
10% de réduction sur vos envois d'emailing --> CLIQUEZ ICI Retour à l'accueil, cliquez ici ou juste avant la balise de fermeture --> Microsoft Small Basic A la découverte de la programmationAvant de commencer Le mot des traducteurs Ce document d’une soixantaine de pages est peut-être l’un de vos premiers pas dans le monde du développement logiciel. Vous devrez certainement lire d’autres ouvrages et écrire un certain nombre de programmes (petits et grands) pour vous sentir complètement à l’aise avec ce nouveau domaine. Arrivé à la fin de ce document, vous aurez réalisé des programmes intéressants, tel que un jeu de casse-briques ou bien encore un programme changeant aléatoirement votre fond d’écran. SmallBasic – A la découverte de la programmation est le titre original de ce document. Il a été traduit en français par une équipe de MSP – Microsoft Student Partners – français : Jean-François Boulière, Sylvain Bruyère, Sébastien Courtois, Thomas De Toledo, Pierre Lasvigne et Christopher Maneu. Nous espérons que la lecture de ce document vous donnera envie de continuer votre découverte du développement et de vous initier à de nouveaux langages. Bienvenue dans le merveilleux monde de la programmation ! L’équipe des traducteursChapitre 1 Introduction Small Basic et la programmation logicielle La programmation logicielle est définie comme le processus de création de logiciel informatique en utilisant des langages de programmation. De même que nous parlons et comprenons l’anglais, l’espagnol ou le français, les ordinateurs peuvent comprendre des programmes écrits dans certains langages. Ces derniers sont appelés langages de programmation. Au commencement, il n’y avait que quelques langages de programmation et ils étaient vraiment faciles à apprendre et à comprendre. Mais au fur et à mesure que les ordinateurs et les logiciels devinrent de plus en plus sophistiqués, les langages évoluèrent rapidement, rassemblant davantage de concepts complexes au fur et à mesure de cette évolution. Il en résulte que la plupart des langages modernes de programmation et leurs concepts sont assez difficiles à appréhender par un débutant. Cet état de fait a commencé à décourager les gens d’apprendre ou de s’essayer à la programmation logicielle. Small Basic est un langage de programmation conçu pour rendre la programmation extrêmement simple d’approche et amusante pour les débutants. L’intention de Small Basic est de lever les barrières et d’apporter une pierre angulaire à l’extraordinaire monde de la programmation logicielle. L’environnement Small Basic Commençons avec une rapide introduction à l’environnement de Small Basic. Quand vous lancerez pour la première fois SmallBasic, vous verrez une fenêtre ressemblant à la figure suivante.Figure 1 – L’environnement Small Basic Ceci est l’environnement Small Basic, où on va écrire et exécuter nos programmes Small Basic. Cet environnement a plusieurs éléments distincts identifiés par des numéros. L’Editeur, identifié par *1+, est l’endroit où on écrit les programmes Small Basic. Quand vous ouvrez un programme sauvegardé précédemment, il apparaîtra dans cet éditeur. Vous pouvez ensuite modifier le programme et le sauvegarder pour un usage ultérieur. Vous pouvez aussi ouvrir et travailler sur différents programmes simultanément. Chaque programme sur lequel vous travaillez sera affiché dans un éditeur différent. L’éditeur qui contient le programme sur lequel vous êtes actuellement en train de travailler est appelé éditeur actif. La Barre d’outils, identifiée par *2+, est utilisée pour commander à la fois l’éditeur actif et l’environnement. Nous ferons connaissance avec les nombreuses commandes au fur et à mesure de ce guide. La Surface, identifiée par [3], est l’endroit où se trouvent toutes les fenêtres d’éditeur. Notre premier programme Maintenant que vous êtes familier avec l’environnement Small Basic, nous allons commencer à programmer. Comme nous l’avons remarqué plus haut, l’éditeur est l’endroit où on écrit les programmes. Alors continuons et tapons la ligne suivante dans l’éditeur. 1 2 3TextWindow.WriteLine("Hello World") C’est notre premier programme en Small Basic et si vous l’avez tapé correctement, vous devriez obtenir quelque chose de similaire à la figure ci-dessous. Figure 2 – Premier programme Maintenant que nous avons entré notre nouveau programme, continuons et exécutons-le pour voir ce qui se passe. Nous pouvons exécuter notre programme soit en cliquant sur le bouton Exécuter de la barre d’outils soit en utilisant le raccourci clavier F5. Si tout se passe bien, notre programme devrait s’exécuter en donnant le résultat ci-dessous. Figure 3 – Sortie de notre premier programme Félicitations ! Vous venez d’écrire et d’exécuter votre premier programme en Small Basic. Un très petit et très simple programme, mais néanmoins un grand pas en avant dans la démarche de devenir un vrai programmeur ! Maintenant, il y a juste un détail supplémentaire à connaître avant de continuer à créer de plus gros programmes. Nous devons comprendre ce qui Quand vous avez tapé votre premier programme, vous avez pu remarquer qu’une fenêtre est apparue avec une liste d’objets (Figure 4). Elle est appelé “IntelliSense” et vous aide à taper plus vite votre programme. Vous pouvez parcourir cette liste en utilisant les flèches Haut/Bas de votre clavier, et quand vous trouvez quelque chose qui vous intéresse, vous pouvez presser la touche Entrée pour insérer l’élément sélectionné dans votre programme.s’est produit – ce que nous avons dit exactement à l’ordinateur et comment a-t-il su quoi faire ? Dans le chapitre suivant, nous analyserons le programme que nous venons d’écrire pour acquérir cette compréhension. Figure 4 - IntelliSense Sauvegardons notre programme Si vous voulez fermer Small Basic et y revenir plus tard pour travailler sur le programme que vous venez de taper, vous devez enregistrer le programme. C’est en réalité une bonne pratique de sauvegarder le programme de temps en temps, afin de ne pas perdre d’information dans l’éventualité d’une extinction accidentelle de l’ordinateur ou d’une panne de courant. Vous pouvez sauvegarder votre programme actuel soit en cliquant sur l’icône Enregistrer de la barre d’outils soit en utilisant le raccourci clavier “Ctrl+S” (il vous suffit d’appuyer sur la touchée S pendant que vous appuyez sur la touche Ctrl).Chapitre 2 Comprendre notre premier programme Qu’est réellement un programme d’ordinateur? Un programme est un ensemble d’instructions pour l’ordinateur. Ces instructions indiquent précisément à l’ordinateur ce qu’il doit faire, et l’ordinateur suit toujours ces instructions. Comme les êtres humains, les ordinateurs ne peuvent suivre les instructions que si elles sont spécifiées dans un langage qu’ils peuvent comprendre. Ce sont les langages de programmation. Il y a de nombreux langages de programmation que l’ordinateur peut comprendre et Small Basic est l’un deux. Imaginez une conversation entre vous et votre ami. Vous utiliseriez des mots, organisés en phrases pour véhiculer des informations entrantes et sortantes. De la même façon, les langages de programmation contiennent des bibliothèques de mots qui peuvent être organisées en phrases qui véhiculent les informations vers l’ordinateur. Les programmes sont simplement des ensembles de phrases (parfois juste quelques unes et parfois plusieurs milliers) qui réunies acquièrent un sens à la fois pour le programmeur et l’ordinateur. Les programmes en Small Basic Un programme en Small Basic typique consiste en un ensemble de commandes. Chaque ligne du programme représente une commande et chaque commande correspond à un ensemble d’instructions exécutables par l’ordinateur. Quand on demande à l’ordinateur d’exécuter un programme en Small Basic, il prend le programme et lit la première commande. Il comprend ce que nous essayons de dire et exécute nos commandes. Une fois qu’il a exécuté notre première commande, il revient au programme, lit et exécute la seconde ligne. Il continue ainsi jusqu’à ce qu’il atteigne la fin du programme. C’est là que se termine notre programme. Il y a de nombreux langages informatiques modernes tels que Java, C++, Python, VB, etc., qui sont utilisés pour développer des programmes simples ou complexes, compréhensibles par l’ordinateur.Retour à notre premier programme Voici le premier programme que nous avons écrit : TextWindow.WriteLine("Hello World") C’est un programme très simple constitué d’une seule commande. Cette commande dit à l’ordinateur d’écrire une ligne de texte qui est Hello World dans la fenêtre texte (Text Window), appelée aussi Console. Littéralement, cela se traduit dans l’esprit de l’ordinateur par : Ecrire Hello World Vous pourriez avoir déjà remarqué que la commande peut se découper en plusieurs segments de taille inférieure de la même façon que la phrase peut se découper en mots. Dans la première commande, nous avons 3 segments distincts : a) La Console (Text Window) b) La commande WriteLine c) Le texte “Hello World” Les points, parenthèses et guillemets sont tous des ponctuations qui doivent être placées au bon endroit dans votre code pour que l’ordinateur comprenne notre intention. Vous vous rappelez peut-être l’écran noir qui est apparu lorsque vous avez exécuté votre premier programme. Cette fenêtre est appelée Text Window mais on s’y réfère généralement comme la Console. C’est là que s’affiche le résultat du programme. La console, dans notre exemple, est en réalité un objet. Nous pouvons utiliser un certain nombre d’objets dans nos programmes. On peut réaliser plusieurs opérations différentes sur ces objets. Nous avons déjà utilisé la commande WriteLine dans notre programme. Vous avez aussi pu remarquer que la commande WriteLine est suivie par Hello World dans des guillemets. Ce texte est traité comme une entrée par la commande WriteLine, et est ensuite affiché pour l’utilisateur. Il est appelé argument de la commande (ou paramètre). Certaines commandes prennent un ou plusieurs arguments alors que certaines n’en prennent aucun. Les éléments de ponctuation comme les guillemets, les espaces et les parenthèses sont très importants dans un programme informatique. En fonction de leur position et de leur nombre, ils peuvent changer la signification de ce qui est exprimé.Notre deuxième programme Maintenant que vous avez compris notre premier programme, avançons dans la leçon et ajoutons quelques couleurs pour le rendre plus attrayant. TextWindow.ForegroundColor = "Yellow" TextWindow.WriteLine("Hello World") Figure 5 – Ajouter des couleurs Quand vous exécuterez le programme ci-dessus, vous pourrez remarquer qu’il écrit le même texte “Hello World” dans la Fenêtre de texte, mais cette fois-ci le texte est écrit en jaune au lieu du gris du programme précédent. Figure 6 - Hello World en jaune Remarquez la nouvelle commande que nous avons ajoutée à notre programme de départ. Elle utilise un nouveau mot, ForegroundColor (couleur du premier plan) que nous avons défini à la valeur “Yellow” (jaune). Cela signifie que nous avons assigné “Yellow” au paramètre ForegroundColor. Maintenant, la différence entre ForegroundColor et la commande WriteLine est que ForegroundColor ne prend pas d’argument et ne nécessite pas de parenthèses, alors qu’il est suivi d’un signe égal et d’un mot. On définit ForegroundColor comme une propriété de la console (Text Window). Voici une liste des valeurs pour le paramètre ForegroundColor. Essayez de remplacer “Yellow” avec l’une de ces valeurs et observez le résultat – n’oubliez-pas les guillemets, ils font partie de la ponctuation nécessaire. De plus vous devez impérativement utiliser les noms des couleurs en anglais dans votre programme. Mot clé -> Signification Black -> Noir Blue -> Bleu Cyan -> Cyan Gray -> Gris Green -> Vert Magenta -> Magenta Red -> Rouge White -> Blanc Yellow -> Jaune DarkBlue -> Bleu foncé DarkCyan -> Cyan foncé DarkGray -> Gris foncé DarkGreen -> Vert foncé DarkMagenta -> Magenta foncé DarkRed -> Rouge foncé DarkYellow -> Jaune foncéChapitre 3 Introduction aux variables Utilisation de variables dans notre programme Ne serait-il pas bien que notre programme puisse maintenant afficher “Hello” avec le nom de l’utilisateur plutôt que d’afficher le général “Hello World” ? Pour ce faire, nous devons demander à l’utilisateur de saisir son nom, le stocker quelque part, puis afficher “Bonjour” avec le nom de l’utilisateur. Voyons comment nous pouvons réaliser cela : TextWindow.Write("Entrez votre nom : ") nom = TextWindow.Read() TextWindow.WriteLine("Bonjour " + nom) Lorsque vous tapez et exécutez ce programme, vous devriez voir apparaître la fenêtre suivante. Figure 7 – Demande le nom d’utilisateur Vous pouvez ensuite taper votre nom, puis appuyer sur la touche ENTRÉE. Voici ce que vous pouvez obtenir.Figure 8 – Le message Bonjour s’affiche Si vous lancer le programme une seconde fois, la même question vous sera posée. Vous pouvez saisir un nom différent et l’ordinateur vous répondra Bonjour avec ce nouveau nom. Analyse du programme Dans le programme que vous venez de lancer, la ligne suivante doit avoir retenu votre attention : nom = TextWindow.Read() Read() est similaire à WriteLine() mais n’affiche rien. Il s’agit d’une opération qui demande à l’ordinateur d’attendre que l’utilisateur saisisse quelque chose et appuie sur la touche ENTRÉE. Les informations qui ont été saisies par l’utilisateur sont ensuite mémorisées, votre programme peut donc, par la suite, y accéder. Le point intéressant est que, quelque soit ce que l’utilisateur a saisi, l’ensemble des données sont stockées dans une variable nommée nom. Une variable est une zone mémoire où vous pouvez stocker temporairement des valeurs et les utiliser plus tard. Dans la ligne ci-dessus, la variable nom a été utilisée pour stocker le nom de l’utilisateur. La ligne suivante est aussi intéressante: TextWindow.WriteLine("Bonjour " + nom) C’est ici où nous utilisons la valeur stockée dans notre variable nom. Nous prenons la valeur de cette variable et l’attachons à Bonjour pour l’écrire dans la console TextWindow. Une fois qu’une valeur est attribuée à la variable, vous pouvez la réutiliser autant que vous le souhaitez. Par exemple, vous pouvez écrire le code suivant : TextWindow.Write("Entrez votre nom : ") nom = TextWindow.Read() Write, tout comme WriteLine, est une autre opération de ConsoleWindow. Write vous permet d’écrire quelque chose dans la ConsoleWindow, mais permet d’ajouter du texte sur la même ligne que le texte actuel.TextWindow.Write("Bonjour " + nom + ". ") TextWindow.WriteLine("Comment allez-vous " + nom + "?") Voici le résultat d’exécution du code précédent : Figure 9 - Réutilisation d’une variable Jouer avec les nombres Nous venons de voir comment vous pouvez utiliser des variables pour stocker le nom de l'utilisateur. Au travers des exemples suivants, nous allons voir comment nous pouvons stocker et manipuler des nombres avec les variables. Commençons par un programme très simple: number1 = 10 number2 = 20 number3 = number1 + number2 TextWindow.WriteLine(number3) Quand vous lancez ce programme, vous obtenez l’affichage suivant : Figure 10 - Addition de deux nombres Dans la première ligne du programme, vous affectez à la variable number1 la valeur 10. Dans la seconde ligne, vous affectez la valeur 20 à la variable number2. Dans la troisième ligne, vous additionnez number1 et number2, puis attribuez le résultat à la variable number3. Dans ce cas, number3 se verra attribuer la valeur 30. C’est bien ce qui est affiché dans la console On peut noter que les nombres ne sont pas entre guillemets. Pour les nombres, les guillemets ne sont pas nécessaires. Vous n’avez besoin des guillemets uniquement lorsque vous utilisez du texte.TextWindow. Maintenant, modifions le programme et voyons le résultat : number1 = 10 number2 = 20 number3 = number1 * number2 TextWindow.WriteLine(number3) Le programme ci-dessus va multiplier number1 par number2 et stocker le résultat dans number3. Vous pouvez voir le résultat ci-dessous : Figure 11 - Multiplication de deux nombres De façon similaire, vous pouvez soustraire ou diviser des nombres. Voici la soustraction: number3 = number1 - number2 Le symbole pour la division est ‘/’. Le programme ressemblera à ceci : number3 = number1 / number2 Et le résultat pour la division est : Figure 12 – Division de deux nombres Un simple convertisseur de température Pour le programme suivant, nous utiliserons la formule ? = 5(?-32) 9 dans le but de convertir les degrés Fahrenheit en degrés Celsius.Tout d’abord, récupérons la température en Fahrenheit de l’utilisateur et stockons-la dans une variable. Il y a une opération particulière qui nous permet de ne récupérer que des chiffres. Cette opération est TextWindow.ReadNumber. TextWindow.Write("Entrez une température en Fahrenheit : ") fahr = TextWindow.ReadNumber() Une fois que nous avons la température en Fahrenheit stockée dans une variable, nous pouvons la convertir en degrés Celsius de la façon suivante : celsius = 5 * (fahr - 32) / 9 Les parenthèses ordonnent à l’ordinateur de calculer la soustraction farh – 32 en premier, puis d’effectuer le reste de l’opération. Maintenant, tout ce qu’il nous reste à faire est d’afficher le résultat à l’écran de l’utilisateur. En assemblant le tout, nous obtenons ce programme : TextWindow.Write("Entrez une température en Fahrenheit : ") fahr = TextWindow.ReadNumber() celsius = 5 * (fahr - 32) / 9 TextWindow.WriteLine("La température en Celsius est " + celsius) Et le résultat de ce programme sera: Figure 13 – Conversion de températureChapitre 4 Conditions et branchements Revenons à notre premier programme, ne serait-il pas cool que, plutôt que d’afficher le général Hello World, que nous puissions afficher Good Morning World, ou Good Evening World en fonction de l’heure? Pour notre prochain programme, nous allons afficher Good Morning World si nous sommes avant midi et Good Evening World dans le cas contraire. If (Clock.Hour < 12) Then TextWindow.WriteLine("Good Morning World") EndIf If (Clock.Hour >= 12) Then TextWindow.WriteLine("Good Evening World") EndIf En fonction de l’heure à laquelle vous lancerez le programme, vous verrez l’un des textes suivants: Figure 14 - Good Morning WorldFigure 15 - Good Evening World Analysons maintenant les trois premières lignes de notre programme. Vous l’avez déjà compris, la première ligne demande à l’ordinateur d’afficher “Good Morning World” si Clock.Hour est inférieur à 12. Les mots clés If, Then et EndIf sont des mots particuliers qui sont compris par l’ordinateur quand le programme est lancé. Le mot If est toujours suivi d’une condition, qui est, dans ce cas, (Clock.Hour < 12). Souvenez-vous que les parenthèses sont nécessaires pour que l’ordinateur comprenne vos intentions. La condition est suivie de Then ainsi que de l’opération réelle à exécuter. L’opération est ensuite suivie de EndIf. Cela indique à l’ordinateur que l’exécution conditionnelle est terminée. Entre le mot Then et EndIf, il peut y avoir plus d’une opération et l’ordinateur les exécutera toutes si la condition est valide. Par exemple, vous pouvez écrire quelque chose de semblable à ceci: If (Clock.Hour < 12) Then TextWindow.Write("Good Morning. ") TextWindow.WriteLine("How was breakfast?") EndIf Else Dans le programme au début de ce chapitre, vous avez sans doute remarqué que la seconde condition était redondante. La valeur de Clock.Hour peut être inférieure à 12 ou non. Nous n’avons pas vraiment besoin de vérifier la seconde condition. Dans ce cas précis, nous pouvons réduire les deux déclarations If..Then..Endif à un seul en utilisant un nouveau mot clé, Else. Si nous devions réécrire ce programme en utilisant Else, voici ce à quoi il ressemblerait : If (Clock.Hour < 12) Then TextWindow.WriteLine("Good Morning World") Else TextWindow.WriteLine("Good Evening World") En Small Basic, vous pouvez utiliser l’objet Clock pour accéder à la date et heure actuelle. Il vous fournis également un ensemble de propriétés qui vous permettent d’obtenir le jour, le mois, l’année, l’heure, les minutes, et les secondes séparément.EndIf Ce programme va faire exactement la même chose que l’autre, ce qui nous emmène à une leçon très importante en programmation informatique: En programmation, il y a généralement plusieurs façons de faire la même chose. Parfois, une façon de faire a plus de sens qu’une autre : le choix est laissé au programmeur. Plus vous écrirez des programmes, et plus vous deviendrez expérimenté, plus il sera facile pour vous d’identifier ces différentes techniques, leurs avantages, et inconvénients. Indentation Dans tous les exemples précédents, vous pouvez voir comment les instructions entre les If, Else et EndIf sont indentées. L’indentation n’est pas obligatoire. L’ordinateur comprendra très bien le programme sans elle. Toutefois, elles nous aident à voir et à comprendre la structure du programme plus facilement. En conséquence, il est généralement considéré comme une bonne pratique d’indenter le code entre chaque bloc. Pair ou Impair Maintenant que nous avons les instructions If..Then..Else..EndIf dans notre boîte à outils, nous allons écrire un programme qui, en fonction d’un nombre donné, nous dira s’il est pair ou impair. TextWindow.Write("Entrez un nombre : ") num = TextWindow.ReadNumber() remainder = Math.Remainder(num, 2) If (remainder = 0) Then TextWindow.WriteLine("Le nombre est Pair") Else TextWindow.WriteLine("Le nombre est Impair") EndIf “Lorsque vous exécuterez ce programme, vous verrez quelque chose de semblable à ceci: Figure 16 - Pair ou Impair Dans ce programme, nous avons introduit une nouvelle opération qui peut vous être utile, Math.Remainder. Comme vous l’avez peut-être déjà compris, Math.Remainder va diviser le premier nombre par le second et retourne le reste. Branchements Rappelez-vous, dans le deuxième chapitre, vous avez appris que l'ordinateur traite un programme une déclaration à la fois, dans l’ordre de haut en bas. Toutefois, il y a une instruction spéciale qui peut ordonner à l'ordinateur de sauter d’une opération à une autre. Jetons un œil au prochain programme. i = 1 start: TextWindow.WriteLine(i) i = i + 1 If (i < 25) Then Goto start EndIfFigure 17 - Utiliser Goto Dans le programme ci-dessus, nous avons assigné la valeur 1 à la variable i. Et puis nous avons ajouté une nouvelle opération qui se termine par le double point (:) start: C’est ce qu’on appelle une étiquette (ou label en anglais). Les étiquettes sont des marqueurs que l’ordinateur peut comprendre. Vous pouvez nommer l’étiquette comme vous voulez et vous pouvez ajouter autant d’étiquettes que vous souhaitez dans votre programme tant qu’elles portent toutes un nom différent. Une autre opération intéressante est celle-ci : i = i + 1 Cela indique à l’ordinateur d’ajouter 1 à la variable i et d’assigner le résultat à cette même variable i. Donc, si la valeur de i était de 1 avant cette opération, elle sera de 2 après que cette déclaration soit exécutée. Et enfin, le code suivant indique à l'ordinateur que si la valeur de i est inférieure à 25, il doit commencer à exécuter les déclarations à partir de l’étiquette start. If (i < 25) Then Goto start EndIfExécution sans fin En utilisant l’instruction Goto, vous pouvez répéter des instructions un nombre indéterminé de fois. Par exemple, vous pouvez prendre le programme Pair ou Impair et le modifier comme ci-dessous. Vous pouvez stopper le programme en cliquant sur le bouton de fermeture (X) dans le coin à droite de la fenêtre. begin: TextWindow.Write("Entrez un nombre : ") num = TextWindow.ReadNumber() remainder = Math.Remainder(num, 2) If (remainder = 0) Then TextWindow.WriteLine("Le nombre est Pair") Else TextWindow.WriteLine("Le nombre est Impair") EndIf Goto begin Figure 18 – Le programme Pair ou Impair tournant indéfinimentChapitre 5 Les boucles Boucle For Reprenons le programme écrit dans le chapitre précédent. i = 1 start: TextWindow.WriteLine(i) i = i + 1 If (i < 25) Then Goto start EndIf Ce programme affiche des nombres de 1 à 24 selon l’ordre numérique. Le fait d’incrémenter une variable est très courant en programmation et les langages de programmation fournissent généralement des méthodes simplifiées pour cela. Le programme ci-dessous est équivalent au programme précédent : For i = 1 To 24 TextWindow.WriteLine(i) EndForOn obtient alors: Image 19 – Utilisation d’une boucle FOR On remarque que l’on est passé d’un programme de 8 lignes à un programme 4 lignes en obtenant le même résultat. Souvenez-vous que, plus tôt, nous disions qu’il y avait généralement plusieurs façons de faire la même chose : ceci en est un bon exemple. For..EndFor est appelé, en programmation, une boucle. Cela vous permet de prendre une variable, de lui donner une valeur initiale et une valeur finale et de laisser l’ordinateur incrémenter cette variable pour vous. Chaque fois que l’ordinateur incrémente la variable, cela entraîne l’exécution du code présent entre For et EndFor. Mais si vous vouliez que la variable soit incrémentée de 2 au lieu d’1, par exemple pour afficher tous les nombres impairs entre 1 et 24, vous pouvez utiliser une boucle pour effectuer cela. For i = 1 To 24 Step 2 TextWindow.WriteLine(i) EndFor Image 20 – Affichage des nombres impairsLe Step 2 associé au mot clé For indique à l’ordinateur qu’il doit incrémenter la valeur de i de deux unités au lieu d’une unité habituellement. En utilisant le mot clé Step, vous pouvez spécifier l’incrémentation que vous souhaitez. Il est possible de spécifier une valeur négative pour le mot clé Step afin que l’ordinateur compte à l’envers, comme dans l’exemple ci-dessous : For i = 10 To 1 Step -1 TextWindow.WriteLine(i) EndFor Image 21 – Compter à l’envers Boucle While Une boucle While est un autre type de boucle qui est utile lorsque l’on souhaite faire une boucle sans connaître exactement le nombre d’itérations à l’avance. Contrairement à la boucle For qui tourne un nombre prédéfini de fois, la boucle While s’exécute jusqu’à ce qu’une condition soit vérifiée. Dans l’exemple ci-dessous, on divise un nombre par 2 tant que le résultat est supérieur à 1. number = 100 While (number > 1) TextWindow.WriteLine(number) number = number / 2 EndWhile Image 22 – Boucle de division par 2Dans le programme ci-dessus, on assigne la valeur 100 à la variable number et on exécute la boucle While tant que la variable number est supérieure à 1. Au sein de la boucle, on affiche le nombre puis on le divise par deux. Comme attendu, on peut voir à l’écran que les nombres sont réduits de moitié les uns après les autres. Il aurait été très difficile d’écrire ce programme en utilisant une boucle For car nous ne savons pas à l’avance le nombre de boucle à effectuer. Avec une boucle While, il est facile de vérifier une condition et d’indiquer à l’ordinateur de continuer la boucle ou de sortir de celle-ci. Il est intéressant de noter que chaque boucle While peut être remplacée en utilisant une condition If..Then. Par exemple, le programme précédent peut être réécrit de la façon suivante. number = 100 startLabel: TextWindow.WriteLine(number) number = number / 2 If (number > 1) Then Goto startLabel EndIf En réalité, l’ordinateur réécrit chaque boucle While un utilisant des conditions If…Then avec un ou plusieurs mots clé Goto. Chapitre 6 Introduction à la programmation graphique Jusqu’à présent, tous nos exemples ont été réalisés en utilisant TextWindow afin d’expliquer les bases du langage Small Basic. Toutefois, Small Basic contient un ensemble d’outils permettant la réalisation d’applications graphiques. Présentation de GraphicsWindow Tout comme nous avions TextWindows pour le texte et les nombres, Small Basic fournit également GraphicsWindow qui permet de dessiner des objets graphiques. Commençons par afficher une GraphicsWindow. GraphicsWindow.Show() Quand on lance ce programme, on remarque qu’à la place de l’écran noir de texte, on obtient une fenêtre comme celle de l’image-ci-dessous. On ne peut encore rien faire sur cette fenêtre mais c’est la fenêtre de base sur laquelle nous allons travailler durant ce chapitre. Vous pouvez fermer cette fenêtre en cliquant sur le bouton ‘X’ dans le coin en haut à droite.Image 23 – Une fenêtre vide Configuration de la fenêtre graphique GraphicsWindow vous permet de configurer l’apparence de la fenêtre selon vos désirs. Vous pouvez ainsi changer son titre, la couleur de fond ou encore sa taille. Commençons par modifier quelques propriétés de base. GraphicsWindow.BackgroundColor = "SteelBlue" GraphicsWindow.Title = "Ma fenêtre graphique" GraphicsWindow.Width = 320 GraphicsWindow.Height = 200 GraphicsWindow.Show()Voici à quoi ressemble la fenêtre modifiée par le code ci-dessus. Vous pouvez changer la couleur de fond par l’une des nombreuses valeurs listées dans l’annexe B de ce document. Jouez avec ces propriétés pour voir comment modifier l’apparence de la fenêtre. Image 24 – Une fenêtre personnalisée Dessiner des lignes Une fois la fenêtre prête, on peut dessiner des formes, du texte et même des images dessus. Commençons par dessiner des formes simples. Voici un programme qui dessine deux lignes sur la fenêtre. GraphicsWindow.Width = 200 GraphicsWindow.Height = 200 GraphicsWindow.DrawLine(10, 10, 100, 100) GraphicsWindow.DrawLine(10, 100, 100, 10) Image 25 – Une croixLes deux premières lignes du programme définissent la taille de la fenêtre, et les deux lignes suivantes dessinent les traits de la croix. Les deux premiers nombres à droite de DrawLine définissent les coordonnées x et y du point de départ de chaque ligne et les deux autres nombres définissent les coordonnées x et y du point d’arrivé de chaque ligne. Un point intéressant en informatique est que les coordonnées du coin haut gauche de la fenêtre sont (0,0). Par conséquent, dans un repère orthonormé la fenêtre est considérée comme étant dans le deuxième quadrant. Revenons à notre programme de dessin. Tout comme nous avons modifiés des propriétés de la fenêtre, nous pouvons modifier des propriétés du trait, comme sa couleur ou son épaisseur. Tout d’abord, modifions la couleur des lignes : GraphicsWindow.Width = 200 GraphicsWindow.Height = 200 GraphicsWindow.PenColor = "Green" GraphicsWindow.DrawLine(10, 10, 100, 100) GraphicsWindow.PenColor = "Gold" GraphicsWindow.DrawLine(10, 100, 100, 10) Image 26 – Changement de couleur des lignes Maintenant, modifions la taille des traits de la croix. Dans le programme ci-dessous, nous changeons la largeur de la ligne à 10 alors que la valeur par défaut de cette propriété est 1. Plutôt que d’utiliser des noms pour les couleurs, vous pouvez utiliser la notation des couleurs web (#RRGGBB). Par exemple, FF0000 donne du rouge, #FFFF00 du jaune et ainsi de suite. Pour en savoir plus sur les couleurs? AnnexesGraphicsWindow.Width = 200 GraphicsWindow.Height = 200 GraphicsWindow.PenWidth = 10 GraphicsWindow.PenColor = "Green" GraphicsWindow.DrawLine(10, 10, 100, 100) GraphicsWindow.PenColor = "Gold" GraphicsWindow.DrawLine(10, 100, 100, 10) Image 27 – Une croix épaisse et colorée PenWidth et PenColor modifient le crayon utilisé pour dessiner ces lignes. Cela n’affecte pas uniquement les lignes mais aussi toutes les formes dessinées avec le crayon. En utilisant les boucles que nous avons étudiées dans le chapitre précédent, nous pouvons facilement écrire un programme qui dessine plusieurs lignes en augmentant l’épaisseur du crayon utilisé. GraphicsWindow.BackgroundColor = "Black" GraphicsWindow.Width = 200 GraphicsWindow.Height = 160 GraphicsWindow.PenColor = "Blue" For i = 1 To 10 GraphicsWindow.PenWidth = i GraphicsWindow.DrawLine(20, i * 15, 180, i * 15) endforImage 28 – Épaisseurs du crayon différentes La partie intéressante du programme est la boucle, où nous augmentons l’épaisseur du crayon (PenWidth) à chaque fois que la boucle est lancée, puis nous dessinons la nouvelle ligne en dessous de l’ancienne. Dessiner des formes Lorsque vous souhaitez dessiner des formes, il existe deux catégories de fonctions à votre disposition : les fonctions DrawXXX et les fonctions FillXXX. Les fonctions Draw dessinent le contour de la forme en utilisant un crayon donné (défini par PenColor). Les fonctions Fill dessinent une forme pleine grâce à un pinceau (défini par BrushColor). Par exemple, dans le programme ci-dessous, deux rectangles sont dessinés. L’un en utilisant un crayon rouge pour le contour et l’autre en utilisant un pinceau vert pour le remplissage du rectangle. GraphicsWindow.Width = 400 GraphicsWindow.Height = 300 GraphicsWindow.PenColor = "Red" GraphicsWindow.DrawRectangle(20, 20, 300, 60) GraphicsWindow.BrushColor = "Green" GraphicsWindow.FillRectangle(60, 100, 300, 60)Image 29 Dessiner et colorier Pour dessiner un rectangle, il faut 4 nombres. Les deux premiers nombres représentent les coordonnées X et Y du coin supérieur gauche du rectangle. Le troisième nombre permet de définir la largeur du rectangle, tandis que le quatrième nombre définit sa hauteur. On dessine des ellipses de la même façon comme le montre le programme ci-dessous. GraphicsWindow.Width = 400 GraphicsWindow.Height = 300 GraphicsWindow.PenColor = "Red" GraphicsWindow.DrawEllipse(20, 20, 300, 60) GraphicsWindow.BrushColor = "Green" GraphicsWindow.FillEllipse(60, 100, 300, 60) Image 30 – Dessin d’ellipsesLes Ellipses ne sont que des cas généraux des cercles. Si vous souhaitez dessiner un cercle, il suffit de spécifier la même hauteur et la même largeur. GraphicsWindow.Width = 400 GraphicsWindow.Height = 300 GraphicsWindow.PenColor = "Red" GraphicsWindow.DrawEllipse(20, 20, 100, 100) GraphicsWindow.BrushColor = "Green" GraphicsWindow.FillEllipse(100, 100, 100, 100) Image 31 – CerclesChapitre 7 Amusons-nous avec les formes Nous allons nous amuser dans ce chapitre avec tout ce que vous avez appris jusqu’ici. Ce chapitre contient des extraits montrant comment combiner ce que vous avez appris pour créer des programmes graphiques funs. Rectangulaires Dans cette partie, nous dessinons plusieurs rectangles dans une boucle, en augmentant leur taille. GraphicsWindow.BackgroundColor = "Black" GraphicsWindow.PenColor = "LightBlue" GraphicsWindow.Width = 200 GraphicsWindow.Height = 200 For i = 1 To 100 Step 5 GraphicsWindow.DrawRectangle(100 - i, 100 - i, i * 2, i * 2) EndForFigure 32 - Rectangalore Circulaires Une variante du précédent programme où il s’agit de dessiner des cercles à la place des carrés. GraphicsWindow.BackgroundColor = "Black" GraphicsWindow.PenColor = "LightGreen" GraphicsWindow.Width = 200 GraphicsWindow.Height = 200 For i = 1 To 100 Step 5 GraphicsWindow.DrawEllipse(100 - i, 100 - i, i * 2, i * 2) EndFor Figure 33 – Circtacular Aléatoires Ce programme utilise la commande GraphicsWindow.GetRandomColor pour fixer une couleur aléatoire au pinceau et ensuite la commande Math.GetRandomNumber pour attribuer les coordonnées x et y au cercle. Ces deux opérations peuvent être combinées de manières intéressantes afin de créer des programmes qui donnent des résultats différents à chaque lancement.GraphicsWindow.BackgroundColor = "Black" For i = 1 To 1000 GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor() x = Math.GetRandomNumber(640) y = Math.GetRandomNumber(480) GraphicsWindow.FillEllipse(x, y, 10, 10) EndFor Figure 34 – Randomize Fractales Le programme suivant dessine un triangle en fractal en utilisant les nombres aléatoires. Une fractale est une forme géométrique qui peut être subdivisée en parties, chaque partie ressemblant trait pour trait à la forme parente. Dans notre cas, le programme dessine des centaines de triangles, chacun d’eux étant identique à son triangle parent. Et comme le programme tourne quelques secondes, vous pouvez réellement voir les triangles se former doucement à partir de simples points. La logique est quelque peu difficile à décrire et je vous laisse le soin, comme exercice, de l’approfondir. GraphicsWindow.BackgroundColor = "Black" x = 100 y = 100 For i = 1 To 100000 r = Math.GetRandomNumber(3) ux = 150 uy = 30 If (r = 1) then ux = 30 uy = 1000 EndIf If (r = 2) Then ux = 1000 uy = 1000 EndIf x = (x + ux) / 2 y = (y + uy) / 2 GraphicsWindow.SetPixel(x, y, "LightGreen") EndFor Figure 35 - Triangle Fractal Si vous voulez vraiment voir les points se transformer pour former la fractale, vous pouvez ajouter une pause dans la boucle en utilisant la commande Program.Delay. Cette commande prend comme paramètre un nombre en millisecondes qui spécifie le délai d’attente. Ci-dessous le programme modifié et la ligne modifiée en gras.GraphicsWindow.BackgroundColor = "Black" x = 100 y = 100 For i = 1 To 100000 r = Math.GetRandomNumber(3) ux = 150 uy = 30 If (r = 1) then ux = 30 uy = 1000 EndIf If (r = 2) Then ux = 1000 uy = 1000 EndIf x = (x + ux) / 2 y = (y + uy) / 2 GraphicsWindow.SetPixel(x, y, "LightGreen") Program.Delay(2) EndFor Le fait d’augmenter le délai va ralentir le programme. Testez avec différents nombres pour voir lequel correspond le plus à ce que vous souhaitez. Une autre modification que vous pouvez apporter à ce programme est de remplacer la ligne ci-dessous GraphicsWindow.SetPixel(x, y, "LightGreen") par color = GraphicsWindow.GetRandomColor() GraphicsWindow.SetPixel(x, y, color) Après cette modification, le programme dessine les pixels du triangle en utilisant des couleurs aléatoires.Chapitre 8 Graphique Tortue Logo Dans les années 70, il existait un très simple mais très performant langage de programmation, appelé Logo qui était utilisé par quelques chercheurs. C’était avant que soit ajouté au langage ce que l’on a appelé « Turtle Graphics » et ainsi mette à disposition une « Tortue » qui était visible sur l’écran et répondait aux commandes comme « bouge », « avance », « tourne à droite », « tourne à gauche »,etc. En utilisant la tortue, les gens pouvaient dessiner des formes intéressantes sur l’écran. Ceci a rendu en conséquence le langage accessible et attractif aux personnes de tous âges, et a contribué à son succès dans les années 80. Small basic propose la Tortue avec de nombreuses commandes qui peuvent être appelées à l’intérieur de programmes basés sur ce langage. Dans ce chapitre, nous allons utiliser la Tortue pour dessiner des éléments graphiques à l’écran. La Tortue Pour commencer, nous avons besoin que la tortue soit visible sur l’écran. Ceci peut être réalisé à l’aide d’une simple ligne de commande. Turtle.Show() Quand vous lancez ce programme, vous allez observer une fenêtre banche, comme celle que vous avez pu voir dans le chapitre précédent, sauf que celle-ci a une tortue au centre. C’est cette tortue qui va suivre nos instructions et dessiner tout ce qu’on lui demande.Figure 36 – La Tortue est visible Bouger et dessiner Une des instructions que la tortue peut comprendre est « Move ». Cette commande prend un nombre comme entrée. Ce nombre indique à la tortue de quelle distance elle doit se déplacer. Cela étant établi, dans l’exemple ci-dessous, nous allons demander à la tortue de bouger de 100 pixels. Turtle.Move(100) Quand vous lancez le programme, vous pouvez voir la tortue bouger lentement de 100 pixels vers le haut. Vous pouvez aussi remarquer qu’une ligne se dessine derrière elle. Quand la Tortue a fini son mouvement, le résultat devrait ressembler à la figure ci-dessous. Quand vous utilisez la tortue, il n’est pas nécessaire d’appeler la fonction Show(). La Tortue sera rendu visible du moment que n’importe quelle opération est exécutée.Figure 37 – Mouvement de 100 pixels Dessiner un carré Un carré a 4 côtés, 2 verticaux et 2 horizontaux. Afin de dessiner un carré nous avons besoin que la tortue dessine une ligne, tourne à droite et dessine une autre ligne et ainsi de suite jusqu’à ce que les 4 côtés soient finis. Si nous traduisons cela en un programme, il devrait ressembler à cela. Turtle.Move(100) Turtle.TurnRight() Turtle.Move(100) Turtle.TurnRight() Turtle.Move(100) Turtle.TurnRight() Turtle.Move(100) Turtle.TurnRight() Quand vous exécutez le programme, vous pouvez voir la Tortue dessiner un carré, une ligne après l’autre, et le résultat ressemble à la figure ci-dessous.Figure 38 – La tortue dessine un carré Il est intéressant de noter que nous sommes en train d’utiliser les deux mêmes instructions encore et encore - 4 fois précisément. Et nous avons déjà appris que de telles commandes répétitives peuvent être exécutées en utilisant des boucles. Donc, si nous prenons le programme au-dessus et que nous le modifions en utilisant la boucle « For..EndFor », nous allons nous retrouver avec un programme beaucoup plus simple. For i = 1 To 4 Turtle.Move(100) Turtle.TurnRight() EndFor Modifier les couleurs La Tortue dessine sur exactement le même composant graphique (GraphicsWindow) que nous avons vu dans le chapitre précédent. Cela signifie que toutes les opérations apprises dans le chapitre précédent sont toujours valables. Par exemple, le programme suivant va dessiner un carré avec chacun des cotés d’une couleur différente. For i = 1 To 4 GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor() Turtle.Move(100) Turtle.TurnRight()EndFor Figure 39 – modification des couleurs Dessiner des formes plus complexes La tortue, en plus des commandes TurnRight et TurnLeft, peut en interpréter une autre qui est Turn. Celle-ci prend une entrée qui spécifie l’angle de rotation. En utilisant cette commande, il est possible de dessiner n’importe quel polygone-à-n-côtés. Le programme suivant dessine un hexagone (un polygone à six côtés). For i = 1 To 6 Turtle.Move(100) Turtle.Turn(60) EndFor Essayez ce programme pour voir s’il dessine vraiment un hexagone. Remarquez que puisque l’angle entre les cotés est de 60 degrés, nous utilisons Turn(60). Pour un tel polygone, dont les côtés sont égaux, l’angle entre les côtés peut être facilement obtenu en divisant 360 par le nombre de côtés. Armé de ces informations et en utilisant des variables, nous pouvons écrire un joli petit programme générique qui sera capable de dessiner n’importe quel polygone-à-côtés. sides = 12length = 400 / sides angle = 360 / sides For i = 1 To sides Turtle.Move(length) Turtle.Turn(angle) EndFor En utilisant ce programme, vous pouvez dessiner n’importe quel polygone en modifiant seulement la variable sides (qui veut dire « côtés »). En mettant 4, nous allons obtenir le carré avec lequel nous avons débuté. En mettant une valeur suffisamment grande, disons 50, le résultat obtenu ressemble quasiment à un cercle. Figure 40 – Dessin d’un polygone à 12 côtés En utilisant la technique que nous venons d’apprendre, nous pouvons faire en sorte que la Tortue dessine à chaque fois plusieurs cercles avec un petit déplacement produisant un résultat intéressant. sides = 50 length = 400 / sides angle = 360 / sides Turtle.Speed = 9For j = 1 To 20 For i = 1 To sides Turtle.Move(length) Turtle.Turn(angle) EndFor Turtle.Turn(18) EndFor Le programme ci-dessus a deux boucles For..EndFor, imbriquée l’une dans l’autre. La boucle externe (i=1 jusqu’à sides) est similaire au programme polygone et est en charge du dessin du cercle. La boucle externe (j=1 jusqu’à 20) s’occupe de faire tourner la tortue d’un certain angle après avoir dessiné chaque cercle. Ceci commande à la Tortue de dessiner 20 cercles. Donnant comme résultat le motif suivant. Figure 41 – mouvement de cercles Déplacement Vous pouvez demander à la tortue de ne pas dessiner en appelant la commande PenUp (signifiant « Lever le stylo »). Ceci vous permet de bouger la tortue n’importe où sur l’écran sans dessiner de ligne. En appelant la commande PenDown (signifiant « Baisser le stylo ») la Tortue dessinera de nouveau. Ceci Dans le programme ci-dessus, nous avons fait en sorte que la Tortue se déplace plus vite en ajustant la vitesse à 9. Vous pouvez fixer cette propriété à n’importe quelle valeur entre 1 et 10 pour que la Tortue se déplace à la vitesse que vous souhaitez.peut être utilisé pour créer des effets sympas, comme des lignes en pointillés. Le programme ci-contre utilise cela pout dessiner un polygone en pointillés. sides = 6 length = 400 / sides angle = 360 / sides For i = 1 To sides For j = 1 To 6 Turtle.Move(length / 12) Turtle.PenUp() Turtle.Move(length / 12) Turtle.PenDown() EndFor Turtle.Turn(angle) EndFor De nouveau, ce programme a 2 boucles. La boucle interne dessine une seule ligne en pointillés, pendant que l’externe indique combien de lignes dessiner. Dans notre exemple, nous utilisons 6 pour la variable sides et donc nous obtenons un hexagone en pointillés, comme ci-dessous. Figure 42 – Utilisation de PenUp et PenDownChapitre 9 Les routines Lorsqu’on écrit un programme, on se retrouve souvent dans la situation de devoir exécuter les mêmes commandes encore et encore. Dans ces cas là, écrire plusieurs fois les mêmes lignes de code est une perte de temps. C’est là tout l’intérêt des routines. Une routine est une portion de code que l’on intègre dans un plus grand programme, qui a un but spécifique et que l’on peut appeler de partout dans le programme. Les routines sont identifiées par un nom qui se place juste après le mot clé « Sub » et qui se termine par le mot clé « EndSub ». Par exemple, la portion de code ci-dessous représente une routine de nom PrintTime, et qui imprime l’heure courante dans la fenêtre texte. Sub PrintTime TextWindow.WriteLine(Clock.Time) EndSub Ci-dessous un programme qui inclut la routine PrintTime et l’appelle à plusieurs endroits dans le code : PrintTime() TextWindow.Write("Entrez votre nom : ") nom = TextWindow.Read() TextWindow.Write(nom + ", il est : ") PrintTime() Sub PrintTime TextWindow.WriteLine(Clock.Time)EndSub Figure 43 - Appel d’une routine simple Vous exécutez une routine en appelant |