Chapitre 2

Passons aux choses sérieuses...


Après la lecture du Cours Élémentaire. vous savez mettre votre ordinateur en marche, lui faire répéter plusieurs fois une même opération en utilisant la boucle FOR NEXT et lui demander de vérifier si (IF) une condition est remplie pour qu'il exécute alors (THEN) une instruction.

Mais vous devez en avoir assez de voir votre nom s'afficher sur tout l'écran et vous voudriez maintenant commencer a faire vraiment de l'informatique, utile ou amusante. Vous trouverez dans le chapitre suivant la liste des mots clés du BASIC AMSTRAD, accompagnés de tout ce qu'il faut savoir sur leur « syntaxe » et leur fonction. Lorsque vous la posséderez à fond, votre ordinateur et vous ne connaîtrez d'autres limites que celles de votre imagination.

Si c'est la première fois que vous vous servez d'un ordinateur, vous ressentirez peut-être quelque appréhension à l'idée de « faire de la programmation ». Rassurez-vous : c'est bien plus simple que vous ne l'imaginez et certainement moins compliqué que les spécialistes ne voudraient le faire croire avec leur jargon ! Dites-vous que BASIC n'est pas une nouvelle langue à apprendre, mais plutôt un dérivé de l'anglais auquel, pour gagner du temps, on a ajouté quelques abréviations. CLS n'est donc pas une formule magique, mais la forme abrégée de CLear Screen (Vide l'Écran).

Finie la peur du BASIC, vous serez bientôt surpris de voir comme il est agréable, après quelques heures de programmation, de récolter les premiers fruits de ses efforts. La programmation est un exercice passionnant, surtout pour un débutant qui aborde un langage et une machine pour la première fois. Souvenez-vous bien que, tant que vous n'écrivez pas par inadvertance sur la disquette du système d'exploitation CP/M, rien de ce que vous entrez au clavier ne peut endommager votre ordinateur. Aussi, n'hésitez pas à innover !

 

Mais par où commencer ?

C'est souvent le début d'un programme qui pose le plus de problèmes au néophyte. Évitez surtout de vous jeter sur le clavier avant d'avoir réfléchi à ce que vous voulez faire.

Vous devez d'abord chercher à établir, d'une part, ce que le programme est censé faire et, d'autre part, la manière dont les résultats vous seront présentés, c'est-à-dire ce qui apparaîtra à l'écran lors de l'exécution du programme.

Une fois ceci établi, vous pouvez entamer la rédaction proprement dite du programme, en songeant constamment qu'il doit se dérouler sans à-coups du début à la fin, avec un minimum de sauts (GOTO) en tous sens. Un programme bien écrit doit se lire aisément : songez au casse-tête qui vous attend lors de sa mise au point, ou de son « débogage », comme on dit en jargon informatique.

Soyez tranquille, BASIC est un langage extrêmement tolérant : il vous remettra souvent dans le droit chemin d'un simple message d'erreur affiché à l'écran. Si une idée vous vient après coup, il ne fera aucune difficulté pour insérer une nouvelle ligne entre deux lignes existantes.

 

Écrivons un petit programme

Et maintenant, au travail ! Nous allons écrire un programme permettant d'enregistrer le nom et le numéro de téléphone de vos amis. Ce sera le programme « Répertoire Téléphonique ». Posons-nous d'abord les deux questions primordiales: « Que doit-il faire ?», et « Comment les résultats seront-ils présentés ? »

Supposons que nous voulions un programme permettant d'enregistrer 100 noms et numéros de téléphone. Il suffira d'entrer au clavier le nom d'une personne donnée pour obtenir aussitôt son numéro de téléphone. Ce programme devra de plus être capable d'afficher la liste de toutes les informations mémorisées, au cas où nous aurions oublié sous quelle forme un nom a été enregistré. Vous remarquez que nous sommes déjà en train de penser à la présentation des résultats.

Très bien, à vos claviers ! Commençons par le titre:

10 REM repertoire telephonique

Donner un titre n'est pas une obligation. Il vous aidera pourtant beaucoup à vous y retrouver lorsque vous aurez accumulé une quantité de programmes.

Nous voulons donc entrer (INPUT) une chaîne de caractères (un nom) dans une variable. Cette variable, nous l'appellerons NOM$. De même, nous aurons une variable pour les numéros de téléphone, que nous appellerons TEL$.

Vous vous souvenez que, dans les exemples de programmes du Cours Élémentaire, l'instruction INPUT vous avait permis d'affecter une valeur à une variable. Ainsi, avec les lignes

20 INPUT "entrez le nom";NOM$

30 INPUT "entrez le numero de telephone";TEL$

run

...nous pourrons entrer un nom (disons « Paul »), puis un numéro de téléphone (par exemple 1 206 66 60).

Ces informations sont maintenant stockées par le programme, mais nous n'obtenons encore aucun résultat à l'écran. Il nous faut donc écrire une partie de programme permettant de retrouver et d'afficher ces informations. Pour obtenir la valeur actuelle de NOM$ et TEL$, on aura recours aux instructions :

PRINT NOM$

... et...

PRINT TEL$

Mais attendez ! Nous avions bien dit qu'avec notre programme nous voulions enregistrer jusqu'à 100 noms et numéros de téléphone ? Nous n'allons tout de même pas écrire 100 instructions INPUT avec un non; de variable différent pour chacune, puts 100 instructions PRINT pour afficher la liste à l'écran !!! Non, bien sûr : l'ordinateur résout ce problème au moyen d'un instrument appelé « tableau ». Le tableau permet d'affecter à une même variable la « dimension » (le nombre de valeurs) désirée (100 dans notre cas). Pour connaître l'une de ces valeur, il suffit d'entrer le nom de la variable suivi (entre parenthèes) du numéro de référence correspondant. Ce numéro s'appelle un « indice » et une expression telle que NOM$(27) s'appelle une « variable indicée ». Nous sommes donc en mesure, en utilisant une variable numérique x, de travailler sur l'ensemble des valeurs NOM$(x) de notre tableau : il suffit de faire prendre à x des valeurs de 1 à 100 dans une boucle FOR NEXT (FOR x = 1 TO 100). Chaque fois que x est augmenté de 1, l'indice est également modifié et désigne l'élément suivant du tableau, un nom dans ce cas.

Nous avons besoin, pour les variables NOM$ et TEL$, de deux tableaux de dimension 100. Avant d'utiliser un tableau, il faut avoir déclaré sa DIMension. Remplaçons donc nos lignes 20 et 30 par ces déclarations.

20 DIM NOM$(100)

30 DIM TEL$(100)

Nos variables ainsi définies, écrivons un programme permettant d'introduire les noms et numéros de téléphone dans les tableaux (nous verrons plus tard comment les retrouver). Ajoutons les lignes :

40 FOR x=1 TO 100

50 INPUT "entrez le nom";NOM$(x)

60 INPUT "entrez le numero de telephone";TEL$(x)

70 NEXT

run

Tout cela est fort bien, mais nous n'avons pas l'intention d'entrer les 100 noms en une seule fois. De plus, la présentation du programme à l'écran laisse beaucoup à désirer. Il s'agit maintenant d'y mettre un peu d'ordre. Pour commencer, nous allons, avant chaque nouvelle entrée, débarrasser l'écran du texte antérieur devenu inutile. C'est l'affaire de l'instruction CLS :

45 CLS

Mais comment indiquer à l'ordinateur que, pour le moment, nous avons fini d'introduire des données ? Bien sûr, on peut toujours arrêter un programme en frappant la touche [ESC]. mais alors nos précieux enregistrements seront effacés dès que nous donnerons à nouveau l'ordre RUN !

Il existe une meilleure solution : à chaque enregistrement d'un nouveau nom, demandons au programme de vérifier si quelque chose a effectivement été frappé au clavier, c'est à dire si NOM$(x) n'est pas une chaîne vide, et demandons lui de s'interrompre dans le cas contraire. Avez-vous deviné par quel biais? Écrivons :

55 IF NOMS(x)="" THEN 80

80 PRINT"entree des donnees terminee"

Le programme doit lui-même indiquer à l'utilisateur comment l'interrompre. Ajoutons donc

47 PRINT"pour arreter appuyer [ENTER]"

Voyons maintenant comment obtenir l'impression des informations enregistrées, d'abord sous forme de liste. Écrivons :

90 FOR x=1 to 100

100 PRINT NOM$(x);" ";TEL$(x)

110 NEXT

Mais là encore le programme ne sait pas comment s'arrêter avant le centième élément du tableau. Ajoutons donc :

95 IF NOM$(x)="" THEN 120

120 PRINT"liste terminee"

La chaîne vide est détectée en ligne 95 et le programme interrompt l'impression en sautant les lignes 100 et 110.

Passons maintenant à notre objectif suivant : nous voulons que le programme soit capable de rechercher un nom entré au clavier. Écrivons :

130 INPUT "nom a trouver : ":RECHERCHE$

140 FOR x=1 TO 100

150 IF INSTR(NOM$(x),RECHERCHE$)=0 THEN 180

160 PRINT NOM$(x);" ":TEL$(x)

170 END

180 NEXT

l90 PRINT "Le nom n'est pas repertorie"

run

Une nouvelle instruction est apparue en ligne 150 : INSTR. Cette instruction demande à l'ordinateur de chercher à l'intérieur de la première chaîne citée, la première occurrence de la seconde chaîne. Autrement dit, il va chercher dans NOM$ une occurrence de RECHERCHE$ (la variable introduite en ligne 130, contenant le nom que vous recherchez). Si INSTR ne trouve pas au moins une partie de cette chaîne, elle fournira la valeur 0, ce qui dans notre programme provoque un saut en ligne 180 et donc une nouvelle tentative avec la valeur suivante de x (NEXT). Si le programme a balayé toutes les valeurs autorisées de x (1 à 100), il peut alors atteindre la ligne 190 et annoncer qu'il n'a pas trouvé le nom demandé. S'il le trouve, INSTR fournit une valeur différente de 0. Le programme passe alors sur la ligne 160. affichant le nom et le numéro de téléphone, avant de s'achever à la ligne 170 (END).

Notre programme se perfectionne très rapidement, mais il nous reste encore beaucoup à faire. Prenons donc un peu de recul et considérons ses limites. La façon dont il se déroule, par exemple : on enregistre les informations, puis on obtient une liste, et l'on peut enfin demander la recherche d'un nom donné.

 

Et si jamais ?

Et si jamais cet ordre ne vous convenait pas? Si vous préfériez commencer par la recherche d'un nom enregistré la veille, ou bien ajouter des noms et des numéros de téléphone à ceux qui existent déjà ? Étudier et résoudre ce type de problème, c'est cela la programmation. BASIC, vous le savez, a la bonté de vous permettre l'insertion de nouvelles instructions dans un programme existant, mais un bon programmeur ne doit pas se laisser surprendre.

Un autre inconvénient, de taille, tient au fait que le programme stocke le contenu des tableaux dans une partie de la mémoire effacée à chaque nouvelle exécution. Comme il est hors de question que vous entriez à chaque fois toutes vos informations à la main, il faudra vous réserver la possibilité, d'une part, de sauvegarder les valeurs des variables NOM$ et TEL$ avant d'éteindre votre ordinateur et, d'autre part, de charger ces valeurs lors de l'exécution du programme.

 

Réponses

Voici comment nous allons résoudre le problème du déroulement des tâches : nous allons faire en sorte qu'en début d'exécution, le programme nous propose un choix entre les différentes opérations qu'il est capable d'effectuer. Ce programme, de type « piloté par menu », affiche effectivement à l'écran un menu des options proposées. Vous êtes-vous déjà servi d'un distributeur automatique de billets ? Si oui, vous avez déjà eu affaire à un programme piloté par menu. Incorporons ce menu à notre programme :

32 PRINT"1. ajouter un correspondant"

33 PRINT"2. lister les correspondants"

34 PRINT"3. consulter le repertoire"

35 PRINT"4. sauvegarder le repertoire"

36 PRINT"5. charger le repertoire"

37 INPUT "votre choix (puis ENTER)";ch

38 ON ch GOSUB 40,90,130

 

85 RETURN

125 RETURN

170 RETURN

200 RETURN

Comme vous pouvez le constater, le programme affiche maintenant le menu des options, puis introduit dans la variable ch le numéro entré au clavier (INPUT). En passant sur l'instruction ON ch GOSUB (ligne 38), il lancera le premier sous-programme (ligne 38) si ch = l, le deuxième (ligne 90) si ch = 2 et ainsi de suite.

Maintenant que chacune des fonctions est devenue un sous-programme, il faut obligatoirement en indiquer la fin par une instruction RETURN, ce que nous avons fait.

Vous souvenez-vous du mode d'exécution de RETURN ? A la fin du sous-programme, cette instruction BASIC renvoie le programme à la ligne suivant immédiatement l'instruction GOSUB correspondante, c'est-à-dire, dans notre cas, à la ligne située après 38 (notre programme se poursuivrait donc à partir du point d'entrée des informations, ligne 40). Pour éviter cela, introduisons la ligne :

39 GOTO 32

...afin de faire boucler le programme sur l'affichage du menu. Faites encore tourner le programme pour constater les améliorations apportées.

Parfait ! Voyons maintenant comment notre programme se présente (si celui-ci n'est pas arrêté, faites [ESC] deux fois. Tapez

LIST

Et voici ce que vous devriez avoir sous les yeux :

10 REM repertoire telephonique

20 DIM NOM$(100)

30 DIM TEL$(l00)

32 PRINT"1. ajouter un correspondant"

33 PRINT"2. lister les correspondants"

34 PRINT"3. consulter le repertoire"

35 PRINT"4. sauvegarder le repertoire"

36 FRINT"5. charger le repertoire"

37 INPUT"votre choix (puis ENTER)";ch

38 ON ch GOSUB 40,90,130

39 GOTO 32

40 FOR x=l TO 100

45 CLS

47 PRINT"pour arreter appuyer [ENTER]"

50 INPUT "non";NOM$(x)

55 IF NOM$(x)="" THEN 80

60 INPUT "telephone";TEL$(x)

70 NEXT

80 PRINT"entree des donnees terminee."

85 RETURN

90 FOR x=1 TO 100

95 IF NOM$(x)="" THEN 120

100 PRINT NOM$(x);" ";TEL$(x)

110 NEXT

120 PRINT"fin de liste" 125 RETURN

130 INPUT "nom a trouver",RECHERCHE$

140 FOR A=l TO 100

150 IF INSTR(NOM$(x),RECHERCHE$)=0 THEN 180

160 PRINT NOM$(x);" ";TEL$(x)

170 RETURN

180 NEXT

190 PRINT"ce nom n'est pas repertorie."

200 RETURN

Vous remarquez qu'à certains endroits nous commençons à manquer de place pour insérer de nouvelles lignes. Nous allons en créer et remettre un peu d'ordre en RENUMérotant les lignes. Faites :

RENUM

LIST

Vous devez maintenant obtenir :

10 REM repertoire telephonique

20 DIM NOM$(100)

30 DIM TEL$(100)

40 PRINT"1. ajouter un correspondant"

50 PRINT"2. lister les correspondants"

60 PRINT"3. consulter le repertoire"

70 PRINT"4. sauvegarder le repertoire"

80 PRINT"5. charger le repertoire"

90 INPUT"votre choix (puis ENTER)";ch

100 ON ch GOSUB 120,210,270

110 G0T0 40

120 FOR x=1 TO 100

130 CLS

140 PRINT"pour arreter appuyer [ENTER]"

150 INPUT "nom";NOM$(x)

160 IF NOM$(x)="" THEN 190

170 INPUT "telephone",TEL$(x)

180 NEXT

190 PRINT"entree des donnees termtnee."

200 RETURN

210 FOR x=1 TO 100

220 IF NOM$(x)="" THEN 250

230 PRINT NOM$(x);" ";TELS(x)

240 NEXT

250 PRINT"fin de liste"

260 RETURN

270 INPUT "nom a trouver";RECHERCHE$

280 FOR x=1 TO 100

290 IF INSTR(NOM$(x),RECHERCHE$)=0 THEN 320

300 PRINT NOM$(x);" ";TEL$(x)

310 RETURN

320 NEXT

330 PRINT"ce nom n'est pas repertorie."

340 RETURN

Voilà qui est mieux. Continuons ! Il nous faut maintenant une instruction qui fera en sorte que chaque nouvelle information enregistrée soit rangée à l'intérieur de la première case vide disponible dans le tableau. Nous allons pour cela nous servir d'une nouvelle instruction : LEN. Celle-ci permet de calculer la longueur d'une chaîne. Voici ce qu'il faut indiquer à l'ordinateur :

Si (IF) la longueur (LENgth) de NOM$(x) est supérieure à 0, autrement dit si cette case est déjà occupée, il faut alors (THEN) passer directement à la ligne 180 (qui donnera la référence de la case suivante).

Nul besoin, on le voit, d'être doué en anglais pour parler BASIC. Toutefois, c'est avant tout une question de bon sens !

135 IF LEN(NOM$(x))>0 THEN 180

Enfantin, n'est-ce pas? Avec votre liste des mots-clés de BASIC, et un peu de réflexion, aucune difficulté ne pourra vous arrêter. Vous trouverez toujours une instruction répondant exactement à vos besoins et, avec l'habitude, les solutions vous viendront à l'esprit comme par miracle.

Voyons maintenant comment sauvegarder les valeurs des variables afin de pouvoir les recharger lorsqu'on exécute le programme. Vous savez, depuis la partie 7 du Cours Élémentaire, que l'on peut sauvegarder le programme lui-même au moyen de l'instruction SAVE. Cependant, ce programme n'est qu'un cadre permettant l'entrée des valeurs (au clavier) et leur sortie (sur l'écran). En sauvegardant le programme (SAVE), vous conservez ce cadre, mais pas les valeurs elles-mêmes.

Une partie du programme devra donc prévoir le stockage des valeurs sur disquette. Nous allons pour cela créer un « fichier de données » indépendant.

Il faudra d'abord ouvrir (OPEN) un fichier sortie (OUTput) que nous appellerons, par exemple, « données », puis écrire (WRITE) à l'intérieur de ce fichier les valeurs (de 1 à 100) des variables NOM$(x) et TEL$(x) et, pour finir, refermer (CLOSE) ce fichier avant de revenir au menu. Cette section sera placée à partir de la ligne 350. Laissons à l'instruction :

AUTO 350

... le soin de numéroter AUTOmatiquement les lignes :

350 OPENOUT "donnees"

360 FOR x=1 TO 100

370 WRITE #9,NOM$(x),TEL$(x)

380 NEXT

390 CLOSEOUT

400 PRINT"donnees sauvees"

410 RETURN

Une fois la ligne 410 entrée par [RETURN], faites [ESC] pour interrompre la numérotation AUTOmatique.

Nous venons d'introduire une option supplémentaire : il nous faut donc ajouter un numéro dans la liste située après l'instruction ON ch GOSUB, ligne 100. Rappelons la ligne 100 pour opérer cette modification, par EDIT :

100 ON ch GOSUB 120,210,270,350

Vous pourrez désormais, en choisissant l'option 4. demander au programme de stocker sur disquette les informations introduites.

Vous remarquerez qu'au moment où le programme écrit sur la disquette les valeurs de NOM$(x) et de TEL$(x), le mot clé WRITE est suivi de l'expression #9. Le symbole # est un « sélecteur de canal » qui indique à l'ordinateur sur quel canal les données doivent être acheminées. II en existe 10 dans un ordinateur :

Si l'on dirige les données sur les canaux 0 à 7 (de #0 à #7), celles-ci apparaissent sur l'écran (les canaux 0 à 7 sont réservés pour l'écran et y définissent des « fenêtres »).

Les données envoyées sur le canal #8 sortiront sur l'imprimante, le cas échéant.

Enfin, les données dirigées sur le canal #9 seront envoyées à l'unité de disques : c'est ce que nous avons fait ligne 370.

 

Une petite digression...

Juste un mot sur l'instruction AUTO que nous venons d'utiliser. Lorsque l'on entre, sans numéro de ligne, l'instruction :

AUTO

...l'ordinateur se met à numéroter automatiquement les lignes, en commençant à 10, et en progressant de 10 en 10 à chaque nouvelle ligne entrée. Si les lignes 10, 20, 30, etc existent déjà dans votre programme, vous les ferez apparaître sur l'écran une à une en actionnant la touche [RETURN]. Cette procédure peut vous faire gagner du temps lorsque vous désirez corriger toute une séquence de lignes espacées de 10 en 10.

 

Revenons à notre programme...

Après avoir écrit les instructions permettant le stockage de nos données sur disquette, il ne nous reste plus qu'à en prévoir le chargement pour que notre programme soit terminé. Ajoutons donc une nouvelle option au menu en corrigeant encore une fois la ligne 100 :

100 ON ch GOSUB 120,210,270,350,420

Voyons maintenant les instructions de chargement. Il faudra d'abord ouvrir (OPEN) le fichier entrée (INput) sur la disquette de « données », puis chercher à partir de cette disquette (canal #9) toutes les valeurs, de 1 à 100, des variables NOM$(x) et TEL$(x), et enfin refermer le fichier avant de revenir au menu. Voici la procédure :

420 OPENIN "donnees"

430 FOR x=1 TO 100

440 INPUT 119,NOM$(x),TEL$(x)

450 NEXT

460 CLOSEIN

470 PRINT"donnees chargees"

480 RETURN

 

La fin du commencement...

Le programme que nous venons d'écrire remplit maintenant tous les objectifs que nous nous étions fixés au départ lorsque que nous nous demandions « ce qu'il devrait faire ». Il ne nous reste donc plus qu'à améliorer la « présentation des résultats » à l'écran.

 

Et le commencement de la fin...

D'abord quelques instructions pour mettre le programme au propre:

34 MODE 1

Ceci détermine le mode d'affichage : l'écran sera effacé à chaque nouvelle exécution du programme. Ecrivez ensuite :

36 WINDOW #1,7,36,10,14

Cette instruction un peu obscure ne doit pas vous effrayer : elle consiste simplement à dessiner sur l'écran une petite fenêtre pour encadrer le menu. Le code situé après le mot WINDOW indique à l'ordinateur sur quel canal cette fenêtre sera dirigée (souvenez-vous que nous en avons 8 à notre disposition, de #0 à #7). Sachant de plus que l'ordinateur, s'il n'a pas reçu d'indication particulière, choisit automatiquement le canal #0, on voit bien qu'il faut éviter de diriger notre petite fenêtre sur ce canal, sous peine de voir s'y afficher toutes les sorties du programme. Il faudra donc choisir un autre canal entre #1 et #7, d'où l'indication #1 sur notre exemple. Les quatre nombres qui viennent ensuite indiquent, de manière on ne peut plus simple, les dimensions de la fenêtre : ils donnent la position des bords gauche, droit, supérieur et inférieur de la fenêtre, en se référant aux numéros de colonnes et de lignes de l'écran (comme pour l'instruction LOCATE). Ainsi dans notre exemple, après avoir précisé que nous utilisions le canal 1, nous déclarons que le bord de gauche commence en colonne 7, que celui de droite finit en colonne 36, que le bord supérieur commence en ligne 10 et que le bord inférieur finit en ligne 14.

Si nous voulons maintenant que le menu s'affiche dans cette fenêtre, il va nous falloir rectifier les lignes 40 à 80 :

40 PRINT #1,"1. ajouter un correspondant"

50 PRINT #1,"2. lister les correspondants"

60 PRINT #1,"3consulter le repertoire"

70 PRINT #1,"4. sauvegarder le repertoire"

80 PRINT #1,"5. charger le repertoire"

Ajoutons encore la ligne :

85 LOCATE 7,25

Cette instruction sert à positionner sur l'écran la demande de l'option choisie. La présentation sera ainsi plus claire.

Vidons maintenant l'écran de son contenu avant chaque retour au menu :

110 GOTO 34 

...et après chaque selection d'option :

95 CLS 

Ajoutons pour finir les trois lignes suivantes, qui mettront l'ordinateur en attente avant de revenir au menu :

103 LOCATE 7,25

105 PRINT"appuyez une touche pour le menu"

107 IF INKEY$="" THEN 107

La ligne 103 indique l'endroit auquel l'ordinateur devra afficher le message contenu en ligne 105. La ligne 107 cherche quelle chaîne de caractère vient d'être entrée au clavier. Tant que celle-ci sera vide, c'est-à-dire tant que l'utilisateur n'aura pas actionné une touche quelconque du clavier, le programme bouclera sur cette instruction. Cette instruction a bien pour effet de mettre le programme en attente : celui-ci attend effectivement qu'une touche soit enfoncée pour passer à la ligne suivante.

Le voilà donc terminé, ce programme ! Terminé, vraiment ? ...vous pourriez encore lui demander de corriger ou d'effacer des noms et des numéros de téléphone, de trier la liste dans l'ordre alphabétique, ou de vous la « sortir » sur imprimante, ou bien encore, si vous êtes très ambitieux, d'émettre des signaux permettant d'appeler automatiquement votre correspondant en entrant simplement son nom au clavier, non sans avoir, bien entendu, demandé aux PTT l'autorisation de connecter votre ordinateur au poste téléphonique ! Ces perfectionnements sont pourtant de l'ordre du possible. A vrai dire, on peut améliorer et peaufiner ainsi ses programme à l'infini, surtout lorsqu'on dispose d'un outil informatique aussi puissant que le 6128. Il faut pourtant savoir s'arrêter et nous allons laisser ce « répertoire téléphonique » à ce point en espérant que vous en savez désormais un peu plus sur l'art d'écrire un programme en partant de zéro. Il ne vous reste qu'à le remettre un peu en ordre en tapant une dernière instruction :

RENUM

...puis à le stocker sur disquette, ou vous en débarrasser. Mais qui sait, il pourrait peutêtre vous être utile... pour noter les numéros de téléphone de vos amis !

Voici votre programme terminé :

10 REM repertoire telephonique

20 DIM NOM$(100)

30 DIM TEL$(100)

40 MODE 1

50 WINDOW #1,7,36,10,14

60 PRINT #1,"l. ajouter un correspondant"

70 PRINT #1,"2. lister les correspondants"

80 PRINT #1,"3. consulter le repertoire"

90 PRINT #1,"4. sauvegarder le repertoire"

100 PRINT #1,"5. charger le repertoire"

110 LOCATE 7,25

120 INPUT"votre choix (puis ENTER)";ch

130 CLS

140 ON ch GOSUB 190,290,350,430,500

150 LOCATE 5,25

160 PRINT"appuyer une touche pour le menu"

170 IF INKEY$="" THEN 170

180 GOTO 40

190 FOR x=1 TO 100

200 CLS

210 IF LEN(NOM$(x))>0 THEN 260

220 PRINT"pour arreter appuyer [ENTER]"

230 INPUT "nom";NOM$(x)

240 IF NOM$(x)="" THEN 270

250 INPUT "telephone";TEL$(x)

260 NEXT

270 PRINT"entree des donnees terminee."

280 RETURN

290 FOR x=1 TO 100

300 IF NOM$(x)="" THEN 330

310 PRINT NOM$(x);" ";TEL$(x)

320 NEXT

330 PRINT"fin de liste"

340 RETURN

350 INPUT "nom a trouver";RECHERCHE$

360 FOR x=1 TO 100

370 IF INSTR(NOM$(x),RECHERCHE$)=0 THEN 400

380 PRINT NOM$(x);" ";TEL$(x)

390 RETURN

400 NEXT

410 PRINT"ce nom n'est pas repertorie."

420 RETURN

430 OPENOUT "donnees"

440 FOR x=1 TO 100

450 WRITE #9,NOM$(x),TEL$(x)

460 NEXT

470 CLOSEOUT

480 PRINT"donnees sauvees"

490 RETURN

500 OPENIN "donnees"

510 FOR x=1 TO 100

520 INPUT #9,NOM$(x),TEL$(x)

530 NEXT

540 CLOSEIN

550 PRINT"donnees chargees" 360 RETURN

run

 

<<Chapitre 1 [Index] Chapitre 3>>