Bienvenue sur le wiki de Nuit debout, nous sommes le 2980 mars.




Villes/Montluçon/sciences/MO5

De NuitDebout
Aller à : navigation, rechercher

L'ÉCRAN[modifier | modifier le wikicode]

Votre ordinateur est installé et le message de bienvenue affiché à l'écran. Vous allez pouvoir dès à présent commencer — si ce n'est déjà fait — à utiliser votre clavier. Allez-y! Tapez n'importe quoi! Votre ordinateur ne risque absolument rien. Première constatation : les caractères que vous frappez s'affichent immédiatement à l'écran, tandis que le curseur (le petit trait clignotant qui indique la position du prochain caractère) se déplace vers la droite jusqu'à se retrouver sur la ligne suivante.

Choisissez maintenant une touche au hasard et maintenez votre pression un instant. Au bout d'une seconde environ, le caractère frappé est automatiquement répété sans que vous ayez à intervenir. Vous venez de découvrir un aspect important de votre clavier : toutes les touches — exception faite de cNT , RAZ , ENTRÉE et de la touche jaune - sont à répétition automatique. Essayez maintenant d'appuyer sur la touche ENTRÉE . L'ordinateur vous gratifie immédiatement d'un message très bref :

PREMIER CONTACT AVEC LE CLAVIER AZERTYUIOP SDFGHJKLMWXCVBN 111111111111 1111111111111111]1111iS1111]11Y1111111]] Error 2

OKEssayons autre chose. Enfoncez la touche 1 , et laissez descendre le curseur de quelques lignes. A l'aide de la touche — , déplacez-le jusqu'au centre de l'écran, puis tapez BONJOUR. Appuyez de nouveau sur la touche ,j,, et maintenez votre pression. Au bout d'un court instant, le curseur s'arrêtera sur une ligne pour ne plus descendre. A l'aide des touches t , *— et -, déplacez-vous tout autour de l'écran. Vous constatez qu'une assez large portion de ce dernier vous est inaccessible et que, malgré vos efforts, le curseur s'obstine à ne pas vouloir dépasser certaines limites.

Ces limites, ce sont celles de votre plan de travail, de votre "page écran". Pour les rendre encore plus visibles, effacez l'écran par une pression sur la touche Raz , puis tapez la ligne suivante : C('RFFN 1R

Sans vous attarder sur la signification de ces caractères, enfoncez la touche ENTRÉE . Votre page écran apparaît alors entourée d'une bordure orange :

LA PAGE ÉCRAN

Sans entrer dans des explications trop détaillées (nous éluciderons ultérieurement la signification des différents messages d'erreur), sachez que l'ordinateur vous signale par ces mots que votre ligne de caractères est inacceptable et qu'il ne comprend pas ce que vous attendez de lui. Le mot OK vous indique par contre que le M05 est prêt à accepter tout autre énoncé. Ignorons, pour le moment, cétte-invitation, et poursuivons notre découverte de l'écran. Ne trouvez-vous pas que celui-ci devient vraiment trop encombré? Pour nettoyer votre "plan de travail" d'un seul coup, pressez la touche Raz (Remise A Zéro), sur votre gauche. Tout ce qui se trouvait à l'écran, message de bienvenue inclus, est désormais effacé. Le curseur, quant à lui, s'est positionné de lui-même en haut et à gauche, sur la première ligne d'écriture.

Le rectangle bleu clair que vous avez sous les yeux constitue votre plan de travail et se compose de 25 lignes de 40 caractères.

L'instruction PRINT

Vous connaissez maintenant la taille de votre feuille blanche, et vous savez comment l'effacer. Il ne vous reste plus qu'à apprendre à y inscrire quelque chose. Première instruction que nous étudierons, le mot clé PRINT s'obtient soit en frappant successivement les lettres qui le composent, soit en enfonçant la touche[Ï1 [Ï1 puis en pressant le Quelle que soit la méthode pour laquelle vous opterez, tapez PRINT 12345

puis pressez la touche Eftj. Le nombre 12345

17 .'affiche aussitôt au-dessous de votre commande. Poursuivez l'opération en écrivant d'autres nombres ou chiffres qui apparaîtront à l'écran, comme vous l'indique la photo ci-dessous. L'INSTRUCTION PRINT PRINT 12345 12345 OK PRINT 1515 1515 OK PRINT 98765 98765 OK PRINT 9 9 OK PRINT 128 128 OK PRINT 1789 1789 OK

Pour changer un peu, essayons maintenant d'afficher un mot. Commencez par nettoyer l'écran au moyen de la touche Raz , puis écrivez

PRINT BONJOUR

suivi d'une pression sur la touche ENTRÉE . Contrairement à ce que l'on était en droit d'attendre, ce n'est pas le mot BONJOUR qui apparaît mais le chiffre 0. Sans vous décourager pour si peu, recommencez la même opération en encadrant cette fois le mot BONJOUR de guillemets, comme ceci :

PRINT "BONJOUR"

Si vous appuyez sur ENTRÉE , le mot BONJOUR apparaîtra à l'écran. Vous venez de découvrir un second fait important : votre ordinateur fait une distinction entre les nombres et les mots ou, plus exactement, entre les nombres et les "chaînes de carac- tères".

Une chaîne de caractères (on raccourcit très souvent l'expression en disant simplement "chaîne") peut être constituée de lettres, mais aussi de chiffres et de symboles divers. Par exemple, la ligne "*$!&123=", bien que ne comportant aucune lettre et ne signifiant absolument rien, n'en constitue pas moins une chaîne de caractères qui serait affichée telle quelle par la machine. La photo d'écran qui suit illustre ce phénomène au moyen d'exemples variés. Notez que vous pouvez remplacer l'instruction PRINT par le symbole «? » dans vos lignes de programme. Ceci intéressera plus particulièrement les possesseurs de T07/70 qui ne disposent pas, malheureusement pour eux, de la touche BASIC. Il n'existe cependant pas de « raccourcis » pour les autres instructions du BASIC.

AFFICHAGE DES CHAINES

PRINT PRINT 'RZERTYUIOP/IQSDFGHJKLMNXCVBN..@' RZERTYUIOP/iQSDFGHJKLMNXCVBN..@ OK PRINT ~!$$%8'I1 =;Ot~. !*$%&O =;(>1' OK PRINT ;LE 15 FEVRIER 1985, LE 15 FEVRIER 1985 OK PRINT '1515' 1515 OK PRINT '1789' 1789 OK

Ne vous méprenez pas sur l'identité des deux derniers exemples. Vous avez bien affaire à des chaînes de caractères et non à des nombres. Pour mieux apprécier la distinction opérée par votre ordinateur entre nombres et chaînes, entrez successivement les commandes :

PRINT 999 PRINT `999" PRINT -1984" PRIKIT 1 QRn

Vous remarquez aussitôt que les nombres sont décalés d'une case écran vers la droite par rapport aux chaînes.

La différence apparaît encore plus nettement si vous tapez les deux lignes qui suivent : PRINT "2 + 2" PRINT 2 + 2 Dans le premier cas, le M05 affiche tel quel l'énoncé de l'opération; dans le second cas, il n'en affiche que le résultat : DISTINCTION NOMBRES/CHAINES PRINT 999 999 OK PRI NT '9998 999 OK PRINT -1984' 1984 OK PRINT 1984 1984 OK PRINT '2+2' 2+2 OK PRINT 2+2 4 OK 1$I

POSITIONNEMENT A L'ÉCRAN

Nous avons vu au cours du chapitre précédent qu'il était possible de positionner un mot au centre de l'écran au moyen des touches de déplacement du curseur. Cette méthode présente néanmoins l'inconvénient d'être aussi peu rapide que pratique. Nous verrons plus loin qu'il est préférable de réserver les touches de gestion du curseur à un tout autre usage, d'autant plus qu'il existe d'autres manières, plus efficaces, d'afficher un énoncé en un point quelconque de l'écran.

L'instruction SPC

Il est bon de rappeler que l'écran est composé de 25 lignes de 40 colonnes chacune, numérotées respectivement de 0 à 24 et de 0 à 39. Les trois instructions que nous allons présenter dans ce chapitre s'emploient toutes en liaison plus ou moins étroite avec la commande d'écriture PRINT (PRINT signifie "imprimer" en anglais).

Supposons par exemple, que vous souhaitiez afficher le mot ORDINATEUR — d'une longeur de 10 lettres — au milieu d'une ligne. Vous pouvez, dans un premier temps, envoyer 15 blancs à l'écran avant d'écrire votre mot proprement dit. Cela nous donne la ligne suivante :

PRINT SPC(15) '"ORDINATEUR"

Cette commande nécessite quelques explications. En BASIC, le mot clé PRINT indique que quelque chose va être affiché.

Il s'agit dans le cas présent d'une suite de 15 blancs, ou espaces (SPC vient de l'anglais SPaCe qui signifie justement "espace "), suivis du mot ORDINATEUR. Celui-ci s'inscrit donc à partir de la 15e colonne de la ligne courante (on appelle ainsi la ligne sur laquelle se trouve le curseur) et apparaît centré sur la ligne.

L'instruction TAB

Si l'on garde à l'esprit cette division de l'écran en colonnes, on peut décider de positionner directement la première lettre du mot ORDINATEUR sur la quinzième colonne.

Nous allons utiliser pour cela une fonction similaire à celle que l'on rencontre sur la plupart des machines à écrire, et qui porte le nom de " tabulation ". En BASIC, l'idée de tabulation est reprise par le mot clé TAB suivi d'une expression entre parenthèses (en l'occurrence le numéro de la colonne à partir de laquelle on souhaite positionner l'énoncé) et du mot à afficher.

Nous obtiendrons donc la ligne de programme suivante :

PRINT TABI15) "ORDINATEUR"

La photo écran ci-après illustre l'effet produit par les deux instructions étudiées jusqu'ici : 1 ESPACE ET TABULATION I PRINT SPC(15) 'ORDINATEUR' ORDINATEUR OK PRINT TAB(15) 'ORDINATEUR OK ORDINATEUR PRINT SPC(17) 'CENTRE' CENTRE OK PRINT TAB(17) -CENTRE' CENTRE OK PRINT TAB(30) BORD DROIT' BORD DROIT OK

On constate au premier abord que TAB et SPC semblent agir de manière identique, phénomène surprenant dans un langage où chaque mot possède une signification propre.

Différences entre TAB et SPC

Pour mieux comprendre la différence existant entre ces deux commandes, tapez la ligne suivante : PRINT TAB(10) "BONJOUR" SPC(10) -BONSOIR " puis pressez la touche ENTRÉE J. Voici ce que vous devriez obtenir à l'écran :

TAB ET SPC/ÉCRAN 1 PRINT TAB(10) -BONJOUR-eSPC(10) 'BON-OIP I BONJOUR BONSOIR OK Le curseur se positionne sur la dixième colonne de la ligne courante, puis l'ordinateur écrit le mot BONJOUR. Le point virgule placé juste après indique au M05 de rester sur la ligne où il se trouve, et d'afficher ce qui suit — en l'occurrence 10 espaces et le M 19 mot BONSOIR — dans le prolongement de ce qui est déjà inscrit à l'écran. Effacez l'écran au moyen de la touche RAZ, puis entrez la commande suivante : f'RINT SPC(1O) "BONJOUR", TAB(10) - BONSOIR " Voici ce que vous pouvez voir après avoir validé votre ligne : TAB ET SPC/ÉCRAN 2 PEINT SPC(I0I -BONJOUR-; TAB(10) -BON-01 BONJOUR BONSOIR OK 1 LIMITES DES COMMANDES TAB ET SPC 1 PRINT SPC(60) COUCOU- OK COUCOU PRINT SPC(100) -C'EST LOIN° C'EST LOIN OK PRINT SPC(255) -C'EST TRES LOIN- C'EST TRES LOIN OK PRINT TAB(255) POURQUOI? POURQUOI? OK PRINT TAB(8007) PAS DE LIMITES- PAS DE LIMITES OK

La première partie de la commande (SPC(10)) envoie 10 espaces et le mot BONJOUR à l'écran. L'ordinateur rencontre alors le point virgule qui l'oblige normalement à rester sur la même ligne. Vient ensuite le mot TAB qui lui indique de se positionner à la dixième colonne de la ligne courante pour y afficher le mot BONSOIR.

Cette colonne et les suivantes sont déjà occupées par le mot BONJOUR. Que faire quand on est un ordinateur et que l'on reçoit deux ordres contradictoires? Pour obéir en partie, le M05 choisit de positionner son curseur sur la colonne numéro 10 comme cela lui a été demandé, mais sur la ligne suivante au lieu de la ligne courante. Voilà pourquoi les mots BONJOUR et BONSOIR apparaissent l'un au-dessous de l'autre sur votre écran.

La commande SPC envoie des espaces, tandis que TAB place le curseur sur une colonne donnée.

Les limites de TAB et SPC

Observons maintenant ce qui se passe lorsque l'expression entre parenthèses dépasse les limites fixées par l'écran.

Après avoir vidé l'écran de son contenu, tapez les commandes de l'écran qui suit sans oublier de les valider par ENTRÉE .

Vous remarquez qu'il est possible d'envoyer jusqu'à 255 espaces (au-delà de 255 vous seriez gratifié d'un message d'erreur) et que le mot à écrire s'affiche alors quelque six lignes et demie plus loin que la commande (une ligne faisant 40 colonnes, multipliez 40 par 6 et rajoutez 15 pour obtenir 255).

Le même nombre employé avec la commande TAB ne génère par contre aucun saut de ligne. Ce phénomène s'explique comme suit. Le curseur ne pouvant se placer que sur des colonnes comprises entre 0 et 39 le M05 retranche 40 de l'expression entre parenthèses autant de fois que nécessaire jusqu'à ce qu'il trouve un résultat correspondant à un numéro de colonne existant. Ainsi, TAB(255) provoque le positionnement du curseur sur la colonne 15 (255-40-40-40-40-40-40=15).

Vous savez maintenant placer un mot en un endroit quelconque d'une ligne, voire quelques lignes plus bas que la commande d'affichage, mais vous ne pouvez toujours pas centrer un mot à l'écran. Il n'existe malheureusement pas d'équivalent vertical à la commande TAB. Il y a cependant beaucoup mieux.

L'instruction LOCATE

Nettoyez votre écran puis frappez au clavier la ligne ci-dessous :

LOCATE 18,13:PRINT "CENTRE"

Votre mot apparaît parfaitement centré à l'écran. LOCATE signifie en anglais "positionner". La ligne ci-dessus indique à l'ordinateur de placer dans un premier temps le curseur sur la 18e colonne de la 13e ligne, puis, à partir de cette position, d'afficher le mot CENTRE. Remarquez que vous venez d'utiliser deux commandes différentes en une seule ligne. Cela n'a en fait rien d'exceptionnel et ne présente aucune difficulté si vous prenez soin de séparer lesdites commandes par deux points.

Voilà, vous pouvez désormais vous déplacer tout autour de l'écran et afficher mots et messages au gré de votre fantaisie. N'oubliez pas, cependant, que vous devez rester dans les limites de votre page écran et ne pas utiliser la commande LOCATE avec des valeurs étrangères à l'intervalle 0-39 pour les colonnes, et 0-24 pour les lignes.

Lors de la mise sous tension de votre ordinateur, la totalité de l'écran (bordure + page écran) se colore en bleu clair, tandis que le message de bienvenue apparaît dans un bleu plus soutenu. Si certaines personnes ne trouvent rien à dire de cette juxtaposition de couleurs, peut-être souhaiteriez-vous personnellement disposer d'une couleur d'encre plus marquée ?

Qu'à cela ne tienne, il n'y a qu'à en changer! Il vous suffit pour cela de taper au clavier la commande suivante, sans omettre de la faire suivre par une pres- sion sur la touche ENTRÉE

SCREEN 0

Le message de bienvenue, ainsi que le libellé de votre commande s'affichent désormais en noir. Vous venez de modifier la couleur d'écriture — ou couleur d'encre — mais le fond quant à lui demeure inchangé.

Essayez maintenant SCREEN ,3

suivi de ENTRÉE] La page écran se colore en jaune mais la bordure de l'écran ne subit aucune modification.

Si vous préférez travailler sur un fond uniformément jaune, tapez : SCREEN „3

Voilà! De bleu clair votre écran est devenu jaune, tandis que dans le même temps la couleur de votre "encre" passait du bleu au noir.

Pour revenir à votre point de départ, contentez-vous de presser la touche d'initialisation placée au-dessus du clavier, sur la droite du boîtier. L'écran se vide, la bordure devient orange pendant un court instant. On retrouve alors notre écran bleu pâle et le mot OK écrit en bleu.

Pour modifier tour à tour les couleurs d'encre, de fond, et de bordure, vous avez employé par trois fois une même commande suivie de paramètres différents. Pour parvenir au même résultat en une seule opération, frappez au clavier (en toutes lettres, ou par l'intermédiaire des touches[iiE1 et[I) ~•rv Esprit libre (discussion)rfeze~

Vous disposez de nouveau d'une encre noire sur fond jaune uni. La commande SCREEN (SCREEN signifie " écran " en anglais) peut en effet être suivie de trois paramètres séparés par des virgules. Le premier désigne la couleur d'encre, le deuxième celle du fond et le troisième celle de la bordure. Lorsque vous ne souhaitez modifier que la seule bordure, il vous suffit, comme précédemment, de marquer par deux virgules l'emplacement des paramètres inchangés. Si, par contre, vous désirez changer de fond sans toucher aux couleurs d'encre et de bordure, une seule virgule suffira. Tapez successivement :

SCREEN „0 crPFFN 1

sans oublier d'appuyer sur ENTRÉE1 en bout de chaque ligne. Vous remarquez que, dans un premier temps, la bordure devient noire, puis que le fond devient rouge. Examinez de nouveau toutes ces commandes. Que remarquez-vous ? Lorsque vous avez tapé SCREEN, l'encre est devenue noire. Quand vous avez écrit SCREEN „0, c'est la bordure qui est devenue noire. Le chiffre 0 représente en effet la couleur noire, tandis que 3 et 1 désignent respectivement le jaune et le rouge. En effet, les seize couleurs disponibles sur le M05 vous sont accessibles au moyen d'un code utilisant des chiffres de 0 à 15. On distingue par ailleurs deux types de couleurs : les couleurs franches ou vives, au nombre de huit, et les couleurs pastel (huit également), qui ne sont en L2JI1 fait qu'un reflet plus pâle des huit couleurs vives, en encre bleue, sans que soit modifiée pour autant Le tableau ci-dessous vous indique, dans l'ordre, les la couleur d'encre des deux commandes précédentes. chiffres à employer selon les couleurs désirées. Frappez maintenant 5, SiR ÇQ :311}5 COLOR 1 Vous l'aviez sans doute deviné, l'affichage suivant Teintes vives Teintes pastel s'inscrit en rouge. En effet, les codes couleurs sont 0 Noir 8 Gris identiques pour les commandes SCREEN et COLOR. 1 Rouge 9 Rouge pâle Votre écran devrait maintenant afficher trois cou- 2 Vert clair 10 Vert pâle leurs d'encre différentes sur une même couleur 3 Jaune 11 Jaune pâle de fond. 4 Bleu 12 Bleu pâle Ce n'est pas tout. Si vous tapez maintenant 5 Magenta 13 Violet pâle COLOR 7,0 6 Cyan 14 Bleu très pâle le message OK s'écrira en blanc sur fond noir, sans 7 Blanc 15 orange que votre page écran ne vire au noir. Rien ne vous Nantis de ces précieux codes, vous pouvez désor- empêche en effet d'afficher sur une même page mais modifier à votre guise les couleurs d'encre, de écran autant de couleurs d'encre et de fond que fond et de bordure. Si vous vous mettez dans vous le désirez. A titre de démonstration, entrez lés la tête d'essayer toutes les combinaisons possibles, lines suivantes sans omettre de presser la touche autant vous prévenir qu'il n'en existe pas moins de ENT~REE : 16 X 16X 16 = 4096! Bon courage! SCREEN 0,7,7 CLS La commande COLOR 4,6 Vous avez sûrement noté, au cours de vos précé- PONT TAB(20) "BLEU SUR BLEU CLAIR" COLOR 0,3 dents essais, que la commande SCREEN agissait sur PRINT TAB(20) ' NOIR SUR JAUNE" la totalité de l'écran. Cela ne fait peut-être pas votre COLOR 8,15 affaire, car vous auriez pu croire que l'on pou- PRINT TAB(20) "GRIS SUR ORANGE" vait disposer de plusieurs couleurs d'encre, voire de COLOR 3,4 fond, sur une même page écran. Vous ne vous étiez PONT TAB(20) ""JAUNE SUR "" BLEU pas trompé. La chose est tout à fait possible, mais il La commande SCREEN 0,7,7 met en place un fond vous faut pour cela recourir à une commande diffé- uni blanc sur lequel le texte apparaît en noir. La rente, à savoir COLOR. Tapez RAZ puis : deuxième commande, CLS, produit un résultat identique à la touche RAZ . CLS vient en effet de SCREEN 0,7,7 l'anglais "CLear Screen" qui signifie "nettoyer COLOR 4 l'écran". Les commandes COLOR qui suivent modi- N'oubliez pas de valider chacune de vos lignes par fient successivement les couleurs d'encre et de fond. une pression sur la touche IENTRÉE . Dans un pre- Notez qu'une commande TAB provoque l'envoi d'un mier temps, l'écran devient uniformément blanc et certain nombre de caractères en couleur de fond la commande SCREEN apparaît en noir. La com- (20 dans notre exemple). Si vous appuyez sur la tou- mande COLOR 4 est écrite en noir elle aussi, mais, che Raz après avoir entré la dernière instruction, dès que vous enfoncez ENTRÉE , le mot OK s'affiche votre page écran deviendra uniformément bleue. LA COMMANDE COLOR ENCRES ET FONDS ~, w oh` 1 . ri. ra : 2 ag i .y 5 ~~-s`arâ^r4 -' ~`y,,~.~7i.r$, x~ U3: t3l kil ~ _ `., lt Y` ~ - F tes- f ~ mrf : tl '~ "s 1- à:. } r ~.~+v~•ee~ e~` ~ T • Un ordinateur est avant tout une excellente machine à calculer, capable d'effectuer les opérations les plus diverses moyennant quelques contraintes d'écriture. PRINT dans les calculs Commençons immédiatement par l'opération la plus simple, à savoir l'addition. Le signej se trouve placé sur la remière rangée du clavier, a gauche de la touche, ACC . On l'obtient directement en frappant la touche. Si vous essayez d'utiliser le M05 à la manière d'une calculatrice et que vous tapez 5+5 suivi d'une pression sur ENTRÉE , ce n'est pas le résultat qui apparaîtra, mais bel et bien un message d'erreur. Cela ne signifie pas pour autant que votre ordinateur est incapable d'effectuer une opération aussi simple, mais tout bonnement que vous ne lui avez pas demandé d'afficher sa réponse. Recommencez, en tapant cette fois PRINT 5+5 C'est bien le résultat de l'opération qui s'affiche désormais. Maintenant que vous savez comment vous y prendre, entraînez-vous en entrant successivement les additions ci-dessous. N'oubliez pas de presser chaque fois la touche ENTRÉE en fin de ligne : PRINT ET ADDITIONS 10 OK PRINT 1+2+3+4+5+6 21 OK PRINT 1024+19234+2701 22959 OK PRINT 9+34567+56+90 34722 OK PRINT 2+2+2+2+2+2+2+2+2+2+2+2+2+2 28 OK PRINT 19999+111111 131110 OK PRINT 46+23+57+34+12+11+9+675+333+23.5+1 2.075+4.5+31+21.3 1292.38 OK La soustraction La soustraction ne pose pas plus de problème que l'addition. Le signe — se trouve à gauche du signe + et s'obtient lui aussi directement. Ayez recours, là encore, à l'instruction PRINT en tapant par exemple : PRINT 12-4 PRINT 255-100--35 PRINT 747 — 732 La multiplication et la division Jusqu'ici, tout semble se dérouler comme vous en avez l'habitude. Pour la multiplication, cependant, le symbole utilisé ne sera pas le x mais un astéris- que que vous trouverez sur la deuxième rangée de touches en partant du haut du clavier, et sur la troisième touche à partir de la droite. La division, quant à elle, utilise le signe / , placé sur la touche située immédiatement à gauche de celle de l'astérisque. Le dividende (nombre à diviser) se trouve toujours à gauche de la barre oblique. Entrez les exemples ci-dessous, sans oublier de valider chacune de vos commandes par ENTRÉE PRINT 9 * 8 PRINT 2*3*4 PRINT 13* 56 PRINT 421/9 PRINT 9/421 PRINT 1/8 MULTIPLICATION ET DIVISION PRINT 9*8 72 OK PRINT 213*4 24 OK PRINT 13456 728 OK PRINT 421/9 46.7778 OK PRI NT 10/421 023753 OK PRINT 1/8 .125 OK Puissances et racines carrées En plus des quatre opérations traditionnelles, le M05 vous offre la possibilité d'élever un nombre à une certaine puissance, ou encore de calculer sa racine carrée. La représentation des puissances utilise d'ordinaire un exposant placé en haut et à droite du nombre à élever. Le clavier du M05 ne permettant pas une telle disposition, vous devrez recourir au si ne que vous trouverez à gauche de la touche BASIC et que vous obtiendrez à l'aide de la touche jaune. Par exemple, 24 se traduira au clavier par la frappe de PRINT 2"4. Pour calculer la racine carrée d'un nombre, ne cherchez pas le symbole ~ . Vous ne le trouverez pas. Vous devrez, pour effectuer cette opération, recou- rir à la commande SQR (X) où X désigne le nombre dont on recherche la racine carrée. Cette commande n'est pas accessible par le biais de la touche aaSiC 1 23 é e e e e e t r 1 tai. devra donc être frappée au clavier. Pour obtenir la racine carrée de 2, il vous faudra donc écrire : PRINT SQR(2) 1.41421 OK PRINT SQR(16) 4 OK PRINT 5QR(193456) 439.836 OK PRINT SQR(1985) 44.5533 OK PRI NT SQR ( 123456789) 11111.1 OK PRINT SOR(-5) Error 5 OK Si vous employez une expression négative (dernier exemple sur l'écran), vous serez invariablement gratifié d'un message d'erreur. Priorités des calculs Vous pouvez, à l'aide d'une instruction PRINT unique, effectuer plusieurs opérations de natures différentes, mais cela ne va pas sans poser quelques problèmes : 1 CALCULS MULTIPLES 1 PRINT 5+4*6 29 OK PRINT 4+5*6 34 OK PRINT 2*2/8 .5 OK PRINT 1+10/11 1.90909 OK PRINT 3+43[10/12 6.33333 OK Regardez attentivement les deux premières opérations affichées à l'écran. Elles reprennent toutes deux les mêmes chiffres et des symboles arithmétiques identiques, et pourtant leur résultat est différent. 5 + 4 ou 4 + 5, c'est bonnet blanc et blanc bonnet. Quel que soit l'ordre des termes, cela donne toujours 9. Pour vous peut-être, mais pour l'ordinateur il en va autrement. Celui-ci classe en effet les différents types d'opéra- tions selon un ordre précis et les exécute en fonction de leur priorité, quelle que soit leur position dans l'expression à calculer. Lorsque vous saurez que la multiplication et la division passent avant l'addition et la soustraction, vous comprendrez mieux la différence de résultats entre 4 + 5* 6 et 5 + 4* 6. Dans le premier cas, le M05 calcule d'abord 5* 6 avant de lui ajouter 4. Dans le second cas, l'ordre des calculs est identique mais la multiplication (4* 6) a pour résultat 24 et non 30. A priorité égale, l'ordinateur travaille de gauche à droite. Signalons que l'ordre des priorités peut être modifié par l'emploi des parenthèses : l'ordinateur privilégiera toujours l'expression entre parenthèses, même s'il s'agit d'une addition ou d'une soustraction. Limites et notation scientifique Il vous reste à découvrir un dernier aspect de l'écriture des nombres sur le M05. Observez l'écran ci-dessous : LIMITES ET NOTATION SCIENTIFIQUE PRINT 100 100 OK PRINT 1000 1000 OK PRINT 1.0000 10000 OK PRINT 100000 100000 OK PRINT 1000000 1 E+06 OK PRINT 100000000 IE+08 OK PRINT 10+39 Error 6 OK Les quatre premiers nombres sont affichés dans une représentation qui vous est familière, mais il en va différemment des deux suivants. Pour tous les nombres de plus de six chiffres, le M05 utilise ce que l'on appelle la «notation scientifique », à savoir que le nombre est représenté sous la forme Mantisse et Exposant. Dans notre exemple, 1 représente la mantisse et 06 l'exposant. Comme il s'agit ici d'un exposant positif, il est précédé du signe +. 1 E + 6 représente donc un 1 suivi de 6 zéros. De la même manière 10139 devrait correspondre à un 1 suivi de 39 zéros. Pourtant, l'ordinateur se refuse à l'afficher. Le message qu'il envoie à la place signifie que vous avez dépassé les limites auxquelles il est astreint. Le M05 ne peut en effet manipuler des nombres supérieurs à 1038. Cela vous laisse quand même une marge de manoeuvre suffisamment importante pour effectuer toutes sortes d'opérations. f'RINT SOR (2) RACINES e i- Un ordinateur est avant tout une excellente machine à calculer, capable d'effectuer les opérations les plus diverses moyennant quelques contraintes d'écriture. PRINT dans les calculs Commençons immédiatement par l'opération la plus simple, à savoir l'addition. Le signe se trouve placé sur la remière rangée du clavier, a gauche de la touche Acc . On l'obtient directement en frappant la touche. Si vous essayez d'utiliser le M05 à la manière d'une calculatrice et que vous tapez 5+5 suivi d'une pression sur j ENTRÉE , ce n'est pas le résultat qui apparaîtra, mais bel et bien un message d'erreur. Cela ne signifie pas pour autant que votre ordinateur est incapable d'effectuer une opération aussi simple, mais tout bonnement que vous ne lui avez pas demandé d'afficher sa réponse. Recommencez, en tapant cette fois PRINT 5 + 5 C'est bien le résultat de l'opération qui s'affiche désormais. Maintenant que vous savez comment vous y prendre, entraînez-vous en entrant successivement les additions ci-dessous. N'oubliez pas de presser chaque fois la touche rENTRÉE1 en fin de ligne : PRINT ET ADDITIONS 10 OK PRINT 1+2+3+4+5+6 21 OK PRINT 1024+19234+2701 22959 OK PRINT 9+34567+56+90 34722 OK PRINT 2+2+2+2+2+2+2+2+2+2+2+2+2+2 28 OK PRINT 19999+111111 131110 OK. PRINT 46+23+57+34+12+31+9+675+333+23.5+1 2.075+4.5+31+21.3 1292.38 OK La soustraction La soustraction ne pose pas plus de problème que l'addition. Le signe — se trouve à gauche du signe + et s'obtient lui aussi directement. Ayez recours, là encore, à l'instruction PRINT en tapant par exemple : PRINT 12-4 PRINT 255-100-35 PRINT 747 — 732 La multiplication et la division Jusqu'ici, tout semble se dérouler comme vous en avez l'habitude. Pour la multiplication, cependant, le symbole utilisé ne sera pas le x mais un astérisque que vous trouverez sur la deuxième rangée de touches en partant du haut du clavier, et sur la troisième touche à partir de la droite. La division, quant à elle, utilise le signe / , placé sur la touche située immédiatement à gauche de celle de l'astérisque. Le dividende (nombre à diviser) se trouve toujours à gauche de la barre oblique. Entrez les exemples ci-dessous, sans oublier de valider chacune de vos commandes par ENTRÉE PRINT 9 * 8 PRINT 2* 3* 4 PRINT 13* 56 PRINT 421/9 PRINT 9/421 PRINT 1/8 MULTIPLICATION ET DIVISION PRINT 918 72 OK PRINT 21314 24 OK PRINT 13K56 728 OK PRINT 421/9 46.7778 OK PRI NTIO/421 023753 OK PRINT 1/8 125 OK Puissances et racines carrées En plus des quatre opérations traditionnelles, le M05 vous offre la possibilité d'élever un nombre à une certaine puissance, ou encore de calculer sa racine carrée. La représentation des puissances utilise d'ordinaire un exposant placé en haut et à droite du nombre à élever. Le clavier du M05 ne permettant pas une telle disposition, vous devrez recourir au signe que vous trouverez à gauche de la touche ASICJ et que vous obtiendrez à l'aide de la touche jaune. Par exemple, 2 se traduira au clavier par la frappe de PRINT 2 4. Pour calculer la racine carrée d'un nombre, ne cherchez pas le symbole ,j. Vous ne le trouverez pas. Vous devrez, pour effectuer cette opération, recourir à la commande SÛR (X) où X désigne le nombre dont on recherche la racine carrée. Cette commande n'est pas accessible par le biais de la touche Basic 23 1 é e e e e e t r

et devra donc être frappée au clavier. Pour obtenir la racine carrée de 2, il vous faudra donc écrire : PRINT SOR(2) 1.41421 0K PRINT 505116) 4 OK PRINT 50R(193456) 439.836 OK PRINT 50R(1985) 44.5533 OK PRINT SOR(123456789) 11111.1 OK PRINT 50R(-5) Error 5 0K Si vous employez une expression négative (dernier exemple sur l'écran), vous serez invariablement gratifié d'un message d'erreur. Priorités des calculs Vous pouvez, à l'aide d'une instruction PRINT unique, effectuer plusieurs opérations de natures différentes, mais cela ne va pas sans poser quelques problèmes : CALCULS MULTIPLES PRINT 5+43¢6 29 OK PRINT. 4+5x6 34 OK PRINT 2[2/8 .5 OK PRINT 1+10/11 1.90909 OK PRINT 3+43[10/12 6.33333 OK Regardez attentivement les deux premières opérations affichées à l'écran. Elles reprennent toutes deux les mêmes chiffres et des symboles arithmétiques identiques, et pourtant leur résultat est différent. 5 + 4 ou 4 + 5, c'est bonnet blanc et blanc bonnet. Quel que soit l'ordre des termes, cela donne toujours 9. Pour vous peut-être, mais pour l'ordinateur il en va autrement. Celui-ci classe en effet les différents types d'opéra- tions selon un ordre précis et les exécute en fonction de leur priorité, quelle que soit leur position dans l'expression à calculer. Lorsque vous saurez que la multiplication et la division passent avant l'addition et la soustraction, vous comprendrez mieux la différence de résultats entre 4 + 5 * 6 et 5 + 4 * 6. Dans le premier cas, le M05 calcule d'abord 5 * 6 avant de lui ajouter 4. Dans le second cas, l'ordre des calculs est identique mais la multiplication (4 * 6) a pour résultat 24 et non 30. A priorité égale, l'ordinateur travaille de gauche à droite. Signalons que l'ordre des priorités peut être modifié par l'emploi des parenthèses : l'ordinateur privilégiera toujours l'expression entre parenthèses, même s'il s'agit d'une addition ou d'une soustraction. Limites et notation scientifique Il vous reste à découvrir un dernier aspect de l'écriture des nombres sur le M05. Observez l'écran ci-dessous : 1 LIMITES ET NOTATION SCIENTIFIQUE 1 PRINT 100 100 0K PRINT 1000 1000 OK PRINT 10000 10000 OK PRINT 100000 100000 OK PRINT 1000000 1E+06 OK PRINT 100000000 1E+08 OK PRINT 10t39 Error 6 OK Les quatre premiers nombres sont affichés dans une représentation qui vous est familière, mais il en va différemment des deux suivants. Pour tous les nombres de plus de six chiffres, le M05 utilise ce que l'on appelle la «notation scientifique», à savoir que le nombre est représenté sous la forme Mantisse et Exposant. Dans notre exemple, 1 représente la mantisse et 06 l'exposant. Comme il s'agit ici d'un exposant positif, il est précédé du signe +. lE + 6 représente donc un 1 suivi de 6 zéros. De la même manière 10T39 devrait correspondre à un 1 suivi de 39 zéros. Pourtant, l'ordinateur se refuse à l'afficher. Le message qu'il envoie à la place signifie que vous avez dépassé les limites auxquelles il est astreint. Le M05 ne peut en effet manipuler des nombres supérieurs à 1038. Cela vous laisse quand même une marge de manoeuvre suffisamment importante pour effectuer toutes sortes d'opérations. PRINT SOR (2) RACINES e 2~. PREMIER PROGRAMME Vous vous êtes contenté jusqu'à présent d'utiliser PREMIER PROGRAMME : AFFICHAGE votre ordinateur en «mode direct». Cela signifie que vous avez tapé certaines commandes, que vous les avez fait entrer dans la mémoire du M05 (touche ENTRÉE) où elles ont été interprétées puis exécu- tées sans qu'il n'en subsiste après cela la moindre trace. Ce mode d'utilisation se révèle très rapide- ment limité car l'on ne saurait concevoir une séquence complexe d'opérations qu'il faudrait reta- per à chaque utilisation. P.FÉTtIER PPOGRr MME Oiitl4.441F~«4Q44444.4 Le mode programme Pour passer du mode direct — ou mode utilisateur — au mode programme, il vous suffit de faire pré- céder vos instructions d'un numéro de ligne. Celui- ci indiquera à l'ordinateur l'ordre selon lequel les différentes commandes seront exécutées. Commencez par taper les lignes de la photo d'écran ci-dessous, sans omettre d'enfoncer la touche ENTRÉE pour permettre au M05 de valider chacune de vos lignes. Que s'est-il passé ? Vous avez tout simplement demandé à l'ordinateur d'exécuter le programme que vous venez d'entrer. Le M05, en esclave obéis- sant, a commencé par effacer l'écran (ligne 10), puis a exécuté l'une après l'autre — en suivant l'ordre PREMIER PROGRAMME

des numéros de ligne — les commandes que vous lui avez données. 10 CLS L'exécution une fois terminée, le M05 affiche le mot 3a 5CREEN ei : i0 OK, indiquant par là qu'il se tient prêt à répondre 40 PRINT 'PREMIER PROGRAMME' à de nouveaux ordres. Si vous vous demandez où a 50 LOCATE 11,2 6@ PRINT ~tt[IF i'7E.3E~tt 1[ii:lEt~i~ bien pu passer votre programme, ne vous en faites pas trop. Il est toujours présent dans la mémoire de l'ordinateur. Pour vous en assurer, relancez son exécution. Le programme se déroule de la même manière que précédemment, preuve que l'ordina- teur ne l'a pas détruit. Vous pouvez répéter l'opéra- tion aussi souvent que vous le souhaitez. Le résultat demeurera inchangé. Avant de passer à un autre programme, il convient d'effacer celui qui se trouve déjà en mémoire (le pro- gramme courant). Utilisez pour cela la commande NEW. Ne la cherchez pas sur le clavier, elle ne s'y Que remarquez-vous aussitôt? Lorsque vous avez trouve pas. Il ne s'agit pas là d'un oubli du entré au clavier 10 CLS et pressé la touche ENTRÉE , . constructeur mais plutôt d'une sage précaution, car il ne s'est rien produit. Ne vous en préoccupez pas cette commande détruit tout programme existant en et poursuivez la frappe du programme. Vous devriez mémoire. Une fausse manoeuvre, un doigt qui se reconnaître au passage les commandes SCREEN, trompe de touche, et tout s'effacerait. Validez votre PRINT et LOCATE que vous avez eu l'occasion commande par ENTRÉE , puis essayez une nouvelle d'employer au cours des pages qui précèdent. fois d'exécuter le programme précédent. Cette fois, Lorsque vous aurez recopié ce court programme l'ordinateur n'affiche qu'un banal OK. L'ancien pro- dans son intégralité, tapez le mot clé RUN en gramme a bel et bien été détruit. mode direct. Entrez maintenant le programme suivant, un peu Rappelons ici que les mots clés du BASIC sont acces- plus long. Ce programme nécessitant quelques éclair- sibles par l'intermédiaire de la touche sISi. c Pour cissements, commençons par l'examiner dès le RUN , enfoncez donc [BASIC , puis frappez la lettre début. Vous découvrez en ligne 1 le mot clé REM R . N'oubliez pas de valider votre commande par suivi d'un message — en l'occurrence le titre donné ENTRÉE . Voici ce que vous devriez voir apparaître: au programme.

} I 25 PROGRAMME AVEC VARIABLES 10 REM LES VARIABLES 30 REM Lem- Mariables NumérlOues _0 A=4 40 E=8 50 C=A+B 60 PRINT C

70 REM Les Variables Cnaines

80 À$= BON 90 8$= JOUR 100 C$=°SOIR° 110 D$=$+0$ 120 E$=A$+C$ 130 PRINT D$ 140 PRINT E$ REM est l'abréviation du mot REMarque. Cette commande précise au M05 de ne pas exécuter ce qui suit mais de passer plutôt à la ligne d'instruction (numérotée) au-dessous. REM autorise donc l'insertion de commentaires, de remarques, de messages divers à l'intérieur d'un programme. Cette commande permet à l'auteur de documenter son programme, de manière à le rendre aussi clair que possible et à mettre en valeur les différents «modules» qui le composent. Le programme que vous venez de taper comprend trois de ces instructions. Ce premier point élucidé, penchons-nous à présent sur les lignes 30 et 40. Qu'y trouve-t-on ? Deux lettres de l'alphabet suivies chacune d'un signe = et d'une valeur numérique. A et B sont appelées «variables numériques ». Une variable numérique n'est autre qu'une étiquette donnée à une case mémoire de l'ordinateur et renfermant une certaine valeur. On choisit de représenter un nombre par une lettre ou un groupe de lettres qui identifient ce nombre. On dit que l'on «affecte une valeur à une variable ». Celle-ci peut alors être utilisée comme s'il s'agissait du nombre lui-même. D'où la possibilité d'additionner deux variables et d'allouer la somme obtenue à une troisième variable (ligne 50). Le total peut alors être affiché au moyen d'une simple instruction PRINT. Les variables A, B et C gardent leur valeur respective jusqu'à ce qu'une nouvelle affectation ne vienne en modifier le contenu. Une fois le programme exécuté, tapez en mode direct : PRINT A Le nombre X, valéur allouée à A par le programme, s'affiche à l'écran. Écrivez maintenant : A= 1.798 Puis refaites PRINT A. Vous obtenez désormais pour résultat 1798. Revenons à notre programme, et jetons un coup d'oeil aux lignes 80 et suivantes. A$, B$ et C$ sont des variables chaînes. Elles se différencient, au niveau de l'écriture, de leurs congénères numériques par la présence du signe dollar ($). Les variables chaînes représentent — comme leur nom l'indique — des chaînes de caractères. Deux variables chaînes peuvent être additionnées — on parle alors plus volontiers de «concaténation» —, et le résultat obtenu est affecté à une troisième variable (D$ ou E$ dans notre exemple). La concaténation n'altère en rien le contenu des variables originales. L'emploi des variables nécessite quelques précautions, dont la principale est la suivante : à une variable numérique ne peut correspondre qu'une autre valeur numérique, tandis qu'une variable chaîne ne saurait se voir affecter qu'une chaîne de caractères. Pour en avoir confirmation, tapez les lignes suivantes, puis RUN : LES VARIABLES : PRÉCAUTIONS D'EMPLOI 10 REM LES VARIABLES 20 REM PRECAUTIONS D'EMPLOI 30 REM DEMONSTRAT ION 40 A$=1985 50 PRINT °NOUS 501111ES EN °+A$ RUN Error 13 in 40 OK A l'exécution, le message «Error 13» apparaît à l'écran. L'ordinateur vous fait ainsi part de son incapacité à exécuter votre commande, car vous avez associé une chaîne de caractères à une variable numérique. Vous pouvez donner à vos variables des noms qui en définissent la fonction, mais vous devrez néanmoins les choisir avec soin. Si vous entrez et exécutez les lignes ci-dessous, l'ordinateur vous gratifiera d'un message d'erreur : 10 NOM$=""DUPONT" 20 NOTE=10 30 PRINT NOM$ : PRINT NOTE Le nom de variable NOTE inclut les lettres NOT qui constituent «un mot réservé», c'est-à-dire un mot appartenant au vocabulaire BASIC de la machine, et interprété comme une instruction. Une variable nommée «PRINTEMPS» serait pareillement rejetée car contenant les lettres formant l'instruction PRINT. 26 AFFICHAGE DUN PROGRAMME Vous connaissez maintenant les techniques d'écri- retaper tout le programme. Contentez-vous de frap- ture et d'exécution d'un programme, mais vous igno- per au clavier rez encore comment rappeler à l'écran — en vue 25 INT (1"'>k~k~k~K>k~k~k~k~k>k>k"" PR TA 0) d'une éventuelle modification ou correction — les Cela fait, effacez l'écran, puis listez votre pro- lignes que vous venez de taper. C'est ce que nous allons étudier de ce pas. gramme. Vous pouvez constater que la ligne est venue s'intercaler d'elle-même entre les lignes et Liste complète d'un programme vous comprenez sûrement mieux maintenant pour- quoi les lignes des programmes que vous avez reco- Commencez par taper le court rogramme ci-des- piés étaient toutes espacées de 10 en 10. Il ne s'agit sous, puis exécutez le par un RuN pas d'un souci d'esthétisme, mais bien d'une sage Une fois l'exécution terminée (le programme précaution. l jra ou- reprend des commandes déjà a rises), nettoyez l'on ' Il arrive e fréquemment que doive Il arriveeffet n l'écran au moyen de la touche Raz , puis tapez d'un ter une ou plusieurs lignes au milieu dun pro LIST (vous pouvez e alement presser simultané gramme déjà existant. En utilisant une progression ment les touches TBASLCIet ©). La «liste» de votre par bonds successifs de 10, vous êtes assuré de pou- programme réapparaît à l'écran : voir écrire jusqu'à neuf nouvelles lignes entre deux lignes de programme déjà tapées. LISTE DU PROGRAMME PRÉCÉDENT Liste sélective Lister un programme dans son intégralité permet, entre autres choses, de revenir sur ce qui a été I ST fait pour d'éventuelles modifications. Mais que faire 10 REM LI =,TE D'UN PROGRAMME lorsque votre programme comporte plus de 24 lignes 2l CLS et ne peut, par conséquent, tenir entièrement dans 3 T PRINT T i„B i 10) °L I ,TE D'„N pROGRAti I1E” 40 PRI NT TABi10) °31 l[ nrn acesa nsxp ssss° votre page écran ? Êtes-vous condamné à ne pouvoir 50 LOCAT E©. 10 60 PRINT °L'1n5truCtion LI-°-.T' corriger que la fin de vos programmes? Fort heu 0 PPINT TAn~1o) affl~ne la )i5=.e .~e 80. PRINT TAB)12) 'votre pr-oar.,rne-" reusement : non. uh Pour en apprendre davantage sur la commande LIST, entrez le programme ci-dessous après avoir pris soin d'effacer le précédent par un NEW afin de ne pas vous retrouver avec des lignes appartenant à votre précédent programme.

LISTE SÉLECTIVE : PROGRAMME Vous remarquez que les instructions apparaissent décalées par rapport au numéro de ligne. 10 REM LISTE SELECT IVE Votre programme, qui se trouvait en mémoire, vient 20 CL5 30 PR I NT T AB ( 16) 'TITRE 1 d'être recopié à l'écran par la commande LIST. Cela 30 PRINT TAO)16) s0 L0CATE 13,6 60 PRINT ° Première partie° ne signifie pas pour autant qu'il a disparu de 70 PRINT TAB(13) -0e ce prograrmme' la mémoire. 80 END Effacez de nouveau l'écran, puis refaites usT . Vous pouvez répéter cette opération indéfiniment. Votre programme restera présent en mémoire tant que vous ne le détruirez pas par une commande NEW ou que vous ne débrancherez pas votre ordinateur. Nous avons vu au chapitre précédent que cette com- mande NEW effaçait le programme courant, et qu'il était préférable par conséquent de n'y recourir qu'à bon escient.

Si vous avez exécuté le programme précédent, vous avez peut-être pensé qu'il aurait été préférable de Cela fait, tapez RAZ, puis LIST 30. Seule la ligne 30 mettre le titre en valeur par une seconde ran- apparaît à l'écran. Poursuivez vos investigations en gée d'astérisques, tapant successivement LIST-30 puis LIST 30-. Votre Pour rajouter cette nouvelle ligne, pas besoin de écran devrait ressembler à ceci


z~ LISTE SÉLECTIVE : AFFICHAGE LIST 30 30 PRINT TAB(16) -TITRE 1-OK LIST -30 10 REM LISTE SELECTIVE 20 CL5 30 PRINT TAB(16) -TITRE 1' OK LIST 30- 30 PRINT TAB(16) 'TITRE 1: 40 PRINT TAB(16) 50 LOCATE 13.6 60 PRINT ;Première partie 70 PRINT T.AB(13) de ce programme' 80 END OK Dans le premier cas (LIST-30), toutes les lignes s'affichent jusqu'à la ligne 30 incluse. Dans le second exemple, n'apparaissent que les lignes 30 et suivantes. Il vous est désormais possible de ne lister votre programme que partiellement. Exécution partielle Ajoutez maintenant les lignes suivantes au programme précédent : EXÉCUTION PARTIELLE : PROGRAMME LIST 10 REM LISTE SELECTIVE 20 CLS 30 PRINT TAB(16) TITRE 1 4.0 PRINT TAB(16) 50 LOCATE 13.6 60 PRINT Première partie' 70 PRINT TAB(13) -de ce programme 80 END OK 90 LOCATE 16,10 100 PRINT 'TI.TRE 2' 110 PRINT TAB(16) 120 LOCATE 13,16 130 PRINT ' Deuxiême partie' 140 PRINT T AB(13) °de ce programme' Une fois achevé cet additif, tapez RUN. Vous voyez apparaître un titre libellé TITRE 1 et encadré d'astérisques. De nos nouvelles lignes, aucune trace. Assurez-vous qu'elles sont toujours présentes en mémoire par une instruction LIST. Il ne manque aucune ligne, et pourtant le programme ne s'est pas déroulé jusqu'au bout. L'explication de ce phénomène se trouve en 80. Le mot clé END indique en effet à l'ordinateur que le programme s'arrête là, et qu'il est inutile et interdit d'aller plus avant. Tapez maintenant RUN 90. Le second titre, TITRE 2, s'affiche aussitôt, sans que ne s'exécute la première partie du programme. Il n'y a là aucun mystère. En tapant RUN vous avez tout simplement demandé au M05 de se brancher directement à la ligne 90 et de commencer par là l'exécution du programme. Il est possible, de la sorte, de lancer l'exécution d'un programme à partir de n'importe quelle ligne existante, mais cela ne se fait pas toujours sans problèmes. Sachez en effet qu'une instruction RUN remet à zéro toutes les variables d'un programme. A titre d'exemple, entrez ce programme, puis lancez-en l'exécution par un RUN 30 : PERTE DES VARIABLES : PROGRAMME 10 REM ATTENTION AU RUN PARTIEL 20 N3='MICRO-1NFORMATIQUE' 30 LOCATE 16,4:PRINT 'BONJOUR'. 40 LOCATE 12,8:PRINT;A TOUS LES FANAS-50 LOCATE 19.12:PRINT~DE' 60 LOCATE 11,16:PRINT N$ La variable N$, initialisée en ligne 20, est ignorée par le RUN 30. L'ordinateur ne connaît pas, en effet, le contenu de N$ et lui affecte tout naturellement la valeur « » (chaîne vide), d'où l'affichage tronqué qui en résulte (ligne 50). PERTE DES VARIABLES : AFFICHAGE RUN 30 BONJOUR A TOUS LES FANAS DE OK X 28 LE DÉPISTAGE DES ERREURS La programmation est un passe-temps attractif et très prenant où les causes d'erreurs sont légion. On peut distinguer deux types d'erreurs. D'un côté, les fautes de conception proprement dite, qui nécessitent souvent un remaniement complet des programmes et dépassent le cadre de cet ouvrage. De l'autre, les fautes de simple forme, parmi lesquelles on peut citer les fautes d'orthographe, les erreurs de syntaxe, les oublis, les omissions, autant d'erreurs communes à tous les programmeurs, qu'ils soient débutants ou avertis, L'erreur est humaine, et le M05, quoique intransigeant sur l'orthographe et la syntaxe, vous aidera à corriger toutes ces fautes qui, si minimes soient-elles, nuisent au bon fonctionnement de bien des programmes. L'éditeur pleine page du M05 Sur de nombreux ordinateurs familiaux, la correction des erreurs nécessite souvent une certaine gymnastique. Le M05 dispose, pour le plus grand bonheur de tous, d'un «éditeur pleine-page» d'une facilité d'emploi déconcertante. Rien ne valant un exemple concret, commencez par entrer le programme ci-dessous sans y apporter aucune modification : PROGRAMME COMPORTANT DES ERREURS 10 CL5 210 PRINT'=_----__-=o====______=----__ 30 PRINT TAB(26) °CORRECTION° 40 LOCATE 5.12 50 PINT ° L'EDITEUR DU N05 EST FANTA5TIGU E° Si vous avez assimilé les enseignements des chapitres précédents, vous aurez certainement repéré de vous-même les fautes les plus flagrantes. Quoi qu'il en soit, lancez l'exécution de ces quelques lignes par un. Vous pouvez constater que trois points au moins sont à revoir. Premièrement, le nombre des signes «=» est trop important, quatre d'entre eux débordant sur la ligne suivante. Deuxièmement, le titre est complètement décalé vers la droite de l'écran. Troisièmement enfin, l'ordinateur nous signale qu'une erreur portant le numéro 2 s'est glissée dans la ligne 50. Vu la longueur de ce programme, vous pourriez PROGRAMME ERRONÉ : AFFICHAGE - CORRECTION ErrOr 2 in 50 OK le retaper intégralement dans la mesure où l'ordinateur ne retiendrait que la version « rectifiée» des lignes défectueuses. Il y a cependant mieux à faire comme nous allons le voir. A l'aide de la touche M — à droite de votre clavier — faites remonter le curseur jusqu'à atteindre la ligne 20. Utilisez maintenant la touche pour amener le curseur sous le premier signe . Vous trouverez en bas à droite de votre clavier une touche portant l'inscription EFF . Pressez-la à quatre reprises. Toute la fin de la ligne 20 se déplace de quatre colonnes vers la gauche et les quatre premiers signes = sont effacés. Sans déplacer le curseur, validez votre ligne ainsi rectifiée par une pression sur [ENTRÉE]. Toujours à l'aide de la touche, positionnez le curseur sous le 2 de 20, puis frappez 35 suivi de ENTRÉE . Pour mieux comprendre ce que vous venez de faire, tapez LI1RAZ puis LIST : PREMIÈRE CORRECTION LI ST 10 CL5 20 PRINT=______________________________ 30 PRINT TAS)26) °CORRECT ION° 35 PRINT==-___—_===-__----_---___ 40 LOCATE5.12 50 PINT ° L'EDITEUR DU P05 EST FANTA5TIGU E° OK

r 1 29 Vous pouvez constater que votre ligne 20 existe toujours et que votre programme s'est enrichi d'une nouvelle ligne portant le numéro 35. En tapant 35 puis IENTRÉELvous avez tout bonnement recopié la ligne 20. Remontez maintenant en ligne 30 et placez le curseur sous le 2 de 26. Remplacez ce chiffre par 1, puis frappez la touche ENTRÉE . Vous pouvez désormais nettoyer l'écran et rééxécuter votre programme : PROGRAMME APRÈS DEUX CORRECTION CORRECTION sous le « I » puis enfoncez la touche marquée INS . Votre ligne se décale d'un cran vers la droite, libérant ainsi un espace suffisant pour insérer la lettre « R ». Ceci fait, tapez successivement ENTRÉE , RAZ et la commande RuN . Vous devriez obtenir l'affichage précédent. Les codes d'erreurs Vous avez eu l'occasion, au cours des pages précédentes, et pas plus tard que tout de suite, de vous trouver confronté à un message du type « Error X in Y ». Il s'agissait là de l'un des multiples messages d'erreur du M05 dont le seul but était de vous renseigner sur la nature de la faute commise à la ligne spécifiée. Conçus pour vous aider à éliminer de vos programmes les erreurs et à faciliter leur localisation, ces messages présentent néanmoins l'inconvénient de ne pas être livrés «en clair », et d'obliger ainsi l'utilisateur à se référer sans cesse à un tableau explicatif similaire à celui-ci : .- É s e 3 i

TABLEAU DES CODES D'ERREUR Ce tableau, loin d'être exhaustif, rassemble quelques-uns des messages d'erreur les plus fréquemment rencontrés. M05 T07 Signification 2 SN Vous avez commis une erreur de syntaxe dans une instruction (par exemple oublié un R à PRINT). 6 OV Vous avez employé un nombre trop grand, ou multiplié deux nombres qui fournissent un résultat supérieur aux limites du M05. 7 OM Vous avez épuisé les 32 ou 48 Ko de mémoire vive qui vous sont alloués. 8 UL Vous avez utilisé un numéro de ligne qui n'existe pas (dans une commande GOTO par exemple). 12 ID Vous avez employé en mode direct une ins- truction qui ne peut être utilisée qu'au sein d'un programme. 17 CN Vous avez demandé à l'ordinateur de reprendre l'exécution d'un programme après une interruption, ce qui se révèle impossible. Error 2 in 50 OK Le titre « CORRECTION » apparaît centré et .encadré de deux rangées de signes « = ». L'erreur de la ligne 50 n'en a pas pour autant disparu. Nettoyez l'écran, listez votre programme et placez le curseur en 50. Lisez attentivement cette ligne. Il manque un «R» au mot PRINT ce qui rend votre commande incompréhensible à l'ordinateur. Notez que ceci. ne vous arriverait pas si vous utilisiez la touche BASIC qui évite de retaper le mot clé en entier. A l'aide de la touche «-->», positionnez le curseur PROGRAMME CORRIGÉ: AFFICHAGE CORRECTION L'EDITEUR DU M05 EST FANTASTIQUE OK Suppression de lignes Vous pouvez supprimer une ligne inutile en tapant son numéro suivi de I ENTRÉ, cette opération se révèle rapidement lassante lorsque le nombre de lignes à effacer devient trop élevé. Le M05 dispose fort heureusement d'une commande, qui vous permet d'éliminer d'un programme autant de lignes que vous le désirez. Tapez par exemple : DELETE 40 suivi de [ENTRÉE , puis listez votre programme. La ligne 40 a disparu. Poursuivez avec DELETE 10-35 . Votre programme ne comporte plus qu'une seule ligne. %JMU V LV/`tI UVL VL%J 1 1 1VVI I IVIIVILV' Vous savez créer, écrire, exécuter, afficher, et même corriger vos programmes, mais ceux-ci s'effacent de la mémoire de l'ordinateur dès que vous tapez NEW ou que vous débranchez le M05. Pour le moment, la longueur des programmes étudiés est telle que vous pouvez les ré-écrire sans que la perte de temps soit trop importante. Mais il n'en sera pas toujours ainsi. D'ici peu de temps, vous écrirez des programmes plus conséquents et, partant, plus longs à rentrer au clavier. Vous trouverez alors peu amusant le fait d'avoir à tout retaper intégralement. Heureusement, vos oeuvres vont pouvoir être conservées pour la postérité au moyen d'une simple cassette et d'un magnétophone. PROGRAMME A ENREGISTRER 10 REM ESSAI MAGNETOPHONE 20 CLS 30 SCREEN 4,3,0 40 LOCATE 11.6 50 PRINT ' ES5AI MAGNETOPHONE' 60 PRINT TABtII) ++++++++++? +++++++` 70 LOCATE 7.14 80 PRINT Ce programme est destiné A` 90 PRINT TAB(7) `vér.rier le Fonctionnera ent- 100 PRINT TAH(71 du lecteur de cassette s.-- Le LEP Si vous pouvez employer à peu près n'importe quel type de cassettes — le fabricant recommande néanmoins des cassettes à oxyde de fer —, il n'en va pas de même du magnétophone. Le M05 n'acceptera de sauvegarder vos créations que si vous le dotez d'un Lecteur-Enregistreur de Programme (LEP) Thomson MK 50-050. A première vue, rien ne distingue ce magnétophone d'un vulgaire lecteur de cassettes. Pourtant, si vous y regardez de plus près, vous verrez que le MK 50-050 ne possède aucun réglage du niveau du son. Vous ne pourrez pas l'utiliser pour écouter vos airs préférés, car il a été conçu uniquement pour l'enregistrement et la relecture de programmes mis au point sur le M05. Si vous possédiez auparavant un T07 (grand frère du M05) muni de son lecteur de cassette, vous ne pourrez pas non plus le connecter au M05. Votre LEP est doté d'origine d'un cordon à l'extrémité duquel se trouve une prise DIN 5 broches. Cette prise se raccorde au panneau droit du M05, là où est gravé le symbole o__o . Lors du raccordement, le M05 et le LEP devront tous deux être hors tension. Le MK 50-050 est fourni avec un petit transformateur, qui se branche sur le secteur et vient se raccorder à l'unique prise du magnétophone. Sauvegarde des programmes Une fois vos connexions établies et vérifiées, insérez une cassette dans le LEP en appuyant sur la touche repérée par un petit carré ^ . Elle sert à la fois à arrêter l'appareil et à ouvrir le volet porte-cassette. Une fois votre cassette en place, faites défiler la bande — touche m> — pour laisser passer l'amorce. Notez sur la jaquette de votre cassette le numéro qui s'affiche au compteur. Vous y inscrirez tout à l'heure le nom du programme que vous allez enregistrer. Prenez par exemple le programme suivant et entrez-le au clavier. Cela fait, donnez-lui un nom, (vous avez droit à huit lettres maximum), par exemple ESSAI. Enclenchez maintenant la touche enregistrement (touche • ). La touche de lecture (r> ) se verrouille en même temps, tandis que s'allume le témoin d'enregistrement placé à droite. Le magnétophone étant entièrement piloté par l'ordinateur, la bande ne tourne pas. Tapez au clavier la commande ci-dessous, puis pressez la touche LENTRÉE SAVE ""ESSAI" La bande se met automatiquement à tourner. Lorsque la sauvegarde est terminée, le message OK s'affiche à l'écran. Inscrivez sur la jaquette de votre cassette le numéro de compteur marquant la fin de l'enregistrement, afin de ne pas réécrire par mégarde sur cette partie de la cassette. Chargement d'un programme La sauvegarde d'un programme n'est intéressante que si l'on peut relire ce dernier par la suite. Pour cela, rembobinez la bande jusqu'au numéro de compteur antérieur à celui du début de votre programme. Videz la mémoire de l'ordinateur par un NEW, ou mieux encore, débranchez-le quelques secondes. Appuyez ensuite sur la touche de lecture, repérée par un c . Le magnétophone ne se met pas encore en marche. Tapez au clavier la commande suivante : LOAD "ESSAI" puis validez par ENTRÉE . Le lecteur de programme fait avancer la bande et le message Searching apparaît à l'écran. Le M05 vous indique à sa manière qu'il est occupé à rechercher le programme spécifié entre les guillemets. Si vous avez rembobiné trop avant et que le M05 I j des rait lui me )ez te'ez ,nt au •e Maintenez votre doigt appuyé sur la touche I:NTRÉE. La liste de votre programme finit par disparaître complètement, mais les six premières lignes restent affichées. Autre constatation : votre Curseur n'a plus accès au bord inférieur de l'écran. t':n tapant CONSOLE 6,18 vous avez défini une fenêtre commençant à la ligne 6 et se terminant en ligne 18. Tout ce qui se trouve hors de ces limites est désormais inaccessible. Entrez maintenant CONSOLE 6,18„ 1 (les deux virgules sont importantes), puis listez de nouveau votre programme. Les lignes défilent au ralenti. Voilà qui est idéal pour créer des génériques, ou lire tranquillement la liste d'un programme. Pour revenir au mode standard, tapez CONSOLE 0,24,0,0 Les autres aspects de CONSOLE L'instruction CONSOLE autorise d'autres effets intéressants au niveau du graphisme et de l'animation. Pour en juger, entrez le programme suivant : ( TRAIN : PROGRAMME 1 10 CLS:SCREEN0,3,1 20 CLEAR „4 30 DEFGR$(0)=252,28,31,127,127,127,127,5 1 40 DEFGR$ )=0,144,252,254,254,252,254,3 9 50D.EFGR$(2).=0.9,63,127.127,63,127,230 60 DEFGR$(3)=63.56,248,254,254,254,254,2 04 70 T1$=GR$(0)+GR$(1) 80 T2$=GR$(2)+GR$(3) 90. ATTR51,1 100 LINE(0.89)-(319,59),0 110 LINE(0,1697-(319,169).0 120 BOXF(13,8)-(18,111 ",8,8 130 BOXF(9,17)-(14,20) °,0,7 140 COLOR0.7:ATTRB0.0 150 LOCATE10 ,18.0: PRI NT°GRRE~ 160 ATTRBI, I:COLORO,3 170 BOXF(28,18)-135,211 ,B,S 180 CONSOLE 0,24,1,0 190 T=1•CT=1 200 ON T GOSUB 300,400 1 210 FOR P=1 TO 300:NEXT 220 IF CT(10 THEN GOTO 200 230 CON5OLE0;24,0,0. 240 SCREEN4,6,6:END 300 FOR I=0 TO 36 310. LOCATE I.10:PRINT Ti$ 320 FOR P=1TO 100tNEXT P 330 LOCATE I.10:PRINT 340 NEXT I. 350 T=T+1:CT=CT+1 360 RETURN 400 FOR I=36 TO0 STEP-1 410 LOCATE 1,20:PRINT T2$ 420 FOR P=1 TO100:NEXT 430 LOCATE 2.20: PRI NT 440 NEXT I 450 T=T-f:CT=CT+1 460 RETURN Les lignes 20 à 60 définissent quatre caractères graphiques qui sont soudés en 70 et 80 et représentent alors deux locomotives à vapeur (variables chaînes Tl$ et T2$). Les lignes 100 à 170 mettent en place le décor : une voie ferrée, deux tunnels (symbolisés par deux rectangles gris), et une petite gare blanche. L'instruction CONSOLE de la ligne 180 va modifier le comportement des couleurs de notre dessin, en les «figeant». Lorsque cette ligne aura été exécutée, toute instruction COLOR qui apparaîtrait dans la suite du programme se révélerait sans effet. Les routines des lignes 300 et 400 assurent l'animation du train qui se déplace à l'écran comme s'il se trouvait sur une voie circulaire : Notre train se comporte de manière totalement réaliste. Il DISPARAIT sous les tunnels, réapparaît de l'autre côté, puis il longe la gare SANS L'EFFA- CER. Si vous avez déjà essayé de faire se croiser deux motifs graphiques au cours d'une animation, vous aurez remarqué que le dernier motif affiché EFFACE généralement le précédent. Pour expliquer le phénomène auquel vous venez d'assister, revenons aux lignes de mise en place du décor. Lorsque nous avons tracé les tunnels (lignes 120 et 170), nous avons codé à 8 les couleurs d'encre et de fond. Pour la gare, au contraire, nous avons choisi une couleur d'encre noire (code 0) et un fond blanc (code 7). En figeant les couleurs par l'instruction CONSOLE de la ligne 180, nous obligeons notre petit train à prendre les couleurs de son environnement. Notre caractère graphique devient gris sur fond gris (donc invisible) au passage des deux tunnels, puis noir sur fond blanc devant la gare (celle-ci n'est donc pas effacée), et enfin noir sur fond jaune dans les autres cas. Pour mieux comprendre ce qui se produit, modifiez comme suit les lignes 120 et 130 avant de relancer l'exécution de votre programme : 120 BOXF (13,8)—(18,11) " ",1,8 130 BOXF (9,17) (14,20) "047 En fixant les couleurs d'encre à 1 (ligne 120) et 4 (ligne 130) vous forcez la locomotive à devenir rouge au passage du premier tunnel, puis bleue lorsqu'elle atteint la gare. 36 . T ..... LE PIANO L ORDINA EURET Tout le monde n'a pas la chance de posséder chez dessinée, on indique en dessous le nom de la note soi un piano. Vous êtes néanmoins l'heureux pos- à laquelle elle correspond. On utilise pour cela la sesseur d'un M05 et, si votre passion pour la musi- valeur Ti que l'on divise préalablement par 8 afin que n'a d'égal que votre engouement pour la micro- d'assurer la compatibilité avec les dimensions de la informatique, ce chapitre vous est particulièrement page texte (ligne 80). Pour finir, on affiche le sym- destiné. Vous y apprendrez en effet comment trans- bole «. », (dièse) au-dessus des touches noires. Votre former les touches de votre ordinateur en clavier image est désormais complète de piano. DESSIN DU CLAVIER : AFFICHAGE

L'image du clavier Pour rendre notre programme encore plus réaliste, nous allons commencer par dessiner à l'écran le cla- vier d'un piano, en partie du moins. Ceux qui ont déjà eu l'occasion de voir un tel instrument, savent qu'il est constitué de touches blanches et de touches noires. Les premières représentent les notes DO, RÉ, MI, FA..., les autres les dièses et les bémols corres- pondants. Pour symboliser ces touches, nous allons employer respectivement des rectangles blancs et noirs que nous dessinerons au moyen d'une instruc- tion BOXF. Voici le programme réalisant cette opé- ration : Sonoriser le clavier DESSIN DU CLAVIER : PROGRAMME r- 10 CL 5 : SCREENO , 1 ,1 20 DATA32,5S,D0.64 ,87 ,RE, 96.119,HI,12-'1 51,FA,160,383,SOL,192,215 .LA,224,247. I. Pour donner au M05 l'apparence d'un clavier de 256.279.00 30 FOR I=1 TO S piano, vous allez devoir associer une note à quelques- 40 READ T 1 .T2 ,N$ 50 BOXF>T1,60)-T2,140),7 unes de ses touches. Pour imiter la disposition qui 60 IF N$=°HI° OR N$=°SI" THEN 80 70 BOXF>T1+16,60)-(T2,911,0 est celle duiano, nous allons utiliser la troisième 80 NH=I NT (T 1/$ 1 p 90 LOCATE NH,18,0:PRINT N$ 100 LOCATE N NH+2 ,5 rangée de touches à partir du haut pour coder les 11 °° 130 110 IF N$ OR N$=SI THEN 120 notes DO, RÉ, MI..., et la seconde rangée pour les 130 NERTNT°#° 140 A TTR8I,I:COLOR4.1 150 LOCATE13,3:PRINT°CLAVIER° dièses et les bémols. La note DO sera obtenue par une pression sur la lettre «Q», le DO e en s'appuyant sur le « », et ainsi de suite. La saisie des tou- ches se fera par l'intermédiaire d'une instruction INKEY$:

CODAGE DES TOUCHES : PROGRAMME L'instruction DATA de la ligne 20 est particulière- ment importante car elle renferme les coordon- 160 AT TPBO.0: COLORO, 1 nées horizontales de chacune des touches, ainsi que 1-0 BOXF(136,168)-(176,191).3 180 A=4:B=24 le nom de la note correspondante. La boucle des 190 X$=INKEY$ 200 IF X$=°a° THEN NO$=°D0':GOTO50O 210 IF X$=°5° THEN NO$=^RE":GOTO500 220 lignes 30 à 130 assure le tracé des rectangles. On IF X$='FF° THEN NO$=:80T0500 dessine d'abord les touches blanches (ligne 50), puis °FA g p 240 IF X$=°G° THEN NO$=-5O° :GOTO500 °H° °LA- lorsqf'f ue 250IF X$=THEN NO$=:GOT0500 lorsue cela se révèle nécessaire, les touches noires 260 IF X$=°.,° THEN NO$=°5I°:GOT0500 °K° THEN NO$=°DO^:A= AGOTO IF X$=+1: (70). Les dièses et les bémols représentent un inter- 280 IF X$=°1° THEN A=1:GOT0190 valle d'un demi-ton entre deux notes. Ainsi la note 290 ~F X$=A ?_ THEN A=3:GOTO190 DO # est-elle un demi-ton plus haut que le DO, et un 310 IF X$=°4° THEN A=4:GOTO190 320 IF X$=°+° AND 8( >96 THEN B= 2»B:GOTO . 190 demi-ton plus bas que le RÉ. Les notes MI et SI, 330 IF X$=°-° AND B<)3 THEN B= B 2:G070 p q néanmoins, ne sont respectivement séparées de FA 190 et DO que par un demi-ton, ce qui explique l'absence des notes «MIfl» et «SI#» dans la gamme, et le fait que l'on passe directement en ligne 80 lorsque l'ordinateur lit ces deux valeurs. Une fois la touche


37 1 note la la afin le la sym- Totre de les- qui Mme les les par ant ou-ion 1:ftte seconde partie est constituée presque exclusi«tuent de tests IF... THEN. La variable chaîne NO$ t présente la note qui sera jouée dans la troisième l .t rt.ie du programme. t: mission du son . i vous regardez la liste de la page ci-contre, vous {•ntistaterez que de nouvelles conditions IF... THEN apparaissent entre les lignes 340 et 400. En effet, le piano tel qu'il s'affiche sur votre écran, ne dispose +jue d'une octave unique, ce qui se révèle généralement insuffisant pour la majorité des morceaux de musique. Les touches 1 à 4 sont donc affectées aux changements d'octave. En début d'exécution, cette dernière est fixée à 4 (variable A de la ligne 180). fine simple pression sur la touche 3 sélectionne l'octave 3, et ainsi de suite. Ce n'est certes pas la solution idéale, mais cela vaut mieux néanmoins (due de s'en tenir à une seule octave. Les touches « + » et « - » (lignes 340 et 350) servent respectivement à augmenter ou diminuer la longueur des protes jouées. Initialement, celle-ci vaut 24 (variable U de la ligne 180). En appuyant sur «+», vous pas;ez de 24 à 48, puis à 96 si vous maintenez votre pression. Une action similaire sur la touche «—» vous fait descendre jusqu'à 12, 6 ou 3. Pour interrompre le programme, enfoncez la touche «@» : ÉMISSION DU SON : PROGRAMME 340 IF X$ =°Z° THEN NO$=`DO*':GOTO500. 350 IF X$=^E.° THEN NO$=-RE*':GOTOSOO 360 IF X$=°T° THEN NO$=°FA#°:GOTO500 370 IF X$-°Y- THEN NO$=504°:GOTO50Q 380 IF X$=°U° THEN NO$=LA#°. :GOTO500 390 IF X$=°O° THEN NO$=°DO#`:A=A+I:GOTD5 00 400 IF X$=°0 THEN COLORO,I:END 410 GOTOIO0 500 A$=°O+HI D$(STR$(A).2):5$="'L°+HI D$(5 TR$(B),2) 510 NT$= A$+B$+-T5-+NO$ 520 LOCATE 18,22,0: COLOR4,3: PRI NT° S30 LOCATE 18.22,0:PRINT NO$.:COLDR0,3 540 PLAY NT$ 550 IF X$=°O° OR. X$="K° THEN A=A-i. S60 GOTO190- L'émission du son est régie par les lignes 500 à 540. Elle fait appel pour cela aux deux variables chaînes A$ et B$. La première renferme la valeur de l'octave, la seconde la durée de la note. Les transformations effectuées en ligne 500 sont nécessaires pour supprimer le signe de la variable A. En effet, la longueur d'une expression du type STR$(B) n'est pas égale au nombre de chiffres la constituant, mais au nombre de ces chiffres plus un. Le signe, quoiqu'invisible, compte néanmoins pour un caractère. Avant d'être jouée, la note est affichée dans un petit rectangle jaune placé en bas de l'image du clavier (lignes 520-530). L'instruction PLAY de la ligne 540 fait jouer la note NO$ d'octave A et de longueur L. Le programme se rebranche ensuite en 190 pour saisir une nouvelle note. Ce programme ne vous permettra certes pas de jouer «en souplesse » (le clavier caoutchouté du M05, ainsi que la lenteur relative de l'exécution interdisant toute virtuosité), mais vous serez néanmoins à même d'apprendre quelques mélodies simples. Vous pourrez ainsi vous «faire la main » en attendant le jour où vous posséderez, enfin, un vrai piano. Mémorisation d'un morceau Si vous vous sentez l'âme d'un compositeur, ou si vous êtes porté sur l'improvisation, vous regretterez certainement de ne pouvoir enregistrer vos mélodies. Rassurez-vous. Quelques légères modifications combleront cette lacune et vous permettront de retrouver, en fin d'exécution, l'air que vous venez d'interpréter. Il ne vous restera plus alors qu'à prendre un papier et un crayon et à fixer, pour la postérité, votre création musicale. Avant d'en arriver là, commencez par amender les lignes suivantes 15 DIM N$(2000) : AA= 1 400 IF X$="" THEN COLOR 0,1:0010 600 540 PLAY NT$ N$ (AA) = NT$ AA = AA + 1 En ligne 15, on dimensionne un tableau qui nous servira à stocker les notes composant notre mélodie. Si vous pensez devoir dépasser les 2 000 notes initialement prévues, optez pour une valeur plus grande. La variable AA nous servira, quant à elle, de compteur de notes. Comme vous pouvez le voir, le tableau est rempli en ligne 540, chaque fois qu'une note est jouée. La variable AA est alors incrémentée de 1. Il ne vous reste plus désormais qu'à compléter votre programme en lui rajoutant les lignes ci-dessous : MÉMORISATION DES AIRS : PROGRAMME 600 CLS 610 LOCATE 4,8:PRINT-VOULEZ-VOUS RE-ECOU TER CE QUE VOUS t: PRINT TAE(4) 'AVEZ JO UE (O/N) • :INPUT" ,R$ 620 IF R$.O'Q AND R$<>"N' THEN 600 630 IF R$=°NF THEN END 640 LOCATE 4.14:PRINT "SOUHAITEZ-VOUS L' AFFICHAGE DES NOTES~:PRINT TAB(4) 'O/N1 • • INPUT R$ 650. IF R$=~0 THEN GOSUB 700 660'FOR I=1 TO AA: PLAY N$(I):NEXT 670 END 700 CLS 7le. FOR. I=1 TO AA:PRINT N$(I),'/',:NEXT 726 RETURN A l'exécution, vous pourrez choisir de réentendre ce que vous venez de jouer, et d'afficher ou non la valeur des notes. L. "%d9 18 I SI « vkv %J#1 vv Nombreux sont les musiciens amateurs, même confirmés, qui jouent « d'oreille» et seraient incapables de déchiffrer une partition si on leur en présentait une. Ce"chapitre se propose de vous faire découvrir à quelles notes de la gamme correspondent les différents symboles qui s'inscrivent sur une portée musicale. Même si vous n'êtes pas musicien, vous pourrez utiliser ces connaissances pour lire une partition et insérer ainsi des plages musicales particulièrement convaincantes dans vos programmes. Notes et portées Pour commencer, il convient de tracer à l'écran une portée, et d'y faire figurer une clef de sol. Le dessin de la première ne présente aucune difficulté. Cinq lignes barrant la largeur de l'écran et tracées par une instruction LINE, feront l'affaire. Le problème posé par la seconde est plus délicat. Vous pourriez le résoudre en ayant recours à des caractères définis, mais il vous en faudrait beaucoup avant d'obtenir une clef de sol satisfaisante et relativement arrondie. L'autre solution, celle que nous choisirons ici, consiste à décomposer cette figure en courbes élémentaires. Un examen attentif d'une clef de sol vous révèlera qu'elle est constituée approximativement d'une spirale, d'une ellipse, d'un trait oblique, et d'une seconde spirale inversée par rapport à la première. Si vous avez lu les chapitres consacrés au cercle et à ses dérivés en début de cet ouvrage, vous devez être à même de réaliser un tel tracé. Voici donc la routine qui vous permettra de dessiner une clef de sol, routine que vous placerez en fin de votre programme principal : CLEF DE SOL : PROGRAMME désignant respectivement les valeurs de Départ et d'Arrivée. Le tracé proprement dit est effectué par les lignes 1100 à 1160. On y retrouve la formule permettant de déterminer les coordonnées de chacun des points d'un cercle. La variable SP (SPirale) fait office de «drapeau» . Si ce drapeau est à 1, le rayon vaut A*2.4. L'instruction retenue pour le tracé n'est pas PSET, mais bel et bien LINE (ligne 1160). Celle-ci permet en effet une plus grande régularité dans le trait. L'instruction PSET est néanmoins employée en ligne 1150 pour afficher le premier point de notre courbe. La première spirale terminée, on tire un trait dans son prolongement (ligne 1030) avant d'aborder le dessin de l'ellipse. Le pas ST utilisée dans cette dernière est négatif (ligne 1040), afin que le tracé se poursuive dans le sens inverse des aiguilles d'une montre. Une fois l'ellipse achevée, on tire un trait oblique vers le bas (ligne 1050) avant de terminer la clef de sol par une seconde spirale (ligne 1080). D'exécution relativement lente, ce sous-programme fournit néanmoins un résultat assez convaincant : F CLEF DE SOL : AFFICHAGE 1 II 1000 LOCATE0,0 1010 5P=1:X0=25:70=76:P1=3.14159:5T=.05 1020 VD=PIY0.66VA=3.41PI:GO5UB 1100 1030 LINE(X,Y)-(X+5,Y-5}:X=X+S:Y=Y-5 1040 SP=O:XO=X:YO=Y-20:R1=6:R2=20:SJD=PI/ 2VA=-3YPI/2:ST=-0.05:GO5UB 1100 1050 LINE(X,Y)-(27,108) 1060 SP=2:X0=20:70=108:VD=0:VA=27PI:R1=7 :R2=R1:ST=O.05:GOSUB 1100 1070 PET URN 1100 FOR A = VD TO VA STEP 5T 1110 IF $P=1 THEN R1=A*2.4:R2=R1 1120 IF SP=2 THEN R1=R1-0.04:R2=R1 1130 X=RIUCO5(A)+XO 1140 Y=R21t5IN(A)+YO 1150 IF A=VD THEN P5ET(X,Y) 1155 IF A=VD THEN PSET(X.Y) 1160 LINE-(X,Y) 1170 NEXT A 1180 RETURN Tous les éléments nécessaires à la constitution de la première spirale sont initialisés aux lignes 1010 et 1020. XO et YO représentent les coordonnées de l'origine, ST le pas choisi pour le tracé, VD et VA La première partie de notre programme étant au point, il nous faut maintenant créer les symboles figurant les notes. Celles-ci seront dessinées au moyen de quatre caractères graphiques définis par l'utilisateur : Les variables H$ et R$ initialisées en ligne 60 nous serviront ultérieurement à «souder» les deux matrices utilisées pour chacune des notes. Ces dernières étant affichées en double hauteur et double largeur (ATTRB 1,1), deux retours en arrière (caractère de code 8) et deux mouvements vers le haut (caractère 11) sont nécessaires. En 120, une ligne DATA renferme la position allouée à chacune des notes en fonction de l'octave spécifiée. Ces valeurs sont rangées au sein d'un tableau à deux dimensions ((i~ wIc'TN$. Le remplissage de ce tableau s'opère par Ire 1,((ode des lignes 90 à 110 : AFFICHAGE DE LA NOTE : PROGRAMME Ii 39 rt et par nule cha- rale) à 1, Gour INE Inde éan-pre-ter- lent pse. égatans fois bas par lati- )ins IM au )0- au par )us ri- es ur re ut ne es .rs ns j= I

TRACÉ DES NOTES : PROGRAMME 10 CL5:5CREENO,7,7:CLEAR ,,4 20 DEF GR$(0)=8,8,120,248,248,112,0,0 30 DEF 08$(1(=8,8,8,8.8.8,8.8 40 DEF GR$t21=8.8,120,136,136,112,0,0 50 DEF GR$(3)=12,10,9,9,9,8,8,8 60 H$=CHR$(11+CHR$f 11):R$=CHR$(8)+C)iR$( 8) 78 FOR I=1 TO 38:BL$=BL$+° ":NEXT 80 DIH TN$(12,3) 90 FOR I= 1 TO 12 100 READ TN$( I,1),TN$(I,2),T)±$(1.3) 110 NEXT I 120 DRTA DO,14,7,DO#,14,7,RE,13,6,RE$.13 ,6, Fil. 12,5,FA,11,4, F64.11,4, 50, 10.3, 50$, 10,3 .LÀ ,9,2, LÀ* ,9,2,5I,8,1 130 G05UB800:GOSUR 1000 140 PH=6 SAISIES OPTIONS : PROGRAMME 150 FOR 8= 1 TO 14 160 ATTPBO, 1:LOCATE I.17,0:PRINTBL$:LO CATE 2,17,0:INPUT°QUELLE OCTAVE !1 ou 2) •OC 170 IF OC<> 1 AND 00<) 2 THEN 160 180 ATT R50,I : LOCATE 1, 19.0:1381 NTBL$: LO CATE 2,19,0: INPUT-QUELLE VALEUR (B,N,C) ^,V$ 190 IF V$() ' AND V$<) ^N' AND V$<) °C° THEN 180 200 IF V$=°B° THEN NO$=GR$(2)+H$+R$+GR$( 210 IF V$=°N° THEN NO$=GR$(0)+H$+R$+GR$( 220 IF V$=°C"' THEN NO$=GR$(0)+H$+R$+GR$( 3):L$=°12' 230 ATTRBO,I:LOCATE 1,21:PRINTBL$:LOCA TE 2,21.0:INPUT°QUELLE NOTE ':N$ 24.0 FOR J=1 TO 12 250 IF N$=TN$(J,1)THEN GOSUB 500:GOT02 80 260 NEXT J 270 GOTO 230 280 NEXT B:END Ce troisième écran renferme toute la partie «texte» de notre programme. L'utilisateur pourra afficher jusqu'à 14 notes par portée (ligne 150). On le convie dans un premier temps à entrer l'octave désirée (ligne 160), puis la valeur de la note (180). L'utilisateur choisit l'une des trois options B, N et C (Blanche, Noire, ou Croche). Le test de la ligne 190, tout comme celui de la ligne 170, empêche tout autre réponse que celles suggérées. En fonction de la valeur introduite, le programme assemble les deux caractères graphiques constituant la note (lignes 200-220), et affecte à la variable L$ la durée propre au type de note choisi. L'utilisateur spécifie en dernier le nom de la note qu'il souhaite voir afficher (230). La boucle des lignes 240 à 260 en contrôle la validité puis dirige le programme vers la routine d'affichage dont voici la teneur : 500 ATTRBI,1 510 IF OC=1 THEN PV=VALtTN$(J,21i ELSE P V=VAL(TN$)J,3)) 520 IF N$=°5I AND OC=2 THEN ATTRB0,0:LO CATE20,22,0: PRI NT °TROP HAUT °.:RETURN 530 LOCATE PH,PV,O:PRINT N0$:GO5UB800 540 IF N$=°DO° AND OC=1 THEN LINE(BXPH-6 a3[PV )- (8a PH+16,8. PV ) 550 IF N$=°LA° AND OC=2 THEN LINE(8*PH-6 80PV)-(8IPH+16,83E V) 560 IF RIGHT$(N$,1)=°$° THEN LOCATE PI-1+2 PV,O:PRINT"*' 570 O$=0+HID$(STR$(OC+31,2,1):L$=L°+L $:PLAY O$+L$+N$ 580 PH=PH+2:IF PH)38 THEN END 590 RETURN 800 ATTRB0,0:FOR I=1 TO 5 810 LINE(0,16I+16)- (319,16sI+16) 820 NEXTI 830 RETURN En fonction de l'octave choisie en 160, l'ordinateur détermine la position de la note sur la portée en se référant au tableau TN$ (ligne 510). La note est ensuite affichée sur la portée en 530. Cette dernière est redessinée chaque fois qu'une nouvelle note y est inscrite, afin de faire disparaître les «blancs» laissés par la matrice des caractères graphiques. Si la note est un DO de première octave ou un LA de seconde octave, une petite barre horizontale complète la portée (lignes 540 et 550). Il ne reste plus à l'ordinateur qu'à jouer la note affichée, en lui donnant la hauteur et la durée adéquates (ligne 570). PARTITION : AFFICHAGE QUELLE OCTAVE (1 ou 2) ? QUELLE VALEUR (B)N)C) ? B QUELLE NOTE ? FA Cette photo d'écran affiche les premières notes d'« Au clair de la lune ». Pour que le morceau affiché soit conservé en mémoire et puisse être réexécuté, il suffirait de dimensionner un tableau de 14 éléments puis d'y stocker les notes à mesure de leur affichage : 15 DIM N$ (14) :AA = 1 575 N$ (AA)=0$+L$+N$:AA=AA+1 580 PH = PH + 2: IF PH > 38 THEN GOTO 600 600 FOR I = 1 TO AA : PLAY N$(I) : NEXT I : END 40 DESSINS SYMÉTRIQUES Il vous est certainement arrivé de prendre une feuille de papier, de la plier en quatre, voire en huit, puis de donner quelques coups de ciseaux bien placés, pour obtenir, une fois la feuille dépliée, une série de motifs symétriques plus ou moins plaisants selon votre habileté à ce petit jeu. Ce chapitre se propose maintenant de vous faire revivre cette expérience amusante, en l'adaptant à votre ordinateur. Hasard et symétrie Pour simuler le pliage d'une feuille de papier, nous allons diviser notre écran en quatre parties égales, en quatre rectangles de dimensions équivalentes. Ayant à notre disposition 40 colonnes et 25 lignes, nous allons pouvoir travailler sur des surfaces de 20* 12 cases écran. Cela nous laissera en tout et pour tout une seule ligne inutilisable. Comme il n'est pas question de donner ici des coups de ciseaux, nous allons remplacer cet instrument par des carrés de couleurs que nous reproduirons symétriquement dans chacun de nos quatre rectangles. Pour gagner du temps, et automatiser le processus, nous allons établir dès maintenant les formules que nous utiliserons pour déterminer les coordonnées symétriques aux points que nous allons afficher. Si nous choisissons de travailler par exemple dans le quart supérieur gauche de l'écran, nous appellerons « points sources », tous les points dont les coordonnées horizontales seront comprises entre 0 et 19, et les coordonnées verticales entre 0 et 11. Nous pourrons alors en déduire les correspondances sui- vantes. Au point source 0,0 correspondront les points 39,0 dans le quart supérieur droit, 0,23 dans le quart inférieur gauche, et 39,23 dans le quart inférieur droit. Partant de ces valeurs, nous pouvons dresser le tableau suivant : COORDONNÉES DES « IMAGES » DU POINT SOURCE Point source X,Y 39-X,Y X,23—Y 39-X,23-Y Le programme de la page ci-contre utilise ces équivalences pour dessiner des motifs symétriques aléatoires. Après l'initialisation du générateur de nombres aléatoires (lignes 20 et 30), on choisit au hasard une valeur X(0) entre 1 et 19, et une valeur Y(0) entre 1 et 11. Les deux coordonnées ainsi obtenues serviront de point source aux autres carrés dont la position est calculée aux lignes 90 à 110. Grâce à deux boucles imbriquées, on affiche successivement le point source et ses trois «reflets» symétriques dans une couleur choisie aléatoirement, elle aussi, parmi trois codes. On répète l'opération 50 fois, ce qui est, somme toute, assez peu par rapport au total de 11* 19 = 209 points dont on dispose à l'intérieur des quatre rectangles : MOTIFS SYMÉTRIQUES ALÉATOIRES 10 rL515CREEN0 7,7 20 PRINT TAB(3) ,Frappez une Louche pour commencer° 30 IF INI(EY$=" THEN X=RND:GOTO 30 40 CLS: SCREEN0,0.0 50 C$=CHR$(127) 60 FOR I=1 TO 50 70 X(OI=I NT(RND:19+11 30 Y(0)=I NT(RND3~11+11 90 X(1)=39-X(0):Y(1)=Y[0! 100 X(21=X(0) :Y(2)=23-Y'lO' 110 X(3)=39-k: (0) :Y(3)=23-Y(0) 120 CO=INT(RND»3+1i 130 FOR J=0 TO 3 140 COLOP C0.0:LOCATE X(J).Y(J):PRINT r_$ 150 NE CT J 160 NE?.TI 170 LOC6TEO,0'.0 Voici un exemple de motifs symétriques obtenus à partir de ce programme : Dessins symétriques Les dessins aléatoires ne constituent pas l'unique champ d'utilisation de cette technique. Nous allons étudier maintenant un programme qui, par un procédé analogue à celui employé ci-contre dessine à l'écran une version assez «grossière», mais néanmoins très reconnaissable du drapeau britannique ou « Union Jack » : ) lroi est, 1 cli sà e s

41 -

UNION JACK : PROGRAMME

CORRESPONDANCES ENTRE POINT SOURCE ET POINTS IMAGES 10 LL5:5CREEN0,00 -'0 FOR I=0 TO 11

Point source -.0 READ As 40 FOR J=0 TO T 19 50 C=VAL(HID$(A$,J+1,11 l X,Y 319—X,Y 60 COLOR c 199—X,Y 319—X,199—Y 70 X1=J+1:Y]=I+1 20 X2=39-X1:Y2=Y1 90 X3=X1:Y3=23-Yi 100 X4=39-X1:Y4=23-Y1

110 LOCATE X1,Y1,0:PRINT CHR$(127): 120 LOCATE X2, Y2,0:PRI NT CHR$(127):

130 LOCATE X3, Y3,0:PRI NT CHR$(127)1 Le programme ci-dessous trace, au moyen de plu- 140 LOCATE X4,Y4,0:PRINT CHR$(127); 150 NEXT J BOXF, 160 NEXT I:LOCATE0,0,0 sieurs instructions BOX , quatre rectangles de cou- 200 DATA 77444444444444444711,17774444444 444444711,11177744444444444711.771117774 4444444471 différentes. A l'intérieur de chaque rectangle, ,47771117774444444711144477?1 leurs `1 1177744444711,44444777111777444711 un cercle est dessiné à l'encre noire. -7 210 DATA44444447771117774711,44444444 711177711,77777777777777777711,]11111111 11111111111,31111111if1311111111 Le sous-programme de tracé des cercles est en tous points analogue à ceux précédemment utilisés, à cette différence près que les quatre cercles sont exé- cutés simultanément :

I.cs 209 codes couleurs assurant le remplissage des SYMÉTRIE SUR PAGE GRAPHIQUE

060 cases de l'écran texte, sont stockés en DATA, à l'intérieur de 11 chaînes différentes. Ces dernières

,ont lues caractère par caractère au moyen d'une

Illstruction MID$, avant d'être converties en valeur 10 CL5:8CREEN0.t21,0 20 A1=0;B3=94:C1=3 Ilumerique par le biais d'une fonction VAL 30 A2=319-A1:52=B]:C2=1 40 A3=A1:B3=194-Si:c3=5 (ligne 50). Deux boucles imbriquées assurent l'affi- 50 A4=319-AI:B4=199-BS:C4=9 60 ZOXF(A1,01-(160.81),01 (:page des points sources et de leurs images symé- 70 BOXF(A2,0.)-(160.B21,C2 80 BOXF(A3,1941-(160,B3),C3 I.riques. Il ne vous restera plus alors qu'à compléter 90 BOXF(A4,199)-(]60,B4),C4 100 PI=3.14359:R=40:H1=80:V1=S0 ces g 110H2=319-H1:V2=V1 g li nes en faisant exécuter au M05 un magistral 120 H3=H1:V3=199-V1 130 H4=319-H1.7V4=199-V1 «GOD SAVE THE QUEEN» : 148 FOR I=0 TO 21PI STEP 0.05 150 X=ROCOS(I):Y=Rx SIN(I) 160 X1=X+H1:Y1=Y+V1:X2=X+H2:Y2=Y+V2:X3= X+H3: Y3=Y+V3:X4=X+H4: Y4=Y+V4 170 PSET (X1 ,Y 1) ,- 1 180 PSET(X2.Y2),-1 UNION JACK : AFFICHAGE 190 PSET (.X3 ,Y3) ,- 1 200 P5 ET[.X4, Y4),-1 210 NEXTI:COLOR3.3:LOCATE0,0,0 r

~




}...~- "ter + - Symétrie sur page graphique k `' Ce qui est applicable sur la page texte l'est éga- lement sur l'écran graphique. Le principe demeure inchangé. Seules les valeurs utilisées pour le cal- cul des coordonnées devront être modifiées. Sachant _1ue nous disposons de 200 pixols F n ioo0 or contre 320 en largeur, nous travaillerons désormais sur des En vous inspirant de ces procédés, essayez de créer surfaces comprenant quelques 16 000 points. Le pas- des motifs originaux. Vous pouvez également, sur sage du point source au point image s'effectuera en le même principe, définir 8, voire 12 ou 24 cases appliquant les formules du tableau suivant : symétriques, et les remplir à votre guise.


42 LES JEUX 1 Nombreuses sont les personnes qui ne connaissent INDIEN / ÉCRAN 1 : PROGRAMME de la micro-informatique que les milliers de jeux disponibles sur le marché, et pour qui l'achat éven- tuel d'un ordinateur se fait essentiellement dans un 1000 REM TABLEAU 4:L'INDI EN butludi~Tue. 1010 CL5:5CREEN0,3,3 '1 1020 • DEFINITION CARACTERES S'il est vrai que les jeux ont contribué à l'améliora- tion de la qualité des logiciels, c'est en grande par- 1040 DEFGR$(0)=255,191,197.24,56,224,0,0 tie parce que leurs concepteurs ont exploité au maxi- 1050 DEFGR$(1)=248,248,248,62,1 1060 DEFGR$ (2) =1.3 , 1 , 3, 3 , 3.3 , ,1 ,0,031 mum les richesses de leur imagination et les possi- 1070 DEFGR$f3)=128,194,130,143.255,191,2 51, 251 bilites de leurs machines. 1060 DEFGR$(41=255,191,191,28,48,24,8,12 1090 DEFGR$f 51 =248,248,248,60.4.28.0.0 1100 DEFGR$(6 )=56,56.56,56,24.-24,24,60 La d'un jeu 1110 DEFGR$(7) =126,203,8,24..24,124.252.5 préparation 6 1120 C$(11=CR$f01+GRgl3 )+H$+R$+R$+GR$i2+ +GR$f3] Un jeu ne s'improvise pas. Il est le résultat d'un 1 ] 30 C$ t 2) =GR$ f 41+rR$ f 51+H$+Rg+R$+L R$ i 21 +GR$(3) long travail de recherche et de mise au point dont la 114Q III$=GF'$ f F-,+ $+R$+GR$ f 1

majeure partie s'effectue sur une feuille de papier. 1150 BL$=` '"+" °+ ^+H$+R$+Rg+Rg+` +' < Au cours des pages qui suivent, nous allons exami- ner ensemble les différentes phases de la concep- tion d'un jeu, pour aboutir à un programme complet,

beaucoup plus long et plus complexe que tout ce que vous avez pu taper jusqu'ici. La première étape de ce processus débute par une Le programme étant relativement long et faisant réflexion sur le type de jeu que vous souhaitez appel à un certain nombre de variables, il convient mettre au point. S'agit-il d'un jeu de réflexes, ou au de regrouper celles-ci dans un tableau. Ceci vous ser- contraire de stratégie ? Se jouera-t-il à une ou plu- vira à documenter votre programme, et vous serez sieurs personnes ? Comprendra-t-il un tableau uni- ainsi à même de le redéchiffrer quand, après quel- que ou plusieurs scènes et niveaux de difficulté ?... ques semaines, vous souhaiterez en examiner de Voici quelques unes des questions que vous devrez nouveau la liste vous poser et dont vous noterez les réponses sur une feuille. Celle-ci constituera le point de départ de

votre programme. Vous devrez également décider du décor et du cadre que vous donnerez à votre action. TABLEAU DES VARIABLES ET CONSTANTES DU PRO- Pencherez-vous pour l'inévitable bataille galactique, GRAMME INDIEN ou pour l'exploration d'un labyrinthe, ou encore

pour une course entre deux bolides, deux escargots, COUP Variable compteur spécifiant le ou deux avions ? nombre de flèches tirées (10 par par- tie). Décor et personnage P Variable compteur dans une boucle Une fois ces choix effectués, munissez-vous d'une de temporisation feuille de papier quadrillé, puis dessinez au crayon PC Position verticale du cavalier les éléments fixes de votre décor, sans oublier d'y (aléatoire) faire figurer toutes les indications utiles concernant PI Position horizontale de l'indien la couleur, l'échelle... Répétez l'opération pour les (aléatoire) éléments mobiles (personnages ou véhicules) en vous VF Position verticale de la flèche servant de matrices 8 X 8. VI Position verticale de l'indien La liste ci-après est tirée d'un jeu déjà préparé et C$(1),C$(2) Caractères graphiques composés correspond à cette première phase de programma- représentant les mouvements du che- tion. val au galop Dans ce jeu, vous êtes un indien et vous devez BL$ Caractère d'effacement du cavalier empêcher un cavalier yankee de rejoindre sa garni- IN$ Caractère graphique composé repré son. L'indien et le cavalier sont représentés par des sentant l'indien caractères définis constitués de deux à quatre matri- H$ Déplacement d'une case écran vers ces « soudées » et affectées aux variables IN$, pour le haut l'indien, C$(1) et C$(2) pour le cavalier (lignes 1120 R$ Déplacement d'une case écran vers à 1140). Les variables C$(1) et C$(2) désignent la gauche deux positions différentes des pattes du cheval,

de manière à simuler, grossièrement, le galop. La chaîne BL$ (1150) servira à effacer l'image du cava- Le corps du programme proprement dit se trouve lier à mesure de son déplacement à l'écran. situé entre les lignes 1160 et 1350. En voici la liste

43F

ant ent 3er'rez uel- de

ve INDIEN : CORPS DU PROGRAMME 1160 FOR COUP = 1 TO 10 11'O VI=24:VF=20:T=0 1180 PC=I NT(RND#9)+4 1190 PI= I NT)RND[ 1S)+15 1200 CL5:ATTR51 . I:COLORI 1210 LOCATE Pi,VI .O: PRINT I11$ 1220 LOCATEPI .VF:PRINT°f12'30 FOR P = 1 TO 500:NEXT P 1240 FOR I = 1 TO 34 1250 IF INKEY$ = 'F°. THEN T = 1260 IF T = 1 THEN LOCATE PI,VF:PRINT 1270 LOCATEI-1,PC:PRINT BL$ 1280 IF VF=O OR I=34 THEN 1340 1290 IF T=1 THEN COL0RI:LOCATE PI,VF:P RINT°t°:UF=VF-1 1300 COLOR4:LOCATEI,PC:IF I/2=INT(I121 THEN PRINTC$(1) ELSE PRINTC$(2) 1310 FOR D=1 TO 30: NEXT 1320 IF)P1=I AND VF=PC.i OR(R1=I+1 AND VF=PC)THEN 3O511B 2000 1330 NE'<.T I 1340 NE,T COUP ]5 300IJE 3000:,TTRB0,0:LOCATE 0,0.0 Vous avez droit à 10 flèches (variable compteur COUP), et le but du jeu consiste à abattre un maxiinum de cavaliers. La position verticale de ces derniers est déterminée aléatoirement à la ligne 1180 (variable PC), afin de rendre le jeu moins répétitif, et surtout, plus difficile. La position verticale de l'indien est fixe (constante VI), mais sa position latérale (variable PI) est choisie aléatoirement à chaque nouveau passage dans la boucle (ligne 1190). L'indien et sa flèche sont affichés par les lignes 1210 et 1220 en double hauteur et double largeur. Après une courte pause, on lance le cavalier, dont la position est déterminée et affichée en 1300. Si la variable compteur I est paire, c'est le caractère C$(l) qui s'inscrit à l'écran, sinon c'est le caractère C$(2) qui est choisi. L'alternance de ces deux motifs graphiques simule le mouvement d'un cheval au galop. Pour décocher votre flèche, vous devez appuyez sur la touche «F» (ligne 1250). La variable T prend aussitôt la valeur 1. Elle est utilisée comme «drapeau» dans les tests des lignes 1260 et 1290. Quand le drapeau est hissé (T = 1), le programme gère le déplacement et l'effacement partiel de la trajectoire de la flèche. Lorsque ce drapeau est baissé (T = 0), le programme ne s'occupe que de l'animation du cavalier. La partie s'interrompt dès que la flèche atteint le bord supérieur de l'écran (VF = 0) ou le cavalier le bord latéral droit (I = 34). La ligne 1320 contrôle si la flèche a transpercé ou non le cavalier. Dans l'affirmative, le programme se branche en ligne 2000, sinon la flèche et le soldat poursuivent séparément leur déplacement. La condition complexe qui détermine ~a réussite ou l'échec de votre tir nécessite quelques éclaircissements. Pour que le cavalier tombe à terre, l'une au moins des deux expressions entre parenthèses doit se révéler VRAIE. Cela signifie que le résultat des expressions logiques PI = I ET (AND) VF = PC soit— 1. Si vous tapez par exemple PRINT 10> 3, le M05 vous affichera la valeur — 1, vous indiquant par là que l'expression 10> 3 est VRAIE. Si vous entrez maintenant l'expression PRINT 3> 10, l'ordinateur vous signifiera son inexactitude par l'envoi du chiffre 0. La ligne 1320 pourrait par conséquent se traduire ainsi : «Si les positions horizontale et verticale de la flèche ET du cavalier coïncident, OU BIEN (OR) si la position horizon- tale du cavalier, plus 1, coïncide avec la coordon- née horizontale de la flèche, les positions verticales étant identiques par ailleurs, ALORS branche-toi à la routine qui débute en 2000» : 2000 ' SOUS-PROGRAMME TIR AU BUT 2010 FORI=1T0200:SCREEN„1:SCREEN„3:NEXT 2020 PLAY"T8L48SOSOL24SOL48SOLAaL24LAL40LAL30 SOSOFAfL48SO” : SCORE = SCORE + 1 2030 RETURN 3000 'SOUS-PROGRAMME SCORE 3010 RETURN Ce sous-programme assure la gestion de l'affichage réservé aux «tirs au but». Dès que votre flèche transperce le cavalier, la bordure de l'écran se met à clignoter en rouge et en jaune 200 fois de suite (ligne 2010), puis le M05 interprète les premières mesures de la marche funèbre de CHOPIN. Votre score est alors incrémenté de 1 (variable SCORE), et l'on revient au programme principal pour un nou-. vel affrontement entre indien et tunique bleue. Remarquez que tout est prévu pour le fonctionnement du sous-programme d'affichage du score final (Routine des lignes 3000 et suivantes), mais celui-ci ne deviendra réellement opérationnel que dans le troisième chapitre consacré aux jeux. Lorsque vous aurez recopié intégralement ces lignes, sauvez ce programme sur cassette en tapant, en mode direct : SAVE "INDIEN",A La sauvegarde de ce programme en codes ASCII est absolument nécessaire pour assurer sa fusion avec les autres éléments constituant notre jeu. En attendant de passer au second tableau, amusez-vous avec ce premier jeu. Vous l'avez bien mérité :

LES JEUX /2 Ayant appris les principaux mécanismes de la constitution d'un jeu au cours du chapitre précédent, vous allez les ré-employer ici pour la mise au point de notre second tableau. Décor et personnages Le décor du tableau précédent se réduisait à sa plus simple expression, puisqu'il consistait en un fond uniformément jaune. Le second tableau utilise un graphisme plus élaboré. En effet, dix caractères graphiques vont être définis, et pas moins de onze instructions BOXF nous seront nécessaires pour dresser le décor : 1 DUEL / LES PERSONNAGES 4--- REM TABLE rILI 2: DUEL 000 CLS CLEAR,.10 4010 DEFIR$10)=56.254.56.64.5'5.40.32,112 4020 DEFGR$(1)=120,120.120.120,120,56,56 .56 4030 DEFGR$(2)=24 24.2a -4.24,24,24.23 4040 DEFGR$(3)=28 12.7. _0.2.3,20.4,14 4050 DEFGR$ (4) =30,30.30.30.30. 3,28,23 4060 DEFGR$(5)-24.24.24 24.'4.24.24, 56 4070 DEFGR$(6)=123,126.124,120.124.56.55 .56 4080 DEFGR$(7)=222,126.62.30,30.28.28.25 4090 DEFGR$(5. =14.15.9. 24=,248.243.24 4100 DEFGP$1748,248.240.252.228,192.1 28.128 4110 SC REENO -6.1 DUEL / DÉCOR ET GÉNÉRIQUE 4120 SOXF(0,0)-(319,23) 1 4130 40XF(0.168]-(319,199),1 4140 BOXF((0,241-(39,151(.8 4150 BOXF(40,64)-(79,79),8 4160 BOXF(76,55)-(79,1511,8 4170 BOXF(40,144)-(79,151).3 4180 BOXF)0,152(-(319,167).3 4190 BOXF(272,56)-(319.1517.5 4200 BOXF(272,41 )-(279,56).5 4210 BOXE(240,144(-(319.151).S 4220 COLOR0,I:6TTRBI.1 4230 LOCATE1,1,0:PRINT°DUEL A SILICON-CI TY° 4240 AIR$=°TIOLI85OL65OL24SOREL1851L65IL 245150L125051 05L24REREL12DOO45(L48LAL18L AL65 I OSL24DOD004L185IL6LAL245ISOL165OL65 IL24LARE LI BFA*L6LAL485O^ 4250 PLAYAIR$ 4260 ATTRBO,O:LOCATE3.22:PRINT-PRE55E-- U NE TOUCHE POUR COMMENCER 4270 x$=INKEY$:RN=RND(1):IF {$=>A THEN G OTO 4270 4230 LB$-- Nous ne quittons pas le Far West, mais nous nous trouvons maintenant dans une ville appelée « Silicon-City ». Dans l'artère principale de cette bourgade, deux clans vont se mesurer en duel. Les lignes 4010 à 4110 définissent dix caractères graphiques répartis comme suit : trois caractères pour chacun des deux cow-boys qui vont s'affronter, plus un caractère supplémentaire assurant l'animation de ces personnages et, pour terminer, deux matrices qui vous seront présentées lors de la mise en place du score. Les lignes 4120 à 4220 tracent successivement les bords de l'écran (couleur rouge), un premier bâtiment de couleur grise (lignes 4140-4170), le sol (4180), puis un second édifice de couleur mauve (4190-42 10). Comme dans tout western qui se respecte, une certaine ambiance est nécessaire. Les lignes 4240 et 4250 interprètent une célèbre mélodie du Far West : «My Darling Clementine ». Avant l'entrée en scène de nos cow-boys, et afin de vous permettre de suivre sans problème le déroulement du programme, voici le tableau des principales variables et constantes utilisées : TABLEAU DES VARIABLES ET CONSTANTES DU PROGRAMME CB Cette variable vaut 0 ou 3. Elle désigne le numéro du premier caractère graphique utilisé pour l'affi- chage des cow-boys bleu ou noir. CH Position horizontale des deux cow-boys (12 ou 26). CV Position verticale des deux personnages (initialisée à 14). CO Couleur. CS Compteur de tours. Le jeu s'arrête quand CS > 10. C Nombre de passages dans la bou- cle INKEY$. La valeur de C détermine la victoire de l'un ou l'autre cow-boy. PH Position horizontale du symbole graphique indiquant le nombre de cow-boys abattus. T Nombre aléatoire permettant l'initialisation du générateur de nombres Le programme principal débute par la mise en place du tableau réservé à l'affichage du score. Comme dans le programme précédent tout est prévu pour son utilisation, bien que cette dernière ne vous soit. présentée que dans le chapitre qui suit. Les deux clans sont constitués (n'oublions pas que nous nageons en plein western) de Bons et de Méchants. Les Bons (Vous, en l'occurrence) seront affichés en bleu, les Méchants en noir. Les lignes 4340 et 4350 aleatoirCD. L Nombre aléatoire compris entre 65 et 90. Permet d'obtenir l'une des lettres de l'alphabet. AIR$ Musique du générique. X$ Renferme le caractère frappé au cla- vier. R$ Renferme la lettre choisie aléatoire- ment par le M05. 45 un de rices )lace

essi

pre 170), [leur Ii se Les iélo- I de I ~ule- ipa- ,>Z fi- 3- ne Y•

't I

e

te ir it X initialisent les variables nécessaires au tracé de nos deux cow-boys. Ils sont dessinés, l'un comme l'autre, par le sous-programme des lignes 5000 et suivantes. l' n 4360, l'ordinateur tire un nombre aléatoire qui servira de temporisation. Dans un duel, on ne sait jamais combien de temps va durer l'attente. L'adver- saire peut dégainer son arme au bout de quelques

secondes, ou au contraire jouer avec les nerfs de son ennemi. La ligne 4380 génère un nombre compris entre 65 et 90. Il sera utilisé dans une fonction CHR$ pour afficher une lettre à l'écran. Dès que vous entendrez le signal sonore (un LA), vous devrez

vite regarder votre écran puis retrouver sur votre clavier la lettre que vous y lisez. Soyez rapide, car vous ne disposez que de très peu de temps. La ligne 4410 incrémente la variable compteur C tant que vous ne pressez aucune touche. Si vous appuyez sur la bonne touche, mais que la valeur de V est supérieure à 50, vous êtes froidement abattu par votre adversaire et le programme se branche en ligne 4600. Si, par contre, vous parvenez à retrouver la lettre test avant les 50 tours de boucle, c'est lui qui est « descendu». Le programme passe alors en 4500. Au bout de dix duels, le programme s'interrompt automatiquement : DUEL : PROGRAMME PRINCIPAL 4290 BOXF(96,24)-(255,71),7 4300 COLORO,7: ATTRBO,I: LOC ATE13,5:PRINT° HECH6NT5 4310 COLOR4,7:LOCATE13,7:PRINT°BONS° .4320 C5=P1=21:P2=21 4330 COLOR4,I:ATTRB1,0:LOCATE1,22:PRINTL B$ 4340 CO=4:CB=0:CH=12:GOSUB 5500 4350 CO=O:CB=3:CH=26:GO5UB 5500 4360 T=RND(1)*f3000+200 4370 FOR I=1 TO T:NEXT 4380 L=RND(1)v26+65 4390 ATTRBI.O:COLOR4,I:LOCATE19,22:R$=CH R$(L):PLAY-L24LA':PRINT R$: 4400 C=0 4410 X$=INKEY$:C=C+1:IF X$=°° THEN 4410 4420 IF C<50 AND X$=R$ THEN GOSUB 4500 E LSE G05UB 4600 4430 C5=C5+1. C=0:IF C5>10 THEN ATTRB0.0: EN 4440 FOR P=1 TO 900:NEXT P:GOTO 4330 Si vous trouvez trop bref le temps de réaction de votre adversaire, choisissez une valeur limite de C égale à 70, voire 80. Si au contraire ce jeu vous paraît trop facile, diminuez à 40 ou 30 cette même valeur. Une autre alternative, plus élégante, consisterait à prévoir en début de programme un choix de niveau de difficulté gradué par exemple de 1 à 3. Si vous débutez et que le clavier ne vous est pas encore familier, le niveau 1 vous donnera une valeur de C égale à 100. Vous passerez ensuite aux niveaux 2 et 3 lorsque le clavier n'aura plus de secrets pour vous. Les sous-programmes des lignes 4500 et 4600 gèrent l'animation des deux cow-boys, ainsi que leur désintégration, en cas d'échec. DUEL: SOUS-PROGRAMMES 4500 COLOR 4,6:LOCATE12,16:PRINT GG$'6': PLAY'°O1L24DOO4 4510 CO=0:PV=5:P2=P2+1:CB=3:CH=26 4520 GO5uS s000:COLOR4,6 4530 LOCATE12,16:PRINTGR$(1):RETURN 4540 COLOR 0,6:LOCATE26,16:PRI NT GR$(7': PLAY" O1L24DOO4' 4,500 COLOR 0,6:LOCATE26.16:PRINT GR$(7): PLAY° O1L24DOO4' 4610 CO=4:PV=7:P1=P1+1:CB=O:CH=12 4620 GOSUB 5000:COLOR0.6 4630 LOCATE26,16:PRINTGR$(4):RETURN 5000 FOR A=1 TO 10 5010 OC=CO:GosUB 5500:CO=6:G05uB 5500:CC =OC 5020 NEXT A 5030 RETURN 5500 ATTRB 1,1'.COLOR CO.6:CV=14 5510 FOR I=CB TO C5+2 5520 LOCATE CH,CV: PRINT GR$(I) 5530 CV=CV+2 5540 NEXT 5550 RETURN Si vous avez été plus rapide que l'ordinateur, la ligne 4500 affiche le caractère graphique GR$(6) qui vous représente arme au poing. Les lignes 4510 et 4520 préparent le clignotement puis l'effacement définitif du cow-boy noir, assurés par les routines des lignes 5000 et 5500. Il ne vous reste plus qu'à rengainer votre révolver (ligne 4530). Le sous-programme des lignes 4600 et suivantes reproduit un processus analogue, mais c'est le cow-boy bleu qui est éliminé. Le sous-programme qui débute en 5500 contrôle l'affichage des deux antagonistes. Selon la valeur prise par les variables CB et CO, c'est tantôt le cow-boy bleu (CB = 0, CO = 4), tantôt le cow-boy noir (CB = 3, CO = 0) qui est dessiné : Lorsque vous aurez recopié le programme dans son intégralité, incorporez-le au précédent. Rembobinez la cassette jusqu'à vous trouver avant le programme INDIEN, puis tapez : \N RGE ""INDIEN" Une fois l'opération terminée, vérifiez par un LIST la présence du programme INDIEN puis sauvegardez le tout par SAVE "JEU.1 ",A. -~


Notre jeu est pratiquement terminé. Il ne nous reste plus qu'à lui ajouter un menu, un mode d'emploi et des routines de score pour qu'il soit complet et prêt à être testé par le cercle familial. Le menu Il comporte trois options. Les deux premières permettent à l'utilisateur de choisir parmi les tableaux proposés, la troisième de sortir du programme une fois le jeu terminé : MENU : PROGRAMME 100 CL3:5CREEN4,1,1 '110 ATTRB 1,1 120 LOCATE 16.2:PRINT 'MENU':PRINT:PRINT :A T TR80,0: COLOR0,1 130 PRINT TE(8) '1- JEU DE L'.INDIEN":PR INT:PRINT TAB(8) °2- DUEL ENTRE CON-SOTS :PRINT:PRINT TAB(8) °3- TERMINER 140 LOCATE 8,16:PRINT 'Votre choix (1-3) 1S6 X$>=INKEY$:XX=VAL(X$):IF XX(1 OR XX>3 THEN 140 160. ON XX GOSUB 200,400,180 170 .JdN XX GOTO 1000,4000,180 180 END Si vous répondez par 1 ou 2 à la question qui vous est posée, l'ordinateur se branchera dans un premier temps aux sous-programmes d'instruction, puis au jeu proprement dit. La réponse de l'utilisateur étant saisie au moyen d'une instruction INKEY$, toute pression sur la touche ENTRÉE se révèle inutile MENU : AFFICHAGE Les instructions Sans effacer ce qui précède, vous allez maintenant entrer les instructions propres à chacun des deux tableaux. Elles devront être suffisamment claires pour que toute personne, même novice, puisse comprendre et utiliser immédiatement le jeu. Évitez de mettre plus d'un écran de texte, mais soyez néanmoins assez précis pour qu'aucun doute ne subsiste dans l'esprit du joueur : INDIEN / INSTRUCTIONS 200 CLS:SCREENI,3,3 210 A TTRBI,1 220 LOCATE 12,2:PRINT 'L'INDIEN':PRiNT:A TTRB0,0:COLOR4,3 230 PRINT TAB(2) Vous etes un brave 9Ue rrier Cheyenne' :PRINT TAB(2) 'et vous de vez 2 tout prix empecher' 240 PRINT TAB(2) ales cavaliers Yankee d e rejoindre le°:PRINT TAS(2) °f ort. Yl va de la survie de votre' :PRINT TAB(2) 'tribu.' 250 PRINT TAB(2) 'Evaluez rapidement la vitesse et - la' :PRINT TAB(2) 'distance d u Cheval, puis decochez°:PRINT TAB(2) une lèche en enfonçant la touche F.' 260 PRINT :PRINT:ATTRBI .S:COLOR 1,3:PRINT TAB(8) °UGH !'•ATTRB0,0 270 COLOR 0,3:LOCATE4,22:PRINT'PresseZ u ne touche pour commencer .°,. 280 IF INKEY$=°' THEN 280 290 RETURN Procédez pareillement pour le second tableau puis, cela fait, tapez les lignes suivantes afin de permettre l'utilisation de vos deux programmes avec le menu précédent : 1370 GOTO 100 4430 CS = CS + 1 : C = 0 IF CS > 10 THEN ATTRB 0,0 : FOR P = 1 TO 2000 : NEXTP: GOTO 100 DUEL / INSTRUCTIONS 400 CLS:SCREEN1,3,3 410 ATTRB1,1 420 LOCATE 1.2:PRINT °DUEL A SILICON-CIT Y':PRINT:ATTR B0,0:COLOR4,3 430 PRINT TAB(3) 'Les familles BlUe (vo us) et Black'; PRINT TAB(3) 'se battent p our le controle de la' :PRINT TAB(3). 'Vi 11e. Pour régler le problème une':PRINT TAS(3) 'fois pour toutes, on organise un' 440 PRINT TAS(3) 'duel dans lequel s' aftrontero nt' :PRINT TAB(31 'dix membres de chacun des clans.':PRIHT TAB(3).'Dès q ue vous entendrez le signal°:PRINT TAS (3) 'sonore, retrouvez au plus vite' 450 PRINT TAB(3) °sur votre clavier la lettre qui°:PRINT TA1113) 's'affichera S l'éCran.":PRINT TADIS) °prenez garde, les Black Sont de' :PRINT TAB(3) 'recto utables tireurs!' 460 COLOP 0,3:LOCATE4, 22:PRI NT'Pressez u ne touche pour commencer 470 IF INKEY$=°° THEN 470p 480 RETURN DUEL / INSTRUCTIONS AFFICHAGE DUEL fii SI L I CON- C I T L'es 'ramilles aluie (Vtatl::;} . 2ï1,.~.i~ battent: prour 1 CO11tr ' t'•,- '3*. 1 V t t le. PO4,»- r$`a ter .. *s Car re ;'t» -j'i,. ço i o pur toute on . t'r -. r.' - r1 n cTLU L dan, jo(tJj 1 '•1, F{ r_ « dix fi '.I sbres dt? Ohr, UYe A rl t è eu,: vous en t. • vze r.. 1 ; sanor.U, r:rcruU r au îr1U l ur VütrEe CI3V 1+_t^. t, t ttt-e;1 '4'F ( 13 afF(çt3Ear•3 .i.1'éc art. Irt3n9 . 9ar 3., 1t s. Ftt,v 4: ,.t 3,.

ant .'uX res 1m-de lnste Pre°-5e2 Une touC h. poUr eciewe4zrIc R'r " La tenue du score Évitez d'afficher un score chiffré. Essayez plutôt de trouver un moyen plus original de faire connaître au joueur sa performance en fin de partie : 1 INDIEN / TENUE DU SCORE =000 '5OIJ5-PÇ3OGRA1HE SCORE 3010 C LS: Sî.REEN3.1.1 3020 ATTRBI.1 3030 LOCATE2.5:PRINT`ROy3JME DES OMBRES 3040 FOR TB=O TO 9 3045 COLORO 3050 L 0CATE4:TB.11:PRINTT+' 3060 8O;KF(32a TB. 96)-(32cB+16.1351.0 3070 NEXT 3080 IF SCORE =0 THEN COLORS:LOCATE 16.33 :PRI NT°VIDE!° 3090 FOR 3=0 TO SCORE-1 3100 B0xF(32e 5.96)-325+16.1357.8 3110 NETS 3120 RETUPN e u 3 47 1 ,1 Pour le programme INDIEN de la page 46, la routine d'affichage du score dessine 10 tombes alignées au moyen d'une instruction BOXF. Les tombes qui apparaissent en noir sont vides, les autres renferment la dépouille des malheureux cavaliers que vous avez abattus. Si malgré tous vos efforts vous n'êtes pas parvenus à tuer une seule tunique bleue, le grand Manitou vous fait remarquer que le royaume des ombres est désespérément « VIDE ! ». Vous vous rappelez certainement avoir lu au cours du chapitre précédent que les deux derniers caractères graphiques définis en début de programme étaient destinés à l'affichage du score. Une fois superposées et «soudées», ces deux matrices de points représentent un... vautour, que vous verrez apparaître à l'écran par le biais des lignes suivantes que vous ajouterez : 5030 COLOR CO,7 : ATTRBO,O 5040 IF PV = 5 THEN PH = P2 5050 IF PV = 7 THEN PH = P 1 5060 LOCATE PH,PV — 1 . PRINTGR$(8) 5070 LOCATE PH,PV PRINT GR$(9) 5080 ATTRB1,1.RETURN N'est-ce pas plus «amusant» qu'un simple résultat chiffré ? Notre long travail de préparation et de mise au point s'achève sur ces dernières lignes. Il vous suffira de fusionner à ces routines les lignes du programme «JEU. l » que vous avez sauvegardé lors du précédent chapitre. Utilisez pour cela la commande MERGE, et n'oubliez surtout pas de réenregistrer le tout une fois cette opération terminée. Vous disposerez alors d'un programme de jeu com- plet que vous pourrez faire tester à votre entourage avant de vous lancer dans la création de vos propres oeuvres. L481 UNE BANQUE DIMAGES renez plaisir à utiliser votre ordinateur Si vousP p tie effacé par un second disque de la même couleur comme planche à dessins, vous avez certainement que le fond (code —1). Les lignes 100 à 150 dessi- dû regretter de ne pas pouvoir vous affranchir du nent deux pyramides de couleur rouge, tandis que programme de tracé pour afficher vos oeuvres à les lignes 160 à 250 tracent une série de lignes l'écran. Réjouissez-vous, car vous allez apprendre ici bleues qui concourent à donner une certaine profon- qu'il est possible de stocker des images sur cassette, deur à l'image finale indépendamment du programme de création. LUNES : AFFICHAGE

Création d'une image Commençons, si vous le voulez bien, par dessiner une image en couleurs. Le programme suivant met en place un paysage futuriste qu'il vous sera peut-être donné, un jour, d'observer réellement : LUNES : PROGRAMME 10 CL5:SCREENO,0,0 20 YO=O:XO=222:R=96:D=YO-R:R1=R:R2=Rt2:C 0=10 3e GOSUB500 40 YO=O:XO=12R=96:D=YO-R:R1=R:R2=Rik2:C O=- 1 50 GO5UB500 60 YO=30:XO=50:R=22:D=YO-R:R1=0:R2=R%2:C 0=3 70 GOSUB500 80 Y0=30:XO=23:R=22:CO=-1:GOSUB500 90 BOXF(0.112)-(319,199).1 100 FOR I=0 TO 80 110 LINE(30.96)-(I.112).f 120 NEXT 130 FOR I=40 TO 160 140 LINE(90.88)-(I 112)11 150 NEXT 160 FOR I=0 TO 319 STEP 20 NÎ[160.112)-(I.199).-5 Maintenant que nous disposons d'une image, nous 180 NEXT allons apprendre à la sauvegarder sur cassette. Pour cela, quelques mots sur la manière dont le M05 stocke des graphismes en mémoire, sont nécessai- res. Sachez donc que la page écran de votre ordina- teur se trouve située entre les adresses mémoire 0 et 8191, et qu'elle occupe 8K-octets. Il s'agit, pour être

plus précis, d'une double page, la première assurant le stockage des points du dessin, et la seconde celui de leurs codes couleurs. 190 FOR I=1 TO 12 Pour enregistrer notre paysage sur support magnéti- 213 L=I 11 I - 10 LINE(0 - ,? ,-5 1 ] 4 + L ) ( 3 1 9 . 1 1 4 + L que, nous allons devoir, dans un premier temps, sau- I 2SQ ENDT 500 REM SPGM DISQUE PLEIN la forme», puis, au cours d'une seconde veparder « p 510 FOR Y=R1 TO R2 b S20 BC=SQR((Rt2)-((R-Y)+2)l étape, préserver les couleurs. Cette double opération 530 i' LI NE(XO-BC.D+YI-(XO+BC.D+Y1,C0 Y Y 550 PETURN se fera par l'intermédiaire des lignes suivantes

230 POKE &HA7CO,PEEK(&HA7CO) OR 1

240 SAVEM "FLUNES", &H0000,&H1F40,&H0000 250 POKE &HA7CO,PEEK(&HA7CO) AND 254 260 SAVEM "CLUNES", &H0000,&H1F40,&H0000 270 END Ces lignes méritent quelques éclaircissements, en

raison même des notions nouvelles qu'elles introdui- sent. L'instruction POKE vous permet d'écrire direc-

tement dans la mémoire de l'ordinateur, tandis Les lignes 20 à 70 initialisent un certain nombre que son opposée, PEEK, lit le contenu d'une case de variables, puis elles font appel, par quatre fois, à mémoire. La ligne 230 signifie par conséquent que une routine de tracé d'un disque plein débutant en l'on va déposer à l'adresse mémoire &HA7CO un ligne 500. Le premier motif qui apparaît à l'écran nombre IMPAIR, afin d'indiquer au M05 qu'il doit est un demi-disque de couleur jaune pâle (code 10). sauver la «forme», le tracé de notre dessin. La sau- Ce dernier,. comme le suivant d'ailleurs, est en par- vegarde proprement dite, est effectuée par la com-


49

leur 'ssi que unes fon .a: o-'_ us ur ~1- et re nt ui j-u-le ,n mande SAVEM, suivie des adresses de départ et de tin de zone mémoire à sauvegarder (ici, la page (cran). Le troisième paramètre utilisé spécifie l'adresse à partir de laquelle le programme devra être rechargé en mémoire lors de son rappel. Les adresses sont toutes exprimées en HEXADÉCIMAL, un système qui utilise une base de 16, au lieu de notre habituelle base de 10 (système Décimal). Comme il n'existe en tout et pour tout que 10 chiffres (0 inclus), la notation hexadécimale utilise également les lettres A, B, C, D, E, et F. Le processus de sauvegarde se répète aux lignes 250 et 260, mais il s'agit cette fois d'enregistrer les couleurs. C'est donc un nombre PAIR qui sera écrit à l'adresse &HA7CO. Lorsque vous aurez recopié ces lignes, relancer l'exécution de votre programme LUNES, sans oublier de mettre votre magnétophone en position <ENREGISTREMENT>. La sauvegarde est plutôt lente, car il s'agit pour l'ordinateur d'enregistrer l'équivalent de 2*8*1024 = 16 384 caractères. Lorsque votre magnétophone se sera arrêté, éteignez quelques ins- tants votre ordinateur, pour vider la MEV de son contenu, puis rallumez-le et recopiez ces quatre lignes : 10 CLS : POKE &HA7CO, PEEK(&HA7CO) OR 1 20 LOADM "FLUNES" 30 POKE &HA7CO,PEEK(&HA7CO) AND 254 40 LOADM "CLUNES" Vous retrouvez les instructions POKE et PEEK précédemment employées, mais la commande SAVEM a été remplacée par LOADM suivie du nom du programme. Rembobinez votre cassette de manière à positionner votre bande avant le début du fichier image, mettez-vous en <LECTURE>, et tapez RUN : LUNES / TRACE DE LA FORME : AFFICHAGE alors l'image obtenue selon le procédé expliqué plus haut, et à la suite de la précédente. Un seul pro- gramme de chargement suffira à commander l'apparition de vos images à la suite l'une de l'autre, chaque nouveau dessin appelé effaçant le précédent : PARIS 2500 10 CLS::SCREEN 8,15,0 0 BOXF(80,241-(231,159) 30 BOXF(112,20)-(200,24) 40 BOXF(120,17)-(192,20) 50 BOXF[128,15(-(184.)7) 60 BOXF)136, 14)-f 176,15) ,0 BOXF(77,28(-(234,33) 80 BOXF(75,48)-(236,52) 90 BOXF(77,531-(234,55) 100 X0=155:R1=0:R=28: R2R:^=03-R: C016 :G05UB 500 120 BOXF(127,104)-(183,159),CO 130 BOXF(78,100)-(128,104),8 140 BOXF(182,100(-(233,104(,8 150 XO=155:R=20:R2=Re2:D=108-R: CO=3:GOSU B 500 160 BOXF(O.160)-(319,199),8 170 FOR I=16 TO 48: LI NE [32.96]-[I .160),8

NEXT

130 FOR I=8 TO 24LINE(16,112)-(I,160'.3 :NEXT 190 BOXF(272,88)-)280,160),8 200 5OXF€264,1121-(272,160),8 210 5OXF(288,96)-(304.160,,8 220 LI=159 230 FOR I=1 TO 8 240 LI=LI+I 259 LINE(O,LI+I)-(314,L(+I ).0 260 NEXT 270 FOR I=0 TO 319 280 LINE(155,160 )-(I.199).-2 290 NEXT 400 IF INKEY$O' THEN END ELSE GOTO 400 500 FOR Y=R1 TO 62 510 TRAIT=5QR((Rt2)-((R-Y)t2)) 520 LINE(XO-TRAIT,D+Y1-(XO+TRAIT,D+Y),C 0 530 NEXT Y 540 RETURN n s e e 1 t L'ordinateur charge en premier lieu la «forme» du dessin et affiche cette dernière en deux couleurs seulement. Ce n'est qu'une fois la forme en place qu'il entreprend la mise en couleurs. Si vous vous sentez prêt à commencer une banque d'images, entrez le programme ci-après. Enregistrez


Arrivé à ce stade déjà avancé de la programmation, vous devriez devenir beaucoup plus exigeant en ce qui concerne la présentation de vos affichages. Jusqu'ici, nous nous sommes surtout préoccupés de découvrir de nouvelles manières de faire, sans trop nous soucier de la mise en page des données affichées. Nous avons bien mis un gros titre ici et là, tenté de centrer nos lignes de texte. Il y a cependant mieux à faire, et les quatre pages qui suivent vont être uniquement consacrées à la présentation des données numériques dans un premier temps, des données chaînes en seconde partie. verti en chaîne de caractères par le biais de la fonction STR$. Cette opération est nécessaire car l'« espace» est un caractère que l'on ne peut additionner qu'à d'autres caractères. On calcule ensuite la différence existant entre la longueur L de X$ et la longueur de base LB. Le résultat de cette soustraction est stocké dans la variable DIF. Celle-ci sert de valeur limite à la boucle des lignes 110-130 dont le rôle est d'ajouter DIF espaces à la chaîne X$. Il ne reste plus ensuite qu'à afficher X$ : NOMBRES ALIG Aligner des nombres aléatoires Commencez par entrer puis exécuter ce court programme : GRAMME 10 CLS 20 PRINT TAB(3) 'PRE55EZ UNE TOUCHE POUR COMMENCER; 30 IF INKEY$=" THEN X=RND:GOTO 30 40 CLS 50 FOR I=1 TO 20 60 X=INTtRNDU100+1) 70 PRINT TAO(17) X 80 NEXT 90 END 10 CL5 20 PRINT TAB(3) 'PRE55EZ UNE TOUCHE POUR COMMENCER 30 IF INKEY$=°" THEN X=RND:GOTO 30 40 CL5 50 LB=3 60 FOR I=1 TO 20 70 X=INT(RND7[100+1) 80 X$= STR$(X) 90 L=LEN(X$) 100 DIF=LB-L 110 FOR J=1 TO DIF 120 X$=° °+X$ 130 NEXT J 140 PRINT TAB(17) X$ 150 NEXT I 160 END Après l'habituelle initialisation du générateur de nombres aléatoires (lignes 20 et 30), le programme tire au hasard vingt nombres entre 1 et 100, puis les affiche à l'écran à partir de la 17e colonne. Vous pouvez constater que dizaines et unités ne sont pas toujours alignées, ce qui nuit à l'esthétique de ce tableau et rend malaisé le repérage des valeurs affichées. Ceci tient évidemment à ce que les nombres n'ont pas tous même «longueur» et qu'ils sont néanmoins écrits à partir d'une colonne initiale commune. L'une des solutions à ce problème consisterait à ajouter devant chacune de ces valeurs un certain nombre de «blancs», de manière à obtenir des chaînes d'égale longueur. Cette opération entraîne quelques modifications du programme précédent. On choisit en 50 une longueur de base LB pour l'ensemble des nombres. Les nombres générés pouvant être compris entre 1 et 100, 3 chiffres maximum nous sont nécessaires. Le programme tire ensuite un nombre au hasard. Ce nombre est con- 4 55 8 14 79 23 56 72 32 35 73 26 5 48 40 7 14 95 64 52 OK Assurez-vous maintenant que ce programme fonctionne avec des nombres réels (non entiers). Pour cela, changez comme suit les lignes 50 et 70 : 50 LB = 12 70 X=RND.100+1 1 puis tapez RUN <ENTRÉE>. Les nombres ne sont plus du tout alignés ce qui s'explique par le fait que la longueur de leur partie décimale n'est plus prévi-

(.~)r jdi ait(' > et cac de t le 11C leur nt ze 'i- 51 sible. Rassurez-vous, il existe un moyen permettant d'aligner des nombres à virgule, et ce beaucoup plus simplement que ne le faisait le précédent programme. Si vous n'avez pas sauvegardé sur cassette le pre- mier programme de ce chapitre, recopiez-le (sans omettre de détruire le programme courant par NEW) puis ajoutez-y les lignes suivantes : 45 C$ _ °: 140 PRINT TAB(17) " , : PRINT USING C$ ; X A l'exécution, les nombres s'alignent comme à la parade ALIGNEMENT DES NOMBRES A VIRGULE rn 86.55600 7 54.044.90 20. 7920 27.43730 67. 49590 29.88920 76.07630 48.12170 58.20570 5.08014 6.07109 54. 22140 76.66770 57.78530 44.70360 8.42555 91.17590 28.57480 81.49390 56. 91950 OK La ligne 45 définit un «format» pour toutes les valeurs que vous allez afficher. Les nombres tirés étant compris entre 1 et 100, nous avons besoin de trois chiffres avant la virgule. Pour ce qui est de la partie décimale, libre à vous de n'en conserver que six, quatre, voire deux seulement. Le premier signe dièse de la chaîne C$ représente les centaines, le second les dizaines, et le troisième les unités. Un nombre ne comprenant qu'un seul chiffre avant la virgule sera automatiquement cadré à droite, comme s'il s'écrivait OOX.XXXXX. La définition du format est suivie, au moment de l'affichage, d'une instruction répondant à la syntaxe suivante : PRINT USING Chaîne avec format; vanable(s) numérique(s) Établir une facture En guise de programme d'application à l'instruction PRINT USING nous allons dresser une facture dans laquelle tous les nombres seront alignés afin de faciliter la lecture du total. Le programme FACTURE vous invite à rentrer le nom de 10 articles (12 lettres maximum), puis leur prix, et la quantité désirée (lignes 40 à 90). La ligne 110 définit un format comprenant trois séries de dièses séparées par des espaces et des signes «: ». La définition de votre for- mat peut en effet inclure des lettres, voire de petits textes. L'instruction PRINT USING apparaît tout d'abord en 230. Elle utilise 3 variables (P, Q et T). On la retrouve en 290, dans un format différent, pour l'affichage du montant de la facture : FACTURE 10 CL5:SCREENO,7.7 20 DIN F$(10.3Y 30 C$='ARTICLE- 40 FORI=1 TO 10 50 PRINT C$,I:1NPUT", F$(I,1) 60 INPUT, PRIX ..........P$11,2) 70 INPUT°QUANTITE......F$1I,3) 80 PRINT 90 NEXT I:SCREEN0,3.3 100 CL5: 5CREEN0,3,3 110 C$=°:$#s.**: *** '***$** ##° 120 ATTRBI,1 :COLOR4,3:LOCATE 13.1:PRINTFACTURE5:COLOR0,3 130 LINS(13.4-(13.17) ::LINE(20.4-(20 .171 :°:LINE(294)-(29,17) 140 LINE(0.31-t393)- :LI NE(0.5)-(395) 150 ATTRB0,0:COLOR0.3 160 LOCATE 4.4:PRINT°ARTICLE°:LOCATE15.4 PRINT°PRIX°:LOCRTE21 .4: PRI NT~QUANT ITE': LOCATE 31.4:PRINT°TOTAL 170 PV=6 180 FOR 1= 1 TO 10 190 LOCATEO,I+PV:PRINT F$(I,1). 200 P=VAL(F$[I,2)Y 210 Q=VAL(F$(I.33 220 T=PIQ:TL=TL+T 230 PRI NT TAB(13:°,T6B(14)PTAB(20): TAE123) Q; TAB(29Y°:,TAB(31) T 240 NEXT 250 LINE(0.18)39,18-' 260 COLOR 1,3:LOCAT E31, 20,0:PRINT°TOTAL' 270 LOCATE30. 22.0:PRINT TL 280 COLOR0.3:LOCATE0.0.0 T~ ~4



IAI~ 4.2 t


44x5 S ter,. i. ;. 2 T 9.55

6 t l.7 .


_____H MISE EN PAGES / 2 Après les nombres, nous allons nous pencher sur le cas plus complexe des chaînes de caractères, en abordant le problème de la «justification» d'un texte. Découpage en mots Lorsque vous tapez un texte sur une machine à écrire ou sur votre ordinateur, tous les caractères de gauche se trouvent alignés sur une même colonne. On parle alors de justification à gauche. Quand vous lisez un journal, un magazine, un livre (celui-ci par exemple), vous constatez que le texte est également justifié à droite, ce qui donne lieu à des colonnes de mots bien nettes et, partant, plus agréables à lire, dans lesquelles les fins de paragraphes se détachent distinctement. Pour arriver à un tel résultat, les typographes font varier l'écartement entre les lettres et les mots, de manière à obtenir des lignes d'égale longueur. Sans prétendre parvenir à une telle régularité, nous allons simuler à notre manière ce procédé. Notre première étape consistera à découper en mots chacune de nos phrases. Rappelez-vous qu'un mot n'est autre qu'un groupe de lettres encadrées de deux espaces, ou encore d'un espace et d'un signe de ponctuation. Nous laisserons de côté ici les signes de ponctuation. Pour découper une phrase, nous allons la faire «lire» à l'ordinateur caractère par caractère, en lui précisant de s'arrêter dès qu'il rencontrera un espace. Ceci se traduira par le programme suivant : DÉCOUPAGE EN MOTS : PROGRAMME 10 CLS:DIH MOT$)301 20 PRINT'ENTREZ UNE PHRASE D'UNE LIGNE H AXI MUH :PRINT 30 LINEINPUT, LIGNE$ 40 PRINT 50 GOSUB 1000 60 FOR I=1 TO B 70 PRINT MOT$(I) 80 NEXT 90 END 999 REM Découpage de la phrase en mots 1000 PHRASE$=LIGNE$+- ~ 1010 LG=LEN(PHRASES) 1020 A=1:B=1 1030 IF HID$(PHRASE$,A,1)O CHR$(32) THE N A=A+I:GOTO 1030 1040 HOT$(B)=LEFT$(PHRASE$, A-1) 1050 IF HOT$(B)=- ° OR MOT$(B)=" THEN B =B-1 1060 PHRASE$=MID$(PHRASE$,A+1.LG) 1070 LG=LEN(PHRASES) 1080 IF LG>0 THEN A=1:B=B+I:GOTO 1030 1090 RETURN Après avoir dimensionné un tableau de 30 éléments (c'est plus que suffisant) pour le stockage des mots, le programme invite l'utilisateur à entrer au clavier une phrase tenant sur une ligne d'écran (30). Celle-ci est introduite dans la mémoire du M05 au moyen d'une instruction LINE INPUT (on peut ainsi taper point virgule et deux points). Ceci fait, le pro- gramme se branche à la routine débutant en ligne 1000. On commence par rajouter un blanc en fin de ligne, afin que l'ordinateur soit à même de détecter le dernier mot de la phrase, puis on passe au découpage proprement dit. La ligne 1030 pourrait s'exprimer comme suit : « Si la lettre occupant la position A n'est pas un espace, passe à la lettre suivante, puis répète l'opération». La variable A est incrémentée tant qu'aucun espace n'apparaît. Lorsque cela se produit, le programme se branche en 1040 afin de constituer le premier mot du tableau MOT$. On supprime alors de la ligne le mot ainsi formé (1060) puis on revient en 1030. Le processus se répète tant qu'il reste des lettres dans la phrase. Quand LG prend la valeur 0, le sous-programme se termine et l'on revient au programme principal. Il ne reste plus alors qu'à vérifier par PRINT que tout s'est bien passé : DÉCOUPAGE EN MOTS : AFFICHAGE ENTREZ UNE PHRASE D'UNE LIGNE MAXIMUM JE VAIS DECOUPER CETTE PHRASE EN MOTS JE VAIS DÉCOUPER CETTE PHRASE EN MOTS OK Notez que cette routine pourrait servir, moyennant quelques menus changements, à rechercher un mot dans une phrase, ou encore à générer des textes «à trous». Revenons cependant à ce qui nous occupe. Maintenant que vous savez découper une phrase en mots, il ne vous reste plus qu'à écrire le programme de justification proprement dit, puis à prévoir l'introduction et le traitement de votre texte. N'effacez surtout pas le programme précédent par un NEW, car vous seriez obligé de retaper intégralement la routine des lignes 1000 et suivantes. Enregistrez le tout sur cassette puis tapez DELETE 10 — 90 <ENTRÉE>. Cela fait, recopier les lignes ci-après. La ligne 10 est très importante. Elle contient en effet une fonction essentielle au bon déroulement du programme. Vous savez utiliser CLEAR pour réserver de la place mémoire pour vos caractères graphiques. Ici, CLEAR a pour rôle de mettre de côté

53 { TEXTE / INTRODUCTION ET TRAITEMENT 1 TEXTE / JUSTIFICATION : PROGRAMME C en d C sse ur 3nt tre est )rs- en eau nsi 3ÜS se. se Il )ut nt ot (à ie. mn o- ~é- ,e. ir es. 'E u- ~n 1 lu

é

10 CLS:CLEARI0000 2001M MOT$(30),L$(50) 30 PRINT 'ENTREZ DES PHRASES D'UNE LIGNE MAXIMUM' 40 PRINT 'TAPEZ <FIN> POUR TERMINER°:PRI NT 50 CONSOLE 3,24,0 60 CT=1:ST=0 70 FOR I=O TO 1 STEP ST 80 LINEINPUT L$(CT) 90 L=LENIL$(CT)I:IF L>39 THEN PRINT °T ROP LONG! RECOMMENCEZ':GOT 080 100 IF L$(CT)=°FIN° THEN CT=CT-1:CONSOL E0.24.0, 0:GOTO130 110 CT=CT+1 120 NEXT 130 CLS 140 FOR I=1: TO. CT 150 LIGNE$=L$(I) 160 GOSUB 1000:REM Découpage en mots 170 GOSUB 2000.:REM Justification 180 L$(I)LIGNE$:RRIHT L$(I). 190 NEXT I 200 END 10 000 octets de la mémoire vive du M05 pour l'utilisation de variables chaînes. Par défaut le M05 ne leur réserve en effet que 300 octets, ce qui s'avère insuffisant lorsqu'il s'agit de manipuler des textes entiers. En règle générale, faites appel à CLEAR chaque fois que vous emploierez un nombre élevé de variables chaînes. Si vous souhaitez connaître la place dont vous disposez pour vos chaînes de caractères, tapez FRE(X$). FRE vient de l'anglais FREe, ou «libre ». Cette fonction retourne le nombre d'octets encore utilisables pour les chaînes. Lorsque vous mettez votre ordinateur sous tension, PRINT FRE(X$) affiche la valeur 300. La ligne 20 dimensionne deux tableaux. Le premier est réservé aux mots, le second aux lignes (si vous pensez taper des textes de plus de 50 lignes, augmentez l'indice entre parenthèses). L'introduction des phrases du texte s'effectue entre les lignes 70 et 120. Pour indiquer au M05 que votre texte est terminé, il vous suffira de taper le mot « FIN ». On utilise LINE INPUT pour les mêmes raisons que celles énoncées dans le programme précédent. La ligne 90 contrôle la longueur de chaque ligne tapée (39 caractères maximum). Si votre ligne s'avère trop longue, l'ordinateur vous invitera à recommencer. Remarquez qu'une fenêtre a été créée (instruction CONSOLE en ligne 50) afin que les lignes 30 et 40 restent affichées pendant toute la saisie du texte. Celle-ci terminée, la boucle des lignes 140 à 190 envoie chacune des lignes au sous-programme d'extraction des mots (lignes 1000 et suivantes), puis à la routine de justification (lignes 1999-2190). Les lignes 2000 à 2060 placent un espace en fin de chaque mot, sauf du dernier, pour reconstituer la phrase originelle. Si la ligne ainsi reformée est de même longueur que la largeur de l'écran (variable LM), la justification est inutile, et l'on retourne au programme principal. Sinon, on ajoute un blanc supplémentaire au premier mot, et l'on vérifie de nouveau si l'on a atteint la valeur LM. Dans l'affirmative, on quitte la routine, sinon on rajoute un espace au second mot, et ainsi 1999 REM Justi+'ication 2000 LIGNE$=°' 2010 LM=39 2020 FOR J=1 TO B-1 2030 MOT$(JI=MOT$(J)+° 2040 LIGNE$=LIGNE$+MOT$(J) 2050 NEXT J 2060 LIGNE$=LIGNE$+MOT$(B) 2070 IF LEN(LIGNE$)=LM THEN RETURN 2080 BL=LM-LEN(LIGNE$) 2090 FOR J=1 TO B-1 2100 LIGNE$=" 2110 MOT$(J)=MOT$(J)+° °:BL=BL-1 2120 FOR K=1 TO B-1 2130 LIGNE$=LIGNE$+MOT$(K) 2140 NEXT K 2150 IF LEN(LIGNE$)+LEN(MOT$<B))=LM TH EN LIGNE$=LIGNE$+MOT$(B):RETURN 2160 NEXT J 2170 LIGNE$=°' 2180 GOTO 2090 2190 RETURN de suite, jusqu'à ce que la longueur de la ligne soit égale à LM. JUSTIFICATION : AFFICHAGE MAITRE CORBEAU SUR UN ARBRE PERCHE TENAIT EN 50N BEC UN FROMAGE. MAITRE RENARD, PAR L'ODEUR ALLECHE. LUI TINT A PEU PRES CE LANGAGE: 'EH, BONJOUR, MONSIEUR DU CORBEAU ! QUE VOUS ETES JOLI, QUE VOUS ME SEMBLEZ SEAU ! SANS MENTIR, SI VOTRE RAMAGE 5E RAPPORTE A VOTRE PLUMAGE, VOUS ETES LE PHENIX DES NOTES DE CE BOIS.' OK Remarquez que la justification porte sur tout le texte, même là où elle se révèle inutile, comme c'est le cas dans la dernière ligne. Pour corriger cela, terminer les lignes que vous ne désirez pas traiter par un symbole peu usité, le « » par exemple, puis rajoutez à votre programme un test permettant la détection de ce symbole en fin de ligne : 155 IF RIGHT$(LIGNE$,1) = "e"" THEN GOTO 180 Vous noterez que l'exécution de ce programme n'est pas très rapide, l'ordinateur devant lire chaque phrase introduite lettre par lettre. Pour remédier à cela, on peut déjà limiter la justification aux seules phrases dont la longueur est différente de la valeur LM. Ceci nous amènerait à introduire en 154 le test suivant : 154 IF LEN(LIGNE$) = LIVI THEN GO FO 1 ti0 Après avoir tapé ce programme, vous n'aurez plus d'excuses pour ne pas écrire des lettres ou des rap- ports totalement justifiés. 54 LE DÉPISTAGE DES ERREURS A mesure que vos talents de programmeur iront se développant, vous écrirez des programmes de plus en plus .longs dans lesquels il deviendra parfois malaisé de découvrir les erreurs. Le M05 vous signalera, les fautes de syntaxe qu'il rencontrera en cours d'exécution, mais il ne vous dira rien de ces fautes qui font qu'un programme «tourne» sans pour autant fournir le résultat escompté. Dans ce chapitre, nous allons voir comment il est possible de dépister ce type d'erreurs, puis nous essayerons de traduire en clair les messages codés et laconiques générés par l'ordinateur. Quelques techniques de dépistage Dès qu'un programme dépasse 25 lignes, il sort des limites de l'écran. Il devient alors impossible d'en avoir une vision globale, à moins de disposer d'une imprimante et d'en tirer une copie sur papier. Le dépistage des erreurs s'en trouve compliqué, car il vous faut sans cesse faire défiler des morceaux de programme parfois fort éloignés les uns des autres. Si votre programme fonctionne mais ne répond pas exactement à ce que vous en attendiez, essayez de déterminer mentalement, ou à l'aide d'un papier et d'un crayon, son déroulement pour une situation et des valeurs données. Si vous ne trouvez pas l'erreur, essayez de remplacer vos variables par des constantes, puis calculez par vous-même le ou les résultats que devrait vous fournir l'ordinateur. Ce procédé se révèle très pratique en cas d'utilisation de valeurs aléatoires. Il se peut en effet que le nombre généré sorte des limites admises par le programme (vous avez employé des valeurs trop faibles, ou trop importantes dans votre fonction RND). Pour affiner votre recherche, n'hésitez pas à parsemer votre programme d'instructions STOP. Elles vous permettront en effet de déterminer l'état de vos variables à un moment précis du déroulement du programme. Dès que le résultat affiché déviera de la valeur attendue, il vous suffira de relire les lignes précédentes, jusqu'au dernier STOP rencontré. Si malgré tout cela votre programme persiste dans sa « fantaisie », ayez recours au mode «trace». Le mode TRACE Ainsi appelé parce qu'il inscrit à l'écran une trace matérielle et tangible du travail fourni par l'ordinateur, ce mode vous permet de suivre le déroulement d'un programme ligne à ligne. Les numéros des lignes déchiffrées puis exécutées s'affichent sur votre écran de visualisation entre crochets. Il devient alors aisé de contrôler que tel branchement s'est correctement effectué, ou encore que le programme n'a pas «oublié» quelque ligne importante. Rien ne remplaçant un exemple concret, entrez au clavier le programme TRACE. Étudiez-le soigneusement, puis essayez d'en refaire le déroulement «à la main». Lorsque vous aurez déterminé avec exactitude le cheminement logique de ce programme, et. que vous serez capable de prévoir quel numéro de ligne suivra le précédent, lancez son exécution par un RUN, non sans avoir préalablement tapé la commande suivante : TRON <ENTRÉE> : LE MODE TRACE: PROGRAMME 10 CL5:5CREEN 0.7,7 211 FOR I= 1 TO 5 311 GOSUB 100 40 NEXT 50 END 100 COLORO:PRINT TAS(3) I,:COLOR 4:PRINT TAB(10) I?2; 110 COLOR I:PRINT TAB(20) It3 120 RETURN. Votre écran se couvre de nombres colorés inscrits entre crochets. Ce sont vos numéros de lignes. La ligne 10 n'apparaît pas ici, car elle renferme la commande CLS qui efface l'écran. Vous pouvez constater que votre programme lit les lignes 20 et 30 avant de se brancher en 100, comme il le lui est spécifié. Il exécute le sous-programme (notez au passage les changements de couleurs) et affiche les résultats des calculs que vous lui demandez d'effectuer. Arrivé à l'instruction RETURN de la ligne 120, l'ordinateur revient au programme principal en 40 pour un non veau tour de boucle. Ce cheminement devient par ticulièrement net en mode trace (TRON signifie TRace ON). Si vous souhaitez sortir du mode trace, tapez simplement TROFF (TRace OFF). Lorsque le programme est long, il devient aussi dil ficile de lire les nombres entre crochets qui défilent. à l'écran que les lignes de la liste d'un programme. Faites précéder votre commande TRON de CONSOL[': 0,24„1. Votre écran passera en mode «défilement lent», et vous aurez ainsi plus de temps pour lire, ce qui s'y affiche. Si vous trouvez cela encore trop rapide, faites porter le mode trace sur des segment;, de programme, en faisant précéder TRON et TROlt de numéros de lignes. Le traitement des erreurs Il n'est jamais très agréable, lorsque l'on exécute tut programme, de voir son déroulement s'interrompir par l'apparition d'un message d'erreur. Il est. j (,,, sible de l'éviter, en plaçant en tête de liste, une iii,, 55 I sc- et de ,ar m-

s

a i- r it s s à r

truction de ce genre ON ERROR GOTO XX XX désigne le numéro de la ligne à laquelle l'ordinateur se branchera chaque fois qu'il rencontrera une erreur. En fonction du contenu des lignes XX et suivantes, vous pourrez soit corriger l'erreur, soit la faire apparaître sous une forme moins succincte que celle à laquelle vous êtes habitué. Quelle que soit l'option pour laquelle vous vous déciderez, sachez que l'utilisation de l'instruction ON ERROR GOTO inhibe l'affichage des messages d'erreur à l'écran. Pour en finir avec les codes d'erreur Si vous en avez assez de consulter fébrilement le manuel utilisateur du M05 chaque fois que vous rencontrez un message d'erreur, voici un programme qui vous évitera toute recherche : 1 MESSAGES EN CLAIR : PROGRAMME 1 3999 REM INITIALISATION TRAITEMENT ERREU RS 4000 DIM ER$(23) 4010 FOR 1=1 TO 23: READ ER$(I):NEXT I 4020 ON ERROR GOTO 4500 4030 RETURN 4499 REM AFFICHAGE ERREURS EN CLAIR 4500 FOR I=1 TO 23 4510 IF ERR=I THEN PRINT TA5 2) ER$(l)+ en ERL:GOTO 4530 4520 NEXT I 4530 IF I=11 THEN RESUME NEXT ELSE RESUM E 4999 REM MESSAGES EN CLAIR 5000 DATA NEXT sans FOR -,Erreur 0e syn taxeA,-9RETURN sans GOSUE ,~READ sans DAT At,~Argument -0a6ction incorrect ',Nombre trop grand .Plus de place en mémoires, Numéro de ligne inconnu-,Rlnaice,' trop g rand','Tableau déjà dimensionné 5010 DATA Division par 0",'Impossible_e n commande directe.Type pe variable in Correct",Plus de place pour les chaines ,Formule chaine trop complexe",Formul trop Complexe", ImpOSSib.1e de Continue r'. Fonction non dé€inie','pas de RESUME. 5020 DATA 'RE5UME sans ERROR ."Erreur no n définie','Il manque un opérande'.'FOR sans NEXT, Les lignes de DATA renferment les messages en toutes lettres correspondant au 23 premiers codes d'erreurs générés par le M05. Par exemple, le message «NEXT sans FOR» se rapporte à l'erreur de code 1. Le sous-programme des lignes 4000 et sui- vantes débute par l'initialisation du tableau destiné à contenir les nouveaux messages d'erreur. Ces lignes devront être exécutées au début de votre programme par un GOSUB 4000. Les lignes 4500 et suivantes nécessitent quelques explications en raison des nouvelles fonctions qui y figurent. La ligne 4510 renferme les fonctions ERR, qui retourne le numéro de l'erreur détectée, et ERL, qui renvoie le numéro de la ligne dans laquelle se trouve l'erreur. La boucle des lignes 4500-4520 examine successivement la liste des 23 codes d'erreur. Dès qu'a été trouvé le nombre correspondant à l'erreur, le programme va chercher dans le tableau ER$ le message approprié, puis il le fait suivre de la mention « en » ERL. Il faut alors reprendre l'exécution à l'endroit même où elle a été interrompue. C'est le rôle des instructions RESUME et RESUME NEXT, qui agissent de façon analogue à RETURN. La première fait reprendre le déroulement du programme à l'instruction ayant provoqué l'erreur, la seconde à l'instruction immédiatement postérieure. Le test de la ligne 4530 distingue deux cas. Si l'erreur est du type «Division par zéro », le programme se branche à la ligne qui fait suite à la dite division, sinon il revient à la ligne contenant l'erreur. Lorsque vous aurez recopié ces lignes, sauvegardez le tout en tapant SAVE "nom du sous-programme »,A En agissant de la sorte, vous pourrez inclure cette routine à tous vos programmes, et en faciliter ainsi la mise au point. Voici pour terminer un exemple d'utilisation de ces lignes. Sans effacez ce qui précède, recopiez ce court programme puis exécutez-le : 10 CLS 20 GOSUB 4000 30 INPUT N1,N2 40 PRINT N1 ; "/";N2;"=";N1/N2 50 GOTO 30 L'utilisateur entre les deux termes d'une division dont le résultat est déterminé et affiché par l'ordinateur : TRAITEMENT DES ERREURS : AFFICHAGE 140.,8 140 Î 8 = 17..5 99,6 99 ', 6 = 16.5 28.0 26/0 Div ilion par 0 en 40 8432,7.4 84.32 /.7.4 = 1139.46. ? 99999999999999999999999999999999999999 99,123456789 Nombre trop grand en 30 7 9999999999999999999999999999999, i23456 789 IE+31 / 1.23457E+08 = 8.1E+22. ?::732,45 732 / 45 = 16.2667 - - u RECRÉER LE MOUVEMENT Les animations étudiées jusqu'ici concernaient principalement le déplacement latéral d'objets fixes (voiture de pompiers, petit train, etc.) et ne mettaient généralement en cause qu'un nombre limité de caractères graphiques définis par l'utilisateur. Nous allons nous attaquer maintenant à un problème plus complexe, puisqu'il va s'agir ici de reproduire à l'écran les différentes phases du galop d'un cheval. Les quatre phases du galop Pour reproduire le plus fidèlement possible le mouvement d'un cheval au galop, et obtenir par la même occasion une animation non saccadée, nous allons employer quatre images différentes que nous afficherons successivement à l'écran. Chaque image sera formée de 32 caractères graphiques (huit en longueur, quatre en hauteur définis sur les trois écrans suivants), ce qui équivaut à une matrice de 2 048 points : GALOP CARACTÈRES GRAPHIQUES 10 CLS:CLEAR „ 72:CLEAR3000 20 DEFGR$(0)=39.49.16,0,0,0,0,0:DEFGP$(I )248,240,193,3.0.0,0,0:DEFGR$(2)16,112 .224,0.0.0.0.0:DEFGR$(31=7,14,28,64,30.3 .0,0: DEFGR$(4)=231,224,224,224,224,240,1 20.62:DEFGR$(5)=255,255,31,31,31,28,28,2 4: DEFGR$(61=240.224,192,224,1 2,28,12.24 30 DEFGR$(7)=255,255.254,128,0,0,0,0:DEF GR$(8)=255,127,127,127,127,53 ,.31. 15:DEFG =255 128.0.0.0.0,0.0: DEFGR$( 12)=0,0,0,0,0,0,1 5.63:DEFGR$(13)=0.0,0,0,0,0,254,255 40 DEFGR$f14)=0.0.0,0,0,3,31,255:DEFGR$f 15(=0,1,15.63,255.255,255,255:DEFGR$(16) =96,240,248,252,254,255,255,159:DEFGR$(f 71=0,0.0,0,0,0,128. 192 50 DEFGR$(181=3,3.2,2.2,3,3,3:DEFGR$(191 =224,48.24,12,7.3,0,0:DEFGR$(20)=4,24,8, 0.0.0.0,0:DEFGR$121)=24 ,12,6,9 .1.0.0,0:D EFGR$(221=0.0,0,0.0.0,1,3:DEFGR.$(29)=255 .255.127.123.241,225,193.129:DEFGR(24)= 143.128.128,192,192, 192,192.224 60 DEFGR$(25)=255.255,15,1,0,0, O,0:DEFGR $1261=252.248.255.159.7,1 ,3,2:DEFG(27) =0,0.0.0,128,192.96.48: DEFGR$(28)=254.25 S.254.252.0.0.0.01DEFGR$(291=255,255.255 .255.254,252,252,252:DEFGR$(30)=207,135. 3.1.0.0,0,0 70 DEFGR$(31)=128.192,192,192,0,0,0,0:DE FGR$t 32)=0.0.0.0.0,0,0,31:DEFGR$(331=0.0 .0.0.0.0.0.240:DEFGR$(34)=0,0,0.0.0,1.31 •255:DEFGR$(35)=0.0,0,7,31,255,255,2558 FGR$(361=0.0,254.254.255.255,255,255:DE F68$1371=0.0.0,0,0.0.128,128 80 DEFGR$(38)=25,115.2.4,12.24,16.16:DEF 68$)391=32.3264.64 ,64,64,96.48:DEFGR$f4 01=96.48.24, 12.3 ,0,0.0:DEFGR$(431=0,0,0, 0.0.1.3.4:D€FGR$142)=3.7.15.127,248,240, 96.192:DEFGR$)43)=248,240.224.0.0.0,0.0: DEFGR$1441=127,31.0.0,0.0,0.0 90 DEFGR$(45)=255.255.255.12.8,24.16.48: DEFGR$t 46)=248, 248. 124, 30,6,3,1,0: DEFGP$ '4't0 .0 .0.0.0,0.128.192DEFGR$(48)=255. 254.128.0.0.0.0.0:DEFG8$(49)=131.255,255 .255.255.255.255.255:DEFGR$1501=255.255. :>55.254.252.252.248.248:DEFGR$(51)=254.3 1 .15.7.0.0.0.0 GALOP : CARACTÈRES GRAPHIQUES 1 100 DFGR$(52(=0.0.0.0,0,0,7,63:DEF[R$)5 ('=0.0.0.240.248.52252,252:DEFGR$154)= tv.4i~.32.0.@,0,0,0: DEFGR$SSS)=24 .8 .fl ,8 .0. 8.0.8: DEF 68$t56 )=6.3.0.3,1.3.3.1:DEFGR.$I 7t 120.216.240.128,0.0,0,0:DEFGR$(58 i=3 4.15.15.13.8.8.8.8 110 DEFGR$(59'=127.254,252.224.192.64•64 •48:DEFGP$t60 )=255.127.31,31,28,28,56,56 DEFGP$(611=240,224,192,128.0,0.0.0: DEFG U¢!62t=0.31.254.246.0.0 .0 .0: DEFGR$t6812 `S•12'.255.255,255.255,12?. 127: DFSP1(64 255,255,254,254.252,248,240 120 DEFGR¢)65)=207.333.1,0.0.0.0.@:DEFG8 f+65)=128.128.125.0.0,0.0.0:13€FG0$(6')=0 .0.0•@.0.0.0.224: DEFGR$+68 F=0.0.0.0.@.0. 4+.12': DEFt_R$(69)=0.0.0.1.x .32 .255,255: DE '-P$~'0=0.16.60 2'54.254.254.255.25 ( (0 5$=CNP4., 32(:E)$=C11R$t 2'(;FQR 1=1 Tt3 l) ; -P4,' HP1 , :NET : F)$- CHR$ s 11 1 :!-k$.-1t$+ Les lignes 20 à 130 définissent 71 caractères graphiques (le M05 et le T07/70 autorisent la définition de 128 caractères utilisateur!) que les lignes ci-après vont permettre de "souder" en images à la manière d'un puzzle : GALOP : CRÉATION DES IMAGES 140 C3ii1=H;+~+H$+GR$[0)+GFt~i[3)+GR;t2)+ $4 b$+H8$+R$+H$+GR$(3)+88%)4)+GR$(5)+GR$ (6(4B$+8$+HR$+B$+GR$)7)+GR$(8)*N$+fer+0R$ t9)+GR$(f0)+GR$[11)+HR$+3+8$+GR$(12)+GR $1131+8R$(14)+GR%(15)+GR$116)+GR$617) 150 C$(21=8$+GR$)18)+B$+GR$(19)+5$+GR$f2 0)+GR$)21(+B$+HR$+8$+GR$(22)+GR$(231+GR$ (24)+GR$(25)+GR$)26)+GR$(27)+B$+HR$* $+G R$(28)+N$+N$+N$+GR$(29(+GR$(30)+GR$(31)+ HR$+5$+3$+GR$)32)+GR$(33)+GR$(34)+GR$(35 t+GR$(36)+GR$)37) 160 C$)31=GR$198)+B$+B$+$$+GR$(39)+ *G0 $t 481+B$+HR$+GR$I 41)+GR$1421+GR$(43)+GR$ (44)+GR$(45)+GR$(46).+GR$(47)+B$+HR$+B$+G HR$(+B$tB$+H$~+B$+GR$i 52i$+GR$f95 )~+GR$f53~1+ 18$70 C$(4)=H$+GR$f54(+GR$)55)+GR$1561+Gh$ 57)+B$+5$+6$+HR$+B$+GR$(581GR$159(+8$+ G8$(601+G8$(61 )+B$+H$+HR$+8$+GR'$f627+88$ 63 ' + N$ + N$. + ,R¢ (64) +GR$ ( 65) + GR$ (66) +) IR$$+B $+B$+GR¢132)+GR$t67)+GR$(68)+GIR$d69I+GR$ '7@l+B$ La soudure des caractères graphiques s'effectue comme suit : on commence par concaténer les huit matrices composant le bas de l'image, puis on remonte de deux cases écran vers le haut, avant de se déplacer de seize crans vers la gauche (variable HR$). On recommence avec le deuxième "étage", puis le troisième, et le quatrième. Les pièces ainsi "collées" sont affectées à une variable chaîne indicée, ce qui rendra possible l'affichage de chacune de ces images composées au moyen d'une instruction PRINT unique. Sans ce procédé, toute animation quelque peu élaborée se révélerait impossible. Si vous souhaitez contrôler indépendamment chacune de vos quatre images et les afficher simultanément à l'écran, ajoutez à votre programme les lignes suivantes : GALOP : DÉCOMPOSITION DU MOUVEMENTL'animation Il ne nous reste plus à présent qu'à passer à la phase d'animation proprement dite. Pour cela, quelques lignes de programme suffiront : GALOP : L'ANIMATION )hi-ion rès ère ue lit on de )le ne ale au ce se 180 ATTR1.:5CREN3,3 190 LOCATEI,B:PRINT' '+C$(2):LO CATEI.8:PRINT C$)1) 200 LOCATE1,20: PRINT. '+C$(4):L OCATE1,20:PRINTC$(3) 210 LIME(0,88)-(319.88):LIN(0.184 )-[919 .184) 220 ATTRBO,0:LOCATE0,0,0 180. ATTRB1,1:5CREEN7,4,0 190 BOXF(0,152)-(319,199).2 200 FOR R=1 TO 100 210 FOR I=1 TO 4 220 LOCATE1,16,0:PRINT +C$(I) 230 FOR P=1 TO 2:NEXT P 240 NEXT I. 250 NEXT R. 260 END Les motifs son affichés en double hauteur, double largeur (ATTRB 1,1), ce qui nuit peut-être à la définition de l'image mais en améliore la lisibilité. On affiche tout d'abord le cheval n°2 en le faisant précéder d'une série de dix espaces. Avec ces matrices, en effet, l'instruction LOCATE se révèle inopérante, du moins pour ce qui est de la position horizontale. Le cheval n°4 est pareillement affiché. Les lignes tracées grâce à la ligne 230 matérialisent le sol, ce qui nous permet de constater qu'à un moment donné, aucun des sabots du cheval ne touche terre. Ces images ont été dessinées à partir des photos réalisées à la fin du siècle dernier par le photographe Edweard Muybridge qui fut le premier à prouver ce phénomène. Le contour de chacun des chevaux a été décalqué puis reporté sur une feuille de papier millimétré avant d'être converti en matrices de points. Le corps du programme est constitué de trois boucles imbriquées. La boucle d'animation est située entre les lignes 210 et 240. Remarquez que rien n'est prévu pour effacer l'image du cheval avant l'affichage de l'image suivante. Ceci est dû au fait que le cheval reste fixe à l'écran, un peu comme s'il était suivi par un cameraman. Chaque image vient donc effacer la précédente. La boucle de temporisation est réduite, mais vous pouvez l'augmenter si vous souhaitez une animation plus lente : Notre programme s'arrête là, mais il vous reste encore un vaste domaine à explorer. Vous pouvez aar ?_, simulation d'autres mouvements complexes tels que la marche, le vol des oiseaux ou, pourquoi pas, les autres allures du cheval que sont le pas et le trot. A vos matrices! 1 58 LE CRAYON OPTIQUE Disponible en option sur le M05, le crayon optique constitue un prolongement de votre main et vous permet de ' «dialoguer» directement avec l'ordinateur, sans passer par le clavier. Loin d'être un simple «gadget », il offre de multiples possibilités d'utilisation, comme vous allez pouvoir en juger par vous même au cours de ces pages. Réglage du crayon Le crayon optique est un petit instrument en forme de stylo qui capte un point lumineux et le traduit en coordonnées qui sont traitées par l'ordinateur. Avant d'utiliser votre crayon optique, il convient de le régler. Pour cela, il vous suffit de taper en mode direct la commande TUNE. Votre écran vire aussitôt au noir, à l'exception d'un petit trait vertical placé en son centre. Appuyez la pointe de votre crayon sur ce trait. C'est tout! Le crayon optique et les jeux Le crayon optique trouve l'une de ses principales utilisations dans les jeux. Voici par exemple une version informatisée du jeu de « cache-tampon ». Recopiez ce programme, puis lisez les explications le concernant avant d'en lancer l'exécution : CACHE-TAMPON : PROGRAMME 10 CL5:5CREEN 4,3,3 28 PRINT TAB(3) 'PRE55EZ UNE TOUCHE POUR COMMENCER' 30 IF INKE7$=' THEN X=RND: GOTO 30 40 CLS:PRINT TAS(8) 'RETROUVEZ DANS CE C ADRE :PRINT TAS(6) "LE CARRE TIRE PAR LA MACHINE' 50 50X139.39)-1280,176),0 60 A=INT(RND1[29+5):B=I NT(RNDlr17+5) 70 INPUTPEN X,Y:IF X(0 OR Y(0 THEN 70 80 IF X(40 OR X>280 OR 7(39 OR Y>176 THE N PLAY °DOMI":LOCATE 14,23: PRINT"HORS CA DRE':GOTO 70 90 X=X/B:Y=Y/B:IF PTRIG THEN PLAY 'LA' 100 DIF=SQR( (A-X).(A-X)+(5-Y)i(B-Y)) 110 IF DIF(2 THEN LOCATE X.Y:PRINT CHR$( 127):LOCATE 17, 20:PRINT'GAGNE'"::END 120 IF '(I DIF )2 AND DIF(=4 '(EN LOCATE. 16. 23:PRINT 58RULA NT' :LOTO 70 130 IF DIF )4 AND DIF(=6 THEN LOCATE 17, 23:PRINT 'CHAUD' :8070 70 140 LOCATE 14,23:PRINT° ':GOTO 70 Le but du jeu consiste à retrouver un objet (en l'occurence une case écran) caché par l'ordinateur. Pour cela, vous appuyez votre crayon à l'intérieur d'un cadre matérialisé par un rectangle bordé de noir. L'ordinateur vous aidera à localiser «l'objet», au moyen des messages « CHAUD », « TRÈS CHAUD », et «BRULANT» selon que vous en êtes plus ou moins rapproché. Le décor est dressé aux lignes 40 et 50. A la ligne 60, l'ordinateur tire au hasard deux nombres. Ils serviront de coordonnées à la case écran qu'il vous faudra retrouver. La première instruction en rapport avec le crayon optique se trouve en ligne 70. INPUT PEN se comporte de manière analogue à INPUT ou LINE INPUT. Le programme s'interrompt dans l'attente d'une «réponse» de votre part. Celle-ci sera matérialisée par une pression de la pointe du crayon optique sur la surface de l'écran. Le test qui fait suite à l'instruction INPUT PEN contrôle la validité de votre réponse. Les variables X et Y prennent en effet la valeur — 1 (donc < 0) si la luminosité de votre écran est insuffisante, ou si vous pointez votre crayon sur une surface rouge ou noire (ces deux couleurs ne laissent pas passer suffisamment de lumière). La ligne 80 vérifie que vous avez pointé votre stylo à l'intérieur du cadre. Si vous appuyez votre crayon en dehors des limites du rectangle, l'ordinateur vous rappelle à l'ordre par l'émission de deux notes (DO et MI) et l'affichage du message «HORS CADRE». La ligne 90 transforme les coordonnées graphiques X et Y en valeurs compatibles avec la page texte. La fonction PTRIG retourne la valeur « VRAI » si la pointe du crayon est enfoncée. Pour que votre réponse soit validée, vous devez donc pointer dans le rectangle et appuyer la pointe de votre crayon sur le verre de l'écran. L'enregistrement de votre réponse est signalé par la note LA. La ligne 100 calcule la différence existant entre les coordonnées de la case écran que vous avez pointée, et celles de la matrice test choisie aléatoirement en début de partie par l'ordinateur. Si cette différence est inférieure à 2, vous avez gagné (ligne 110), sinon le M05 vous guide à l'aide des messages précédemment cités : CACHE-TAMPON : AFFICHAGE

Le crayon optique et les menus Le crayon optique peut rendre un programme plus «convivial» en supprimant toute intervention au clavier : 1 59 4

~4}r c }
xr

r. ! I l:j }t~: •(iel 1MENU : PROGRAMME 1 10 CL5 20 ATTRBI.1:SCREENO.15,15 30 LOCATE 15.4:PRINT °MENU 40 ATTRBO.0:COLOR 4,15 50 BOXF(64,64)-(71.711,7 60 LOCATE 10,8:PRINT °RECTANGLE° 70 BOXF(64,88)-(71,95).7 80 LOCATE 10 11:PRI NT °TRIANGLE° 90 BOXF(64.112)-(71.119),7 100 LOCATE 10,14:PRI NTTERMINER° 110 LOCATE7a18:PRINT 'Utilisez le crayon Optique- 120 INPUTPEN X.Y 130 IF (X>=56 AND X<=63) AND (Y>=64 AND Y<=71) AND PTRIG THEN C=1 140 IF (X>=56 AND X(=631 AND (Y)=88 AND Y<=95) AND PTRIG THEN C=2 150 IF (X>=56 AND X<=63) AND (Y>=112 AND Y(=119) AND PTRIG THEN C=3 160 CLS 170 ON C GOSUB 200,300,190 180 GOTO 10 190 END 200 50X(40.40)-(280.160),4 210 FOR I=1 TO 1000:NEX 220 PET URN' 300 LINE(160.0)-(0.199) 310 LINE-(319.199):LINE-(160.0) 320 RETURN10 CL5:5CREEN0,7.1 20 BOXF(0.0)-(319.231.1 30 BOXF0.160)-(319.1991.1 40 COLOR 0.S:LOCATE 1.21:PRINT °Encré° 50 LOCATE 1.23:PRINT °Fond°:LOCATE 32.23 :PRINT °CLS" 60 CT=2 70 FOR I=64 TO 288 STEP 32 80 5OX(I-1.167)-fI+16,176).-1 90 BOXF(I.168)-(I+15.175>.CT 100 CT=CT+1 110 NEXT I 120 CT=2 130 FOR L=64 TO 224 5TEP 32 140 BOX (I-1.1$31-(I+16.192).-1 150 BOXF(I.184)->)+15.191>,CT 160 CT=CT+1 170 NEXT I 180 BOX(295.183)-(304.1921,-1:BOXF(296,1 841-(303.1911.7 190 ATT RE 0,1:LOCATE 4.1:PRINT-DE55INER AVEC LE CRAYON OPTIQUE° 200 CONSOLE 3,19 avec un choix de plusieurs couleurs d'encre et de fond. Dans le bas de l'écran, des petits rectangles colorés vous indiquent les encres et les fonds dont vous disposez (70-170). Un dernier rectangle (ligne 190), vous permettra d'effacer votre dessin. La gestion du crayon optique est assurée par les lignes 210 à 350. PALETTE : PROGRAMME l 210 INPUTPEN X.Y: IF X<0 OR Y<0 THEN 210 220 IF Y<152 AND Y>=24 THEN PSET(X,Y) 230 INPUTPEN X.Y:IF X<0 OR Y<0 THEN 230 240 IF Y<152 THEN LI NE-(X.Y):GOTO 230 250 CT=2 260 FOR I= 64 TO 288 STEP 32 270 IF (X)=I AND X<=I+15) AND (Y)=168 AND Y<=175) AND PTRIG THEN PLAY -DO(1I50" :COLOR CT:GOTO 210 280 CT=CT+1 290 NEXT I 300 CT =2 310 FOR I= 64 TO 224 STEP 32 320 IF (X)=I AND X<=I+15) AND (Y>=184 AND Y<=191) AND PTRIG THEN PLAY °DOMI50' :SCREEN.CT:GOTO 210 330 CT=CT+1 340 NEXT I 350 IF (X)=296 AND X<= 303) AND (Y>=184 AND Y<=191) AND PTRIG THEN PLAY °DOMI50" :CL5:GOTO 210 360 END Dans ce menu, accessible même à un très jeune enfant, l'ordinateur propose à l'utilisateur plusieurs options. On peut afficher un rectangle, un triangle, ou encore sortir du programme. Le choix s'effectue par simple pointage d'un carré de couleur blanche à l'aide du crayon optique. Les carrés blancs sont dessinés par les lignes 50, 70 et 90, et remplacent les habituels chiffres 1, 2, 3... On retrouve en ligne 120 l'instruction INPUT PEN, ainsi que le premier test de validité de la réponse. Les tests des lignes 130 à 150 vérifient quelle partie de l'écran a été pointée, en examinant successivement les différentes valeurs que peuvent prendre X et Y. Si X est compris entre 56 et 63, et Y entre 64 et 71 (coordonnées du premier carré), la variable C prend la valeur 1, et le programme se branche en 200 pour le tracé d'un rectangle. Si la partie de l'écran pointée par l'utilisateur ne correspond à aucun carré, le programme retourne en ligne 120. Dessiner avec le crayon optique Pour terminer ce tour d'horizon rapide des possibilités du crayon optique, voici un programme qui vous permettra de dessiner ou d'écrire sur votre écran, EZ

__ 31 trouve un programme autre que celui demandé, il ne le chargera pas en mémoire mais vous signalera ,a présence comme suit : CHARGEMENT ÉCRAN 1 LOADESSAI` Searching Skip: PROG2 BAS Search ing «Skip» signifie «sauter ». Quant à BAS, c'est l'abréviation du mot BASIC. Bien qu'ignorant le programme, le M05 tient à vous signaler qu'il existe et qu'il s'agit d'un programme écrit en BASIC. Lorsque l'amorce du programme d'essai atteint la tête de lecture, l'affichage se change en : CHARGEMENT ÉCRAN 2 LOADESSAI~ Searching Skip: PROG2 BAS Search ing Fouad: E55AI. BAS OK. Ce message signifie que le M05 vient de trouver votre programme et qu'il est occupé à le charger en mémoire. Cette opération terminée, le message OK réapparaît et le magnétophone s'arrête. Pour vous assurer que le programme « ESSAI » se trouve de nouveau en mémoire, tapez LIST ou RUN. Autres possibilités Si vous avez oublié de noter le nom d'un programme, vous pouvez toujours le recharger en tapant LOAD L'ordinateur chargera alors le premier programme rencontré. Vous pouvez également, si vous avez égaré la jaquette d'une de vos cassettes, retrouver les noms des programmes qui y sont enregistrés en commandant par exemple LOAD "ZZZ" Vous pouvez choisir un autre nom à condition, toutefois, que vous soyez sûr de n'avoir aucun programme déjà nommé ainsi. Si vous avez pris soin de rembobiner complètement votre bande, l'ordinateur va lire tous les pro- grammes de la cassette les uns après les autres, à la recherche d'un programme inexistant. Il ne vous restera plus alors qu'à noter leur titre à mesure de leur apparition à l'écran. La commande SKIPF, utilisée de la même manière que LOAD, vous permet de «sauter» le programme spécifié, ou le premier programme rencontré, ou encore tous les programmes d'une cassette, et de positionner la bande juste après la fin du dernier enregistrement. Vous êtes ainsi assuré de ne pas effacer ce qui précède. Si vous souhaitez lancer automatiquement l'exécution d'un programme, utilisez : LOAD `NOM DE PROGRAMME", R Notez, pour clore ce tour d'horizon des possibilités du lecteur de programme, que les commandes SAVE et LOAD peuvent être incluses dans un programme, comme on le voit sur la photo ci-dessous LOAD DANS UN PROGRAMME 10. REM LOAD DANS UN PROGRAMME 20 LOCATE 13.14 30 PRINT PREMIEREPARTIE' 40 PRI-NT TAB1131,########lE#i# 50 LOCATE 10.17 60 PRINT ;La Suite Ce ce programme' 70 PRINT TABL 101 'va etre chargée dans un' 80 PRINT TAS) 10) court instant., 90 LOAD 'SUST E' RUN PREMIERE PARTIE

    1. .i iÉ 31F#.###1##.#a

La suite de ce programme Va etre chargée dans un court instant. OK LIST 10 10 REM SUITE DU PROGRAMME OK Lorsque le programme sera parvenu en ligne 90, l'ordinateur lancera automatiquement le chargement et l'exécution du programme « SUITE », effaçant par la même occasion le programme courant. Ces opérations ne seront possibles que si vous avez pris la précaution d'enregistrer les deux programmes à la suite, ou de rembobiner la bande. LES BOUCLES L'homme se lasse vite des tâches répétitives où l'automatisme des mouvements a tôt fait de prendre le pas sur l'esprit. L'ordinateur, par contre, raffole de tout ce qui est répétition, et excelle dans ce domaine. Les boucles GOTO Prenons un exemple concret. Supposons que vous souhaitiez afficher à l'écran les cent premiers nombres entiers. Vous pourriez, par exemple, taper un programme de ce type 10 PRINT 1 20 PRINT 2 30 PRINT 3 1000 PRINT 100 Ce serait encore pire que d'effectuer l'opération à la main! Heureusement, il existe une méthode plus rapide et beaucoup moins fatigante, qui vous permet d'arriver à un résultat identique en quatre lignes seulement. Pour le vérifier, entrez au clavier le programme suivant : BOUCLE GOTO : PROGRAMME 10 A=1 20 PRINT A 30 A=A+1 40 GOTO 20 Dès que vous aurez écrit ces lignes, frappez RuN suivi de ENTRÉE . Votre écran se couvre aussitôt de nombres qui défilent sous vos yeux à grande vitesse. En quelques secondes vous voyez passer 100, puis 200, 300, etc. Pour arrêter cette débauche de nombres, vous pouvez toujours débrancher votre ordinateur, mais, par la même occasion, vous perdrez votre programme. La seconde solution, plus élégante, consiste à enfoncer la touche STOP 1, en haut et à gauche sur votre clavier. Le défilement infernal prend aussitôt fin. Temporairement, du moins, car si vous effleurez la moindre touche, l'ordinateur recommence de plus belle. Pour vous en sortir, il ne vous reste plus qu'à enfoncer la touche marquée CNT J (placée juste sous STOP) et, sans relâcher votre pression, à appuyer sure © : INTERRUPTION PAR CNT-C 362 363 364 365 366 367 364. 370 371 372 373 374 375 376 377 378 379 380 381 382 Break in 20 OK Le message «Break in 20» vous avertit que le programme a été interrompu en ligne 20. Si vous n'êtes toujours pas rassasié de nombres, pressez les touches BAJ et Co^vT . Le programme reprend, CONTinue, a partir de l'endroit où il avait été stoppé. Profitons de l'interruption de notre programme pour en examiner le contenu. Nettoyez l'écran ar une pression sur la touche RAZ , puis tapez uST . En ligne 10, on affecte à la variable numérique A une valeur initiale de 1. On dit que l'on initialise à 1 la variable A. On demande ensuite à l'ordinateur d'afficher cette valeur à l'aide d'une instruction PRINT (ligne 20). Cela fait, on augmente de 1 la valeur de A, puis on ordonne au programme de retourner à la ligne 20 par l'intermédiaire d'une commande GOTO. GOTO 20 pourrait se traduire par «Va te brancher à la ligne 20». Cette commande crée une «boucle» qui permet de répéter une action un nombre de fois indéterminé. Lors de son second passage dans la boucle, l'ordinateur affiche la nouvelle valeur de A, soit 2, puis la variable est de nouveau « incrémentée » (augmentée) de 1. Le processus se répète jusqu'à ce que vous recouriez à[ççj ou que le M05 atteigne sa valeur maximale de 1038 (un 1 suivi de 38 zéros). Les boucles FOR... NEXT La commande GOTO crée une boucle « infinie » dont il est malaisé de s'extirper. De plus, le nombre des répétitions est incontrôlable, ce qui se révèle peu pratique. Ce qu'il faudrait, en fait, c'est une boucle qui puisse s'interrompre d'elle-même aussitôt qu'elle atteint une valeur limite préalablement fixée. Dans 331 )US ier notre exemple, nous voulions afficher les cent premiers nombres entiers en partant d'une valeur initiale de 1. Pour y parvenir, commencez par effacer le programme précédent au moyen de NEW, puis entrez les lignes suivantes : Vous remarquez tout de suite que ce programme est plus court d'une ligne. De plus, il contient bien les deux bornes que nous nous étions fixées, à savoir 1 et 100. La commande FOR I = 1 TO 100 signifie en effet que nous allons répéter l'action placée entre le FOR et le NEXT jusqu'à ce que la variable «compteur» I soit égale à 100. Pour le vérifier, exécutez ce programme en tapant RUN BOUCLE FOR... NEXT : AFFICHAGE 78 79 80 8a 82 83 84 8s 86 87 es 89 90 91 92 93 94 95 96 98 99 100 OKRalentir une boucle Vous trouvez peut-être que les nombres défilent trop rapidement à l'écran et qu'il est difficile de les lire. Certains ordinateurs possèdent une instruction PAUSE ou WAIT qui interrompt le déroulement d'un programme pendant une période de temps plus ou moins brève. Bien que le M05 ne dispose d'aucune commande similaire, il est néanmoins possible d'obtenir le même effet au moyen d'une boucle vide. Insérez les lignes suivantes dans le programme précédent, puis exécutez-le à nouveau : 25 FOR J = 1 TO 500 26 NEXT J Comme vous pouvez le constater, l'affichage des nombres est désormais beaucoup plus lent. Le M05 boucle à vide 500 fois de suite, ce qui lui demande un certain temps et crée ainsi une temporisation suffisante. Celle-ci peut être rallongée ou raccourcie par simple augmentation ou diminution de la valeur finale de J. Boucles imbriquées Listez votre programme augmenté de ces deux lignes. Vous remarquerez que votre boucle vide se trouve placée entre le FOR et le NEXT de la boucle d'affichage. On dit que les deux boucles sont «imbriquées ». Vous pouvez « emboîter » ainsi plusieurs boucles, à l'instar des poupées gigognes, à condition d'employer des variables compteur différentes (I et J) et d'utiliser autant de FOR que de NEXT, faute de quoi un message d'erreur de code 1 (NEXT sans FOR) ou 23 (FOR sans NEXT) viendra interrompre votre programme. Chaque NEXT doit être obligatoirement associé à un FOR et réciproquement. Pour éviter toute erreur, inscrivez le début et la fin de chacune de vos boucles sur une feuille de papier puis, à l'aide d'un crayon, reliez chaque FOR au NEXT correspondant. Si aucune de vos boucles ne se chevauche, votre programme a toutes les chances de bien fonctionner. Le programme qui suit illustre ce procédé. Vous découvrirez les 4 096 combinaisons couleur du M05. M05 : PROGRAMME

10 CL5 20 FOR BORD=O TO 15 30 FOR FEUILLE=O TO 15 40 FOR ENCRE=O TO 15 50. SCREEN ENCRE,FEUILLE.BORD 60 ATTRBI.1 70 LOCATE6.11.0 80 PRINT5JE SUI5 LE M05- 90. FOR PAUSE=1 TO 200 100 NEXT PAUSE .130 NEXT ENCRE 120 NEXT' FEUILLE 130 NEXT BORD 140 ATTRB0.0 350 END rotes ies Ti- )ur ne En ine à 1a-on on 20 '0. ier .e » de iaais 3n- )Us !ur )nt les peu ,le lle .ns Tout de déroule comme nous l'avions souhaité. Le programme s'interrompt de lui-même dès que I vaut 100. Autre constatation importante, le passage d'une valeur de I à la suivante (NEXT) se fait automatiquement. Vous savez écrire en majuscules et en minuscules accentuées. Vous avez la possibilité d'utiliser des encres et des fonds de couleurs différentes. Vous êtes capable de centrer un mot ou un titre au milieu de l'écran ou, plus simplement, au milieu d'une ligne. Pourtant, vous n'êtes pas encore satisfait. Vous voudriez sans doute être à même d'agencer votre écran de manière plus professionnelle, avec des gros titres en couleurs, des manchettes couvrant la largeur de l'écran. Si vous êtes dans ce cas, ce chapitre vous est spécialement destiné. Des caractères de toutes les tailles Le M05 dispose de plusieurs tailles de caractères, toutes mises en place par la commande ATTRB suivie de deux chiffres (0 ou 1) séparés par une vir- gule. A la mise sous tension, l'ordinateur se trouve en mode d'affichage normal, ce qui correspond à la commande : ATTRB 0,0 Si vous voulez étaler vos caractères en largeur, tapez tout simplement : Remarquez également que le message de fin d'exécution apparaît lui aussi en double largeur. Vous pouvez y remédier en rajoutant en fin de programme la ligne : ATTRB 1 ,0 ATTRB 0,0 A titre d'exemple, entrez puis exécutez le programme suivant : I TAILLES DIVERSES : PROGRAMME I 10 CLS 20 SCREEN0.1.1 30 ATTR81.0 40 LOCATE2.9 50 PRINT:LES ECRANS DU MO5' 60 PRINT--------------------- 70 PRINT Apprenez le BASIC 80 PRINTTAB(5)~ en IMAGES' 90 END ON Le titre affiché (ligne 50), bien que ne comportant que 17 caractères — espaces inclus — occupera la presque totalité de l'écran. Cela vient tout simplement du fait qu'en doublant la largeur de vos lettres vous diminuez de moitié le nombre de colonnes utilisables. De 40 colonnes en mode normal, vous passez à 20 en mode double-largeur. Vous pouvez aisément le vérifier en comptant le nombre de tirets soulignant la phrase LES ÉCRANS DU M05. Double hauteur Si la double largeur ne vous convient pas, essayez donc la double hauteur. Il vous suffit de modifier comme suit le programme précédent, en ajoutant la ligne : 30 ATTRB 0,1 Après exécution, vous devriez voir apparaître un affichage identique à celui ci-dessous : I 5 Votre phrase n'est plus centrée, car vous êtes revenu en simple largeur (40 colonnes). Par contre, vous ne disposez plus désormais que de 12 lignes, chacune de vos lettres occupant deux lignes en hauteur. Double hauteur, double largeur Comme vous vous en doutiez, il est possible de multiplier par quatre la taille initiale de vos caractères en recourant à la commande ATTRB 1,1. Toujours à partir du même programme, apportez une légère retouche à la ligne suivante :

30 ATTRB 1,1

puis refaites un RUN Le message de fin d'exécution qui apparaît en taille normale grâce à la commande ATTRB 0,0, permet de mieux apprécier la différence d'écriture. Précautions d'emploi Lorsque vous utilisez le mode double hauteur ou double largeur, gardez à l'esprit que le curseur se trouve placé en bas à gauche du caractère affiché. C'est pourquoi il convient d'éviter la commande LOCATE 1,1 lorsque vous vous trouvez en mode double-hauteur, sous peine de ne plus voir que l'extrémité inférieure de votre message. Notez aussi que, pour les commandes LOCATE et TAB, l'écran reste divisé virtuellement en 25 lignes de 40 colonnes, même si le mode double largeur est alors en place. Mise en page Voici un programme qui fait apparaître les quatre tailles de caractères au sein d'une même page écran — en l'occurrence la première page d'un hebdomadaire imaginaire : MISE EN PAGE : PROGRAMME 10 CLS:SCREEN 1 J,.0:ATTRB 1.1 20 LOCATE 8,2:PRINT HICRO-ECHOS':PRHT 30 PRINT-====—====r_-------~ 40 COLORO:ATTRB 0.0 50 LOCATE 18.4:PRINT ' le 24 décembre t90 4' 60 ATTRB 1.0:COLOR 4 70 LOCATE 1,8:PRINT 'LE 11O5 E5T ARRIVE 80 COLOR O:ATTRB 0,1 90 LOCATE 3.12:PRINT 'UN ARTICLE DE NOTR E GRAND REPORTER, 100 PRINT TAB(3) °ALEX PENSION' 110 ATTRB 0,0 120 FOR I= 1 TO 7 130 PRINT TAB(8) ---------------------- 140 NEXT I 150 LOCATE 0,0.0:COLOR 7,7 160 END ATTRB 0,0 ATTRB 1,U Tapez Li1, et vous obtiendrez alors l'affichage ci-dessous : MISE EN PAGE : AFFICHAGE MI CRIO- EC`HO5 le 24 tlécembre i984 UN ARTICLE DE NOTRE GRAND REPORTER ALEX PENSION ATTRB 0,1 ATTRB 1,1

Vous n'avez fait jusqu'ici que recopier quelques pro- SAISIE PAR INPUT : AFFICHAGE grammes et assister passivement à leur déroule-

ment. Quel que soit le nombre d'instructions RUN que vous ayez utilisées, ces programmes se sont tou- jours exécutés de la même manière, sans variation aucune. De tels programmes, tout en fonctionnant ENTREZ VOTRE PRENOM ' DANIEL correctement, n'exploitent pas toutes les possibilités de l'ordinateur, et négligent complètement son apti- tude à la «conversation ». L'ordinateur peut en effet BONJOUR DANIEL s'adapter rapidement aux changements de situations OK COMMANDEZ ET J'OBEI RAI les plus divers, et y «répondre» immédiatement, grâce à ses prodigieux talents de calculateur. Dans un jeu, par exemple, un joueur doit fréquemment donner à la machine de nouvelles instructions, en cours de partie, pour faire face à une situation en perpétuelle évolution. Cette possibilité d'introduire certaines informations dans un programme, sans pour autant en interrom- pre le déroulement, donne naissance à une sorte de «dialogue» entre l'homme et la machine. L'être Dans notre exemple, le déroulement du programme de chair et d'os «parle» à la chose électronique au est suspendu en ligne 30. moyen d'un clavier et reçoit les réponses de son Votre prénom est alloué à la variable chaîne P$ interlocuteur de métal ou de plastique via l'écran (ligne 40), elle-même ré-employée quelques lignes de visualisation, plus bas pour l'affichage du message de salutation de votre dévoué serviteur. La variable P$ placée après L'instruction INPUT l'instruction INPUT spécifie que la réponse attendue Pour être «entendu» de votre ordinateur, vous allez est de type chaîne. Si vous répondez par un nombre, devoir introduire dans sa mémoire certaines don- le message « ?Redo » (Recommencez) vous rappellera nées. Ce passage d'informations s'effectuera par le à l'ordre. biais de l'instruction INPUT (touches BASIC et) INPUT permet à la fois d'afficher la question et de comme vous le montre le programme suivant : saisir la réponse, ainsi que vous le prouve cette ver- sion remaniée du programme précédent SAISIE PAR INPUT : PROGRAMME

QUESTION ET RÉPONSE

10 CLS 20 PRINT 30 PRINT 'ENTREZ VOTRE PRENOM 40 INPUT P$ 10 CLS 50 LOCATE 14.8 20 PRINT 60 PRINT'BONJOUR ',P$ 30 INPUT 'ENTREZ VOTRE PRENOM ':P$ 70 LOCATE 10.10 40 CLS 80 PRINT COMMANDEZ ET J•OBEIRAI 50 LOCATE 14.8 90 END 60 PRINT 'BONJOUR ',P$ OK 70 LOCATE 10.10 80 PRINT COMHANDEZ ET J'OBEIRAI' 90 END Après vous avoir demandé d'entrer votre prénom,

l'ordinateur attendra patiemment — plusieurs heu- res si nécessaire — que vous tapiez et validiez votre Notez que ce programme est plus court que le pré- réponse. Celle-ci est alors affectée à une variable cédent. Votre réponse est entrée en regard du (numérique si la réponse attendue est un nombre, libellé de la question. Pour faire disparaître le chaîne si c'est un ou plusieurs mots), qui est con- point d'interrogation, remplacez le point-virgule de servée en mémoire et sera éventuellement réutilisée, la ligne 30 par une virgule.

37 INPUT et les boucles L'instruction INPUT peut également être placée au )coin d'une boucle, pour collecter des informations d1 type numérique ou chaîne, à chaque passage ris celle-ci. Le renseignement saisi permet, dans l'exemple qui suit, d'effectuer une conversion avant affichage d'un résultat. Si vous avez eu l'occasion de fréquenter le monde de l'aviation, ou encore de vous essayer à la simulotion de vol sur ordinateur, vous aurez certainement remarqué que l'altitude d'un avion est toujours exprimée en pieds (feet). Sachant qu'un pied britannique équivaut à 0.3048 de nos mètres, voici un court programme qui réalisera à votre place la traduction en mètres des indications de votre altimètre. BOUCLE AVEC INPUT: PROGRAMME 1viendrait automatiquement effacer la précédente. Dans la mesure du possible, veillez à employer des noms de variables rappelant le contenu de ces dernières (P$ pour Prénom, N$ pour Nom, etc.). INPUT A RÉPÉTITION 10 CLS 20 PRINT 30 INPUT'ENTREZ VOTRE NOM ';N$ 40 PRINT 50 INPUT'ENTREZ VOTRE PRENOM ';P$ 60 PRINT 70 INPUT'DATE DE NAISSANCE ';D$ 80 PRINT 90 INPUT'LIEU DE NAISSANCE -;L$ 100 CLS e $ s

10 CLS. 20 SCREEN0.7,7 30 FOR I1 TO 5 40 CLS 50LOCATE 9.4 60 INPUT'ALTITUD£ EN PIEDS ':A 70 LOCATE 9,10 80 PRINT -ICI L'ORDINATEUR DE BORD' 90 LOCATE 7,14 100 PRINT~VOUS VOLEZ A UNE ALTITUDE DE, 110 LOCATE 1018 120 PRINT A1E0.3048; METRES- 130 FOR J=1 TO 2500 140 NEXT J 150 NEXT I 160 END Le programme vous invite à entrer une altitude en pieds (ligne 60). La valeur introduite est rangée dans la variable A et réutilisée lors de la conversion en ligne 120. La boucle FOR... NEXT des lignes 30 à 150 autorise l'introduction de cinq valeurs différentes (plus si vous changez la valeur limite de I). Une boucle vide (lignes 130-140) crée une temporisation suffisante pour que vous puissiez lire le résultat de la conversion de pieds en mètres avant l'effacement de l'écran. Demande de renseignements multiples Lorsque vous désirez faire établir ou renouveler une carte d'identité, il vous faut répondre à un certain nombre de questions et remplir différentes rubriques d'un formulaire. Nous vous proposons ici un programme réalisant une demande similaire de renseignements, par l'intermédiaire d'instructions INPUT successives. Vous aurez droit, en plus, à l'établissement immédiat de votre carte d'identité. les lignes 20 à 90 rassemblent les différentes données nécessaires à l'impression de vos papiers. Remarquez que les noms des variables utilisées dans les quatre lignes INPUT sont tous différents. Si tel n'était pas le cas, chaque nouvelle donnée entrée 110 SCREENO,3,3 120 ATTRBI.1 130 LOCATE2.2 140 PRINT~CARTE D•IDENTITE1 150 PRINTTAB(1)-----------------° 160 ATTRB0.1170 LOCATE2.6 180 PRINTiNOM';TAB(18)N$ 190 LOCATE2,9 200 PRINT _PRENOM':TAB(16)P$ 210 LOCATE2,12 220 PRINT~Né(e) 1e-,TAB(18)D$ 230 LOCATE2.15 240 PRINT A,; TAB(18)L$ 250 LOCATE2.18 260 PRINT~signes particuliers- 270 LOCATE2.21 280 PRINT~POSSEDE UN 'M05'- 290 ATTRB0.0 300 END 38 1. DES POINTS ET DES TRAITS Les ordinateurs actuels savent pratiquement tout faire. Ils se sentent aussi à l'aise dans la manipulation de chiffres et de chaînes de caractères que dans la production de sons ou la création d'images très détaillées. Le M05 n'a rien à envier à ses concurrents dans ce domaine, et vous allez découvrir au fil des pages qui suivent qu'il pourrait porter le titre d'« ordinateur peintre ». Vous vous rappelez sans doute que votre écran se divise en 25 lignes de 40 colonnes chacune. Bien que l'on puisse faire tenir quelque 1000 caractères sur une seule page écran, cela paraît dérisoire pour un dessin d'une quelconque précision. Regardez attentivement les caractères affichés à l'écran. Vous remarquerez qu'ils sont composés d'une multitude de points. En fait, chaque symbole tient dans une case de 8 X 8 points. Si l'on considère que chacune des 1 000 cases de votre écran renferme 8 X 8 = 64 points, on peut en déduire que l'image que vous avez sous les yeux est formée de 64 X 1 000 = 64 000 points. C'est déjà beaucoup plus intéressant. Cela le serait encore davantage s'il était possible d'accéder individuellement à tous ces points. Jusqu'à présent, en effet, chaque fois que vous frappiez une touche au clavier, vous allumiez à l'écran une cellule de 64 points. Désormais, grâce à l'instruction PSET, vous allez pouvoir allumer, non pas une grille de points, mais un point particulier de cette matrice. Pour le vérifier, tapez la touche RAZ , puis entrez les lignes suivantes en mode direct : SCREEN 4, 6, 6 PSET (160,100) ______ Si vous avez pris soin d'enfoncer la touche ENTRÉE vous avez dû voir apparaître, en plein centre de votre écran, un minuscule point bleu. Bien que peu spectaculaire, ce point unique nécessite quelques éclaircissements. Si chacune des 40 colonnes de l'écran est composée de huit points, nous disposons par conséquent de 40 X 8 = 320 points dans l'axe horizontal de notre image et, de la même manière, de 25 X 8 = 200 points dans son axe vertical. Sachant qu'un point est déterminé par l'intersection de ses positions horizontale (abscisse) et verticale (ordonnée), le point de coordonnées 160,100 (abscisse d'abord, ordonnée ensuite) représente bien le centre de votre «page». Essayez d'imaginer une feuille à dessin — ou mieux encore une feuille de papier millimétré — constituée de 320 points dans l'axe des abscisses et de 200 points dans l'axe des ordonnées. Ces points sont respectivement numérotés. de 0 à 319 et de 0 à 199. Le point de coordonnées 0,0 est situé dans le coin supérieur gauche de votre écran. Pour mieux appréhender ce nouveau découpage de votre écran, reportez-vous au chapitre « MATRI- CES ET GRILLES GRAPHIQUES », à la fin de cet ouvrage. Vous y trouverez une grille qui vous permettra de déterminer les valeurs à employer dans vos instructions. Sans effacer votre écran, tapez maintenant PSET (200,100),0 suivi de ENTRÉE Un second point — de couleur noire cette fois - s'affiche à la droite du premier. Le troisième paramètre de l'instruction PSET désigne la couleur du point. S'il est omis, le point est dessiné dans la couleur courante. Un point c'est bien; deux c'est mieux, mais c'est encore peu. Essayons maintenant de tracer une ligne. Tracé d'une ligne Une ligne n'étant rien d'autre qu'une succession de points, on pourrait envisager de recourir à une boucle FOR... NEXT pour en effectuer le tracé. Entrez au clavier les lignes du programme ci-dessous, puis tapez. RuN TRACÉ DE LIGNES AVEC PSET 10 CLS:SCREEN 4,6,6 20 REM HORIZONTALE 30 T=100 40 FOR X=0 TO 319 50 PSET(X.Y),4 60 NEXTX 70 REM VERTICALE 80 X=160 90 FOR Y=0 TO '199 100 PSET(X,Y).0 110 NEXT 120 END Le programme trace une ligne horizontale bleue coupée d'un trait vertical de couleur orange. Les lignes 30 à 50 créent l'horizontale, tandis que le trait vertical est dessiné par la boucle des lignes 70 et suivantes. Pour tirer une droite horizontale, il suffit de modifier l'abscisse d'un point sans modifier son ordonnée. La première boucle fait varier X de 0 à 319 (la largeur de l'écran) tandis que Y demeure inchangé. Pour produire une verticale, on procède à l'opération inverse. Y varie de 0 à 199 alors que X garde une valeur constante. L'instruction LINE Le programme précédent, bien que fonctionnant parfaitement, ne permet pas un tracé rapide et exige Y -39

cet (er- ins radu ou- est .je. de )u- es- ze os le '0 1- la e. le ^t e une capacité de mémoire importante puisqu'il ne faut pas moins de trois instructions pour une ligne. Heureusement, le BASIC du M05 dispose d'une insi.ruction qui va nous libérer de la contrainte des boucles. Après avoir vidé par NEW la mémoire de l'ordinateur, tapez ces quelques lignes : 1 L'INSTRUCTION LINE 1 10 CLS:SCREEN 4,6,6 20 REM HORIZONTALE 30 LINE(0,100I-(319,100),4 40 REM VERTICALE 50 LINE(160.0)-(160,194) .0 60 END La figure obtenue est en tous points identique à celle du programme précédent, mais elle a été dessinée plus rapidement. L'instruction LINE permet en effet de tracer une droite entre deux points dont les coordonnées sont spécifiées entre parenthèses, elles-mêmes séparées par le symbole —. Un troisième paramètre, optionnel, permet de changer la couleur du trait. Les obliques ne posent pas plus de problèmes que les verticales, ainsi que le prouve le programme ci-dessous : TRACÉ D'UN TRIANGLE 1c CL5 _O SCREEN 0.-.7 .R LI NEC 10.18@7-(300.100) 50 LINE(300.ifl0~- 200.40( La ligne 30 trace un trait ayant pour origine le point 200,40 et aboutissant en 10,180. La deuxième droite est tirée de cette nouvelle origine jusqu'au point 300,100. Le triangle se referme au moyen d'une troisième droite qui rejoint notre point de départ. initial. Remplissage d'une figure La commande LINE peut également servir au remplissage d'une forme. Le programme ci-dessous trace, à partir d'un point unique — en l'occurrence le sommet d'un triangle —, une pyramide pleine. Celle-ci est constituée d'une multitude de droites issues d'un des trois sommets et tirées en direction d'un point situé sur la dernière ligne de l'écran (ordonnée 199). Ce point se déplace de gauche à droite grâce à une boucle : PYRAMIDE AVEC LINE : PROGRAMME 10 REM PYRAMIDE 20 CLS 30 SCREEN4.4,0 40 FOR I=0 TO 319 50 LINE(160,20)-(I,199).3 60 NEXT I 70 END OK Lors du premier passage dans la boucle, le programme trace une ligne partant de l'origine 160,20 à destination du point 0,199. La variable compteur I sert également d'abscisse. Elle croît de 1 à chaque passage dans la boucle, jusqu'à atteindre la valeur limite de 319. La pyramide est alors complète. 1 40 TRACÉS DE RECTANGLES Vous venez d'apprendre à tirer des traits et à tracer des triangles vides ou pleins, mais il est cependant une forme géométrique que nous avons négligée jusqu'ici: le rectangle. Nettoyez votre écran, puis tapez en mode direct : BOX (40,40) — (180,160) ______ suivi d'une pression sur ENTRÉE . Tracé d'un rectangle avec LINE Pour dessiner un rectangle — ou un carré — il suffit de déterminer les coordonnées de ses quatre sommets et de relier ces derniers par des traits. Vous êtes en mesure de réaliser cette opération en recourant à l'instruction LINE : TRACE D'UN RECTANGLE AVEC LINE 10 CLS 20 SCREEN4,3,3 30 LINE(40,40)-(280,40) 40 LI N(280.40)-(280,160) 50 LINE(280,160)-(40,160) 60 LINE(40,160)-(40,40) OK Si vous étudiez attentivement les lignes que vous venez d'entrer, vous remarquerez que les coordonnées du point d'arrivée et celles du point de départ de la ligne suivante sont répétées. Comme il n'est jamais bon de taper plusieurs fois la même chose, supprimons cette répétition comme suit : 30 UNE (40,40) — (280,40) 40 UNE — (280,160) 50 LINE — (40,160) 60 LINE — (40,40) Les trois dernières commandes LINE ne sont plus utilisées qu'avec une seule paire de coordonnées. En effet, lorsque vous omettez le point de départ de la ligne à tirer, l'ordinateur trace cette dernière à partir de la position du dernier point affiché. A la ligne 30, une ligne est tirée entre les points 40,40 et 180,40. Le trait affiché par la ligne 40 aura par conséquent pour origine ce même point 180,40. Les deux programmes produisent un résultat identique mais le second est moins long à entrer au clavier. Si le tracé d'un rectangle ne pose aucun problème, il existe cependant une commande BASIC réalisant cette même opération de manière encore plus directe. Un rectangle absolument identique au précédent apparaît à l'écran. Les paramètres employés par la commande BOX (cc boîte» en anglais) correspondent aux sommets opposés du rectangle ou du carré à tracer. Notez qu'un résultat similaire aurait été obtenu avec la commande BOX (180,40)–(40,160) qui ne fait que prendre les valeurs des deux autres sommets en opposition. D'une utilisation simple et rapide, la commande BOX vous permettra par exemple d'encadrer un titre, ou encore de produire un dessin à base de carrés ou de rectangles. A l'instar de LINE et PSET, BOX accepte en troisième paramètre un code couleur, comme l'illustre le programme ci-dessous. 1 CARRÉS MULTICOLORES : PROGRAMME 1 10 CLS 20 SCREENO,0,0 30 FOR C= iTO 15 40 T=Ci5 50 BOX(70+T,T)-(270-T,200-T),C 60 NEXT C 70 END 41 BOX Full, ce qui signifie «boîte pleine») qui utilise des paramètres similaires à ceux de BOX. Videz la mémoire de votre ordinateur par un NEW puis, après avoir entré les lignes ci-dessus, tapez RUN : nt la nt aiu ie n- le in le F, u- (,e programme montre clairement les possibilités de la commande BOX tout en vous offrant 15 des 16 couleurs d'encre du M05. les codes couleurs sont représentés par la variable compteur C, qui sert également (après multiplication par 5) au calcul de la taille des carrés (ligne 40). A mesure que C augmente, les carrés affichés se réduisent. Lorsque C vaut 1, T(aille) prend la valeur 5, ce qui affiche un carré de 190 par 190 points. Au second passage dans la boucle, le carré change de couleur et ne fait plus que 180 X 180 points. L'instruction SCREEN 0,0,0 de la ligne 20 a pour effet de mettre en place le fond noir et de rendre invisible le curseur ainsi que le message de fin d'exécution (une encre noire ne se voit pas sur un papier noir). Rectangles pleins Pour remplir un triangle, vous devez recourir à une boucle comportant une instruction LINE. Le remplissage d'un quadrilatère s'effectue automatiquement grâce à l'instruction BOXF (abréviation de 1 ÉLÉPHANT ROSE: PROGRAMME 1 10 CL5 20 SCREEN3,3,3 30 BOXFt48,16)-(224.128).9 'CORPS 40 BOXF(48,128)-(104.184),9 •PATTE 50 BOXF( 176. 128)-(224.184)9 PATTE 60 BOXF(224.16)-t272.951,9 •TETE 70 BOXFt224.96)-(288.104),7 'DÉFENSE 80 BOXF(248,105)-(272,184).9 TROMPE 90 BOXF(248,56)-(255.63).0 'OEIL OK Vous ne rêvez pas! Il s'agit bien d'un éléphant rose constitué uniquement de carrés et de rectangles de tailles diverses. Si vous n'aimez pas le rose, remplacez par un 8 le code couleur des lignes 30, 40, 50, 60 et 80. Pour vous aider à retrouver les différentes parties de ce pachyderme peu ordinaire, des commentaires ont été placés en fin de lignes. Le signe ' (apostrophe) a un effet identique à celui de l'instruction REM. Vous pouvez désormais laisser libre cours à votre imagination et composer les formes les plus variées, témoin la carte postale qui vous est proposée ci-dessous : En vous aidant des procédés utilisés jusqu'à présent, essayez de trouver le programme générant l'affichage qui précède. f42} MODIFIER LES CARACTERES DU M05 Vous avez appris à dessiner différentes formes et Une fois votre motif dessiné, additionnez pour cha- motifs au moyen des instructions LINE, PSET, BOX que ligne de la grille les «poids» des différen- et BOXF, mais vous avez dû pour cela repérer soi- tes cases noircies, puis inscrivez le total obtenu en gneusement les coordonnées à employer avant le regard de la rangée correspondante. tracé proprement dit. Que diriez-vous de dispo - ser de formes toutes faites ue vous ourriez dé la- ~~{ 3 que pourriez pr .,, y pz,.l ~,ï cer, colorer, agrandir ou effacer, aussi aisément que

n'importe quel autre caractère du clavier ? Impos- sible? Certainement pas ! Le M05 vous permet de créer jusqu'à 128 motifs de votre choix et de les employer par la suite à votre guise. Valeur pour chacune des cases Total pour la rangée Les matrices de caractères 128 64 32 16 8 4 2 1 Nous avons vu que chaque caractère affiché à 1 1 1 1 1 1 1 1 l'écran tenait dans une grille de 8 X 8 points. Cette 32 + 16 + 8 = 56 grille, ou matrice, va constituer le point de départ 32 + 16 + 8 = 56 de la création de vos futurs caractères. Reproduisez 16 = 16 sur une feuille de papier (une page de cahier à petits 128 + 64 + 32 + 16 + 8 + 4 -i-2 = 254 carreaux fera parfaitement l'affaire) le schéma ci- 32 + 16 + 8 = 56 dessous, ou bien la grille de la page 61. 32 + 16 + 8 = 56 32 + 8 = 40 64+32+8+4 =108 MATRICE DE PO1N1â 128 64 32 16 8 4 2 1 - - Dans notre exemple les cases de poids 32, 16 et 8 sont noircies. Le total de la première rangée équi- vaut donc à 32+16+8=56. - - - Quand vous en aurez terminé avec les sept autres - rangées, vous serez prêt à faire connaître à l'ordi- nateur le caractère à reproduire. Vous aurez besoin

Vous remarquerez que chacune des cases de la ran- pour cela de deux lignes similaires à celles-ci gée du haut est surmontée d'un nombre. Au-dessus

de la case la plus à droite on peut voir le chiffre 1, 10 CLEAR,,1 tandis que la case située à l'autre extrémité porte le 20 DEF GR$ (0) = 56, 56, 16, 254, 56, 56, 40, 108 L'instruction CLEAR de la ligne 10 indique à l'ordi- numéro 128. Chacun de ces nombres représente en fait une puissance de 2 (2° = 1, 2' = 2, ...28 = 128) et nateur le nombre de caractères à définir (jusqu'à désigne la valeur — ou «poids» — assignée à la 128) et lui ordonne en conséquence de réserver le case correspondante. nombre d'octets de mémoire nécessaires. La défini- Pour créer votre caractère — personnage, voiture, tion proprement dite s'opère par le biais de DEF vaisseau spatial, etc. — noircissez les cases de votre GR$ (X). GR signifie GRaphique et le signe dollar précise qu'il s'agit d'un caractère chaîne. grille en fonction du motif à représenter. Vous trou- Si vous avez deux lignes, tapez Rurv et entré ces verez ci-dessous la matrice correspondant au dessin d'un petit personnage de face : ENTRÉE . Rien ne se produit, mais votre caractère est néanmoins connu de l'ordinateur. Pour le faire apparaître, frappez — en mode direct — PRINT CR> ATION D'UN PERSONNAGE GR$ (0).

128 64 32 16 8 4 2 1 Toujours en mode direct, entrez puis validez les commandes suivantes COLOR 1 PRINT GR$(0) COLOR3 PRINT GR$(0) Votre petit personnage vire tour à tour du rouge au jaune. Ce n'est pas fini. Essayez maintenant ce court programme

143

1 1 FOULE : PROGRAMME I f0 CLS 20 SCREENO.0,0 30 CLEAR..1 40 DEFGR$t07=56.56.16.254.56,56.40,106 50 FORI=ITOff 60 FOR J= 0 TO 39 70 COLOR I 80 PRINT GR$(07, 90 NEXT J 100 PRINT 110 NEXT I 120 COLOR 0 130 END1 PETITS ET GRANDS 1 10 CLS 20 CLEAR„2 30 DEF G$(~)=28.62.28.26.8 .62.62.62 40 DEF GR$(11=62.62.62,28.20.20,20,54 50 B$=GR$(01+CHR$(10)+CHR$181+GR$(1) 60 C$=GR$(0 .CHR$[101+CHR$18)+CHR$(8)+GR ¢, 11 -0 5CPEEN0,3,3 80 LOCATE 5,3:PRINT 8$, 90 POINT TAB(121 'JE SUIS DE TAILLE NORM ALE' 100 ATTRB 1.0:LOCATE 5.8:PRINT C$p 110 ATTRB 0,0:PPINT TAB(12)'JE SUIS ASSE Z ENVELOPPE` 120 ATTRB0.I:LOCATE 5,13:PRINT 8$- 136 ATTPB0.0:PRINT TAB(121 'JE SUIS UN G POND MAIGRE` 140 ATTOBI.1:LOCATE 5,20:PRINT C$; 150 4TTR80.0:PPINT TAB(121 -JE SUIS GRAU P ET FORT' Après l'avoir saisi au clavier, tapez RUN Vous obtiendrez alors l'affichage suivant : Votre écran se couvre d'une foule multicolore. A chaque valeur de I (ligne 50) correspond une couleur et une ligne différentes. La boucle de la ligne 60 se charge quant à elle de répéter votre motif 40 fois de suite. Le point-virgule (ligne 80) permet l'affichage des personnages d'une même couleur sur une ligne unique. Pour changer un peu, modifiez la ligne 40 comme ceci : 40 DEF GR$(0) = 0, 124, 68, 68, 254, 254, 68, 68 Vous voilà maintenant face à un gigantesque embouteillage! Agrandissez-vous Vous pouvez colorier, répéter, mais aussi agrandir ies caractères que vous avez définis. Témoin, ce programme, suivi de l'affichage à son exécution, qui fait appel à un autre personnage composé à partir de deux caractères définis : La première partie du programme (lignes 10 à 60) concerne la définition des deux « morceaux » du personnage; la seconde, son affichage dans des tailles différentes. On observe que la ligne 20 réserve un espace mémoire suffisant pour les deux caractères créés par les lignes 30 et 40. La ligne 50 se charge de souder les deux parties de manière à obtenir un caractère directement affichable, stocké dans la variable B$; CHR$(10) et CHR$(8) sont deux caractères dits «de contrôle», dont le rôle est respectivement de faire passer le curseur à la ligne suivante, puis de le reculer d'une case vers la gauche. Ce qui a pour effet d'aligner le haut (GR$(0)) et le bas (GR$(1)) du personnage qui nous occupe. Remarquez que B$ n'est utilisé que pour les personnages en simple largeur. Pour la double largeur, deux CHR$(8) sont nécessaires, d'où une seconde variable chaîne, C$. 44 ANIMATION SUR M05 Le petit homme que vous avez créé au chapitre pré- pour les besoins de l'animation — tomber depuis le cédent n'est encore qu'une figurine inerte à laquelle haut de l'immeuble jusqu'au sol. Ce mouvement ver- nous allons essayer ensemble de donner un sem- tical sera assuré par les lignes suivantes, que vous blant de vie. Pour cela, nous le ferons évoluer au rajouterez, sans modification, aux instructions déjà sein du monde qui l'entoure, à savoir les limites de entrées la page écran. SIMULATION D'UNE CHUTE : PROGRAMME.

Création de l'acteur

et implantation du décor Commençons par re-définir l'acteur de notre anima- tion en reprenant les lignes du premier programme 90 ATTRB 0.1 du chapitre précédent. 100 FOR I= 0 TO 22 110 LOCATE 16.2.0 Cela fait, mettons en place le décor — en l'occur- 120 PRINT GR$I0) 180 LOCATE 16.I-1 f 0 ) rence une rue et un immeuble — à l'aide de quel- 290 ATTR80an$ ques instructions BOXF . COLOR7,7 210 LOCATTEO,0.0 PERSONNAGE ET DÉCOR : PROGRAMME 10 CLS 20 SCREEN0.12.0 30 CLEAR..1 40 DEFGR$ I0)=56.56.16.254.56,56.40.108 50 SOXF(0.0)-(103.183),7 60 BOXFt0.184)-[319.199),8 70 BOXFt32.32)-(71.71),15 80 SOXF(32,96)-(71,135).15 Cela fait, lancez par Rurv l'exécution de votre pro- gramme. Comme vous pouvez alors le constater, ce n'est pas un, mais plusieurs petits personnages qui tombent :

CHUTE : AFFICHAGE

PERSONNAGE ET DECOR : AFFICHAGE Ii. I

_I Effacement des images intermédiaires Dans un dessin animé traditionnel, on représente un objet sur une feuille transparente, puis on prend un cliché avant de redessiner sur une autre feuille le même objet dans une position légèrement diffé- La vie est difficile, même lorsqu'on est un simple rente; cette opération est répétée 24 fois pour une caractère graphique, et notre petit bonhomme va — seconde de film. Comme nous dessinons toujours


45 le rls à «tir le même écran, il nous faut «gommer» l'image di, notre personnage avant d'afficher la suivante. 1. effacement d'un caractère à l'écran s'obtient par l'envoi d'un ou plusieurs «blancs» à la position ({ur'occupe ce caractère. Le caractère peut alors être „fiïché un peu plus loin, puis réeffacé, et ainsi de suite. Rajoutez à votre programme les li nes ci-dessous, puis observez leur effet par un RUN I 0 LOCATE 16,1 1(50 PRINT ^.e petit bonhomme ne laisse plus de sillage derrière loi, mais sa chute est trop rapide. Pour la ralentir, ayez recours à une boucle vide : 130 FOR J = 1 TO 150 I40 NEXT J Remarquez que cette temporisation est placée avant l'effacement du personnage afin d'afficher ce dernier plus longtemps à l'écran. Pour augmenter ou réduire la vitesse de la chute du personnage, vous pouvez modifier la valeur finale de la variable J. Vous constaterez néanmoins que plus la vitesse est lente, plus l'image est nette. Un déplacement trop rapide provoque un scintillement important de l'image. Un phénomène identique se produit lorsque l'objet à animer est constitué d'un grand nombre de matrices : Déplacements horizontaux S'il n'est pas courant de tomber d'un immeuble, quoi de plus commun que de marcher d'un point à un autre. Un déplacement horizontal est aussi simple à réaliser qu'un déplacement vertical. Au lieu de modifier l'ordonnée du personnage, on fait varier son abscisse. Le programme qui suit reprend ce principe pour animer un personnage dont le mouvement est décomposé en deux parties. Pour ce programme, deux caractères graphiques sont utilisés. Ils représentent chacun un «temps» différent de la marche. Pour plus de lisibilité, le personnage est affiché en double hauteur (ligne 60). L'HOMME PRESSÉ: PROGRAMME le CL5 20 SCREEN0,1.0 30 CLEAR.,2 40 DEFGR$(0)=56,56,.16.254,56.56,232,140 50 DEFGR$(1)=56.56.16.254,57,63,32.48 60 ATTR81,1 70 FOR L=2 TO 24 80 FOR C=0 TO 39 90 FOR G=0 TO 1 160 LOCATEC.L.0 1i0 PRINT GR$(G) 120 FOR P=1 TO 120 130 NEXT P 140 LOCATECL 150 PRINT' 160 C=C+(1-G) 170 NEXT G 180 NEXT C 190 NEXT L Son déplacement est contrôlé par trois boucles, plus une boucle vide. La première boucle (ligne 70) détermine la position verticale du petit homme. Vous le voyez descendre l'écran de son pas saccadé d'homme pressé. La deuxième boucle gère son mouvement horizontal (ligne 80). Les valeurs 0 et 30 représentent les deux extrémités de l'écran. La troisième boucle enfin (ligne 90) crée l'alternance d'affichage entre le mouvement 1 (GR$(0)) et la position 2 (GR$(1)), ce qui donne l'illusion de la marche. La ligne 160 a pour but d'augmenter la valeur de C (position horizontale) de 1 lorsque G vaut 0, et de 0 lorsque G vaut 1. Sans cette ligne, le petit homme se déplacerait par saccades. La boucle vide des lignes 120 et 130 affiche le caractère pendant une durée suffisante pour que le scintillement soit le plus faible possible. Si vous avez assimilé les techniques d'animation présentées ici, vous pourrez sans aucun problème faire évoluer avions, bateaux, fusées et projectiles divers autour de votre écran. L'ORDINATEUR PAYSAGISTE Vous connaissez pratiquement tout des possibilités graphiques du M05. Il ne vous reste plus maintenant qu'à rassembler des connaissances, éparses pour le moment, afin de produire une image plus élaborée que celles programmées jusqu'ici. Dans le chapitre intitulé «TRACES DE RECTANGLES », vous avez appris à dessiner en recourant à la seule instruction BOXF. L'image finale, qui suffisait à créer l'illusion d'un paysage de bord de mer n'était constituée que de rectangles. L'usage de quadrilatères limite cependant le nombre des sujets disponibles, et il faut plus qu'un assortiment de rectangles pour concevoir un paysage. Nous allons donc changer de décor et passer de la mer à la montagne pour un dessin plus détaillé et, partant, plus complexe. Mise en place de l'arrière-plan Commençons immédiatement à planter le fond de notre décor au moyen de LINE et BOXF : ARRIÈRE-PLAN : PROGRAMME 10 CLS 20 SCREEN6.6.0 30 LOCATE0,0,0 40 BOXF(0,144)-(319,199),4 50 FOR I = 0 TO 159 60 LINE(0,40)-[I.143),8 70 NEXTI 80 FOR I = 0 TO 319 90 LINE(104.16 )-(I.143).8 100 NEXTI 110 FOR I = 0 TO 287 120 LTNE(208.8)-[I,143).8 130 NEXT I La commande SCREEN de la ligne 20 colore le fond en bleu pâle et l'entoure d'une bordure noire. En ligne 40, la commande BOXF délimite les contours d'une étendue d'eau qui deviendra un lac de montagne. Les boucles des lignes 50 à 130 mettent en place trois sommets selon la technique utilisée pour l'obtention de la pyramide en page 41. Le code couleur 8 nous gratifie d'une teinte grise du plus bel effet. Notre image devant comporter un premier plan et un arrière-plan, il convient de donner à notre dessin une impression de profondeur. Pour cela, nous allons ajouter à notre lac une succession de lignes horizontales simulant les « rides» qui plissent sa surface. Pour accroître la sensation de profondeur, ces lignes devront être plus rapprochées vers le haut de l'image que vers le bas, comme cela se produit dans la réalité lorsque vous regardez un paysage. Rajoutez les instructions ci-dessous à ce que vous venez de taper : 140 FOR 1 =0 TO 5 150 LINE(0,145+2T1)—(319,145+21'1),12 160 NEXT 1 La position horizontale de chacune des rides du lac vous est donnée en ligne 150. Au nombre de 6, ces traits sont affectés d'un espacement de plus en plus important par simple élévation du chiffre 2 à la puissance I. Lorsque I vaut 0 (début de la boucle), 2.I retourne pour valeur 1. La première ride apparaît donc en 145 + 1 = 146. On obtient ainsi, tour à tour, des espacements de 1, 2, 4, 8 et 16, ce qui semble correspondre au résultat recherché. Pour vous en assurer, tapez Rurv une fois ces lignes entrées au clavier :


47 nd En irs In-en ur lu-us et 'sus es ir- es le ris ris le 's zs la te le 's Le premier plan Il ne nous reste plus qu'à ajouter le premier plan pour parfaire notre dessin. Les trois lignes suivaniF's suffiront à remplir cet office I R1 FOR 1=0 TO 255 r;U LINE(0,96) – (1,199),2 1')Ù NEXT I Après ce court additif, rappelez votre image par un ttien que nous ayons employé une boucle FOR... NEXT et une instruction LINE comme précédemMent, l'effet obtenu tient plus de l'escalier que du pâturage en pente douce. Si l'explication de ce phénomène est relativement simple, elle n'en résout pas pour autant toutes les difficultés d'application aux(luelles vous vous heurterez lors de la mise au point d'un dessin. Lorsque vous avez tracé les trois premiers triangles représentant les montagnes, vous ;avez tiré des traits «à l'encre» sur un fond bleu pâle (codes 8 et 12). Lors de la mise en place du prenier plan, vous avez tout simplement tenté de dessiner des traits à l'encre sur une surface déjà encrée. il s'est alors passé ce qui se produit immanquablement en pareil cas : la dernière couleur utilisée a «bavé» sur la précédente. En l'occurrence, les points composant le trait à dessiner ont déteint sur tous les points de la case écran par laquelle passait cette ligne. D'où cette apparition soudaine de «pavés» au lieu de simples points. ln informatique comme ailleurs, il convient de distinguer encre et papier. Les codes couleurs qui vous ont été présentés en page 17 représentent des couleurs d'encre. Ceux qui suivent (tous négatifs), désifinent des teintes de fond : Pour éliminer de votre dessin cet effet d'escalier plutôt disgracieux, il vous suffira de modifier la ligne 180 : 180 UNE (0,96)–(l,190).-3 Il n'y a pas de vrai paysage de montagne sans sapins. Ceux-ci sont créés au moyen d'un caractère défini par l'utilisateur et affichés dans des tailE;s différentes afin de préserver, voire d'accentuer, l'impression de profondeur. La ligne 200 se charge de réserver un espace mémoire suffisant pour votre caractère. Le sapin est défini en 210 et le résultat affecté à une variable chaîne A$ (ligne 220). Les premiers sapins seront dessinés sur les montagnes du fond. Ils seront donc de taille normale (ATTRB0,O( et leur couleur de fond devra correspondre à celle employée pour le tracé des sommets (code 8). Remarquez que le caractère défini est mis en place au moyen d'une commande LINE. Celle-ci peut en effet — tout comme BOX, BOXF et PSET — être employée avec des caractères à la place des points. Les lignes 280 à 380 gèrent l'affichage des sapins du premier plan. Ceux-ci étant dessinés sur fond vert, il nous faut modifier la couleur de fond du caractère sapin par COLORO,2 (ligne 290). Pour les faire apparaître plus gros — perspective oblige —, vous les tracerez en double hauteur et double largeur (ligne 280). La boucle des lignes 300 à 380 affiche trois rangées de sapins qui suivent la pente du pâturage. Pour que le dessin ne dépasse pas les limites de la page écran, le nombre de sapins doit diminuer à mesure que l'on s'approche du bas de l'image. Cette mission est remplie par la variable N, qui est diminuée de 3 à chaque passage dans la boucle. ADDITION DE SAPINS 200 CLEAR..1 210 DEFGR$(0)=16.56.16.60.120.60.254.16 220 A$=GR$(0) 230 COLOR0.8 240 LINE(21 .6)-(10.12)A$ 250 LINE(21.9)-(17.16)A$ 260 LINE(22.8)-(13,14)A$ 270 LINE(21.8)-(33.15)A$ 280 ATTRBI.1 290 COLOR0.2 300 N=8 310 FORJ = 14 TO 20 320 FOR I= 0 TO N 330 LOCATE2*I.J+I 340 PRINTA$ 350 NEXT I 360 N=N-3 370 J=J+2 380 NEXT J 390 ATTRB0.0 400 COLOR6.6 41.0 LOCATE0.0.0 420 END LES CODES COULEURS DU FOND Code Couleur Code Couleur -1 Noir -9 Gris -2 Rouge -10 Rouge pâle -3 Vert -11 Vert pâle -4 Jaune -12 Jaune pâle -5 Bleu -13 Bleu pâle -6 Magenta -14 Violet pâle -7 Cyan -15 Bleu très pâle -8 Blanc -16 Orange _, .. 48 LE M05 ET LA MUSIQUE Vous avez pu apprécier les talents de dessinateur du ment quel nombre employer pour obtenir la valeur M05. Nul doute que vous serez tout aussi étonné par de votre choix ses aptitudes musicales. RAPPORT ENTRE LA DURÉE DES NOTES Les gammes du M05 Pour faire de la musique sur votre M05, il n'est pas Dans ce tableau, c'est la noire (L24) qui sert de base. nécessaire d'être un as du solfège, mais simplement

de connaître le nom des notes et de posséder quel- Note Nom Rapport Nombre à ques connaissances de base sur l'écriture musicale. employer La première note de la gamme, vous le savez, c'est le do. Pour faire émettre un do à votre M05, vous

n'avez pas besoin de recourir à des fréquences ou O Ronde 4 noires 96 à des codes numériques comme c'est le cas sur la J Blanche 2 noires 48 majorité des ordinateurs familiaux. Il vous suffit de J taper en mode direct Noire 24 PLAY « DO» Croche 1/2 noire 12 et de presser sur j ENTRÉE I. PLAY signifie «jouer » en Double-croche 1/4 de noire 6 anglais. Votre commande pourrait donc se traduire ) Triple-croche 1/8 de noire 3 par «Joue-moi un do ». Tous les noms de notes, sol

excepté, sont formés de deux lettres. Vous n'aurez qu'à taper la commande PLAY suivie du nom de la note de votre choix entre guillemets. Pour le sol, , Pour exécuter en blanches la gamme précédente, il les que n'écrivez ' deux de premières lettres. vous suffit d'apporter la modification suivante n PLAY «SO» PLAY «L48 DOREMIFASOLASI» Rien ne vaut les gammes pour s'exercer les doigts Connaissant le nom et la valeur des notes, vous pou- et l'oreille. Pour faire jouer au M05 la gamme de vez désormais faire jouer à votre ordinateur une do majeur, une seule instruction PLAY suffira. Il ne mélodie bien réelle. Aidez-vous pour cela d'une par- vous restera qu'à écrire : tition similaire à celle présentée ci-dessous. La transposition papier-clavier est pratiquement directe PLAY « DOREMIFASOLASI» comme vous le prouve ce programme Si vous souhaitez répéter vos gammes, insérez-les au

sein d'une boucle, comme ceci : PARTITION

10 FOR G=1 T05 20 PLAY « DOREMIFASOLASI »


30 NEXT G

L'intervalle entre deux notes successives étant nor- r - - malement d'un demi-ton, notre gamme de do devrait comporter des dièses ou des bémols pour être complète. Pour les obtenir, faites tout simplement suivre le nom de la note à hausser ou à baisser d'un demi-ton des caractères «e» (dièse) ou «b» (bémol). PLAY « DODO#RERE#MIFAFAeSOSO#LALA#SI La longueur des notes Les notes de musique ne sont pas de longueur égale. Certaines notes ont une durée supérieure à d'autres, ce qui permet de donner son rythme à un morceau. La longueur d'une note sera tout simplement représentée par la lettre L suivie d'une valeur comprise entre 1 et 96. A la mise sous tension du M05, L vaut 24 pour une noire. Le tableau ci-dessous vous rappelle le rapport existant entre les différentes valeurs aue Deut prendre une note. Il vous indiaue ézale- Partition BI. N. BI. N. N. N. N. BI. N. M05 L48 L24 L48 L24 L24 L24 L24 L48 L24 W Partition SI LA SOL SOL LA SOL LA SI SOL

o 2 M05 Si LA SO SO LA SO LA SI. SO Partition BI. N. BI. N. N. N. N. BI. M05 L48 L24 L48 L24 L24 L24 L24 L48 H Partition SI LA SOL SOL LA SI LA SOL C M05 SI LA SO SO LA SI LA SO 2 49 ir I TRANSCRIPTION SUR M05 1 10 PLAY'L485IL24LA20 PLAY:L485OL2450, 30 PLAY~LASOLA' 40 PLAY'L485I L2450' 50 PLAY'L485I L24LA' 60 PLAYL465OL245O- 70 PLAYLASILA'. 80 PLAY'L485O, OK 10 G$ = « DOREMIFASOLASI » 20 PLAY «01 »+G$+«02»+G$+«03»+G$+ «04»+G$« 05»+G$ A titre d'application, voici une autre comptine qui fait appel à trois octaves : 1 LE ROI DAGOBERT : PROGRAMME 1 10 qg=~04L245I L485IL24LA L48LAL2450 L72 50 L72LA L245105DO045I LASOLA L7250L2450 20 B$=~04L2450LA L485IL2451 5I05DORE 04L 48LAL24LA L36LA' 30 PLAY IT41+A$ 40 PLAY B$+H$ 50 PLAY A$ OK Pour permettre une plus grande lisibilité, chaque mesure de la partition est représentée par une instruction PLAY, bien qu'il serait possible de n'en utiliser qu'une seule. Lorsqu'une ligne mélodique ne comporte aucune indication de durée, c'est le L qui précède qui détermine la longueur des notes à jouer. Normalement interprété en tant que berceuse, le rythme de cet air peut être accéléré ou, au contraire, ralenti selon les préférences du programmeur. Le tempo Un même air peut être interprété de manière vive ou lente. C'est ce que l'on appelle le «tempo». Sur le M05, on peut modifier le tempo d'une mélodie en recourant à la lettre T suivie d'un nombre compris entre 1 et 255. Ti désigne le tempo le plus rapide. A l'initialisation, le M05 utilise un tempo numéro 5, donc relativement rapide. Pour ralentir la comptine précédente, modifiez comme suit la ligne 10 : 10 PLAY «T10 L48 SI L24LA» Si vous trouvez que c'est trop lent, essayez Ti! Les octaves Les airs que vous avez programmés jusqu'ici couvraient un éventail de sept notes seulement (12 avec les dièses). Le M05 disposant de cinq octaves, il vous en reste quatre autres à découvrir. A la mise en route, c'est l'octave numéro 4 qui est activée. Si vous tapez PLAY «DOREMIFASOLASI DO », le second do sera en tout point identique au premier. Par contre, si vous faites PLAY « DOREMIFASOLASI 05DO » vous obtiendrez deux do d'octaves différentes, le second étant plus haut que le premier. Une instruction « PLAY 03DO » vous donnera par contre un son plus grave. Pour changer d'octave, il vous suffit de faire précéder la note, de la lettre «0» et d'un chiffre compris entre 1 et 5. Vous pourrez désormais faire exécuter à votre ordinateur la totalité de son registre de notes, comme vous le montrent les lignes qui suivent : Cette mélodie est constituée de deux phrases musicales jouées chacune par deux fois. Plutôt que de réécrire à plusieurs reprises les mêmes notes, on affecte ici le contenu de la chaîne qu'elles constituent à une variable (lignes 10 et 20). Il ne reste plus alors qu'à taper PLAY A$ ou PLAY B$ pour entendre — dans son intégralité — la phrase musicale correspondante. Seule restriction à l'emploi des chaînes : elles ne peuvent comporter plus de 255 caractères. Cela se révèle trop peu pour un morceau de musique, mais amplement suffisant pour un «jingle» de score ou de bienvenue. Nous vous présentons ci-dessous le programme d'un petit air très simple : LA TARENTELLE, constitué de sept phrases musicales (lignes 20 à 80) que l'ordinateur va exécuter successivement (ligne 100) et à deux reprises (lignes 90 et 110). I LA TARENTELLE : PROGRAMME I 10 REM ^^ TARENTELLE ^i 20 M1$='O4L12MIREDO*035I04DO*035I' 30 M2$='L24LAL12LAL24LAL12LA- 40 M3%=M1$+ L48LAI 50 M4$=,O4L12LALALAO5DO*045ILAL245O$L125 I L24LAL1250*FA$50*LALASO*FA$L361I' 60 M5$='O4L12MI5O*SIO5REDO$O45I~ '0 M6S=' L24LAL 12LAL24LAL 12LASO*50#5O$FAS FA*FA*L36MI- 60 M7$='L24LAL12MIL24REL12FA#MIREDO{O35I 04DO*O35I L48LA' 90 FOR I = 1 TO 2 100 PLAYMI$+M2$:PLAYM3$:PLAYM4$:PLAYM5$ ^M6$: PLAYMS$+M7$ 110 NEXT 1

50

LES CONDITIONS Vous rappelez-vous votre première rencontre avec BOUCLE IF... THEN : AFFICHAGE une boucle GOTO? C'était il y a quelques chapi-

tres de cela. Vous vouliez afficher les cent premiers entiers et ne parveniez pas à mettre un terme au défilé des nombres sur votre écran. Vous vous étiez 78 tiré d'affaire à l'aide d'une boucle FOR... NEXT et aviez découvert qu'il était possible de contrôler 83 le nombre de répétitions par l'intermédiaire d'une 65 variable compteur. Vous auriez pu cependant abou- tir à un résultat absolument identique en recourant 9é à une boucle IF... THEN. 92 Jugez-en plutôt avec le programme suivant : 94 95 96 97 98 100 BOUCLE IF... THEN : PROGRAMME a 10 A=1 20 PRINT A

30 A= A+1 40 IF A(=100 THEN GOTO 20 55 END L'intérêt d'une boucle IF... THEN, par rapport à une boucle FOR... NEXT, réside dans le fait qu'une action particulière est exécutée juqu'à ce qu'une cer- taine condition cesse d'être vraie. Cela peut tout aussi bien se produire à la fin du premier passage dans la boucle qu'au bout d'une centaine de répéti- tions comme dans l'exemple précédent. La condition exprimée par la première partie de l'instruction IF... THEN peut se référer à un nombre comme à une chaîne de caractères, ainsi que vous le prouve l'exemple ci-dessous : La variable A est initialisée à 1, affichée à l'aide BOUCLE IF... THEN AVEC CHAINE: PROGRAMME

d'une instruction PRINT, puis incrémentée. Jusque là, rien que de très banal. En ligne 40, l'ordinateur doit néanmoins prendre une décision en fonction d'une certaine condition. Que lui dit cette ligne? 10 CLS 20 INPUT 'ENTREZ UN PRENOM ';P$ Elle lui demande de se rebrancher en 20 si la con- <0 PRI NT dition A < = 100 est vraie. Le signe «<» signifie 50 IF P$C>~ ALEXANDRE; THEN GOTO 20 60 PRINT NOUS M•AVEZ ENFIN RETROUVE' «inférieur à». Associée au signe «= », cette expres- 70 END sion prend le sens de « inférieur ou égal à». La ligne 20 pourrait donc se traduire par « Branche-toi à la ligne 20 tant que la condition spécifiée ici reste vraie ». Lorsque A atteint la valeur 101, le programme lit la première partie de la ligne 40, évalue la condition, s'aperçoit qu'elle n'est plus vraie, et passe alors à la ligne suivante. Lorsque vous aurez exécuté ce programme, tapez en mode direct

PRINT A Dans ce programme, on demande à l'utilisateur de L'affichage des nombres s'interrompt de lui-même frapper au clavier le prénom de son choix. Celui-ci dès que A atteint la valeur de 100. L'instruc- est affiché en 30, puis on saute une ligne pour obte- tion PRINT A affiche néanmoins pour résultat le nir une présentation plus aérée. En ligne 50, le pro- nombre 101. gramme examine la condition proposée. Si le con-


51

4 tenu de la variable P$ se révèle être « < > » (« différent de ») la chaîne « ALEXANDRE », le programme ,w rebranche en 20 et l'on recommence. Dès que l'utilisateur tape le mot «ALEXANDRE» — ce qui peut lui demander un certain temps — le programme s'interrompt. IF... THEN ET CHAINE : AFFICHAGE ENTREZ UN PRENOM ? JEAN JEAN ENTREZ UN PRENOM ? ALBERT ALBERT. ENTREZ UN PRENOM ? ISABELLE ISABELLE ENTREZ UN PRENOM ? PAUL PAUL ENTREZ UN PRENOM ? CHRISTOPHE CHRISTOPHE ENTREZ UN PRENOM ? ALEXANDRE ALEXANDRE VOUS M'AVEZ ENFIN RETROUVE OK On peut améliorer la présentation et l'efficacité des lignes précédentes en leur rajoutant le mot clé ELSE. Pour cela, modifiez comme suit la ligne 50 : 50 IF P$ < > «ALEXANDRE» THEN GOTO 20 ELSE PRINT «VOUS M'AVEZ ENFIN RETROUVÉ!» Notre condition répond désormais à la structure IF... THEN... ELSE (SI... ALORS... SINON). SI la première partie de la condition est vraie, ALORS on se branche en 20, SINON le programme affiche un message qui met fin à la boucle. L'ordinateur a donc le choix d'une alternative. Tant que l'utilisateur n'entre pas le mot «ALEXANDRE », il exécute la première partie de la condition et ignore la seconde. Par contre, dès que C$ prend la valeur «ALEXANDRE », le programme ignore la première commande et obéit à la seconde. L'instruction IF... THEN... ELSE permet à l'ordinateur de choisir entre deux actions, en fonction d'une condition préalable ainsi que des renseignements qui lui ont été donnés par le biais du clavier. Les applications de cette instruction sont multiples, ainsi que le démontre le programme ci-dessous. A partir des informations introduites par l'utilisateur, l'ordinateur affiche un message différent selon que la personne 'est de sexe masculin ou féminin, mariée ou célibataire. Cette distinction entre les énoncés s'opère au moyen de cinq instructions IF... THEN... ELSE. Une fois vos noms et prénoms frappés au clavier, l'ordinateur vous demande de préciser à l'aide des lettres « M » ou « F » si vous êtes de sexe masculin ou féminin (ligne 50). I RENSEIGNEMENTS : PROGRAMME I 10 CLS 20 SCREENO,15.15 30 INPUT-NOM -.N$ 40 INPUT'PRENOM 1.P$ 50 INPUT-SEXE (M/F) 1.5$ 60 IF 5$=M THEN GOTO 80 ELSE INPUT'ETE S-VOUS MARIEE (O/N) '.H$ 70 IF N$='O' THEN M$=-MADAME" ELSE M$='M ADEMOI SELLE' 80 INPUT:DATE DE NAISSANCE -.D$ 90 INPUT~OU HABITEZ-VOUS -.V$ 100 CLS 110 ATTRB0.1 120 LOCATE0.4 130 PRINT:RENSEIGNEMENTS CONFIDENTIELS' 140 PRINT ==-============--===--=======' 150 LOCATE0.8 160 IF 5$=-M~THEN PRINTIMONSIEUR -+P$+' +N$ ELSE PRINT M$+; -+P$+ +N$ 370 IF S$=-M THEN PRINT'EST NE LE '+D$ ELSE PRINT'EST NEE LE -+D$ 180 IF 5$=-M' THEN PRINT'IL HABITE +V$ ELSE PRINT 'ELLE HABITE '+V$ La variable S$ qui renferme votre réponse est immédiatement utilisée dans une condition (ligne 60). Si l'utilisateur est de sexe masculin, l'ordinateur passe sans plus attendre à la ligne 80, car un homme, marié ou non, est toujours appelé «Monsieur». Si l'utilisateur est une femme, on lui pose la question « Êtes-vous mariée ? ». La réponse — « 0 » ou « N » — détermine le contenu à donner à la variable M$, qui prend pour valeur « Madame » si l'utilisatrice est mariée, et «Mademoiselle» dans le cas contraire (ligne 70). La variable S$ est de nouveau employée aux lignes 110, 120 et 130. Elle permet, en fonction de sa valeur, de modifier la teneur du message ultérieurement affiché et, plus particulièrement, d'accorder en genre pronoms personnels (il ou elle) et participes passés (né ou née). Un programme similaire vous permettrait, par exemple, de modifier le contenu d'une lettre pour l'adapter selon que le destinataire est un homme ou une femme.

AFFICHAGE

RENSEIGNEMENTS CONFIDENTIELS MADEM015ELLE ARTEMI5E FENOUILLARD EST NEE LE 02/!8/1924 ELLE HABITE TRIFOUILLY OK Le M05, à l'instar des autres ordinateurs, est une machine dont la moindre opération est régie selon un ordre strict où la fantaisie n'est pas admise. Pourtant, cette rigidité n'exclut pas l'apparition d'une certaine forme de hasard. Il ne s'agit certes pas d'un de ces hasards qui déterminent les joies ou les déceptions des participants au loto, mais d'un hasard si bien «calculé et programmé» qu'il finit par ressembler au vrai et permet quelques applications intéressantes. La commande RND Pour obtenir une série de dix nombres tout à fait aléatoires, il vous suffira de taper les trois lignes indiquées ci-dessous : 10 FOR 1=1 TO 10 20 PRINT RND 30 NEXT I puis de lancer l'exécution de ce court programme. Vous devriez aussitôt voir apparaître sur votre écran l'image suivante : Vous pouvez constater tout de suite que pas un des nombres affichés n'est supérieur, voire égal à 1. Les trois nombres qui pourraient, à première vue, faire exception sont affectés d'un exposant négatif (E-02) qui les rapproche davantage de 0 que de 1. Il est de fait que la commande RND — abréviation du mot anglais RANDOM signifiant «hasard» — ne peut que générer des nombres compris entre 0 et 0.999999. Nous verrons néanmoins un peu plus loin qu'il est possible, moyennant certaines ruses, d'obtenir des valeurs plus facilement exploitables. Sans effacer votre écran, retapez la commande RuN[J suivie de ENTRÉE). Si vous étudiez attentivement ce qui est maintenant inscrit, vous remarquerez que les nombres obtenus lors de ce second tirage sont rigoureusement identiques à ceux de l'affichage précédent. Recommencez l'opération dix fois, cent fois si vous le souhaitez, vous ne pourrez rien y changer. Nous voilà bien loin de la notion de hasard telle qu'on se l'imagine d'ordinaire, et l'on est en droit de se poser quelques questions quant à l'utilité d'une commande incapable de produire des nombres «aléatoires» différents. Il existe heureusement un remède à cette carence apparente de la commande RND. Ajoutez au programme précédent les lignes suivantes, puis lancez l'exécution de cette version «améliorée» : 1 PRINT «FRAPPEZ UNE TOUCHE POUR COMMENCER» 2 X=RND 3 IF INKEY$ _ "" THEN GOTO 2 Un simple coup d'oeil vous confirmera que la série tirée n'a rien à voir avec les précédentes. Pour faire disparaître vos derniers doutes, recommencez deux ou trois fois. Les séries ne sont plus identiques. Sans entrer dans les détails de la commande INKEY$, sachez que ces quelques lignes créent une temporisation qui est fonction du temps de réaction — variable — de l'utilisateur. Cela permet à l'ordinateur de générer à vide un certain nombre de valeurs aléatoires et de se positionner plus ou moins avant dans sa « liste » interne de nombres. Regardez bien les lignes que vous venez de rajouter. Nous les réutiliserons chaque fois qu'il nous faudra recourir à la commande RND. Du hasard dans toutes les tailles S'il est plutôt rare de se servir de valeurs comprises entre 0 et 1, il est plus que courant de faire appel à des nombres entre 0 et 10 ou encore 0 et 100. Pour générer des nombres aléatoires plus grands, modifiez comme suit la ligne 20 de votre programme : 20 PRINT RND* 100 Les nombres tirés se situent désormais entre 0 et 100, mais comportent toujours plusieurs décimales après le point. Pour obtenir des entiers, il va nous falloir une fois encore rectifier la ligne 20 : 20 PRINT INT (RND* 100 La commande ainsi formulée précise à l'ordinateur qu'il lui faut tirer au hasard un nombre entre 0 et 100, et n'en retenir que la partie entière pour l'affichage. A titre d'exemple, la partie entière de 4.56789 serait 4 et celle de 19.67, 19. Les nombres entiers obtenus par ce procédé ouvrent la porte à de multiples applications. Prenons par exemple les 16 couleurs du M05 et demandons à l'ordinateur de les faire intervenir de manière aléatoire. Cela peut nous donner un programme de ce genre :

53 Mt en lie oit ité res un de ies on IN- rie ire ux .de ne on Bide ins lez les rir

es là

pur di- et les )U5 ,Ur 0 iur de nt par ns ire de COULEURS ALÉATOIRES 10 CLS 20 PRINT'FRAPPEZ UNE TOUCHE POUR COMMENC ERS 30 H=RND 40 IF INKEY$=" THEN GOTO 30 50 CLS 60 SCREEN0.0.0 70 FOR Y = 0 TO 23 80 FOR X = 0 TO 39 90 C=INT(1+RNDi15) 100 COLOR C 110 PRINT~#~; 120 NEXTX 130 NEXTY 140 LOCATE0.0.0 OK Le nombre aléatoire tiré en ligne 90 et affecté à la variable C est compris entre 1 et 15. La couleur de code 0 est réservée au fond et à la bordure. Les deux boucles des lignes 70 et 80 remplissent l'écran de dièses de couleurs aléatoires, créant un effet de mosaïque agréable à l'ceil. RND et les jeux Bien que prometteuse dans les programmes graphiques, la commande RND trouve son véritable domaine d'application dans les jeux où elle permet des variations quasiment illimitées. A titre de démonstration, voici un programme qui simule un jeu de dés. L'ordinateur choisit au hasard un nombre entre 1 et 6, puis il invite l'utilisateur à égaler ce nombre en lançant un dé. Si la valeur affichée par ce demie coïncide avec celle tirée par ~a machine, le message «GAGNÉ» s'affiche en gros caractères à l'écran. Les 6 faces du dé sont représentées au moyen de 6 caractères graphiques définis aux lignes 40 et suivantes. Notez également que ce programme fait appel à une instruction IF... THEN... ELSE pour déterminer la nature de l'appréciation qui suit le lancer de dé. Pour générer un nombre entre 1 et 6, on fait appel à l'instruction PRINT INT (1 + RND * 6) : DE 10 CLS 20 CLEAR „6 30 SCREENO.3.1 40 DEFGR$(0)=0,127,127,127,119,127.127.1 27 50 DEFGR$(1)=0,127,125.127.127.127.95,12 7 60 DEFGR$(2)=0,127.125.127,119.127.95,12 7 70 DEFGR$(3)=0,127,93.127.127,127.93,127 80 DEFGR$(4)=0.127.93.127,119.127.93.127 90 DEFGR$(5)=0.127.85.127.127.127,85,127 100 LOCAT2.10 110 PRINT5FRAPPEZ UNE TOUCHE POUR COMMEN CERS 120 X=RND 130 IF INKEY$=" THEN GOTO 120 140 FOR I = 1 TO 5 150 COLORO 160 CLS JEU DE DÉ : ÉCRAN 2 170 T=INT(1+RND*6) 180 ATTRB0.1 190 LOCATE9,10 200 PRINT~VOUS DEVEZ TIRER LE ';T 210 ATTRB0.0 220 LOCATE2,12 230 INPUT -Tapez 'ENTREE• pour jeter le clé - ,A$ 240 D=INT(1+RNDi6) 250 ATTRBI.1 260 COLORE 270 LOCATE 19,16 280 PRINT GR$(D-1) 290 COLORI 300 LOCATE15.20 310 IF D=T THEN PRINT 'GAGNE ELSE PRIN T 'PERDU' 320 FOR J = 1 TO 2000 330 NEXT J 340 ATTRB0.0 350 NEXT I 360 END 54!

LE STOCKAGE DES DONNÉES[modifier | modifier le wikicode]

Vous savez que les informations nécessaires à l'exécution d'un programme peuvent être stockées au sein de variables ou encore introduites en cours de programme par l'intermédiaire d'une instruction INPUT. Ces deux solutions ne sont cependant pas dépourvues d'inconvénients, surtout lorsque le nombre des données employées est important. Dans le premier cas, les variables doivent porter des noms différents et occupent une place mémoire non négligeable. Dans le second cas, la saisie des données se révèle lente, monotone, et risque d'entraîner de nombreuses erreurs. DATA et READ Il existe heureusement un autre mode de stockage de l'information qui allie à la fois rapidité et économie de mémoire. Dans le programme ci-dessous, on utilise 12 paires de coordonnées rangées à l'intérieur d'une ligne unique repérée par le mot DATA : 1

LETTRAGE : PROGRAMME 1 10 CLS 20 5CREENO.15,15 30 DATA 112.8,64.8,64.192.11? 192.112.56 .160.112.208.56.208.192.256.192.256.8,20 8.8,160.64 40 N=12 50 PSET(160.64) 60 FOR I = 1 TO N 70 READ X.Y 80 LINE-(X.Y) 90 NEXT I OK

Les 24 nombres de la ligne 30 sont séparés par des virgules et écrits les uns à la suite des autres. On indique à l'ordinateur qu'il devra «lire» non pas 24 nombres mais 12 paires de nombres (ligne 40). La lecture des données s'effectue à la ligne 70 par l'intermédiaire d'une instruction READ suivie de deux variables. La première désigne ici une abscisse, et la seconde une ordonnée. A l'exécution, vous devriez voir apparaître une lettre occupant la presque totalité de l'écran. Le premier point de notre tracé (son point de départ) est déterminé par l'instruction PSET de la ligne 50. La boucle des lignes 60 et suivantes lit successivement les 12 paires de coordonnées (ligne 70) qui sont réutilisées immédiatement par l'instruction LINE de la ligne 80 qui trace les contours de la lettre «M».

Sans modifier la structure de ce programme, il vous est possible d'entrer de nouvelles informations pour donner naissance à l'affichage d'une forme totalement différente.

Sans effacer ce qui précède, frappez au clavier les lignes suivantes puis tapez jÇijN :

30 DATA 155, 6, 152, 23, 135, 33, 135, 39, 117, 3,9, 117, 33 32 DATA 105, 30, 110, 54, 95, 57, 90, 50, 62, 54, 62, 68, 102, 86 34 DATA 99, 96, 113, 108, 1 1 1 , 1 1 7, 123, 129, 1 1 1 , 123, 102, 1 70, 180, 192 36 DATA 194, 167, 237, 168, 252, 150, 233, 101, 225, 102, 245, 75, 252, 44, 168, 3 40 N = 28 50 PSET (168, 3)

Vous venez, en 28 points, de représenter les contours - un peu grossiers mais néanmoins reconnais sables - de la France.

Veillez toujours à préciser à l'ordinateur le nombre de données à lire (ligne 40) sous peine de voir apparaître un message d'erreur du code 4, dont la signification pourrait être rendue en clair par la phrase «Je n'ai plus rien à lire ».

Stockage des chaînes

S'il est possible de ranger des nombres en DATA, le stockage des chaînes ne devrait pas poser plus de difficulté. Celles-ci pourront être rentrées telles quelles, à moins qu'elles ne comportent des blancs importants en début ou en fin, ou encore qu'elles ne contiennent des virgules, auquel cas elles devront être encadrées de guillemets.

On a crié sur tous les tons que les Français — en général — étaient faibles en géographie. Voici donc un programme qui, tout en reprenant les enseignements des chapitres précédents, se propose de tester vos connaissances sur les capitales de quelques pays européens.

Les noms des pays, avec leur capitale, sont rangés en DATA aux lignes 70, 80 et 90. Leur nombre a été limité à dix, mais rien ne vous empêche d'en rajouter d'autres, voire d'étendre ce programme au monde entier. CAPITALES CLS SCREEN4.3.3 PRINT'FRAPPEZ UNE TOUCHE POUR COMMENC H=RND IF INKEY$="THEN GOTO 40 LA GRAND RNE.LA 5 CARIE IN .L'IRL 100 FOR I = 1 TO 5 110 P=INT(1+RNDa10) 120 FOR J = 1 TO P 130 READ C$.P$ 140 NEXT J 150 ATTRB0.1 160 COLOR4

Un nombre entre 1 et 10 est tiré au hasard (ligne 110) et affecté à la variable P. Celle-ci ira chercher, au moyen d'une boucle dont elle constitue la valeur limite (ligne 120), le nom d'une capitale et du pays auquel elle est associée. La variable P$ — qui désigne le nom du pays - est utilisée en ligne 180 pour poser la question. La réponse de l'utilisateur, allouée à la variable R$ est ensuite comparée à la valeur de C$. En cas d'égalité, le message «C'EST EXACT» est affiché; sinon l'ordinateur fournit la bonne réponse, toujours par l'intermédiaire de C$. CAPITALES

170 LOCATE0.4.0 180 PRINT 'CAPITALE DE ';P$;' ?' 190 PRINT 200 ATTRB0.0 210 INPUT-VOTRE REPONSE : -.R$ 220 PRINT 230 COLORO 240 IF R$=C$ THEN PRINT'C'EST EXACT EL5 E PRINT 'LA REPONSE ETAIT ':C$ 250 FOR P = 1 TO 2500 260 NEXT P 270 CL5 280 NEXT I OK

La comparaison entre la ville choisie aléatoirement par l'ordinateur et la réponse fournie par l'utilisateur est rendue possible par une instruction IF... THEN... ELSE en ligne 240. Si vous lancez l'exécution de ce programme, vous pourrez constater que tout se déroule correctement lors du premier (voire du second) passage dans la boucle, puis que le programme est brutalement interrompu par le message d'erreur :

Error 4 in 130

L'ordinateur vous indique par cette phrase des plus laconiques qu'il n'a plus rien à lire et qu'il ne peut donc obéir à la commande READ de la ligne 130. Que s'est-il réellement passé? La boucle des lignes 120 et suivantes, lit un certain nombre de données en fonction de la valeur de P (entre 1 et 10). Le «pointeur de données» qui renseigne l'ordinateur sur la position du prochain élément à lire reste donc bloqué entre la première et la dixième donnée, là où l'a placé la valeur limite de la boucle. Lors du second passage dans la boucle, le pointeur de DATA se déplace de nouveau en fonction de la valeur de P et finit par se trouver en dehors de la liste des. DATA, à tenter de lire des éléments qui n'existent pas. Ainsi, si P valait 4 lors du premier tour de boucle et 8 au second, le pointeur de DATA chercherait en vain un 121 élément et, ne le trouvant pas, vous signalerait son désarroi par un mes- sage de code 4.

Pour résoudre ce problème, il faut recourir à une instruction RESTORE, dont le rôle est de repositionner le pointeur de données devant le premier élément de la liste des DATA. Pour corriger votre programme, il vous suffira d'ajouter cette ligne :

105 RESTORE

Votre programme devrait désormais fonctionner correctement. Vous pourrez ensuite vous consacrer à améliorer sa présentation, à augmenter le nombre de DATA, etc. '156L

LES SOUS-PROGRAMMES[modifier | modifier le wikicode]

Il n'est pas rare, lors de l'écriture ou de la mise au point d'un programme, que l'on doive répéter à plusieurs reprises la même suite d'instructions. Paresseux de nature, l'homme a toujours cherché à éviter de refaire dix fois ce qu'il pouvait réaliser en une seule opération. C'est sans doute ce qui a amené les programmeurs à concevoir des sous-programmes, ou «routines », qui leur éviteraient de fastidieuses répétitions.

Structure d'un sous-programme[modifier | modifier le wikicode]

Un sous-programme n'est autre qu'une succession de lignes, une portion d'un programme, que l'on peut «appeler» aussi souvent qu'on le souhaite, et qui exécute l'action pour laquelle il a été programmé avant de revenir sagement au programme «appelant ». Un sous-programme comporte obligatoirement un début (symbolisé par le numéro de sa première ligne), un milieu (qui renferme la ou les opérations à effectuer), et une fin, qui se traduit par un retour au programme principal.

Supposons par exemple, qu'il vous faille rédiger en quelques lignes un mémo résumant les principales qualités de votre ordinateur préféré et commençant impérativement par les mots « LE M05 » en double hauteur et encre rouge. Vous avez une connaissance suffisante des instructions ATTRB et COLOR pour savoir d'office qu'il vous faudrait taper pour chacune de vos phrases :

300 PRINT 310 ATTRBO,1 320 PRINT « LE M05»; 330 ATTRBO,0 340 COLOR4

Pour ne pas perdre de temps à recopier ces lignes en plusieurs exemplaires et gaspiller par la même occasion quelques précieux octets de mémoire, voici comment vous pourrez procéder :

SOUS-PROGRAMME

i0 'PROGRAMME S PRINCIPAL 20 CLS 30 DATA JOUE DE LA MUSIQUE SUR 5 OCTAVES DESSINE EN 16 COULEURS,CONNAIT TOUTES L ES OPERATIONS.POSSEDE UN BASIC PUISSANT. 40 SCREEN7,7,7 50 LOCATEO.6 60 FORI=1T04 70 GOSUB 300 60 READP; 90 PRINT P$ 100 NEXT 1 110 END 299 SOUS-PROGRAMME 300 PRINT 310 ATTRBO.i 320 COLORi 330 PRINT~LE MO5 340 ATTRB0.0 350 COLOR4 360 RETURN

Ce programme commence de manière tout à fait habituelle. L'ordinateur efface ce qui pourrait se trouver à l'écran, détermine la nature des couleurs d'encre, de fond et de bordure, puis positionne le curseur en 0,6.

Parvenu à la ligne 50, l'ordinateur quitte le programme principal par l'intermédiaire d'une commande GOSUB, pour se brancher en ligne 300, début de notre sous-programme (GOSUB 300 signifie «Va te brancher au sous-programme dont la première ligne porte le numéro 300 »). Celui-ci sélectionne le mode double-hauteur (310), l'encre rouge (320), affiche l'en-tête « LE M05 », repasse en simple hauteur, choisit une encre de couleur bleue dans sa palette, puis atteint la ligne 360. Là, se trouve l'instruction RETURN qui commande à l'ordinateur de retourner au programme principal et de se brancher à l'ins- truction suivant le GOSUB «appelant».

Le M05, obéissant, revient donc en 60 pour afficher la suite de la première phrase. Cette opération se répète à trois .autres reprises (lignes 70, 90, 110). Chaque fois, l'ordinateur exécute le sous-programme, puis réintègre le programme principal.

L'instruction END de la ligne 130 est absolument indispensable, faute de quoi le M05 exécuterait le sous-programme une cinquième fois, puis, arrivé en 360, se heurterait à un RETURN qu'il serait incapable d'associer à ûn GOSUB. Il vous le signalerait alors en affichant le message suivant : Frrnr in '(1 soit en clair, «Il n'y a pas de GOSUB pour ce RETURN » .

L'instruction PRINT de la ligne 300, également impérative provoque un saut de ligne et évite ainsi que les lettres de l'en-tête ne viennent effacer la partie inférieure de l'en-tête précédent. Quoique plus court que s'il nous avait fallu recopier

les lignes 300 à 350 pour chaque phrase affichée, notre programme pourrait encore être raccourci au moyen d'une boucle FOR... NEXT. Ce procédé présente de plus l'avantage de permettre un contrôle rigoureux du nombre de répétitions du sous-programme. Le sous-programme reste inchangé mais son appel se fait par l'intermédiaire d'une instruction GOSUB unique. Les phrases sont rangées en DATA et mises en place par un READ et un PRINT : GOSUB ET BOUCLE FOR... NEXT

10 • PROGRAMME PRINCIPAL 20 CLS 30 SCREEN7,7.7 40 LOCATE0,6 50 GOSUB300 60 PRINT-JOUE DE LA MUSIQUE SUR 5 OCTAVE 5- 70 GOSUB300 80 PRINT'DESSINE EN 16 COULEURS' 90 GO5UB300 100 PRINT~CONNAIT TOUTES LES OPERATIONS' 110 GosuB300 120 PRINT~POSSEDE UN BA5IC PUISSANT...' 130 END 290 • SOUS-PROGRAMME 300 PRINT 310 ATTRBO,3 320 I COLOR 330 PRINTLE M05 340 ATTRB0.0 350 COLOR4 360 RETURN

GOSUB et animation[modifier | modifier le wikicode]

Voici maintenant un programme d'animation faisant appel à deux sous-programmes. Un petit parachutiste est largué à la verticale d'une plage mais, poussé par un vent capricieux, il se dirige tantôt vers la côte, tantôt vers l'océan. L'un des deux sous-programmes est exécuté en fin d'animation selon que le parachutiste se pose ou non sur la terre ferme. L'initialisation du générateur de nombres aléatoires est effectuée aux lignes 30 et 50. Le décor est mis en place à l'aide de deux instructions BOXF (70 et

PARACHUTISTE : ÉCRAN 1

10 CL5 20 SCREENO.6:.0 30 PRINT'FRAPPEZ UNE TOUCHE' 40 V=RND 50 IF INKEY$= THEN GOTO 40 60 CL5 70 BOXF(0.192)-(319•99).4 80 BOXF(160,.1921.-(519,199),3 90 CLEAR,,2 100 DEFGR$10)=90.90,126,24.24,24,24.60. 110 DEFGR$(f)=0,0.24.60 126,.255,255.66 120 P$=GR$(0)+CHR$(11)+CHR$(8)+GR$(Il 130 B$=* +CHR$(ii)+CMR$(8)+~ 140 XO=25 150 FOR Y. =1NTO 22 160 X=INT(RNDI3)-1 170 XO=XO+X 180 LOCATEXO.Y 190 PRINTP$ PARACHUTISTE : 200 FOR P = 1 TO 200 210 NEXT P 220 LOCATEXO,Y,0 230 PRINTB$ 240 NEXT Y 250 IF XO )= 20 THEN GOSUB 300 ELSE GOSU B 400 260 END 299 SOUS-PRORAMME 1 300 ATTRB1,1 310 COLORI 320 LOCATE 12.12 330 PRINT 'BRAVO 340 ATTRB0,0 350 RETURN 399 • SOUS-PROGRAMME 2 400 PLAY~L24FAFAOSMIbREDOO4SIb' 410 RETURN OK

80), puis le caractère parachutiste est défini en 100 et 110 avant d'être soudé en ligne 120. Le vent qui fait dériver notre parachutiste est représenté par une valeur aléatoire comprise entre — 1 et 1 (ligne 10). Ce nombre est affecté à la variable X qui permet de modifier la position horizontale du parachutiste à mesure qu'il descend en direction du sol. L'ordonnée XO est testée en 250. Si sa valeur est supérieure ou égale à 20, cela signifie que le petit bonhomme s'est posé sur la plage, auquel cas l'ordinateur se branche au sous-programme des lignes 300 et suivantes. Le mot «BRAVO!» est affiché en gros caractères rouges pendant quelques secondes, puis effacé. Si le parachutiste tombe à l'eau, le M05 interprète un petit air de circonstance.

L'emploi de sous-programmes permet le découpage d'un programme en blocs distincts, bien séparés les uns des autres, et réservés à un usage bien particulier. Ce procédé facilite la mise au point des programmes et contribue à leur donner une plus grande clarté et une meilleur lisibilité.


MOSAIQUES[modifier | modifier le wikicode]

Pour clore ce premier volume, nous allons essayer I MOSAIQUE ALÉATOIRE : AFFICHAGE de dessiner sur la page texte à l'aide de petits carrés de couleurs.

Le caractère 127

Pour afficher un bloc de la taille d'une case écran et d'une couleur déterminée, il vous suffit de taper

10 CLS : SCREEN 0,6,6 20 PRINT CHR$(127)

A l'exécution, un carré noir apparaîtra dans le coin supérieur gauche de votre écran. CHR$(127) renvoie en effet un caractère « plein ». Poursuivez par les commandes directes ci-dessous : COLOR 3 RUN 20 COLOR 4 RUN 20 COLOR 1 RUN 20

En dessous du bloc noir viendront s'aligner succes- Le principe de base étant posé, il ne vous reste plus sivement, un carré jaune, puis un bleu, et pour finir qu'à créer vos motifs. Aidez-vous pour cela d'une un carré de couleur rouge. feuille quadrillée sur laquelle vous représenterez les 40 X 24 cases de la page écran. PAVÉ GRAPHIQUE Tracez votre dessin au crayon puis coloriez-le éven-

tuellement. Il vous suffira alors de décomposer votre motif case par case, ou ligne à ligne, et de reporter 10 CLS le code couleur de chacune des cases dans une 20 PRINT'FRAPPEZ UNE TOUCHE POUR COMMENC ligne DATA. 30 H=RND 40 IF INKEY$=-- THEN GOTO 30 50 CL5 60 SCREENO.0,0 70 FOR Y = 0 TO 23 80 FOR X = 0 TO 39 Motifs complexes avec le caractère 127 90 C=I NT(i+RNDI15) Le programme ci-dessous dessine un portrait en cou- 100 COLOR 110 PRINT C MR$( 127); leurs de l'actrice américaine Marilyn Monroe. La 113: NÉXTŸX OK0 LOCATE0,0.0 ressemblance est, bien évidemment, toute relative vu la faible résolution de l'image, mais suffisante néanmoins pour vous encourager à créer vos propres motifs

MARILYN MONROE : ÉCRAN 1 Ce petit pavé graphique, si simple à colorier, va nous permettre de créer toutes sortes de mosaïques qui, sans rivaliser avec celles des villas romaines, nous 10 CLS:SCPEEN0, 0,0 10 READ I,J fourniront néanmoins de belles images. Celles-ci ND0 IF I=99 THEN COLOR3,3:LOCATE 0,0,0:E seront de faible définition (24 X 40 = 960 points) 130 FOR AR1 JTO I mais sans aucune limitation de couleurs. Pour avoir 150 NEXTAT CMR$ f 127) ; un aperçu des possibilités offertes, tapez le pro- 160 GOTO 100 200 REM DATA gramme intitulé MOSAIQUE ALÉATOIRE. Après 210 DTA13,3.4,9,3,3,4,9,13,3,3,4 22e DRTA13,3.5.9.1,3,7,9.11 ,3,3,4 vous avoir demandé de frapper une touche pour ini- 230 DATA13. 3.15.9,10.3,2,4 tialiser le générateur de nombres aléatoires, c 290D2T4Al2,3,2.9,1,0,7,9.1.0,4,9,1,0,1,9 3 programme remplit l'écran de carrés de couleurs 270 DATAI1,3.4,9,1,0,5,9,1,0,8,9,9,3,1,4 aléatoires, au moyen de deux boucles FOR... NEXT. 280 DATA9,3.5,8,9,9,6,8.1 ,9,9,3,1,4 290 DRT R7.3.4,9.2,8.1,9,1,8,7,9,1.8,1,9, Le point-virgule qui fait suite à la fonction CHR$(127) a pour rôle d'obliger l'ordinateur à affi- cher les pavés de couleur sur une même ligne. En fin d'exécution, votre écran ressemblera à ceci

MARILYN MONROE : ÉCRAN 2 300 DATA7,3.12.9.1 .6.10.9.9.3.1.4 310 DATA7. 3. 12.9. 1.8. 10.9. 9.3. 1.4 320 DATAI, 3. 12.9. 1.8. 10.9. 9.3. 1.4 330 DATA7, 3. 12.9. 1 8. 10.9. 9.3. 1.4 340 350 DATAS. 3.21.9.9, 3, 2049.8.3.2.4 360 DATAS.3.9.9.1.8.1.9.1.8.9.9.8.3.3.4 370 DATAS. 3.21 .9.8.3.3.4 380 DATA9.3.35,9,1.0.3.9.9,3.3.4 390 DATA9.3.7.9.2.1.1.9.2.1.7.9.8.3.4.4 400 DATA9.3.6.9.7.1 .6.9.6.3.6.4 410 56T610.3.4,9.2.1 .5.7,2.1 .4.9.1 .8.6.3 6.4 420 DATA10.3.5.9.7.1.5.9.1.8.5.3.7.4 430 DATA10.3.1.8.5.9.5.1.5.9.2.8.5.3.7.4 440 DATA10.3.1.9.1.8.13.9.1.8.1.9.1.8.4. 3.8.4 450 DATA99,99

X 59 ri

répondant à la définition :

DEF GR$(X) = 255,255,255,255,255,255,255,255

Pour laisser un espace entre les différents carrés de votre mosaïque, apportez à votre programme les quelques modifications ci-dessous

20 CLEAR„ 1 30 DEF GR$(0) = 0,127,127,1 27,127,127,127,0 140 PRINT CHR$(128);

Si vous trouvez curieux de ne pas voir apparaître d'instruction PRINT GR$(0), c'est tout simplement que PRINT CHR$(128) a exactement même signification. En effet, pour tout caractère graphique que vous définissez, PRINT GR$(n) et PRINT CHR$(128 + n) sont équivalents.

Voici ce qui devrait maintenant s'inscrire sur votre écran :

Le corps du programme est constitué d'un boucle FOR... NEXT, elle-même imbriquée au sein d'une boucle GOTO.

Les éléments de la liste DATA sont lus deux à deux. Le premier élément (I) désigne le facteur de répétition du motif, le second (J), sa couleur. Ainsi, les deux premiers nombres de la ligne 200 signifient que l'on va répéter 13 fois un bloc de couleur jaune. La boucle FOR... NEXT des lignes 120 à 150 répète I fois le motif de couleur J. Le programme s'interrompt dès que I prend la valeur 99. Il aurait été possible de procéder différemment, et de lire l'image point par point. Il vous aurait alors fallu écrire 24 lignes de 40 éléments chacune :

Vous pouvez modifier ce programme pour que votre image ressemble davantage à celles que vous pouvez voir dans les programmes télétext. Pour cela, il vous suffira de remplacer le caractère CHR$(127) par un caractère graphique que vous aurez défini vous-même.

D'ailleurs, si l'on considère comme caractère graphique le symbole de code 127, il apparaît comme

Apportez une touche personnelle à cette mosaïque en modifiant les codes couleurs des lignes de DATA. Voici un exemple de ce que l'on peut obtenir : J 1 I6

LES TABLEAUX[modifier | modifier le wikicode]

Les données nécessaires à un programme peuvent être stockées au sein de variables, ou encore à l'intérieur de lignes DATA. Aucune de ces deux solutions n'autorise une grande souplesse d'utilisation.

L'instruction DATA[modifier | modifier le wikicode]

Supposons que vous souhaitiez afficher à l'écran les noms des neuf pays membres de la Communauté Européenne en 1984. Dans l'état actuel de vos connaissances, vous concevriez très certainement un programme de ce genre :

10 N = 9 20 CLS 30 FOR I = 1 TO N 40 READ P$ 50 LOCATE 15,5 + I : PRINT P$ 60 NEXT 70 END 200 DATA BELGIQUE, DANEMARK, FRANCE, GRANDE BRETAGNE, IRLANDE, ITALIE, LUXEMBOURG, PAYS BAS, R.F.A.

réduite de la liste, cette recherche est quasi instantanée, mais il en serait tout autrement si les DATA étaient au nombre de 100 ou 200, voire plus :

EUROPE 2 : PROGRAMME

10 N=9 1 20 FOR I=1 TO N 30 READ P$!I) 40 NEXT 50 CLS 60 PRINT TAB(3) 'Pressez une touche pour canmencer~ 70 IF INKEY$=" TMEN.A=RND:GOTO. 70 80 CLS 90 FOR I= 1 TO 5 100 X=INT(RNDR9+1) 110 LOCATE 15.2[I+4:PRINT P$(X) 120 NEXT I 130 END 200 DATA BELGIQUE. DANEMARK .FRANCE.GRANDE BRETAGNE. IRLANDE.I'ALIE.LUXEMBOURG.PAYS BAS.R.F.A. L'EUROPE DES NEUF : AFFICHAGE BELGIQUE. DANEMARK FRANCE GRANDE BRETAGNE IRLANDE ITALIE LUXEMBOURG PAYS BAS R.F.A OK

Les noms des neuf pays de la C. E. E. sont rangés dans une ligne DATA et affichés au moyen d'une boucle FOR.. .NEXT et des instructions READ et PRINT. Supposons maintenant que vous souhaitiez utiliser ces noms de pays dans un questionnaire et tirer quelques-uns d'entre eux au hasard. Il vous faudrait alors modifier les lignes précédentes pour aboutir à quelque chose qui ressemblerait au programme EUROPE 2. Après l'initialisation du générateur de nombres aléatoires, le programme tire au hasard un nombre entre 1 et 9 puis lit les éléments de la liste DATA jusqu'à ce qu'il rencontre le Xe nom de pays. Celui-ci est alors affiché et le processus se répète à quatre autres reprises. Chaque fois, le M05 se voit dans l'obligation de relire tous les éléments qui précèdent l'élément recherché. Vue la taille

Les tableaux à une dimension[modifier | modifier le wikicode]

Pour faciliter la recherche de l'élément souhaité, on peut avoir recours à un tableau. Un tableau n'est autre qu'une collection d'éléments de même nature (nombres, chaînes de caractères...) regroupés sous un nom commun et repérés par un indice. C'est ainsi que le problème précédent pourrait être résolu par le programme TABLEAU.

Comme vous pouvez le constater sur la liste ci-contre, les changements sont peu nombreux. Les noms des neuf pays sont toujours stockés en DATA et lus au moyen d'une boucle FOR... NEXT. La nouveauté tient à ce que ces éléments ne sont pas affichés immédiatement, mais rangés au sein d'un tableau portant le nom P$. Pour I égal à 1, le mot «BELGIQUE» sera affecté à la variable indicée P$(1). P$(2) contiendra la chaîne «DANEMARK» et ainsi de suite jusqu'à P$(9). Notre tableau contient alors neuf éléments. Ceux-ci pouvant être repérés par un seul nombre, notre tableau sera dit «à une dimension » ou «unidimensionnel ».

L'avantage de ce mode de stockage tient à ce qu'il suffit de préciser l'indice pour retrouver dans le tableau l'élément correspondant. Si vous tapez par exemple PRINT P$(3) en fin d'exécution, l'ordinateur affichera le mot «FRANCE». C'est cette propriété qui est utilisée en ligne 110 pour inscrire à l'écran l'élément d'indice aléatoire X. Si votre tableau contenait un nombre élevé de données, la recherche de la «case» souhaitée serait tout aussi rapide.

Autre avantage des tableaux : il est possible de modifier leur contenu en cours d'exécution. Suppo-


instan- DATA

TABLEAU A UNE DIMENSION : PROGRAMME 10 N=9 20 CLS 30 PRINT TAB(31'Pressez une touche pour Gonrne ncer° 40 IF INKEY$=R THEN A=RND:GOTO 40 Se CLS 60 FOR I= 1 TO 5 70 X=I NT(RNDV9+1) 80 RESTORE 90 FOR J=1 TO X 100 READ P$ 110 NEXT J 120 LOCATE 1S.2iI+4:PRINT P$ 130 NEXT I 160 END 200 DATA. BELGIQUE,DANEMARK.FRANCE.GRANDE BRETAGNE, I RLANDE, 1TALIE,LUXEMBOURG., PAYS BA5,R.F..A.

rique, mais comme une chaîne de caractères. Votre tableau ayant désormais deux dimensions, deux nombres sont nécessaires pour repérer chaque élé- ment. P$(1,1) recevra la donnée «BELGIQUE», et P$(1,2) la chaîne «30513». Si vous voulez de nouvelles informations comme par exemple la capitale, la monnaie en cours, le nom du président ou du souverain, vous les stockerez dans les variables P$(I,3), P$(I,4), etc.

Le programme, tel qu'il est conçu ici, se contente d'afficher la superficie de chaque pays en regard de son nom. Rien ne vous empêche de concevoir un questionnaire dans lequel l'utilisateur doit associer un nom choisi aléatoirement à une superficie, ou réciproquement :

TABLEAU A DEUX DIMENSIONS : AFFICHAGE

sons par exemple que vous souhaitiez qu'un nom de pays, bien que choisi aléatoirement, ne soit tiré qu'une seule fois. Il vous suffira dans ce cas de rEgouter ces deux lignes : It?~; IF P$(X) _ ' " THEN GOTO 100 II) P$(X)_" Chaque nom tiré est immédiatement remplacé par la chaîne vide " ". Aux passages suivants, l'ordinaleur teste le contenu de P$(X). S'il est égal à " " l'ordinateur tire un nouveau nombre. Si vous décidez à présent d'afficher la superficie, ou toute autre information, en regard du nom de pays concerné, il vous suffira d'ajouter une dimension au tableau précédent : I'I'ABLEAU A DEUX DIMENSIONS : PROGRAMME)

10 N=9 20 FOR I= 1 TO N 30 PEAD F$(I,1).P$(I .2' 40 NEXT 50 CL5:5CREEN4,10,.10 60 ATTRB1.1 •0 LOCATE12,2, 0:PRINT+L'EUROPE°' 80 ATTRBO. I:COLOR1. 10 90 LOCATE 5,6:PRINT'Pays':LOCATE 22,6PR INT°5ur'erfic le (Km2)° 100 FOPI=0 TO 38: LI$=LI$+'-°:NEXT 110 ATTRB0,0 LOCATE 1,7:PRI NT LI$ 120 FOR I= 1 TO N 130 COLOR 0.10:PRINT TAB(2) P$(I,1). 140. CDLOR8, 10:PRI NT TAB(28)P$(I,2) 150 NEXT 160 COLOR1,10:PRINT LI$ 300 DATrABELGIQU:E, 30513,DANEMARK ,43069,FR RNGE,551000..GRANDE-BRETAGNE,244030,ITALI E,.301249. IRLANDE.70280, LUXEMBOURG,2586.P AY5-BA5,33612.°R.F.A.°.e47973

Ï'n ligne 30, on remplit les cases du tableau à l'aide des variables indicées P$(I,1), et P$(I,2). Le premier élément désigne le nom du pays, le second sa superficie. Le tableau P$ étant de type chaîne, la superficie n'est pas considérée comme une valeur numé-

L 'EUROPE

Si vous décidez d'élargir l'Europe à l'Espagne et au Portugal, il vous suffira d'entrer les lignes suivantes :

10 N=1 1 310 DATA ESPAGNE,504748,PORTUGAL,91971

puis de taper RUN. L'exécution de votre programme prendra fin sur le message « Error 9 in 30 », ce qui signifie en clair que vous avez utilisé un indice (11) supérieur à la limite connue de l'ordinateur. Celle-ci est en effet fixée à 10 par défaut. Pour accéder à un tableau comportant plus d'éléments, il est nécessaire de le «dimensionner». Cette opération s'effectuera au moyen de l'instruction DIM (abréviation de DIMension). Dans le cas présent, tapez : 11 DIM (N,2) N désignant le nombre d'éléments pour chacune des dimensions (ligne 10). A la lecture de cette instruction, le M05 réservera suffisamment d'espace mémoire pour que vous puissiez stocker tous les éléments de votre tableau. Si vous relancez l'exécution de votre programme, celui-ci se déroulera sans problème. i

DETECTION D'UNE CASE ÉCRAN[modifier | modifier le wikicode]

Le M05 est dépourvu d'organes sensoriels. Pour- nie dont seul le test de la ligne 70 peut vous tant, il est capable, à sa manière, de reconnaître les faire sortir. caractères affichés sur une page texte, ainsi que les Ce procédé permet l'introduction d'un texte d'une couleurs, comme s'il les «voyait» réellement, longueur quelconque, l'affichage prenant fin avec l'apparition de la chaîne "ZZ"ï La commande SCREEN La boucle de balayage de l'écran débute en 110. Cette commande vous est déjà familière. Vous l'uti- L'ordinateur lit les 24 lignes de la page texte lisez pour changer les couleurs d'encre, de marge et colonne par colonne. Si le caractère de coordonnées de fond de la totalité de votre écran, dans des lignes (I,J) a même code ASCII que celui de la lettre tapée du type : par l'utilisateur, on change la couleur d'encre, puis on réaffiche la lettre au moyen de la fonction 10 SCREEN 0,3,3 CHR$ (ASC(L$))• C'est cette même commande, employée différem- En fin d'exécution, toutes les lettres L$ du texte sont ment„ qui va nous permettre de déterminer la écrites en noir nature d'un caractère quelconque affiché à l'écran. LECTURE PAGE TEXTE : SUITE Pour cela, tapez les lignes suivantes : 10 LOCATE 20,12 PRINT "A" : PRINT 20 PRINT SCREEN (20,12) A l'exécution, la lettre "A" s'affiche au centre de l'écran, puis l'ordinateur inscrit le nombre 65 une 500 DATA'LA CIGALE ET LA FOURMI °,° ."LÀ CIGALE AYANT CHANTE TOUT L'ETE,',°5E TR ligne plus bas. Cette valeur n'est autre que celle du OUVA FORT DEPOURVUE°,°QUAND LA BI5E FUT VENUE.°,°PAS UN SEUL PETIT MORCEAU° code ASCII de la lettre "A". Exécuter la ligne 20 510 DATA°DE MOUCHE OU DE VERMICEAU.°,°EL LE ALLA CRIER FAMINE' ,CHEZ LA FOURMI, S revient donc à lire puis à afficher le code ASCII du A 0 DA AE.°.°LA S RAT SE LUI PRU5R° 520 DATA°QUELQUES GRAINS, POUR SUBBSISTER ,°JUSQU'À LA SAISON NOUVELLE^,°<<JE VOU caractère de coordonnées (20,12). Pour faire «lire» 5 PAIERAI,)) LUI DIT-ELLE,°,°<<AVANT L'A votre écran à l'ordinateur, il suffira par conséquent OUT, FOI D'ANIMAL,° Y ~1 530 DATA° I NTERET ET PRINCIPAL.>>" ,"LA FO °,°C 'EST URMI N'EST PAS PRETEUSE.LA SON de lui faire examiner le contenu des 1 000 cases de MOINDRE DÉFAUT. ,'<<QUE FAISIEZ-VOUS AU TEMPS CHAUD )>.° 540 DATA°DIT-ELLE A CETTE EMPRUNTEUSE.--, la page texte. C'est ce qu'illustre le programme ci- - <<NUIT ET JOUR, A TOUT VENANT. .JE CHA dessous : NTAIS,NE VOUS DEPLAI SE. )>°.°(t VOUS CHANT IEZ ? J'EN SUIS FORT AISE.° 550 DATA°EM BIEN, DANSEZ MAINTENANT!, "Z Z" 01< ___________ LECTURE PAGE TEXTE : PROGRAMME r- 10 CLSI SCREEN4 ,6.6 20 LOCATE 2,10:PRINT"• Détection d'un point de couleur 30 INPUT°LETTRE A METTRE EN VALEUR °;L$ Ce qui est possible sur les 1000 cases de la page 40 CLS ~1 Y p g 50 FOR I=0 TO 1 STEP 0 60 RAD $T$ZZ' THEN 110 texte l'est également sur les 64000 points définis- 80 L=INT((40-LEN(T$))/2) sur sables la pagegraphique. Un ixel n'étant codé 90 PRINT TAB(L):T$ p g pixe FORT 1=0 TO 23 que par sa position et sa couleur, nous ne pourrons 120 FOR J=0 TO 39 obtenir pour seule information que le code couleur 130 IF SCREEN(J,I)=ASC(L$) THEN COLO R0,6:LOCATE J,I: PRINT CHR$(ASC(L$11:COL du dit point. Nous utiliserons, pour ce faire, la fonc- OR4.6 140 NEXT J tion POINT (X,Y), où X et Y désignent les coordon- 150 NEXT I g 160 END nées du point à tester. A titre de démonstration, tapez le court programme ci-dessous : 10 CLS : SCREEN 0,3,3 20 BOXF(40,60)—(280,140),4

Un rectangle bleu (code 4) vient s'inscrire au centre Le but du programme consiste à mettre en valeur d'une page uniformément jaune (code 3). Si vous une lettre particulière en l'affichant dans une cou- entrez en mode direct la commande PRINT leur différente des autres. POINT(10,10), POINT(160,100), vous obtiendrez res- L'utilisateur entre en ligne 30 la lettre à faire res- pectivement les valeurs —4 (fond jaune) et 4 (encre sortir. La boucle des lignes 50 à 100 affiche le texte bleue). En utilisant la fonction POINT, l'ordinateur (une fable célèbre). va pouvoir déplacer un objet dans un environne- La ligne 50 utilise une syntaxe assez particulière. Le ment coloré, ainsi que l'illustre le programme ESCA- pas est en effet égal à 0, ce qui crée une boucle infi- LIER.

N put vous te d'une fin avec en 110. ;e texte données re tapée re, puis 'onction Kte sontESCALIER : PROGRAMME 10 CL5:5CREEN 4,3,3

0 ATTR5I.1

0 LOCATE8,2,0:PRINT°L'ESCALIER° 40 ATTRBO,0 50 COLORI,3 O L=4:LOCATEO,2,0 '0 FOR I=L TO L+19 350 FOR J=1 TO I 90 PRINT CHR$(127) 100 NEXT J 110 PRINT 120 NEXTI 130 COLOR9,3 140 FOR I=1 TO 39 150 PRINTCHR$(127)- 160 NEXT I 170 CLEAR„1 180 DEF GR$(0)=0,0,60,126,255,255,126.60 LA TR T EL ER DU A 1O V J 1A JT page Finis-codé cons fleur 'onc-don- nme itre ous NT rescre eur ne-CA- 190 COLOR 4,3 200 8V=1:BH=1 210 LOCATE BH,BV,O:PRINT GR$(0) 220 FOR I=1 TO 100:NEXT I 230 LOCATE BH,BV,O:PRINT° 240 PH=INT(BH,8+4):PV=(NT(B)Ja8+8) 250 IF POINT(PH,PV)=1 THEN BH=BH+1 260 IF POINT(PH,PV)=-4 THEN 0V=BV+1 270 IF POINT(PH.PV)=9 THEN EH=BH+1 280 IF BH>36 THEN LOCATE BH, BV,O:PRINT G R$(0) :END 290 GOTO 210 Une petite bille bleue (caractère graphique défini en 180) tombe le long d'un escalier rouge dessiné par la boucle des lignes 70 à 100. Au bas des marches, un trait rose (code 9) matérialise le sol (lignes 140 à 160). L'animation de la bille s'effectue aux lignes 200-290. Elle est entièrement commandée par le M05, en fonction des couleurs qui environnent la bille. Pour descendre cet escalier, il n'y a que deux mouvements possibles : un déplacement latéral vers la droite (-3), et un mouvement vers le bas (1). Pour déterminer quelle direction donner à la bille, le M05 teste la valeur d'un point situé en dessous de celle-ci, et obtenu par les formules INT(BH*8+4) et INT(BV+8+8). BH et BV désignent respectivement les coordonnées horizontale et verticale du caractère «bille». En multipliant ces deux valeurs par 8, on trouve la position équivalente sur la page graphique. On rajoute respectivement 4 et 8 au résultat obtenu et on teste le point (PH,PV). Si on trouve —4, la bille est dans le vide et doit donc descendre. Si on trouve 1, la bille est sur une marche et doit avancer. Le programme suivant dessine une planète entourée d'un anneau de glace. Le M05 utilise la fonction POINT pour alterner couleurs d'encre et de fond selon qu'il dessine sur une plage de code positif ou négatif (ligne 250) : PLANÈTE SATURNE : PROGRAMME 10 REM PLANETE 20 CLS:SCREEN0,0,0:LOCATE0. 0,0 30 YO=100:XO=160:R=56:D=YO-R:CO=15 40 GOSUB100 50 L=80:H=16:CO=-S:PI=3.14159 60 GO5UE200 70 IF INKEY$=-- THEN 70 80 END 99 'CERCLE PLEIN 100 FOR Y= 0 TO Ri[2 110 BC=SQRt (RI 2)-[(R-Y )t2 1) 120 LINE(XO-BC.D+Y)-(XO+BC,D+Y),CO 130 NEXT:RETURN 199 ELLIPSE 200 FOR T= 1 TO 5:L=L+1:H=H+1 210 FOR A=0 TO 2.PI STEP PI/180 220 X=LCO5(A)+XO 230 Y=H.5IN(6)+YO 240 IF (X)=102 AND Y<=881 OR (X<=213AN DY(=88)THEN270 250 IF POINT(X,Y)O15 THEN CO = 7 ELSE CO=-8 260 PSET(X,Y),CO 270 NEXT A:NEXT T: RETURN Les coordonnées d'un cercle Pour tracer un cercle sur une feuille de papier, il vous faut piquer un compas en un point qui représentera le centre de votre cercle puis choisir un écartement qui en déterminera le rayon. Pour dessiner un cercle sur l'écran de votre ordinateur, c'est à peine plus compliqué. Commencez par placer le curseur graphique au milieu de votre écran (point de coordonnées [160,100]). Ceci fait, choisissez un nombre entre 1 et 99 pour le rayon R (une valeur supérieure vous ferait sortir de l'écran). Il ne vous restera plus alors qu'à afficher chacun des points de votre cercle en faisant appel à la formule suivante Coordonnée X = R *- COS(I) Coordonnée Y = R * SIN(I) COS et SIN sont deux fonctions mathématiques (fonction COSINUS et fonction SINUS). I désigne un angle exprimé en radians et variant de 0 à 2*PI (0 à 360 degrés). PI représente le rapport existant entre la circonférence d'un cercle et son diamètre. Cette valeur est constante et se traduit par le nombre 3.141592. Ceci étant posé, voici le programme qui vous permettra de tracer un cercle : CERCLE : PROGRAMME 10 CL S: 5CREENO.1,1 20 'O=160:r0=Y:Op 30 P I =3. 14159 40 R=90:LOCATE0 r0.0 50 FOR 1=0 TO. 2t~P.I STEP .05 60 X=R«COS(I)+XO 70 Y=PaSIN(I }+Y0 30 P5ET(X.Y) 90 NEXT IELLIPSES Pour tracer un cercle plus petit, il vous suffira de modifier la valeur de R en ligne 40. Le programme suivant fait appel à une boucle pratiquement similaire pour dessiner une succession de cercles concentriques de couleurs différentes. Les lignes de tracé du cercle constituent désormais un sous-programme qu'il est possible d'appeler à tout instant : CERCLES CONCENTRIQUES : PROGRAMME 10 CL5:5CREEN00.0 20 LOCATE0,0,0 30 R=100:X0=160:YO=100:PI=3.14159 40 FOR CO= 1 TO 12 50 COLOR CO 60 R=R-8 70 GOSUB 10,0 80 NEXT CO 90 END 100 FOR A=0 TO 2%PI STEP 0.05 110 X=R*CO5(A)+XO 120 Y=Ra5IN(A)+YO:Y=Yr~0.9 130 PSET(X,Y).CO 140 NEXT A 150 RETURN CERCLES ET Le M05 dispose de nombreuses instructions graphi- de I de 0 à 2*PI, avec un pas de 0.05 (pour un tracé ques permettant notamment d'afficher points, traits, plus précis, diminuez le pas). Chacun des points X rectangles vides et pleins. Il n'existe malheureuse- et Y est ensuite affiché en fonction des coordonnées ment rien de similaire pour le tracé automatique du centre (variables XO,YO) : de cercles ou de courbes. Cela ne signifie pas pour autant que nous allons devoir nous limiter aux seules figures rectangulaires. Puisque l'instruction de tracé de cercles fait défaut, inventons-la. ru 1 I,i' t,iy=ut, h 4=rad tins, d 1J0 eu ligue 40. La boucle des d ( anuiut ',i ,)vri)cut lrs valeurs Le sous-programme des lignes 100 et suivantes est appelé à 12 reprises. Le rayon initial, d'une valeur de 100, est décrémenté de huit unités à chaque passage dans la boucle, afin que les couleurs ne viennent pas se superposer les unes aux autres : rappelez-vous en effet qu'il est impossible de faire cohabiter plus de deux couleurs différentes (encre et fond) -5 in tracé oints X tonnées ra de imme simi-ncen- tracé [mme E est .eur )as- .en- ~pe- ibi- nd) r une même série de huit pixels. La couleur du lrc:le courant est déterminée par la valeur de la 1 r iable compteur I. Le pas choisi ici ne produit pas X111 trait continu, mais il améliore la rapidité d'exéution du programme. Pour un tracé plus précis, nuis aussi plus lent, choisissez un pas de 0.001. Lw s ellipses i'rol;rammer une ellipse ne pose guère plus de proI)Içnte que le tracé d'un cercle I 7 CLS : SCREENO,1,1 I OCATEO,0,0 Hi = 150.R2=90:XO=160:YO= 100: P1 14159 1H) C;OSUB 100 I ND i i FOR A=0 TO 2*PI STEP 0.01 I)) X=R1*COS(A)+XO 1U Y = R2*SIN(A) +YO :Y=Y*0.9 F) PSET(X,Y),CO 14U NEXT A 1 ,u RETURN Vous remarquerez que le sous-programme de tracé d' l'ellipse ne diffère de celui du cercle que par la 1wésence de deux valeurs (variables Ri et R2) en lieu et place du rayon R. R1 détermine les dimen'ions de la moitié horizontale de l'ellipse, R2 celI~'s de la moitié verticale. Essayez de modifier les valeurs de ces variables et notez les variations ainsi obtenues : Si vous utilisez les mêmes valeurs pour Ri et R2, le programme vous redessine un cercle. Il se peut que les cercles qui apparaissent sur votre écran ne semhlent pas être parfaitement « ronds ». Si tel est le cas, introduisez un facteur de correction dans-le calcul ries coordonnées X ou Y, selon que le cercle s'étale iargeur ou en hauteur. Pour un cercle plus «haut» que «large», tapez : Y=R*SIN(I):Y=Y*0.9 En modifiant légèrement le programme CERCLES CON- CENTRIQOES, voici ce que vous pouvez obtenir : Lorsque vous maîtriserez la technique de tracé des courbes, vous pourrez créer toutes sortes de motifs, témoin cette représentation d'une boîte de conserve : BOITE DE CONSERVE .0 CLO:5CREEN4.3,3 20 L0C6TE0,0,0 30 L=O:H=18:PI3.14159 40 XO=160:Y0=20:T=2,PI 50 GO500 200 60 LINE(?(,y)-(230,160) -0 Y0=160:T=PI 80 GO5UB200 90 LINE(X,Y )-(90,207 100 ATTRBO,1.:COLORI,3 110 LOCATE17,8:PRINT°PETITS°:LOCATEI8,10

PR NT POI 5°

120 LOC AT E18. 13: PR I NT°EXTRA- :LOCATE18,15

PRI NT°FINS'

130 ATT RB0,0:LOCATEO,0,0 140 COLOR0.3:END 200 FOR A=0 TO T STEP 0.02 210 X=La CO5(A)+XO 220 Y=H,SIN(A7+Y0 230 PSET(X,Y) 240 NEXT A 250 PETURN COURBE DE LISSAJOUS : AFFICHAGE Les spirales En modifiant très légèrement le précédent programme, on peut créer des spirales tout aussi plaisantes : A partir du sous-programme de tracé d'un cercle introduit au chapitre précédent, il est possible, moyennant quelques infimes modifications, de générer une multitude de courbes aussi variées que spectaculaires. Les courbes de Lissajous Nous avons vu qu'en modifiant la longueur du rayon dans une des deux formules R*COS(I) et R*SIN(I), on pouvait obtenir une ellipse. Voyons maintenant ce qui se produit si l'on agit sur le sinus de l'angle I. Pour cela, entrez puis exécutez ce court programme : 10 CLS : SCREENO,7,7 20X0=160:YO=100R=90 30P1=3 14159 40 FOR 1 = 0 TO 2 *PI STEP 0.005 50 X = R*COS(1) + XO 60 Y=R*SIN(2.1)+YO 70 PSET(X,Y) 80 NEXT I 90 END On obtient une courbe fermée du plus joli effet appelée «courbe de Lissajous », du nom du physicien français qui en découvrit les propriétés au siècle dernier. Si vous multipliez l'angle I de la formule SIN(I) par une certaine valeur, vous agirez sur le nombre de boucles dessinées. Un facteur 3 donnera naissance à trois boucles, un facteur 4 à quatre boucles, et ainsi de suite. La première photo d'écran de la page ci-contre illustre le tracé obtenu avec un facteur 8. Si vous employez un facteur 100 et un pas de 0.001, vous pourrez admirer, après quelques longs instants, les élégantes arabesques de la seconde photo d'écran : 10 CLS : SCREENO,1,1 20 XO = 160:Y0= 100 30 PI = 3.14159 40 FOR I = 0 TO 60* PI STEP .05 50 X = I/2.COS(I) + XO 60 Y=1/2*SIN(I)+YO 70 PSET(X,Y) 80 NEXT I Au lieu d'utiliser une boucle variant de 0 à 2*PI, comme on le faisait jusqu'ici, ce programme boucle jusqu'à une valeur limite de 60*PI. Autre changement : le rayon n'intervient absolument pas dans le calcul des coordonnées. C'est la valeur de l'angle I qui détermine à elle seule la position des points de la spirale. La division par 2 de la V'. T de I a pour effet de rapprocher les volu~ Il. Ira spirale, créant ainsi une figure plus «res- On fait appel ici à l'instruction LINE de manière à ce que les traits dessinés ne soient plus constitués de pointillés mais ressortent plus distinctement. Il faut noter que le programme fonctionnerait tout aussi bien avec l'instruction PSET(X,4). pro-Dlai- PI, cle lu-la si- la Date spirale «de base» peut également être d'hrmée par simple multiplication de la valeur de 1 A titre de démonstration, modifiez comme suit les I );ues suivantes : H) CLS : SCREEN 7,4,4 1 OR 1 =010 20-,,PI STEP 0.02 X = 2.5*I*COS(II + XO TOURBILLON: AFFICHAGE En décalant légèrement le centre de la spirale à chaque passage dans la boucle, on crée une sorte de cône. Il faut, pour 'cela, avoir recours à ces quelques lignes : 'n X =10 Y0=5 -+v F05 ï =0 10 34*PI STEP 0.05 45 X0 X0+0.05:Y0=Y0+0.05 50 X = I*COS(I) + XO 60 Y I.SIN(I)+YO 70 LINE — (X,Y) Pour clore ce tour d'horizon des fonctions SIN et COS, nous allons apprendre à dessiner des rosaces ou, si vous préférez, des fleurs avec des pétales dis- posés régulièrement. Pour cela, modifiez une nouvelle fois votre programme comme indiqué ci-dessous : 20X0= 160:YO= 100: K=3: N= 12 35 PSET(XO + 20*K + 20,YO) 40 FOR 1 =0 TO 2*PI STEP 0.02 50 X = (K + COS(N*I))*COS(I) : X = X*20 60 Y = (K + COS(N*I))*SIN(I) : Y = Y*20 70 LINE—(X+XO,YO—Y) En faisant varier N à la ligne 20, vous pouvez augmenter ou diminuer le nombre de « pétales » pour «dessiner» des fleurs différentes. Voici la courbe obtenue pour N= 12 : FLEUR A 12 PÉTALES : AFFICHAGE



I.I fVLLJ TLCIIVJ Maintenant que le tracé des cercles et des ellipses tionne au centre du cercle, et l'on trace une droite n'a plus de secret pour vous, apprenons à dessiner depuis l'origine jusqu'au point de coordonnées (X,Y). un disque. Le résultat final, bien que dessiné assez rapidement, Il serait possible pour cela de tracer un premier cer- ne comble pas vraiment nos espérances. L'image qui cle, de diminuer de 1 la longueur du rayon, de des- apparaît à l'écran fait penser davantage à un soleil siner un second cercle, et ainsi de suite. Vous con- qu'à un cercle plein. Si vous pensez résoudre le pro- naissez suffisamment le problème désormais pour blème en diminuant le pas (ligne 100), sachez qu'il savoir qu'une telle méthode nécessiterait un temps vous faudra 10 minutes pour remplir, imparfaite- de tracé difficilement acceptable pour un petit cer- ment, votre disque avec un incrément de 0.001. Les cle, et franchement intolérable pour un cercle de «jours» qui subsisteront sont dûs au mode de tracé taille moyenne (1 heure 15 minutes pour R=90 et du M05 et demeureront visibles quel que soit le un pas de 0.005). pas employé. Une autre solution consiste à utiliser le rayon R et à le faire tourner autour de l'axe constitué par Triangle et disque le centre (XO,YO). C'est cette seconde méthode que Les deux méthodes présentées jusqu'ici s'avérant nous allons illustrer maintenant : soit trop lentes, soit imparfaites, nous allons aban- donner les sinus et les cosinus pour nous tourner vers un mode de tracé faisant appel au théorème RAYON TOURNANT de Pythagore.

Ce théorème bien connu se rapporte, pour mémoire, au triangle rectangle et énonce que le carré de la longueur de l'hypoténuse d'un triangle rectangle est 10 ~ -Oo_5:ATEER© ,Ea ENO 0 égale à la somme des carrés de la longueur de cha 0;X 50'a'° _0 R=90=170100:PI=3.14159 0 : = cun des deux autres côtés. Si l'on considère un trian - 40 COLOR 14 sfa cocus sae ENS 10 gle rectangle ABC, ceci pourrait s'exprimer par 100 FOR A=0 =0 TO STEP 0.02 1 n 1 0 X=Rr_05(A)+XO AC~2 = AB 2 + BC2. +X0 120 Y=R3M5IN(A)+70:7=7310.9 1 30 I NE f XO . Y o f x 7 1 10 A Pour ceux qui ne comprennent pas le rapport exis- NETX 150 PETURN tant entre un triangle et un disque, voici un schéma qui devrait éclaircir quelques points encore obscurs :

LE THÉORÈME DE PYTHAGORE APPLIQUÉ AU. TRACÉ D'UN DISÛUE









Les points A, B, C, A, B1, C,, A, B2, C2 forment trois ' 1 4 ; triangles rectangles. A désignant également l'origine d'un demi-cercle, on peut déduire de ce schéma que les longueurs AC,AC,, et AC2 sont toutes trois égales à la longueur du rayon de ce demi-cercle. Connaissant AC, il ne nous reste plus qu'à détermi- On retrouve le sous-programme de tracé du chapitre ner les valeurs de AB et BC. Pour la première, un précédent (ligne 100 à 140), mais l'instruction PSET coup d'ail au schéma de la page précédente nous a été remplacée par un LINE (XO,YO)—(X,Y). A cha- apprend que la longueur du segment AC variera de que passage dans la boucle, le curseur se reposi- R à 0. Pour calculer la longueur de BC, il nous suf-

15 'oite Y) ent, qui )leil Jro- u'il iteLes acé le de poser AB2+BC2 1 l I i, nous pouvons déduire que BC 2 = AC 2 — AB"2 f i, partant, que BC = AC 2 — AB 2. Ce sont ces ~iièines calculs qui sont à la base du programme Dzs- i:. La longueur du segment BC est déterminée en Ippie 110. La valeur obtenue est alors utilisée pour 1 t cer un trait de part et d'autre d'une verticale pasuit par le point XO (ligne 120). Y varie de 0 à R*2 (diamètre du cercle). Quand Y vaut 0, le segment BC +, ;i (le même longueur que le rayon. Le tracé s'effeci i i : en quelques secondes et le disque obtenu est totai(nient exempt de «jours» :1 MOTIF DE L'OURSON 1 10 CLS:SCREENI,I,I:LOCRTE0,0.0 20 XO=160:70=100:R=72:D=YO-R:CO=3 30 GOSUB 200 40 XO=96:R=40:70=56:D=Y0-R:CO=3 50 G05UB 200 60 XO=224 70 GOSUB 200 80 XO=136:YO=96:R=8:D=YO-R:CO=-1 90 GOSUB 200 100 XO=184 110 GOSUB 200 120 )(O=160:YO=120: R=16:D=YO-R:CO=-i 130 GOSUB 200 140 YO=150: R=8:D=Y0-R:CO=-10 150 605U5 200 160 END 200 FOR Y=1 TO Rx2-1 210 BC=SOR( (Rt2)-((R-Y)t2)) 220 LIN E(XO-BC,D+Y)-(XO+BC,D+Y3,CO 230 NEXT 240 RETURN Int inier ne re, la 'st .a- n- .s-in °e E

DISQUE[modifier | modifier le wikicode]

10 CL$:5CREEN 3.3.3 20 YO=100:XO=160:R=50:D=YO-R:CO=1 30 GOSUB100.. 40 END 100 FOR Y=OTOR.2. 110 BC=SQR[(Rt2)-((R-Y)t211. 120 LINE(XO-BC,D+Y)-(XO+3C,D+Y1.CO 130 NEXT 140 RETURN partir de ces lignes, vous pouvez imaginer toutes ries de motifs basés sur des disques, comme en riijirne le petit ourson du programme suivant ,Luson est constitué de sept disques de trois cou- rs différentes. Pour afficher les yeux, le nez et ii bouche, il faut avoir recours à des codes couleurs ~ )p,itifs, car on trace sur de l'encre : Si vous remplacez les lignes 10 à 160 du précédent programme par celles qui suivent, vous obtiendrez un motif qui vous rappellera très certainement une certaine petite souris : 20X0=160: Y0=135: R=64: D=Y0-R: CO=0: GOSUB 200 30X0= 104: Y0=49: R=48: D=YO-R: GOSUB 200 40X0=216: Y0=49: R=48: D=YO-R: GOSUB 200 50X0=140: YO=120:R=32: D=Y0-R:CO=-8:GOSUB 200 60X0= 180: Y0: 120: D = Y0 - R : GOSUB 200 70X0= 160: YO =145: R=40: D = Y0 - R : GOSUB 200 80 Y0= 145: R= 12: D=YO-R: CO=0: GOSUB 200 90 Y0=178: R= 14: D=YO-R: GOSUB 200 100 XO =142: '(0=125: D = YO - R : GOSUB 200 110 XO =178: GOSUB 200 120 Y0=130: R=5: D=YO-R: C0=-8: GOSUB 200 130 X0= 142: GOSUB 200: END Il ne vous reste plus qu'à laisser libre cours à votre imagination pour créer des graphismes mêlant droites et courbes. Le champ d'investigation est vaste et vous fera passer d'agréables moments.


LA SAUVEGARDE DES PROGRAMMES[modifier | modifier le wikicode]

Nous allons aborder ici quelques techniques de sauvegarde et de chargement qui vous permettront de tirer meilleur parti de votre M05, de protéger vos oeuvres des curieux, ou encore de réemployer à loisir certaines routines particulièrement utiles. Chargement et exécution des programmes Jusqu'ici, lorsque vous souhaitiez charger puis exécuter un programme, vous entriez successivement les commandes suivantes : LOAD «Nom de programme» RUN Pour ce faire, vous pouvez utiliser uniquement RUN «Nom de programme» Cette commande aura pour effet d'assurer le chargement en mémoire du programme spécifié, puis d'en lancer immédiatement l'exécution. Il existe une autre manière de procéder qui fait appel à la commande LOAD, et qui consiste à écrire LOAD « Nom de Droaramme». R Sauvegarde et fusion de programmes Il n'est pas rare en programmation que l'on réutilise les mêmes routines, dans des programmes parfois très différents. Si vous avez mis au point un programme ou un sous-programme dont vous avez tout lieu d'être satisfait, vous souhaiterez certainement l'inclure dans de nombreux programmes. Quelles options s'offrent alors à vous ? Tout d'abord, vous pouvez tout simplement recopier cette routine dans sa totalité. Si votre sous-pro- gramme se révèle trop long pour être retapé rapi- dement, vous pouvez néanmoins le réutiliser sans devoir le réécrire. Supposons que vous souhaitiez inclure la routine de tracé d'un disque dans un de vos programmes. Voici comment vous y prendre : RÉEMPLOI D'UNE ROUTINE : ,PROGRAMME OK LOAD 'OUR50N° 5earch in9 F0Uid: OURSON BAS OK DELETE 10-160 OK LIST 200 FOR Y=1 TO R42-1 210 QM=SQR((Rt2)-« R-Y)t2)) 220 LINE(X0_QM.D+Y)-(XO+QM.D+Y) CO 230 NEXT 240 PET URN OKComme vous pouvez le constater sur la photo d'écran ci-contre, nous avons d'abord appelé le programme OURSON par une commande LOAD, puis à l'aide de l'instruction DELETE, nous avons supprimé toutes les lignes qui ne nous intéressaient pas, afin de ne conserver que la seule routine de tracé d'un disque. Il ne nous reste plus désormais qu'à taper notre programme en prenant garde, cependant, de choisir des numéros de lignes différents de ceux employés par le sous-programme. Cela fait, nous pourrons sauvegarder le tout sous un nouveau nom. Il existe, vous devez vous en douter, une seconde solution, à la fois plus simple et plus performante. Elle vous permettra, si vous le désirez, de bâtir tout un programme à l'aide de routines déjà existantes. Pour illustrer ce procédé, commençons par créer un sous-programme, en l'occurence une routine musicale qui exécute les premières mesures de la «Petite Musique de Nuit» de Wolfgang Amadeus Mozart : ( K525 : PROGRAMME 1 9000 REM PETITE MUSIQUE DE NUIT 9010 A$='5OL12PREL245OL12PRE5ORESO5I O5RE L24PDOL 12PO4LAO5DOL12PO4LAO5DOO4LAFA*LA REL24P' 9020 B$=IL125OPL245OL 12505I LA5O5OL24FA*L 12FA$LAOSDO04FA#.LASOL245OL12505ILA5O5OFA *L24FA*L12FA*LAO5DO04FA*5O5O' 9030 C$=-L65OFA*MI FA*L12505OL65ILA5OLAL1 25I SIO5L6REDOO45IO5DOREL24PL48REMI L6RELI 5DOL24DOL6D004Li55I L245I° 9040 D$=~L65ILI5LAL24LAL125OFA*MIFA4SOPL APSIPL24P L4805REMIL12REDODODODOO45I5IS1S I LALALASOFA*MIFA*L4850' 9050 PLAY IT7'+A$ 9060 PLAY B$:PLAYC$:PLAYD$ 9070 RETURN _ Pour lancer l'exécution de ce sous-programme, tapez GOSUB 9000 en mode direct. Ceci fait, entrez la commande suivante : SAVE "K525°.A "K525" est le nom donné à cette routine. Il correspond au numéro de catalogue de cette oeuvre de Mozart. Le A qui fait suite à la commande SAVE indique à l'ordinateur d'effectuer la sauvegarde de ce programme sous une forme codée. Le code choisi vous est familier. Vous le connaissez sous le nom de code ASCII. Cette sauvegarde d'un genre assez particulier (elle est notamment plus lente que la sauvegarde habituelle) vous permettra, le moment venu, de fusionner cette routine avec un autre programme. Tapez NEW pour effacer de la mémoire de l'ordinateur toute trace de ces lignes, et notez sur une feuille de papier le numéro qui apparaît sur le compteur de 17 ~Ec 'aIIrr~~. ide d torii, de rt(, isgrir e pro ir d, s p€u au v, 'onde ante tout ntes, r un lusi Mite ii(k votre lecteur-enregistreur de programme. (l ,errons besoin très prochainement. Cette ri((l terminée, recopiez le programme dont la sur la page ci-contre. Il s'agit pour »i ut('Iur de retrouver en cinq coups le nombre o(t~uti~rernent par l'ordinateur. En cas de succès, 1;(nuxne affiche «gagné», puis se branche au j,tOt;num Ine de la ligne 9 000 (celui-là même que i'('iii-z. d'enregistrer). Sinon, il guide le joueur Iii indiquant brièvement si sa réponse est supéà+ (u inférieure à la valeur générée : PROGRAMME DE JEU à" t;l. 5: 5CREEN

4f rRINT TAB(3) ^'PRESSEZ UNE TOUCHE POUR (IMMENCER'
  • 1~ If INKEY$=rte THEN X=RND:GOTO 30

40 , L5:PRIMT TAB(8) 'RETROUVEZ DANS CE C A( :PRINT TAB(6) 'LE CARRE TIRE PAR LA l(RCMI NEC '. ü0 BOX(39.39)-(280.176).0 %6 A=INT(RND#29+5):B=INT (RNDl17+5) >N INPUTP(EN X,Y:I X<0 OR Y<0 THEN 70 no IF X<40 OR X>280 OR Y<39 OR Y>176 THE N PLAY DOMII:LOCATE 14.23:PRINT'HORS CA ü(+r;':GOTO 70 UU10 X=X/B:Y=Y/S:IF PTRIG THEN PLAY -LA^ 100 DIF=SQR((A-X)I(A-X)+(B-Y).(B-Y)) 1!0 IF DIF<2 THEN LOCATE X,Y:PRINT CHR$( 137):LOCATE 17.20:PRINT~GAGNE~;: END 1.0 IF DI >2 AND DIF<=4 THEN LOCATE 16. .. 3:PRINT PIF : GOTO 70 130 IF DIF >4 AND DIF<=6 THEN LOCATE 17. 3:PRINT CHAUD':GOTO 70 140 LOCATE 14.23:PRINT- ':GOTO "0 Dès l'affichage du message de fin d'exécution, listez votre programme. Comme vous pourrez le constater, la ligne 9 000 s'enchaîne immédiatement à la suite de la ligne 180. En tapant la commande MERGE, vous avez demandé à l'ordinateur de fusionner le programme "K525" à celui se trouvant en mémoire. Seule précaution à prendre : les numéros de lignes des deux programmes ne doivent pas coïncider, sinon le programme que vous appelez par MERGE effacera le programme courant. Prenez pour habitude de don- ner à vos routines «utilitaires» des numéros de lignes élevés. Vous éviterez ainsi toute mauvaise surprise. Notez, pour clore ce paragraphe, que MERGE, tout comme LOAD et SAVE, peut être employé au sein d'un programme. Protection des programmes Si vous devez inclure dans vos programmes des renseignements confidentiels, ou des routines que vous ne souhaitez pas divulguer, vous serez content d'apprendre que le M05 vous permet de protéger vos oeuvres de tous les regards indiscrets (même des vôtres). Pour découvrir comment procéder, commencez par entrer au clavier ce court programme : N : PROGRAMME z i Pour être complet, ce programme a besoin de la rout rt(~ K525", Rembobinez votre cassette de manière tl positionner la tête de lecture de votre magnétophone au début de ce sous-programme, puis mettez-vus en position <ENREGISTREMENT> et tapez : Mr fiGE "K525"' I.ee L. E. P. se mettra en marche et, au bout de quel-pies instants, le M05 vous signalera qu'il vient de trouver le programme recherché. FUSION DE DEUX PROGRAMMES 110 R=VAL(R$): IF R(1 OR R>100 THEN 90: 120 IF R=N THEN ATTRB 1.1•LOCATE 15.20: PRINT' 'GAGNE :ATTRB 0.0:G0SUB 9000:GOTO. 180 130 IF R(N THEN PRINT -TROP PETIT~; 140 IF R)N THEN PRINT 'TROP GRAND'; 150 IF I<5 THEN PRINT RECOMMENCEZF OR P= 1 TO 500:NEXT P 160 NEXT I 170 PRINTIPRINT +LE NOMBRE A DEVINER ETA IT N: FOR P=1 TO 600:NEXT P 180 GOTO 40 9000 REM PETITE MUSIQUE DE NUIT 9010 A$=~ 5OL12PREL245OL12PRESORESOS105RE L24PDOL 12PO4LAO5DOL 12PO4LAO SDOO4LAFA*LA REL24P~ 9020 B$=;L1250PL2450L125051LA5050L24FA*L 12FA4LAOSDO04FA€LASOL245OL.12505I LASOSOFA $L24FA*L12FA*LAOSDO04FA#5050' 9030 C$=~L6}SOFA*MI FA$L12505OL65I LASOLALI 25I5I O5L6RED0045I OSDOREL24PL48REHI L6RELI SOOL24DOL 6DO04L 155I L245I° 9040 D$=°L651 L]SLL24LAL 1250FA#MIFA#SOFL AP 5IPL24PL4805REMILI2REDODODOD0045I515I5 ILALALASOFA*HIFA*L485O-

10 REM PROGRAMME TOP SECRET 20 REM Ce programme contient des renseignements confidentiels à ne divulguer sous aucun prétexte. 30 CLS SCREEN1.3.3 40 ATTRBI.1 50 LOCATE 10,2:PRINT 'TOP-SECRET' 60 LOCATE 10.4:PRINT 70 ATTRBO,0:COLOR 4.3 80 LOCATE4.10:INPUT°ENTREZ LE MOT DE PAS 5E .MP$ 90: REM Le mot de .passe est: PUCE 100. IF MP$=PUCE THEN PRINT:PRINT TAB(i 1) 'Boni Our Agent 135232':GOTQ 120 110 PRINT:PRINT TAB(4) -VOUS n'êtes qu'u n imposteur. :PRINT TAB(4) 'A Moi la9ar de ........': FOR I=1 TO 20.:PLA1 L125I SO :11 EXTIEND 120 PRINT:PRINT -Votre mission consister a â c(émasquer':PRINT'Ie traître qui se c ache parmi nous.' 130 END Comme vous pouvez le voir, ce programme renferme un renseignement important (en l'occurrence un mot de passe) en ligne 90. Pour rendre ces lignes invisibles à toute personne, tapez : SAVE ""SECRET", P où la lettre «P» signifie « PROTECTION ». Une fois la sauvegarde terminée, rechargez le programme en mémoire par un LOAD ou un RUN. Vous pouvez toujours l'exécuter, mais vous n'êtes plus en mesure de le lister. L'erreur de code 61 qui apparaîtra sur votre écran chaque fois que vous taperez la com- mande LIST, signifie tout simplement que ce pro- gramme est protégé. Les modes de stockage de données que vous avez utilisés jusqu'ici mélangeaient programmes et informations, que ce soit au sein de variables ou à l'intérieur de lignes DATA. Vous allez apprendre, au cours de ces deux pages, à créer puis à relire des fichiers indépendants auxquels vous pourrez faire appel depuis tous vos programmes. Les fichiers Toute personne manipulant une grande quantité d'informations est amenée, tôt ou tard, à classer celles-ci dans un fichier. Un fichier n'est rien d'autre qu'une «boîte» regroupant un ensemble d'éléments de même nature ou apparentés. Si vous avez déjà inscrit dans un répertoire les noms et adresses de vos amis, vous savez ce qu'est un fichier. Les fichiers présentent de nombreux avantages. Ils permettent d'ordonner les informations, et surtout, de les retrouver rapidement en cas de nécessité. Un fichier informatique ne se distingue d'un fichier classique que par le «support» employé. Au lieu de fiches de bristol ou d'un répertoire alphabétique, vous allez vous servir de la bande magnétique qui vous permet déjà de stocker vos programmes. Ces derniers constituent d'ailleurs autant de fichiers, leurs éléments étant représentés par des lignes, classées selon un numéro. La création d'un fichier Supposons que vous souhaitiez tester les connaissan- ces de vos proches en matière d'Histoire de France. Vous allez pour cela constituer un fichier de dates que vous pourrez utiliser indifféremment dans un jeu ou dans un questionnaire. Voici le programme qui vous permettra de réaliser cette opération. Recopiez-le, puis essayez d'en comprendre, par vous-même, le déroulement, avant de lire les explications suivantes : CRÉER UN FICHIER : PROGRAMME 10 CLS 20 OPEN ' 0'.*1."8ATAILLE~ 39 FOR I=0 TO 1 STEP 0 40 READ 5$,D$ 50 IF 8$FIN' THEN 80 60 PRINT41.8$.D$ 70 NEXT I 80 CLOSE *1 90 END 100 DATA EOUVINE5. 1214.CRECY,1346,AZINCO URT.1415.SIEGE D'ORLEANS.i429.MARIGNANv1 515,VALMY .1792.MARENGO, 1800, TRAFALGAR, 18 05.AUSTERLITZ.1805.IENA.1.806,NAGRAM, 809 ,WATERLOO ,1815 110 DATA FIN.FINNous sommes partis ici de quelques noms de batailles célèbres accompagnés de leur date, et nous avons rangé le tout en DATA. Pour ranger ou sortir une fiche d'un classeur, il vous faut commencer par ouvrir ce dernier. En informatique, c'est exactement pareil : un fichier doit être ouvert avant toute opération de lecture ou d'écriture. C'est ce que fait la commande OPEN («Ouvrir» en anglais) de la ligne 20. Attardons-nous sur cette ligne. Le «0» qui fait suite à OPEN désigne la première lettre du mot OUTPUT. Cela signifie que vous allez ouvrir un fichier en «Sortie» (vous allez y écrire quelque chose). Ce fichier sera ouvert sur le canal 1, noté e 1. Vous pouvez choisir entre 16 canaux numérotés de 1 à 16, mais il vous faudra réutiliser le même numéro lors de l'écriture des données au sein du fichier. Après le numéro du canal de sortie, se trouve le nom du fichier proprement dit. Il obéit aux mêmes règles d'écriture que les noms de programmes, et ne devra par conséquent pas excéder huit lettres. La boucle des lignes 30 à 70 lit les données une à une et les inscrit au fur et à mesure dans le fichier. Cette opération s'effectue par le biais de l'instruction PRINT ; 1. Les données ne sont pas affichées à l'écran mais dirigées vers le canal 1, en l'occurence le lecteur-enregistreur de programmes. Lorsque le dernier élément a été lu, on referme le fichier au moyen d'une instruction CLOSE e 1 (« Fermer»). Pour lancer votre programme, mettez votre magnétophone en position <ENREGISTREMENT> puis tapez RUN. Le L. E. P. se mettra en marche automatiquement et s'arrêtera dès la dernière information écrite. Rien ne vous permettant, pour l'instant, de vérifier que votre fichier a été créé, rembobinez votre bande puis tapez LOAD « ZZ ». Le message qui apparaît sur votre écran après quelques instants vous indique que le M05 a trouvé sur la cassette un fichier de données (symbolisé par DAT) portant le nom de BATAILLE. Lecture d'un fichier Un fichier ne servirait à rien s'il n'était pas possible de le relire. Détruisez pour cela le programme précédent par NEW, afin d'effacer de la mémoire de l'ordinateur toute trace de vos données, puis entrez le programme LIRE UN FICHIER. Celui-ci commence par réserver 5 000 octets pour les chaînes de caractères (ligne 20), puis dimensionne un tableau appelé B$, qui renfermera à la fois le nom de la bataille et sa date. La ligne 40 ouvre le fichier BATAILLE en Entrée (le «I» signifie INPUT). La lecture des éléments du fichier s'effectue à l'aide de deux boucles imbriquées et de l'instruction INPUT ~ 1. Pour contrôler la présence en mémoire des éle ments du fichier, on les affiche (ligne 90) avant de refermer le fichier. Pour exécuter ce programme, rembobinez votre bande puis mettez votre magne t —Î 19 liai.t,ti av(rt lr UII' r p, nl(tu )part cw! e 20 suit.i' OUT j ~hict~ pou 16, lors près du gles vra

constituera, avec NA, le premier enregistrement du fichier. Il est important de sauvegarder ces deux valeurs pour pouvoir relire le fichier sans problème. La fonction EOF(1) de la ligne 920 détecte la fin d'un fichier (End Of File). Lorsque celle-ci est décelée, le fichier est refermé : i! vii position <LECTURE> avant de taper LIRE UN FICHIER dM (:::t.s 1 CL. EAR 5000 01M B$(12.21 (DPEN#1,.'BATAILLE° 1j rop 1=1 TO 12 '0 FOR 0 2 INPUT $1 .B$(I.J) nO NEXT J 'a(1 PRINT TAB(S) B$(I,1):TAB(25I B$(I,2) ¢4I0 NEXT I I0 CLOSE #1 10 CL5 20 ATTRBI.1 30 LOCATE 12,1:PRINT°FICHIERS°:LOCATE 12 3:PRINT====____° 40 ATTRB 0,0 50 LOCATE8, 10:PRINT'1- CRERTION D'UN FIC HIER° :PRINT 60 PRINT TAB(8) -2- LECTURE D'UN FICHIER °:PRINT 70 PRINT TABfa) °3- TERMINER»:PRINT:PRIN T 80 PRINT TAB(8) -Votre choix (1-3) ',:IN PUT' ,R$ 90 IF R$(>°1' AND R$<>-2° AND R$<)°3° TH EN 10 100 R=VAL(R$I 110 ON.R GOSUB 500,800,200 120 GOTO10 200 END 499 REM Création o'un Fichier 500 CL5:CLEAR 10000 510 PRINT °METTEZ 'VOTRE MAGNÉTOPHONE EN P051TION°:PRINT TAB(12' "ENREGISTREMENT T GÉNÉRATEUR DE FICHIERS : PROGRAMME ~ eà er. oc-3à tce le 'r-ce e BOLFV I NE 5 1214 CRECY 1346 AZINCOURT 1415 5IEGE D'ORLEAN5 1429' MARIGNAN 1515 VALMY 1792 MARENGO 1300 TRAFALGAR 1805 AUSTERLITZ. 1805 IENA 1806 NAGRAM 1809 NATERLOO 1815 OK Générateur de fichiers [,es deux programmes ci-dessus permettent la création et le chargement d'un fichier particulier. ll est néanmoins tout aussi aisé de concevoir un programme exécutant ces deux opérations pour des fichiers quelconques. Le programme qui suit se décompose en trois parties distinctes : un menu, qui fait office de programme principal, et deux sous-programmes, assurant respectivement la création puis la relecture 'des fichiers. La routine de création de fichier vous rappelle sommairement la procédure à suivre pour la sauvegarde de vos données (510), puis elle vous invite à rentrer le nom de votre fichier, ainsi que le nombre d'articles par enregistrements (NA). Le fichier BATAILLE contenait par exemple deux articles pour chaque enregistrement, à savoir le nom de la bataille et sa date. La valeur de NA est utilisée pour dimensionner le tableau A$. Les boucles des lignes 570 à 640 assurent le remplissage du tableau. La variable CT renferme le nombre d'éléments du tableau. Elle 520 PRINT:INPUT 'NOM DU FICHIER (8 car. max.) N$ 530 PRINT 540 PRINT NOMBRE D'ARTICLES PAR ENREGIS TREHENTI: INPUT" ,NA 550 PRINT 560 DIM A$(50,NA):CT=1 570 FOR I=0 TO 1 STEP 0 580 FOR J=1 TO NA 590 PRINT ARTICLE-, CT1'/°,J;- : 600 INPUT .A$(CT.J) w• 610. IF A$(CT.1)=-FIN' THEN CT=CT-I:G OT 0650 620 NEXT J 630 CT=CT+1 640 NEXT I 650 OPENIO,.#1,N$ 660 PRINT *1.CT.NA. 670 FOR I=1 TO CT 680 FOR .1=1 T0 NA 690 PRI NT #1.A$(I,J) 700 NEXT J 710 NEXT I 720 CLOSE *1 '10 PRI1LI:PRIFJT "FIN ENRÉGISTNEMF_NT FICH IER. 40 FOR PAU-E=1 TO 1000+1NE/T:PETUPN '99 REM Lecture d'un fichier 800 CL5:CLEAR 10000 810 PRINT 'METTEZ VOTRE MAGNETOPHONE EN POSITION":PRINT TA$(t5). "(LECTURE;.' 820 PRINT:INPUT "NOM DU FICHIER ",N$ 830 OPEN - I ° , # 1 , NJ$ 840 INPUT #Y,cT,NA 850 DIM A$'CT,NA) 860 FOR I=1 TO CT 870 FOR J=1 T0 NA 880 INPUT #1,A$(I,J) 890 PRINT A$(I,J);" 900 NE/.T J 910 POINT 920 IF EOFI11 THEN 940 930 NEXT I 940 CLOSE #1 950 PPINT :PPIUJT-Fi IJ CE 1 F, :r r') ou ri H I f C" 160 FOP P0U'_.E--1 Tu 1000:FLC/,T 10011 URN

SAISIE DES DONNÉES AU CLAVIER Vous ne connaissez jusqu'ici qu'une seule manière d'entrer des données dans la mémoire de votre ordinateur en .cours d'exécution : l'instruction INPUT. Le dialogue entre l'utilisateur d'un M05 et sa machine peut néanmoins s'établir par d'autres moyens, comme vous allez le découvrir dans ce chapitre. Inconvénients de l'instruction INPUT Entrez au clavier le court programme ci-dessous puis exécutez-le : INPUT ET SES INCONVÉNIENTS : PROGRAMME 10 REM INPUT ET SES INCONVENIENTS 20 PRi NT:PRINT-ENTREZ UNE PHRASE COMPOPT ANT DES' 30 PRINT'SIGNES DE PONCTUATION [.. :):P MI NT 40 INPUT " •P$ 50 PEINT 60 PRINT P$ PUN ENTREZ UNE PHRASE COMPORTANT DES "I'NF DE PONCTUATION I ,:1 HÉLAS. PAUVRE YORICknateur par un Retour Chariot (une pression sur ENTRÉE si vous préférez). Cette instruction devra être préférée à INPUT chaque fois que l'information à introduire en mémoire risque de contenir plus d'un mot. Signalons au passage qu'il existe une instruction LINE INPUT e [numéro de canal] qui autorise la sauvegarde au sein d'un fichier, de phrases comportant virgules et deux points et, partant, le stockage de véritables textes (lettres, textes littéraires, modes d'emploi, recettes de cuisine...) : 1 L'INSTRUCTION LINE INPUT : PROGRAMME 1 10 REM AVANTAGES DE LIME INPUT 20 PRINT:PRINTIENTREZ UNE PHRASE COMPORT TINT DES° 30 PRINT'SIGNES DE PONCTUATION (,.;:)°:P RI NT 40 LINEINPUT ° '.N$ 50 PRINT bO PRINT P$ 70 GOTO40 RUN ENTREZ UNE PHRASE COMPORTANT DES SIGNES DE PONCTUATION [..,:) HELAS. PAUVRE YORICK HELAS, PAUVRE YORICK CYRANO: AH NON' C'EST UN . PEU COURT .JEUNE HOMME. CYRANO. AH NON' C'EST UN PEU COURT.JEUNE HOMME. Si vous entrez la phrase ci-dessus et que vous appuyez sur la touche ENTRÉE , vous verrez apparaître à l'écran le message a ?Redo ». L'ordinateur n'accepte pas votre phrase et vous invite à recommencer. Qu'est-ce que cette phrase peut bien contenir de si extraordinaire ? Tout bonnement une virgule qui, pour le M05 comme pour la plupart des ordinateurs utilisant le BASIC, est considérée comme un séparateur. Si vous utilisez pareillement un énoncé renfermant le signe : (deux points), vous obtiendrez un rejet tout aussi catégorique. Serait-il impossible de faire figurer des signes de ponctuation pourtant très courants dans une saisie au clavier ? Pas du tout. Il suffit pour cela d'employer l'instruction appropriée. Cette instruction, variante d'INPUT, porte le nom de LINE INPUT. Si vous modifiez comme suit la ligne 40 : 40 UNE INPUT -- vous vous pourrez introduire dans votre phrase autant de signes de ponctuation que vous le désirez. Vérifiez-le par vous-même en rajoutant en 70 une instruction GOTO 30 puis en tapant RUN. Comme son nom l'indique (en anglais du moins), LINE INPUT vous permet d'entrer des lignes entières et complètes dont la fin sera signalée à l'ordi- L'instruction INPUT$ Il arrive fréquemment que l'on demande à l'utilisateur d'entrer au clavier une réponse brève à une question. Il s'agit généralement d'un chiffre, d'une lettre, ou encore d'un OUI ou d'un NON. Ceci vous oblige d'ordinaire à tester la longueur de la réponse avant d'en assurer le traitement. Il existe cependant une instruction qui vous laisse libre de déterminer à l'avance le nombre de caractères alloués à l'utilisateur pour sa réponse. Cette instruction a pour nom INPUT$. Comme l'indique clairement le symbole «$ », elle devra être utilisée exclusivement avec des chaînes de caractères. Voici, pris dans une situation courante, un exemple d'utilisation d'INPUT$ : 10 REM INPUT$ 20 PRINT 30 PRINT "Destruction du programme (OUI/NON)?'". 40 C$ = INPUT$(3) PRINT C$ 50 IF C$ = "OUI" THEN GOSUB 100: END 60 IF C$<> "NON" THEN GOTO 30 FI: PRINT: PRINT "C'EST FINI!": : END 100 PRINT: PRINT "ON RECOMMENCE. ": RETURN I

n sur devra cation ' plus action ise la mporckage nodes ME il s'agit ici de faire connaître à l'ordinateur votre décision quant à la destruction éventuelle d'un programme. La réponse étant importante, on a choisi de faire taper les mots OUI ou NON en toutes lett.1es, afin d'éviter qu'une pression inconsidérée sur la mauvaise touche ne vienne à effacer malenconr reusement ce que vous souhaitiez conserver. L'utilisateur devra par conséquent taper au minimum trois lettres pour que sa réponse soit enregistrée, niais il ne lui sera pas nécessaire de valider cette dernière par pression sur la touche LENTRÉE , cette opération s'effectuant automatiquement. INPUT$ n'affiche pas à l'écran les caractères frappés au clavier, ce qui explique la présence de l'instruction PRINT C$. (Vous pourriez utiliser cette propriété d'INPUT$ pour entrer des codes et des messages qui resteraient invisibles à toute personne fixant votre écran, mais gare aux fautes de frappe.) Si la chaîne C$ ne contient ni OUI ni NON, le programme se rebranche en ligne 30 dans l'attente de trois autres caractères : (ligne 100). Le programme s'interrompt dès que la souris atteint le fromage, sort de l'écran ou meurt d'épuisement (compteur à 0). Les lignes 200, 300, 400 et 500 vérifient, au moyen de la fonction SCREEN, que la souris n'a pas heurté l'un des murs : 1 LA SOURIS ET LE LABYRINTHE 10 CL5 20 SCREENO,1,1 30 LINE€3.31—(3.201XLINE(4,20)—(33.20 X':LINE(37.201—(37.3)X°: LINE(36,3)—(7 .3)°X° 40 LINE(76)—(7,16)X°:LINE(7,6)—(28.61° X°:LINE(29,4)—(29,6)°X°:LINE(21.7)—(21,1 0)'X°:LINS(11.10)—(11.14)°X°:LI NE(12,14J —(20,14)°X°:LINE(21.14)—(21,19)X:LINS( 25.10)—(25,19)X°:LIN£(26,10)—(32.10)°X° :LINE(29.14)—(36.14)°X° 50 P5ET(5.3)°F',3,1 60 COLOR8.1 70 PH=35:PV=20:CT=10 80 GOSUB 600 90 X$=INKEY$:IF X$='° AND C=0 THEN GOTO 90 100 C=1:IF X$=°° THEN T=T:GOT0120 110 T=A5C(X$1-7 120 ON T G05UE 200.300.400.500 130 GO5UB 600 itiliune une Jous )nse esse ctè-ins-:lai-isée )ici, uti- SE Saisie au vol INPUT$ mise à part, les instructions assurant la saisie de données au clavier requièrent une validation de la réponse entrée. Ceci ne pose aucune difficulté lorsque l'on travaille sur un texte ou sur des informations chiffrées, mais peut se révéler beaucoup trop lent dans le cas d'un jeu par exemple. t-ieureusement, il existe une instruction garantissant une réponse instantanée à l'enfoncement d'une touche quelconque : INKEY$. Vous avez déjà eu l'occasion d'employer cette fonction dans les programmes utilisant la notion de hasard. On vous y demandait de frapper une touc:he, et votre temps de réaction était mis à profit par l'ordinateur pour initialiser son générateur de nomhres aléatoires. INKEY$ a cependant d'autres usages, et on y fait souvent appel dans les jeux lorsqu'il s'agit de déplacer rapidement un objet, ou encore de faire feu au passage d'un vaisseau spatial ennemi. Dans le programme qui suit, vous allez devoir piloter une souris affamée à travers un labyrinthe, jusqu'au bout de fromage qui lui redonnera force et vigueur. Faites attention, car si vous heurtez les parois de ce dédale, vos forces iront s'amenuisant. Le programme débute par le tracé du labyrinthe. Celui-ci est effectué à l'aide d'instructions LINE et du caractère «X ». Les coordonnées utilisées dans la l'onction graphique LINE sont conformes aux dimensions de la page texte. Elles n'excedent pas 39 (horizontalement) ou 23 (verticalement). Le morceau de fromage est symbolisé par la lettre « F» (ligne 50), la souris par un bloc de couleur . Le déplacement de la souris s'opère à l'aide des touches de gestion du curseur de codes 8 (—), 9 (--'), 10 (1), ('î'). Tant que vous n'appuyez pas sur une nouvelle touche, la direction de la souris demeure inchangée 140 FOR PAUSE =1 10 60:NEXT PAUSE 150 LOCATE PH,PV:PRINT° , 160 IF PV=3 AND PH=S THEN GOSUB 600:COLO RB,I ZEND 170 IF PV>21 OR PVC3 OR CT=O THEN END 180 GOTO 90 200 1F SCREEN(PH-1.PV)=88 THEN PH=PH:CT= CT— f:RETURN 210 PH=PH—i:RETURN 300 IF SCREEN(PH+I,PV)=88 THEN PH=PH:CT= CT— f:RETURN 310 PH=PH+I:RETURN 400 IF SCREEN(PH,PV+1)=88 THEN PV=PV:CT= CT — 1: PET URN 410 PV=PV+I:RETURN 500 IF SCREEN(PH,PV—i)=88 THEN PV.PV:CT= CT-1 :RETURN 530 PV_PV-1:RETURN 600 LOCATE PH,PV,O:PRINT CHR$(127)s:LOCA TE 19,1:PRI NT CT:RETURN ANIMATION ET SON Tous les programmes graphiques que vous avez pu rencontrer jusqu'ici comportaient généralement une phase de tracé éventuellement suivie d'une plage musicale (jingle, générique...), mais jamais un mélange des deux. Pour combler cette lacune, nous allons tenter ici de mêler le son à l'image. Hasard, images et son Nous allons commencer notre étude en faisant correspondre à chacune des notes de la gamme l'une des seize couleurs du M05, puis en composant un «tableau musical ». Une gamme ne comprenant que sept notes (si l'on exclut les dièses et les bémols), nos seize couleurs nous autorisent à jouer sur deux octaves. Nous obtiendrons alors le programme suivant : TABLEAU MUSICAL 10 CL3 30 PF•.INT TAB(31 °PRE55EZ UNE TOUCHE POUF COMMEN CEP ° 30 IF INKEY$=" THEN 7(=RND:GOTO 30 40 CL5:SCREEN0,0,0 50 DATA 03"".O 3RE,O3NI,Q3FA, 0350.O3LA.03 5I.04DO ,O4RE,04NI , 04F1-045O1O4LA,045I 60 DIH NOS(14) 70 FOR I= 1 TO 14 30 READ NO$(I) 90 NEXT 100 FOR 1=1 TO 50 110 DU=INT(RNDU96+1?:D$-°L'+MID$(5TR$)DLI .2) 120 Nr_=INT(RNDn14+1) 130 k'1=INT(PNDa310+8?:71=INT(RNDS192+61 140 7+:2=I NTr: RND*310+87:1'2=I NT(RND3192+c, 150 LINE(X 1.71)- (Y2. Y2) ,NC 1643 PLAT D$ + NO$,NC; 1'0 NEXT I Après la traditionnelle initialisation du générateur de nombres aléatoires, le programme dimensionne un tableau de 14 éléments (ligne 60). Ce tableau est rempli par le biais de la boucle des lignes 70 à 90 et d'une instruction READ. Les éléments contenus en DATA donnent, pour chaque valeur lue, l'octave, puis le nom de la note qui sera jouée. Les lignes 100 à 170 constituent la partie «son et lumière» du programme. La variable DU de la ligne 110 contient une valeur aléatoire comprise entre 3 et 96. Elle servira à établir la durée de la note, durée elle même affectée à la variable chaîne D$. La couleur et, partant, la note sont tirées au hasard en ligne 120. Les variables X1, Y1, X2, et Y2 désignent les extrémités des segments qui seront tracés à l'écran par l'instruction LINE de la ligne 150. Leurs valeurs sont telles que les traits tirés ne sortent jamais du cadre de la page graphique. Le résultat, tant pictural que musical, n'a rien de «génial», mais il n'est tout au moins pas plus déplaisant que certaines compositions acutelles. Animation et son Le programme précédent ne présentait aucune difficulté de programmation, image et son se succédant harmonieusement. Le problème de l'introduction du son devient cependant plus délicat lorsque l'on aborde l'animation. A titre d'exemple, entrez le programme ci-dessous : POMPIERS : PROGRAMME 10 CLS 20 SCREENI.3,0 30 LOCATEO.0..0 40 CLEAR. .2 50 DEFGR$(0)=255,33,13.113.255.255.255. 96 60 DEFGR$(17=255.248,200.200.252.252.254 12 80 BOXF(0,104)-4319,119),8 90 ATTRBI.1 100 FORI = 0 TO 36 110 LOCATEI .12. 120 PRIN P$ 130 PLAYIL485I50' 140 LOCATEI.12 150 PRINT 160 NEXT I Ce programme génère une voiture de pompiers que l'on fait se déplacer sur une route symbolisée par un trait gris. L'animation est rendue plus réaliste par le fait que la sirène est actionnée pendant que le camion traverse l'écran dans sa largeur. La partie sonore du programme est encore très sommaire, puisque deux notes (ligne 130) suffisent à reproduire ce bruit familier. Malgré l'absence de l'habituelle boucle de temporisation, l'animation de notre véhicule d'incendie est néanmoins trop saccadée. Ceci est dû tout simplement à la présence en 130 de l'instruction PLAY qui interrompt le déroulement du programme pendant la durée nécessaire à l'émission des deux notes. La 23 ,1 tave «son J de arise le la aine s au t Y2 tra- 150. sor-~sul-al », que iffi- ant du .'on )ro- ie .n rr te r- e i t 1 ftnrporisation involontaire ainsi créée se révèle plus flue suffisante, t ïn pourrait aplanir en partie cette difficulté en diminuant de moitié la longueur de chacune des rl,)i,ss, mais on accélérerait du même coup le tempo di' la sirène. L'autre solution consiste à scinder la i(I.ige musicale en deux parties, puis à associer une mage à chaque note. Ceci s'obtient par un simple .Trnénagement de la ligne 130 qui devient : s IF INT(I/2) = 1/2 THEN PLAY "L48SL ELSE PLAY .i la variable compteur I (qui détermine la position h(rrizontale du camion) est paire, le M05 joue la note l, sinon, il joue le SOL. Grâce à ce stratagème, on OIrlient une animation moins saccadée tout en con,.~rvant à la sirène le rythme que nous lui connaissons. En reprenant cette même technique, nous .illnns donner un semblant de vie à une comptine 1)icii connue : LE PONT D'AVIGNON : PROGRAMME 10 0L5: 5CREEN0,6., 15: LOCATE0,0,0 20 5OXF0,881-(319,159),10 'PONT 30 R=48:X1=88:X2=232:YO=160:D=YO-R:GOSUB 1000 40 BOXF(0.160 )-(319.199),4 'EAU 50 ATTRB0,1:LOCATE8,3:PRINT°5UR LE PONT D'AVIGNON. .~ 60 CLEAR „3 70 DEFGR$(0)=0,0,0.0.28,28,28,8 80 DEFGR$L1)=127, 28,28.28,20,20,20,54 90 DEFGR$(2)=127,28,28.62,62,62.62,62 100 H$=GR$(11+CHR$(111+CHR$(11)+CHR$f8)+ CHAS (8)+GR$(0) 110 F$=GR$(2)+CHR$(11)+CMR$(11)+CMR$(8)+ CHR$(8)+GR$ (0) 120 FORI=1.7038:B$=8$+. " :NEXT 130 M$(1)=~L125050L1850: 140 M$(2)=°L12LALAL18LA~ 150 M$(3)=L125I05DOREO4L450° 160 M$(4)=°L12F5*5OLAO4L6RE-. 170 M$(5)=-L12LAFA*L2450° 180 R$=H$+CHR$(101+F$ 190.X=8:Y=10:PX=1:MH=I:ATTRB1,1 200. FOR 1=1 TO 200 210 COLOR3:LOCATEX.Y:PRINTR$:COLORI:LOC. ATEX+4,Y :PRI NTR$ 220 IF M>3 AND INT(MM/2)=MMi2 THEN N=5. 230 PLAYA2 714'+MfM1:H=H+1 240 IF M>4THENM=I:MM=MM+1 250 LOCATEO,Y-2:PRINTB$ 260 X=X+PX:IF X>24 OR X<OTHEN PX=-PX 270 NEXTI 280 END 1000 FOR Y=1 TO R 1010 BC=SOP((R,2)-((R-Y)+2).) 1020 LINE(Xi-BC,D+Y)-(X1+BC,D+Y),-7 1030 LINE(X2-BC.D+Y)-(X2+BC,D+Y),-7 1040 NEXT:RETURN décor de notre animation est dressé par les lignes 20 à 50. Le pont est constitué d'un rectanl;le plein évidé en deux endroits pour symboliser les ~ rches. Celles-ci sont tracées simultanément grâce àune version améliorée du sous-programme présenté au chapitre CERCLES PLEINS. Les lignes 70 à 90 définissent deux caractères graphiques représentant respectivement un homme (H$) et une femme (F$). Les deux matrices ainsi créées sont «soudées» en ligne 180 et affectées à la variable R$. Celle-ci sera répétée par deux fois en ligne 210, ce qui donnera lieu à une ébauche de farandole. La mélodie est, quant à elle, scindée en cinq parties plus ou moins égales, afin que la temporisation obtenue soit minimale (lignes 130 à 170). La phase d'animation débute par l'affichage des deux couples. Le premier est tracé en jaune, le second en rouge (ligne 210). L'ordinateur exécute alors l'une des cinq plages musicales (ligne 230), avant d'effacer le dessin et de le réafficher un peu plus loin. Les lignes 220 et 240 contrôlent la partie musicale. La comptine est en effet formée à partir de deux mélodies qui ne diffèrent entre elles que par les notes finales (M$(4) et M$ (5)). Pour déterminer ce qu'il faudra faire jouer à l'ordinateur, on fait appel aux variables M et MM. La pre- mière désigne la plage musicale qui sera exécutée, la seconde, le nombre de demi-mélodies précédemment interprétées. Lorsque MM est paire, et que la valeur de M est supérieure à 3, on se trouve en fin de morceau. C'est donc la plage musicale numéro 5 qui sera jouée (ligne 220). Si MM est impaire, le morceau se poursuit avec la plage musicale numéro 4. La ligne 240 veille à ce que la variable M soit réinitialisée à 1 à chaque fin de morceau. La direction de la farandole est régie par la ligne 260. Dès que les deux couples de danseurs atteignent l'une des positions extrêmes (colonnes 24 à droite et 8 à gauche), le mouvement est inversé. Ceci est rendu possible par le changement de signe qui intervient au niveau de la variable PX. En début de programme, PX est positive et la farandole se déplace vers la droite. Lorsque les danseurs viennent à dépasser la 23e colonne, PX devient —PX, ce qui entraîne la décrémentation de X et, partant, le changement de direction : LE PONT D'AVIGNON : AFFICHAGE SUP LE PONT D'AklIGtO..

25 , en axes .genque °c la sai-on-ter on-30). ur, 'silée t;nant le point 0 sur l'axe des Y. Ceci fait, il nous faut ensuite déterminer la graduation des deux axes. Rappelez-vous que vous disposez d'une «feuille» de 320 X 200 points. Afin de laisser suffisamment de place pour la légende, nous enfermerons notre courbe dans un cadre constitué de 288 X 168 points. Les lignes 190 et 200 déterminent le facteur d'échelle qui sera appliqué à tous les points de la courbe. Les lignes 220 et 230 tirent les axes, la ligne 260 affiche le premier point. L'origine de notre repère étant différente de celle de notre écran (31, 176 contre 0, 0), la ligne 170 assure le passage d'un repère à l'autre. Le premier point de la courbe aura pour coordonnée X la valeur 32, et pour coordonnée Y le résultat de l'opération 175 — la valeur introduite multipliée par le facteur d'échelle EY. Il ne reste plus ensuite qu'à afficher les autres points : TRACÉ DE LA COURBE : PROGRAMME 150 L'L3:SCREEN3,0 ,0 160 FOR I=1 TO C 170 P(I)=P(I)-HI 180 NEXT I 190 EY=168/(MA-MI( 200 EX=288/18 210 X=32 220 LINE(31,0)-(31,176) 230 LINE(31,176(-(310,176( 240 PSET(X, 175-P I) EY 1,7 250 X=X+EX 260 FOR 1=2 TO C 270 LINE-(X,175-P(I( EY),7 280 X=X+EX 290 NEXTLa graduation des axes Elle se fera sans difficulté majeure le long de l'axe des X. L'espacement entre deux points étant égal à 288/18 = 16 pixels, cela équivaut à laisser un espace après chaque valeur numérique, ou, si vous préférez, à employer deux cases écran pour chaque point tracé. Ceci nous donne le programme suivant : GRADUER LES AXES : PROGRAMME 1 300 PV=22 310 LOCATE0,0:PRINT MA:LDCATE 0,PV:PRINT MI:LOCATE 0,11:PRINT INT((MA-MI)/2+.5) 320 PH=1 330 FOR I=1 TO C 340 PH=PH+2:I$=MID$(STR$(I). 21 350 LOCATE PH,23:PRINT LEFT$(I$,1) 360 NEXT I 10 PH=19 380 FOR H=10 TO C 390 1$= MID$(5TR$(H) .27:PH=PH+2:IF PH)38 OR M>C THEN 420 400 LOCATE PH,24:PRINT RI GHT$(I$,1 ): 410 NEXT M 420 LOCATE0,0,0 430 IF INKEY$=°°THEN 430 440 END On commence par libeller l'axe des Y en affichant dans le coin supérieur gauche de l'écran la valeur MA, puis, en regard de l'origine de notre repère, la valeur MI. Il suffit alors d'insérer les valeurs intermédiaires (lignes 310-320). La graduation de l'axe des X s'opère en deux temps. On commence par afficher tous les nombres de 1 à 9, puis le chiffre des dizaines pour les valeurs 10 à 18 (lignes 330 à 360). La seconde étape consiste à inscrire les unités une ligne plus bas. Ce procédé améliore la lisibilité du schéma, car sans ces quelques lignes, les nombres seraient tous collés les uns aux autres. Notre programme est désormais complet. Il ne vous reste plus qu'à l'exécuter : la ve/II) nd tré )0. ur et ile ce es rn, •o-a-s. u-ti-u- Vous pouvez d'ores et déjà utiliser ce programme avec les valeurs de votre choix, mais il reste néanmoins un dernier problème à résoudre avant qu'il ne soit complet. 24 1 LES COURBES CARTÉSIENNES Les tableaux ne constituent pas l'unique solution à la présentation d'informations numériques. L'adage selon lequel «un petit croquis vaut mieux qu'un long discours» s'applique également aux données chiffrées. Il est très souvent plus parlant de tracer une courbe cartésienne que d'aligner une succession de nombres. C'est ce que nous allons apprendre ici. Les courbes fixes De par ses instructions graphiques élaborées, et la très bonne résolution de sa page graphique, le M05 se prête tout particulièrement au tracé de courbes cartésiennes. Deux axes perpendiculaires, des coordonnées rangées en DATA, voici un programme simple qui vous dessinera toutes sortes de courbes : 1 COURBE FIXE : PROGRAMME 10 CL5:5CREEN3,0.0 20 LINE (31.0)-(31.176) 30 LINE (31.176)-(310.176) 40 DATA 32.f50 , 56.140..$0.135.104,170.128 .16SIS2. 144.176.128'200. 112.224. 105.248 .109.272. 112,296.110 50 NP=12 60 READ X.Y 70 PSET(X,Y) 80 FOR I=2 TO NP 90 READ X.)' 100 LINE-(X.Y) 110 NEXT 120 IF INKEY$=°° THEN 120 130 END Le programme commence par matérialiser les axes (lignes 20-30), puis il lit les coordonnées correspondant aux 12 valeurs à faire figurer à l'écran. La première paire de coordonnées est affichée à l'aide d'une instruction PSET. Elle servira d'origine aux traits qui seront tirés par l'instruction LINE incluse dans la boucle des lignes 80 à 110. Bien que fonctionnant sans problème, ce programme n'en possède pas moins de sérieux inconvénients. Tout d'abord, il vous limite au tracé d'une courbe donnée. Si vous souhaitez représenter autre chose, vous devrez modifier les DATA de la ligne 40, et éventuellement altérer la valeur de NP (Nombre de Points) en 50. Second handicap, plus important celui là, les axes ne sont pas gradués, ce qui rend notre courbe illisible. Qui, en effet, saurait dire précisément ce que ce schéma représente ? Pour résumer la situation, ce qu'il nous faudrait c'est un vrai «générateur de courbes cartésiennes», c'est-à-dire un programme capable de représenter graphiquement toutes les valeurs introduites, quelle que soit leur nature. Ce programme devrait, en outre, être à même de libeller et graduer ses axes en fonction des dites valeurs. Générateur de courbes cartésiennes Le programme qui suit répond à toutes ces exigences. Il va même jusqu'à traduire les valeurs que vous introduisez en coordonnées compatibles avec la taille de votre écran graphique : SAISIE DES DONNÉES : PROGRAMME 10 CLS:SCREEN0.1,1 20 LOCATE11.2:PRINT-COURBE CARTESIENNE°: PRINT 30 DIM P(50):HA=O:MI=10000:C=1 40 PRINT:PRINT°ENTREZ VO5 VALEURS (ZZ PO UR FINIR) °:PRINT 50 FOR I=0 T01 STEP 0 60 PRINT°POINT°,C;': °. 70 INPUT' :P$ 80 IF P$=°ZZ° THEN C=C-1:GOTO 150 90 P(C)=VAL)P$) 100 IF P(C))MA THEN MR=P(C) 1.10 IF P(C)(MI THEN MI=P(C) 120 IF C=18 THEN PRINT°TERMINE!°:PLAY°O4 DOHI50OSDO°:GOTO 150 130 C=C+1 140 NEXT I La première partie de ce programme assure la saisie des données. Vous pouvez entrer jusqu'à concurrence de 18 nombres. Si vous souhaitez arrêter avant cela, il vous suffira de taper « ZZ » pour annoncer à l'ordinateur que vous avez terminé (ligne 80). Si vous tentez d'introduire une dix-neuvième valeur, le M05 vous signalera par une petite phrase musicale que la phase d'entrée des données est terminée (ligne 120). Les lignes 100 et 110 sont très importantes pour la suite du programme. Elles déterminent respectivement les valeurs maximale (MA) et minimale (MI) que vous introduisez. MA est initialisée à 0 et prend une nouvelle valeur chaque fois que le nombre entré lui est supérieur. MI a pour valeur initiale 10000. Elle reçoit une nouvelle affectation lorsque la valeur entrée lui est inférieure. En fin de boucle, MI et MA renferment les valeurs minimale et maximale de votre courbe. Pour vous en assurer, exécutez ce segment de programme, sans oublier de noter les nombres que vous entrez. Arrivé en fin d'exécution, vous n'aurez qu'à taper : PRINT MI, MA. Les lignes 160 à 290 constituent le coeur du programme. Ce sont elles qui assurent la transformation des nombres entrés en coordonnées graphiques. La boucle des lignes 160 à 180 diminue de MI toutes les valeurs introduites. Ceci nous permettra d'utiliser la hauteur de l'écran dans sa totalité, MI dési- 26

LES HISTOGRAMMES Après les tableaux et les courbes cartésiennes, vous allez découvrir dans ce chapitre un troisième procédé de présentation des informations numériques les histogrammes. Les histogrammes Nous allons abandonner les points et les traits de nos courbes cartésiennes, pour aborder ici la présentation des données sous la forme de colonnes ou de bâtons (d'où les noms de diagrammes bâtons ou diagrammes à barres que l'on donne parfois à ce type de graphiques). Pour cela, entrez le programme ci-dessous : 1 HISTOGRAMME : PROGRAMME 1 10 CLS:SCREENO.1.1 20 LOCATE14. 2:PRINT-MISTOGRAMME~:PRINT:P RINT:INPUT °MAXIMUM DE POINTS (18 OU 36) NP: IF NP<>18 AND NP<>36 THEN 10 30 DIM P(50):MA=O:MI=10000:C=1 40 PRINT:PRINT°ENTREZ V05 VALEURS (ZZ PO UR FINIR):PRINT 50 FOR I=0• TOI STEP O 60 PRINT-POINT',Ct°: 70 INPUT 1P$ 80 IF P$=-ZZ' THEN C=C-1:GOTO 150 90 P(C)=VAL(P$) 100 IF P(C)>MA THEN MA=P(C) 110 IF PICI(MI THEN MI=P(C) 120 IF C=NP THEN PRINT'TERMINE!I:PLAY'O4 DOMI50 O5DO_:GOTO 150 130 C=C+1 140 NEXT Ivariable NP qui sera utilisée en 200 pour déterminer le facteur d'échelle sur l'axe des X (variable EX), ainsi que la largeur de chacune des colonnes (variable CL). Si NP est égale à 36, chaque colonne aura 36/36 = 1 case écran de large (huit pixels si vous préférez). Si NP vaut 18, chaque bâton occupera la largeur de deux matrices 8 X 8. Ces quelques aménagements mis à part, seules les lignes 250 à 300 diffèrent réellement de celles du programme GÉNÉRATEUR DE COURBES. Il s'agit en effet, non plus de relier deux points par une droite, mais de bâtir une colonne, en partant du bas de l'écran jusqu'au point de coordonnée verticale Y. Le calcul de la valeur de l'ordonnée ne varie pas (ligne 250). Seule change la manière dont on atteint ce point. La boucle des lignes 260-280 examine successivement toutes

les valeurs comprises entre 175 (origine de notre repère) et Y, et trace un petit segment horizontal de huit ou seize pixels de large (formule 8*CL)

HISTOGRAMME : AXES 310 MA$=HID$(STR$()IA(.2): HI$=MID$(STR$(M I).2):MM$=MID$(STR$(MI+I NT((MA-MI)/2+0.5 7),2) 320 LOCATEO.I:PRINT MA$:LOCATE 0,22:PRIN T MI$,.LOCATE 0.11:PRINT MM$ 330 PH=3 340 FOR I=1 TO C 350 PH=PH+CL:I$=MID$(STR$(I),2) 360 LOCATE PH.23:PRINT LEFT$(I$.1) 370 NEXT I 380 IF CL=1 THEN PH=12 ELSE PH=21 390 FOR H=10 TO C 400 I$=HiD$(STR$(M),2):PH=PH+CLUIF PH)3 8OR H)C THEN 430 410 LOCATE PH,24:PRINT RIGHT$(I$.1), 420 NEXT M 430 LOCATE0 .0 ..0 440 IF INNEY$=?-THEN 440 450 END i 150 CLS:5CREEN3,0,0 160 FOR I=1 TO C 170 P(I)=P(I)-MI 160 NEXT I 190 EY=168/(MA-MI) 200 EX=288/NP:CL=36/NP 210 X=32 220 LINE(31,0)-(31,176) 230 LI NE) 31,176) -(318.176) 240 FOR I= 1 TO C 250 Y=175-P(I HIEY 260 FOR J=175 TO Y STEP -1 270 LINE(X.J)-(X+(8*CL).J).1 280 NEXT J 290 X=X+EX 300 NEXT Vous pouvez constater que ce programme offre peu de différences avec celui qui vous a été présenté dans le chapitre précédent. Dans le cas présent cependant, l'utilisateur a la possibilité de choisir entre deux largeurs d'affichage : 18 ou 36 colonnes (ligne 20). La réponse à cette option est affectée à la 'J 27 mi ?X), nes inc si :Cu iel50 me lus [tir au la ale )u-)u-

re

de 1 a graduation des axes obéit aux mêmes principes (Iti ceux énoncés au cours du chapitre précédent, ,Dois on distingue désormais entre deux largeurs I,ssibles. Le test de la ligne 380 détermine quelle •,(leur affecter à la variable PH, afin que soient cor~ ~i.ement alignées dizaines et unités. Notez égale-un ut que la graduation sur l'axe des X a été décalée di in e case écran vers la droite par rapport à celle utilisée pour les courbes cartésiennes. Il ne s'agit Illus en effet de repérer un point, mais une colonne, ( (• qui nécessite que le libellé se trouve inscrit au(Issous de celle-ci. le diagramme tel qu'il apparaît ici, présente un inconvénient majeur. Il est extrêmement difficile d'aligner mentalement le sommet de chacune des nlonnes avec le nombre qui lui correspond sur l'axe Il , X, en raison même de l'uniformité de couleur du l'histogramme. Pour rendre plus claire, et part;iut, plus immédiate, la lecture de ce diagramme, il nous faudrait utiliser au minimum deux couleurs, +et, les faire alterner. Cette amélioration s'obtient en modifiant très légèrement le contenu des lignes de la boucle de tracé des colonnes : H IF INT(I/2) = 1/2 THEN CO = 1 ELSE CO = 3 2/0 UNE (X,J) — (X + (8-*CL),J), CO Chaque fois que la variable compteur I sera paire, I,i colonne sera dessinée en rouge (CO = 1), sinon elle apparaîtra en jaune (CO = 3). Il ne vous reste plus dis sormais qu'à admirer le résultat à l'aide de ces deux exemples : Il nous faut introduire une dernière amélioration, avant que notre histogramme soit réellement complet. L'axe des Y fait figure de parent pauvre lorsqu'on le compare à l'axe des X. Il ne compte en ?ffet que trois malheureuses graduations qui rendent pour le moins imprécise l'interprétation de nos diagrammes. Si vous souhaitez libeller l'axe des ordonnées de manière plus détaillée, voici ce que vous pourriez rajouter à votre programme : 1 GRADUER L'AXE DES Y : PROGRAMME 1 313 MA$=MID$(5TR$(MA),2) 320 LOCATEO,I:PRINT MA$ 321 DE= (MA-MI)/20:MM=MA 322 FOR A=2 TO 21 323 MM=11M-DE 324 MM$=MID$(5TR$(MM),2):MM$=LEFT$(MM$ .4) 325 LOCATE O,A:PRINT MM$ 326 NEXT A 327 LINE(31 .2)- (31 .176) Une fois que le programme a affiché la valeur MA, on décrémente celle-ci de la valeur DE (différence entre MA et MI divisée par le nombre de lignes de texte disponibles depuis le haut du repère graphique jusqu'au bas). La ligne 324 supprime le signe du nombre MM, ce qui nous permet de gagner un caractère et de commencer l'affichage de nos valeurs en colonne 0. La longueur totale du nombre affiché est ramenée à 4 par la fonction LEFT$ de la ligne 324. Comme un nombre de quatre chiffres empiétera légèrement sur l'axe proprement dit, ce dernier est redessiné une fois que toutes les valeurs intermédiaires entre MA et MI ont été inscrites à l'écran (ligne 327) : Pour apporter une touche finale à ce programme, il faudrait prévoir l'introduction d'un titre qui expliciterait (35 caractères maximum) ce qu'est censé représenter votre histogramme. Notons pour conclure que les modifications introduites dans ce chapitre (choix entre deux largeurs d'affichage, graduation totale de l'axe Y...) pourrait être appliquées au programme générateur de courbes cartésiennes.

28 LES FONCTIONS CHAÎNES Jusqu'ici, vous n'avez employé les chaînes de caractères qu'à des fins d'affichage, dans des textes, des énoncés de problèmes, des questions et des réponses. Le M05 est cependant capable d'effectuer sur les chaînes des opérations et des transformations pratiquement aussi nombreuses que celles opérées sur les nombres. Les six pages qui suivent seront consacrées à la manipulation des chaînes de caractères. Pour commencer, nous allons nous attarder un instant sur les fonctions chaînes, ainsi appelées parce qu'elles portent sur les chaînes et retournent un résultat (numérique ou chaîne). La fonction LEN Il est souvent important, voire nécessaire de connaître la longueur des chaînes que l'on utilise. On fait appel pour cela à la fonction LEN — abréviation du mot anglais LENgth ou ((Longueur». A titre de démonstration, entrez le programme suivant : 10 A$ = "ORDINATEUR" 20 PRINT LEN (A$) A l'exécution, le programme retourne le nombre 10, ce qui correspond bien au nombre de lettres de notre mot. Notez que vous seriez arrivé au même résultat en tapant PRINT LEN(« ORDINATEUR »). Connaissant la longueur d'un titre, vous pouvez par exemple le centrer à l'écran et l'entourer d'un cadre constitué d'astérisques. C'est ce que réalise le programme ci-dessous : 10 CL5:5CREEN0,3,3 20 LOCATE 2.2:PRINT'ENTREZ UN TITRE (36 CARACTERES MAX.)~ 30 PRINT:INPUT.~';TI$ 40 L=LEN(TI$) 50 T=INT((40—L)/2) 60 BOX(T-2,10)—(T+L+1.14)°s',4.3 70 COLOR 1.3 80 LOCATET.I2:PRI NT TI$ 90 COLOR 0:LOCATE1,20.0 L'utilisateur entre au clavier un mot de 36 caractères maximum (ligne 30). La ligne 40 détermine la longueur L du titre, valeur qui est reprise dans la formule INT((40 — L)/2). Votre écran faisant 40 colonnes de large, 40 — L nous donne le nombre de cases écran encore disponibles en largeur. En divisant le résultat de cette soustraction par 2, vous pouvez déterminer la position à partir de laquelle s'affichera votre titre. Il ne reste plus alors qu'à créer le cadre, à l'aide d'une instruction BOX : TITRE ENCADRE : AFFICHAGE


t1cçs - a ME L13. Mets



t1 I i. t.T— 3 rtFI I r3l II_, -:

~ s7-


Entrez maintenant la ligne suivante : PRINT LEN ("l'éléphant") Au lieu du nombre 10 attendu, le M05 affiche pour résultat 14! Ce phénomène, pour le moins étrange, est dû à la présence dans la chaîne de minuscules accentuées. En effet, si vous tapez PRINT LEN (»é»), vous obtiendrez le nombre 3, toutes les minuscules accessibles par le biais de la touche ACC étant considérées comme faisant trois caractères de long. Évitez par conséquent d'employer LEN lorsque vous utilisez des minuscules accentuées, sous peine de voir vos résultats faussés. LEN vous permet d'accepter ou de refuser des réponses à des instructions INPUT en fonction de leur longueur, comme l'illustre le programme ci-dessous : TEST RÉPONSE : PROGRAMME 10 PRINT 'ENTREZ VOTRE NUMERO DE SECURIT E°:PRINT°50CIALE, EN SEPARANT LES DIFFER ENTS°:PRINT°NOMBRES PAR UNE BARRE OBLIQU E° 20 PRINT 30 INPUT °x,55$ 40 IF LEN(55$)(17 THEN PRINT 'C'EST TROP COURT. RECOMMENCEZ'": GOTO 30 50 IF LEN(55$))17 THEN PRINT 'C'EST TROP LONG. RECOM AENCEZ!':GOTD30 60 END { I 29 qu 'Il(• S (ju,i

Our ige, des ' »)i ales on- vi-lti- )ir 1_ utilisateur entre au clavier son numéro de sécuf)i(! sociale en séparant les différents nombres par 4o ' barre oblique. La chaîne ainsi constituée devrait inco comporter 17 caractères exactement. Les lij;I2es 40 et 50 testent la longueur de SS$ et affial~r nt un message d'erreur si elle s'avère trop lonMtn ou trop courte. Les fonctions ASC et CHR$ l'unr connaître le code ASCII d'un caractère, il vous «uffit de faire appel à la fonction ASC associée à unn instruction PRINT. Ainsi, PRINT ASC(« Z ») vous donnera pour résultat 90, PRINT ASC(« a ») 97, etc. ASC employée avec une chaîne de caractères retourne le code ASCII du premier caractère de cette chaîne. PRINT ASC(« ANANAS») aura pour résultat 65, code ASCII de la lettre «A». La fonction ASC permet d'opérer des branchements à des sous-programmes, ainsi que le démontrent les lignes ci-desSous . i LA FONCTION ASC: PROGRAMME 1 10 CLS 20 PRINT:PRINT`QUEL MOTIF CHOISI55EZ-VOU ' :PRINT:PRINT 30 PRINT TAB(8) -A- UN RECTANGLE VIDE':P RINT 40 PRINT TA6(8) °B- UN RECTANGLE PLEIN: PR NT 50 PRINT TAB(8) -C- UN TRIANGLE VIDE :PR INT 60 PRINT TAB(8) °0- UN TRIANGLE PLEIN-:P RINT 70 INPUT VOTRE CHOIX <A-D) ':R$ 80 IF A5C(R$)<65 AND ASCCR$))68 THEN GOT O 70 90 R=ASCCR$):CLS 100 ON R-64 GOSUB 200,220,240,260 110 END 200 BOX(40,40)-(280,160).0:RETURN 220 BOXF(40,40)-(280, 160(, 0:RETURN 240 LIME) 160,20)- (20,166) .0: LI NE-(30@.16 0).O:LINE-(160,20),O:R ET URN 260 FOR 1=20 TO 300:LINE(160,20)-(.160( ,0:NEXT I:RETURN bles tels que Return, Escape, Flèche à droite, Flèche à gauche, Flèche en haut et Flèche en bas, codés respectivement 13, 27, 9, 8, 11, 10. La fonction ASC a pour opposé CHR$ qui affiche à l'écran le caractère correspondant au code ASCII employé comme argument entre parenthèses. CHR$ permet la transmission de caractères inaccessibles par ailleurs, tels que le retour chariot (CHR$(13)), le bip du haut-parleur (CHR$(7)), le caractère plein (CHR$(127)), les crochets ouvert (CHR$(91)), et fermé (CHR$(93)). Si vous souhaitez connaître le jeu de caractères de votre M05, tapez simplement ceci : 10 CLS 20 ATTRB 0,1 : PRINT 30 FOR I = 33 TO 127 40 PRINT CHR$(I);" 50 NEXT I JEU DE CARACTÈRES : AFFICHAGE 56789 ( )?eAECDEFGH I JKLHN0P0R5TuuwXYZ1\, 3t_—ab0def9hi, k1mn0p ~rstuvwxy2{Il I O Inur s: L'utilisateur choisit un motif d'affichage parmi les quatre proposés en tapant A, B, C, ou D. De la chaîne R$ contenant la réponse de l'utilisateur, le M05 extrait un code ASCII qu'il compare en 80 à celui de la lettre D et de la lettre A, ce pre- mier test ayant pour but de vérifier la validité de la réponse. La fonction ASC est de nouveau utilisée en 100 pour appeler le sous-programme correspondant à l'affichage choisi. La ligne 100 remplace à elle seule quatre lignes de programme : 100 IF R-64= 1 THEN-GOSUB 200 101 IF R-64=2 THEN GOSUB 220 102 IF R-64 =3 THEN GOSUB 240 103 IF R-64=4 THEN GOSUB 260 Si vous avez répondu par «A », R vaut 65, et R — 64 est égal à 1. Le programme se branchera donc en ligne 200. La ligne 100 pourrait en effet s'exprimer comme suit : «En fonction de la valeur prise par R — 64, branche-toi respectivement à la ligne 200, ou 220, ou 240, ou 260.» Signalons pour finir que la fonction ASC reconnaît les caractères non-afficha- Les fonctions VAL et STR$ La première permet de transformer en valeur numérique une chaîne constituée de chiffres. Supposons que vous souhaitiez calculer l'âge d'une personne en fonction de son année de naissance, et que vous ne disposiez pour cela que d'un tableau chaîne à deux dimensions comprenant le nom de la personne puis son année de naissance. Si votre tableau s'appelle P$, vous arriverez à vos fins en tapant AGE = 1985 — VAL(P$(1,2)) Par le biais de la fonction VAL, la chaîne contenue dans P$(I,2) se change en nombre qui peut alors être utilisé dans un calcul numérique. Si vous employez VAL avec une chaîne constituée de lettres, l'ordinateur vous répondra par la valeur 0. Comme vous vous en doutiez, STR$ est la fonction inverse de VAL. Elle transforme en chaîne une expression numérique, et la chaîne ainsi obtenue peut être concaténée à une autre chaîne : 10 INPUT "Année de naissance" ; N 20 PRINT `Cette personne est née en "+STR$(N 30

n

DÉCOUPAGE DESCHAINES Nous allons poursuivre ici l'étude des chaînes de Il s'agit de répondre à une question par 0 (pour OUI) caractères en apprenant comment les découper en ou N (pour NON). La fonction LEFT$ de la ligne 40 segments appelés « sous-chaînes ». teste la première lettre de la réponse entrée par l'utilisateur. Si ce n'est ni un «O», ni un «N», le pro- Extraction par la gauche gramme se rebranche en 20 par le biais d'une ins- Recopiez le programme suivant sur votre clavier, truction IF... THEN et d'un GOTO. La ligne 50 fait puis lancez-en l'exécution : de nouveau appel à LEFT$ pour déterminer si la réponse à la question posée est négative ou positive. Dans le premier cas, le programme s'interrompt L'INSTRUCTION LEFT$ : PROGRAMME (END). Dans le second cas, on invite l'utilisateur à

patienter quelques instants. Le fait de ne tester que la première lettre de la réponse vous permet d'accepter comme valides les réponses «OUI» ou 0 CLS «NON». Le revers de la médaille tient à ce que tout _1 A$ ORDiNATEUR 20 par -' Y mot commençant ar «O» ou «N» (Orage, Oreille, 30 LOCATE8.a@ g °,-A 40 PRINT Le MDS un - PP I Ouistiti, Nez, Na...) sera également tenu pour valide. t es s 5@ PRINT TABC8) 'qui Vaut son pesant d'° :LEFT$fA$.25 Extraction par la droite Il est également possible d'extraire d'une chaîne les n premiers caractères à partir de la droite. Cela se fera par le biais de la fonction RIGHT$(X$,n). C'est ainsi que PRINT RIGHT$("INFORMATIQUE",5) entraînera l'écriture du mot «TIQUE». La fonc- tion RIGHT$ peut, elle aussi, s'utiliser dans des tests de validité des réponses, comme l'illustre le pro- gramme suivant :


EST DE VALIDITÉ AVEC RIGHT$ : PROGRAMM Associée à l'instruction PRINT, LEFT$(X$,n) extrait

les n premiers caractères de gauche de la chaîne X$, ce qui revient, dans notre exemple, à écrire le mot «OR». Comme toutes les fonctions, LEFT$ ne modi- fie aucunement la chaîne initiale. Si vous tapez 10 PR I NT : PRI NT PRINT A$, l'ordinateur vous affichera encore et tou -0 PRINT ~ENTREZ UN VERBE DU PREMIER GR.O UPE jours le mot «ORDINATEUR ». La fonction LEFT$ se INPUT---, V$ J — que vous pouvez écrire directement en pressant 40 IF RIGHT$(V$,2)O-ERN TMEN PRINT °C£ ToE30 PAS UN VERSE DU PREMIER GROUPE `:GO les touches BASIC et 2 — s'avère très pratique lors- vs_ ` est un verbe dut prem ier groupe° que l'on veut tester la validité d'une réponse : EST DE VALIDITÉ AVEC LEFT$ : PROGRAMM 10 REM la fonction LEFT$ 20 LOCATE 1,14 30 INPUT ` VOUIez-Vous continuer (O/N) 't R$

401F LEFT$(R$,1)O°©` AND LEFT$(R$,I)O °N` THEN 20 50 IF LEFT$[R$.1 )='N' THEN END ELSE LOCA TE1,18:PRINT°Suite du programme dans un moment- On demande à l'utilisateur d'entrer au clavier un verbe du premier groupe (30). La ligne 40 teste la terminaison de ce verbe. Si celle-ci se trouve être différente de « ER », on affiche un message d'erreur et l'on revient en ligne 30. La fonction MID$ Dernière fonction de «découpage», MID$ permet d'extraire une sous-chaîne en un endroit quelconque d'une suite de caractères. Contrairement aux deux


31 lS ir. lr~ e. a t u lli 1t) boucle, contient l'inverse de la chaîne M$. Un coup d'oeil à la photo d'écran de la page ci-contre vous montrera qu'il est possible de trouver des mots que l'on peut lire aussi bien à l'endroit qu'à l'envers. C'est ce que l'on appelle les palindromes. Pour finir, voici un exemple de ce que l'on peut faire en morcelant une chaîne : MOTS AU CARRE :, PROGRAMME 10 CL5 20 PRINT -ENTREZ UNE CHAINE DE CARACTERE 3':PRINT (11 Lettres max imuml°:PRINT 30 INPUT' C$ 40 L=LEN(C$):IF L)i1 TMEN 30 50 CLS:SCREENO.0,0 60 T=1 70 FOR I=1 TO L 80 CH$=MID$(C$,I,1) 90 BOX(9+T.0+T)-(33-T.25-T)CM$,I 100 T=T+1 110 NEXTI 120 LOCATEO,0,0 l'onctions précédentes, MID$ utilise 3 paramètres, agencés comme suit RINT MID$ ("INFORMATIQUE`,3,6) Si vous pressez la touche ENTRÉE, le M05 vous affichera le mot FORMAT. Les deuxième et troisième paramètres désignent, dans l'ordre, le caractère à partir duquel débuta l'extraction, et la longueur de la sous-chaîne à extraire (6 dans notre exemple). MID$ permet d'effectuer une véritable ((lecture », caractère par caractère, de n'importe quelle chaîne, ce qui ouvre la voie à de multiples manipulations, comme ce programme d'inversion : MOTS A L'ENVERS : PROGRAMME Fp ~.. 0 S 20 INPUT FUT °ENTREZ UN MOT 7M$ 30 L=LEN(M$) 40 MOT$=" 50 FOR I=L TO 1 STEP-160 MOT$=MOT$+MI D$.(M$.T .1J 70 NEXT I s0. PRINT:PRINT MOTS 90 PRINT:GOTO 20 ENTREZ UN MOT 1 ICI ICI ENTREZ UN MOT ? PORT. TROP ENTREZ UN MOT ? EC ART. TRACE ENTREZ UN MOT ? POTSSTOP ENTREZ UN MOT ? CIRE FRIC ENTREZ UN MOT.? Ce programme affiche à l'envers les mots que vous introduisez au clavier. On commence par affecter à la variable L la longueur du mot M$. La boucle FOR... NEXT des lignes 50 à 70 extrait, les unes après les autres, toutes les lettres de la chaîne M$, en partant de la dernière, de rang L, jusqu'à la première, de rang 1. Les lettres ainsi extraites sont stockées au sein de la variable MOT$ qui, en fin de Une chaîne de 11 caractères maximum est tapée au clavier par l'utilisateur. Le M05 vérifie que la longueur du mot n'est pas supérieure à 11 (ligne 40), puis il en extrait une à une toutes les lettres avant d'utiliser celles-ci pour dessiner des carrés de plus en plus petits : Grâce à la fonction MID$, vous pourrez réellement «jouer» avec les mots et les transformer à votre guise. Anagrammes, Mot le plus long, affichages en diagonale, en cercle, il n'est rien qui ne vous soit permis. Vous ne serez limité que par votre imagination. Connaissant la longueur d'une chaîne et le moyen de l'examiner par l'intérieur, il devient aisé d'y rechercher un caractère ou un mot particulier. Recherche d'un caractère Les fonctions examinées au cours des deux chapitres précédents ouvrent la voie à l'étude linguistique de textes. Si vous désirez par exemple calculer l'occurence d'un caractère particulier au sein d'un texte ou d'un article de plusieurs lignes, voici comment vous pourriez vous y prendre : 10 " CL5 3CREEN 0. 1. 1:PRINT:PPINT 20 FOR 1=6 TO 1 STEP 0 _0 READ T$ 40 IF T$=°ZZ° THEN 80 50 L=INT((42-LEN(T$))/2) 60 PRINT TAB(L);T$ 70 NEXT I 80 PRINT:PRINT 90 RESTORE:CT=O 100 INPUT °LETTRE A RECHERCHER °,-L$ 110 FOR I=0 TO 1 TEP 0 120 READ T$:IF T$=°ZZ° THEN 170 130 FOR J=1 TO LEN(T$) 140 IF MID$(T$.J.1)=L$ THEN CT=CT+1 150 NEXT J 160 NEXT I 170 PRINT 180 PRINT°LA LETTRE ;L$;° APPARAIT°-CT; ° FOIS °: PRINT 190 GOTO 90 200 DATA"-AU CLAIR DE LA LUNE.°.MON AMI PIERROT `.°PRET E-f101 TA PLUHE°."POUR ECR IRE UN HOT.° lettre grâce à la boucle des lignes 110-150. Dès que le caractère lu est égal à la valeur introduite, on incrémente de 1 le compteur CT : Recherche d'un mot Ce qui est possible avec un caractère unique l'est également avec un groupe de lettres. Le M05 dispose même d'une fonction permettant de déterminer la présence d'une sous-chaîne particulière au sein d'une chaîne quelconque. Cette fonction à résultat numérique porte le nom de INSTR et utilise deux, voire quelquefois trois, paramètres. Si vous recherchez la présence de la lettre « A » dans le mot «INFORMATIQUE », vous pourrez taper : PRINT INSTR("INFORMATIQUE", "A`) Si la lettre « A » se trouve incluse dans ce mot, le résultat obtenu sera supérieur à 0 et indiquera la position de ce même caractère à l'intérieur de la chaîne test (7 dans notre exemple). La présence d'un mot dans une phrase pourra être pareillement décelée. Si vous ne voulez pas commencer votre recherche en début de chaîne, il vous suffira de rajouter un troisième paramètre avant les deux premiers, pour indiquer à l'ordinateur où commencer. Nantis de ces informations, vous pouvez créer un programme de recherche d'un mot au sein d'un texte : RECHERCHE D'UN MOT : PROGRAMME Le texte servant de base à notre recherche est rangé en DATA. Il peut être d'une longueur quelconque mais il doit impérativement se terminer par « ZZ ». Ce texte est affiché par la boucle des lignes 20 à 70. Chaque ligne est centrée selon une technique dont vous avez pris connaissance lors du programme intitulé TITRE ENCADRÉ. La lettre à rechercher une fois tapée, on relit le texte ligne à ligne et lettre par 10 CLS:5CREEN 0,7,7 20 LOCATEI,4,0 30 FOR I=ITO 3 40 READ T$ 50 T$(I)=T$ 60 PRINT TAB(8);T$(I) 70 NEXT 80 PRINT 90 INPUT`CHAINE A RECHERCHER °,CH$ 100 PRINT:CT=O 110 FOR 1=1 TD 3 120 IF INSTR(T$(I).CH$)O0 THEN CT=CT+ 1 130 NEXT I 140 PRINT TAB14);-LA CHAINE °. 150 COLOR0.7: PRI NT CH$t 160 PRINT TAB(4);°APPARAIT`,CTFOIS DAN 5 CE TEXTE° 200 DATA°'LE GRAND GOELAND ARGENTE°.°5'EL OIGNE A TIRE D'AILE°.°EN DIRECTION DU LE VANT° Le texte contenu en DATA est lu par la boucle des lignes 30 à 70 et rangé au sein d'un tableau. Le mot à rechercher est introduit en 90 et affecté à la variable CH$. La présence de cette sous-chaîne est testée par la ligne 120. Si la fonction INSTR retourne un résultat non nul, la variable compteur CT est incrémentée de 1. La photo d'écran ci-dessus illustre ce qui se produit si l'on recherche la chaîne «LE». Comme vous pouvez le constater, le M05 affirme que 33 ~RI Dès que ulte, on ue l'est '05 dis~rminer 3u sein résultat deux, recherle mot flot, le sera la de la :e d'un t déce-•echer-rajou-miers, Nann proexte : le mot «LE» apparaît à trois reprises dans ce texte. Vous seriez-vous trompé dans votre programme ? Pas du tout. Si vous relisez attentivement ce petit texte, vous découvrirez les deux « LE » supplémentaires. Le premier se trouve en fin du mot « aiLE », le second au début du mot «LEvant». L'ordinateur r tout simplement comptabilisé tous les groupes de caractères réunissant un «L» suivi d'un «E ». Pour corriger cela, modifiez comme suit la ligne 120 : 1201F INSTR (T$(I)," "+CH$) <> OTHEN CT=CT+1 En rajoutant un espace en début de sous-chaîne, vous devriez éviter toute surprise. Procédez néan- moins à une vérification en tapant RUN. Cette fois, le M05 vous annonce que le mot «LE» apparaît à une reprise. Est-ce bien de l'article LE dont il s'agit ? Pour vous en assurer, remplacez LE par CE en ligne 200 puis relancez l'exécution du programme. Au lieu du résultat 0 attendu, l'ordinateur persiste dans son affirmation. Il faut vous rendre à l'évidence, ce «LE» n'est autre que celui de «LEvant». La recherche d'un mot au moyen de la fonction INSTR ne se révèle pas réellement satisfaisante, et pour réussir ce programme, il nous faudra revenir à MID$ qui, quoique plus lente, donne de bien meilleurs résultats. Avant de modifier quoi que ce soit, réfléchissons à ce que représente un «mot». Un mot n'est autre qu'un groupe de lettres encadré de deux espaces ou bien encore d'un espace et d'un signe de ponctuation. Si vous vous rapportez au jeu de caractères du M05, vous constaterez que les signes de ponctuation ont tous un code ASCII inférieur à 65. Ceci nous permet d'écrire : 50 T$(I)=" "+T$+" 115 L1 = LEN (T$(I)) : L2 = LEN (CH$ + 1) 116 FOR J= 1TO L1 —L2 120 IF MID$(T$(I),J,L2 + 1) =" "+CH$ AND ASC(MID$(T$(I),J + L2 + 1 ,1 )) <65 THEN CT = CT + 1 125 NEXT J D'UN MOT : AFFICHAGLe tri alphabétique Tout comme il est possible d'écrire 10> 5, l'infor- matique autorise l'emploi d'expressions du genre ZOO > ZÈBRE. L'ordinateur compare un à un les codes ASCII des deux mots puis il en tire la conclusion que la lettre «0» (code 79) est postérieure à la lettre «E» (code 69) et que par conséquent le mot «ZOO» vient après le mot «ZÈBRE» dans l'ordre alphabétique. C'est en partant de cette comparaison entre deux chaînes de caractères que l'on peut concevoir des programmes de tri alphabétique : TRI ALPHABÉTIQUE : PROGRAMME 10 CLS:5CREEN4,3.1 20 0IM M$(10) 30 ATTRB0,1 40 LOCAT E 12,2,0: PRI NT°TRI ALPHABET IQUE° 50 ATTRB0, 0:PRINT:PRINT 60 FOR I=1 TO 10 'O PRINT° MOT°I ;TAB(8i'. 80 COLORO,3 90 INPUT°°H$(1) 100 COLOR4,3 110 NEXT I 120 PRINT 130 FOR I=1 TO 9 140 FOR J=I+1 TO 10 150 IF M$(I )(=M$(J) THEN 170 160 A$=M$I):H$(I)=H$(J):M$(J)=A$ 170 NEXT J 180 NEXT I 190 COLOR 1,3 200 FORI=ITO 10 210 LOCATE24,I+5.0:PRINTH$(I) 220 NEXT 230 END 0K L'utilisateur entre 10 mots au clavier. Ceux-ci sont alors comparés deux à deux. Si le mot introduit après la chaîne examinée s'avère lui être «inférieur» (ligne 150), les deux chaînes M$(I) et M$(J) sont interverties (ligne 160). On utilise pour cela une variable de transition qui recueille pour quelques instants le contenu de MS(I), tandis que celle-ci reçoit le contenu de M$(J). Lorsque toutes les interversions ont été réalisées, la liste se trouve rangée en ordre alphabétique. Il ne reste plus alors qu'à l'afficher : TRI ALPHABÉTIQUE : AFFICHAGE LE GRAND GOELAND ARGENTE 5'ELOIGNE A TIRE D'AILE EN DIRECTION DU LEVANT CHAINE A RECHERCHER ? LE LA. CHAINE LE APPARAIT. 1 FOIS DANS CE TEXTE. OK des • Le ..ecté aine STR teur ssus la Comme vous pouvez en juger par vous même, l'ordique nateur ne se trompe plus sur l'occurrence des mots. TRI ALPHABET I E {

tiu. `' : POIRE ANANA 1tCt I `' _ POIIHE i3F1N

  1. ht I A : Aû17icor 1 1 TRCJN,

'tfï3 T ' ANANAS "I e ELt..E "4 T t, : PRLi!'~E.. OF"A GE', 111'1 ï : ttY.RAHELLE PECilE

il. f , ORANGE= POT lut

M0 r 9 GI TRI IN PUNNE III t So c PEC1*E PtINE 5i.`

7- ) 34 n LES FENÊTRES Il arrive fréquemment que l'on ait besoin, au cours des couleurs entraînerait une réinitialisation des d'un programme, d'afficher une certaine informa- variables. De plus, la moindre erreur vous ferait tion en permanence (mode d'emploi, touches de sortir de votre cadre de travail commande...), sans pour autant que le déroulement FENÊTRE : AFFICHAGE du programme ait à en souffrir. Ceci nous amène à introduire la notion de «fenêtre ». Définir une fenêtre FEt4ET RE Une fenêtre est une portion d'écran que l'on affecte à une tâche particulière, et dont on fixe les limites. La fenêtre constituant en quelque sorte, un «sous H , ~.:,f,t,r r~HK;; , ,~- F , , T écran », il convient de pouvoir la gérer aussi simple s., (: ,,, ment que ce dernier, tant au niveau de la cou- leur que de l'effacement. Cela pourrait se traduire, par exemple, au moyen d'un programme analogue à celui-ci DÉFINIR UNE FENÊTRE : PROGRAMME O 0L5:SCREEN 4.6.6 20 ATTRB 1,1:LOCATE 13,2:PRINT °FENETRE".

30 ATTRB 6.0 40 CF=3:CE=4:MG=0:MD=319:MH=48:MB=199 60 COLOR 50.`F L'instruction CONSOLE ?0 PRINT.:PRINT TAB(8) -AFFICHAGE DAN5 UN Il qui E FENÊTRE° Il existe heureusement une instruction BASIC °. TAB( 13) PREMIER ECRAN PR ° 80 PRINT: I T N 90 FOR P=1 TO 700: NEXT P effectue un travail similaire à celui du programme 1D0 GOSUB 500 110 PRINT:PRINT TAB(12) °DEUXIEME ECRAN- ci-dessus. Sans effacer les lignes précédentes, tapez 120 FOR P=1 TO 700:NEXT P ces commandes directes 130 GO5UB 500 140 ATTRB, 1. 1:LOCATE 17,14:PRINT°FIN° 150 ATTRB.: 0.0:END ) - (D .MB) .CF .LOCATE MG/-8 .M 500 SOXF (MG.MM H ~LS 500 :. SCREEN 0,7,0 CONSOLE 6,18 (La commande CONSOLE peut être obtenue directe- ment par les touches BASIC et C). Ceci fait, essayez de lister votre programme. Les lignes apparaissent

normalement à l'écran mais, arrivées au niveau Après avoir affiché en gros caractères le titre que du dernier message OK, elles semblent disparaître vous ne voulez pas voir effacé, le programme mi- comme par enchantement : tialise les variables qui serviront à la définition de LES EFFETS DE L'INSTRUCTION CONSOLE la fenêtre (ligne 40). CF et CE désignent respective- ment les couleurs d'encre et de fond, MG, MD, MH, et MB, les marges gauche, droite, haute, et basse. La fenêtre est délimitée par le sous-programme de CREEN0. la ligne 500, qui utilise pour cela une instruction NSOLE 6.18 BOXF. Le curseur est positionné dans le coin supé- OR LIST rieur gauche de la fenêtre, chaque fois que celle-ci 40 CF=3:CE=4:MG=0:MD=H=:B= 50 COLOR CECF 319:H 48M 199 est effacée (instruction LOCATE). On affiche un pre- 60GOSUB 500 0 PRI NT : PRI NT T AE (8) "AFFICHAGE DAN5 UN E FENÊTRE° mier Y g messa e (lignes 80-90), puis la fenêtre est ((net- 80 PRINT:PRINT TAB(13) 'PRM EIER ECRAN- 90 FOR P=1 TO 700:NEXT P toyée» par un appel à la routine de la ligne 500. Le 100 GOSUB 500 310 PRINT:PRINT TAB(121 -DEUXIEME ECRAN- processus se répète aux lignes 110-120 et 140-150, et 120 FOR P=1 TO 700:NEXT P se termine sur l'affichage du mot «FIN». La fenêtre 330 GOSUB 500 140 ATTRB 1.1:LOCATE 17.14:PRINT-FIN- est effacée par trois fois, mais le titre ne subit quant à lui aucune altération. Une telle méthode de gestion de fenêtre risquerait à la longue de vous poser de sérieux problèmes, en raison des contraintes d'affichage qu'elle impo- serait. Le moindre changement dans la composition