Gérer les nombres
GW-BASIC
(PC-BASIC)
Initiation au langage Basic
Avez-vous essayé d'écrire des programmes pour gérer beaucoup d'informations ?
Si c'est le cas, vous serez heureux d'apprendre que GW-BASIC dispose d'un outil facile à gérer pour suivre les informations.
Supposons, par exemple. vous voulez écrire un programme qui vous permette de gérer ces informations :
District 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Votes pour le
candidat A 143 215 125 331 442 324 213 115 318 314 223 152 314 92 |
Jusqu'à maintenant, vous avez utilisé des variables pour stocker des informations en mémoire. Par exemple, pour comptabiliser les votes des trois premiers districts, tapez :
A = 143
B = 215
C = 125
Mais voici un meilleur type de variable que vous pouvez utiliser. Tapez:
A(1) = 143
A(2) = 215
A(3) = 125
Chacune des variables ci-dessus a un "indice" (1), (2) et (3). Mis à part la façon dont ils utilisent l'indice, ces variables fonctionnent de la même manière que toutes les autres variables. A voir par vous-même. tapez ces deux lignes :
PRINT A; B; C
PRINT A(1);
A(2) ; A(3)
Maintenant, jetez un coup d'œil et comparez les deux programmes ci-dessous. Les deux fonctionnent de la même manière : le programme 1 utilise des "variables simples". Le programme 2 utilise des "variables indicées".
PROGRAM 1
5 CLS
10 DATA
14,215,125,331,442
20 DATA 324,213,115,318,314
30 DATA 223,152,314,92
40 READ A ,B,C,D,E
50 READ F,G,H,I ,J
60 READ K,L,M,N
70 INPUT
"DISTRICT NO. (1-14)"; Z
75 IF Z>14 THEN 70
80 IF Z=1 THEN PRINT A "VOTES"
90 IF Z=2 THEN PRINT B "VOTES"
100 IF Z=3 THEN PRINT C "VOTES"
110 IF Z=4
THEN PRINT D "VOTES"
120 IF Z=5 THEN PRINT E "VOTES"
130 IF Z=6 THEN PRINT
F "VOTES"
140 IF Z=7 THEN PRINT G "VOTES"
150 IF Z=8 THEN PRINT H "VOTES"
160 IF Z=9 THEN PRINT I "VOTES"
170 IF Z=10 THEN PRINT J "VOTES"
180 IF Z=
11 THEN PRINT K "VOTES"
190 IF Z= 12 THEN PRINT L "VOTES"
200 IF Z= 13
THEN PRINT M "VOTES"
210 IF Z= 14 THEN PRINT N "VOTES"
220 GOTO 70
PROGRAM 2
5 CLS
10 DATA
14,215,125,331,442
20 DATA 324,213,115,318,314
30 DATA 223,152,314,92
40 DIM A(14)
50 FOR X = 1 TO 14
60 READ A (X)
70 NEXT X
80 INPUT
"DISTRICT NO. (1-14)"; Z
85 IF Z<0 OR Z > 14 THEN 80
90 PRINT A(Z) "VOTES"
100 GOTO 80
Le programme 1 est lourd à écrire. Le programme 2 est court et simple à écrire.
Entrez et exécutez le programme 2. Voici comment cela fonctionne :
La ligne 40 réserve de l'espace pour une liste d'informations appelée "tableau (Array)" nommé A-avec 14 éléments indicés.
Les lignes 50 et 70 configurent une boucle pour compter de 1 à 14. la ligne 60 lit les 14 votes dans le tableau A :
La ligne 80 vous demande d'entrer un indice et la ligne 90 affiche l'élément que vous avez demandé.
Maintenant que vous avez stocké des informations dans un tableau, il est facile de les gérer. Par exemple, vous pouvez ajouter ces lignes, qui vous permettent de modifier les informations :
92 INPUT "VOULEZ-VOUS DES VOTES
AJOUTER A CECI OUI ou NON "; R$
94 IF R$ = "NON" OR R$ = "non" THEN 80
96
INPUT "COMBIEN DE VOTES DE PLUS"; X
97 A(Z) = A(Z) + X
98 PRINT "TOTAL DES
VOTES POUR LE DISTRICT" Z "EST MAINTENANT" A(Z)
Ou vous pouvez ajouter ces lignes pour afficher les informations :
72 INPUT "VOUS VOULEZ VOIR TOUS
LES TOTAUX ";S$
74 IF S$ = "OUI" OR S$ = "oui" THEN GOSUB 110
100 GOTO 72
110 PRINT "DISTRICT", "VOTE5"
120 FOR X = 1 TO 14
130 PRINT X, A(X)
140
NEXT X
150 RETURN
Un deuxième tableau
Supposons que vous souhaitiez également suivre les votes d'un deuxième candidat ---- Candidat B :
Résultats des élections
District 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Votes pour le
candidat A 143 215 125 331 442 324 213 115 318 314 223 152 314 92 |
Votes pour le
candidat B 678 514 430 475 302 520 613 694 420 518 370 412 460 502 |
Pour ce faire, ajoutez un autre tableau au programme. Appelez-le tableau (Array) B. Le programme suivant enregistre les votes pour le candidat A (Array A) et le candidat B (Array B) :
5 CLS
10 DATA
14,215,125,331,442
20 DATA 324,213,115,318,314
30 DATA 223,152,314,92
40 DATA
678,514,430,475,302
50 DATA 520,613,694,420,518
60 DATA 370,412,460,502
70 DIM A(14), B(14)
80 FOR X = 1 TO 14
90 READ A (X)
100 NEXT X
110 FOR X = 1 TO 14
120 READ B (X)
130 NEXT X
140 INPUT
"DISTRICT NO. (1-14)"; Z
145 IF Z<0 OR Z > 14 THEN 140
150 INPUT
"CANDIDAT A OU B "; R$
160 IF R$ = "A" OR R$ = "a" THEN PRINT A(Z)
170 IF
R$ = "B" OR R$ = "b" THEN PRINT B(Z)
180 GOTO 140
Programme faites-le vous même
Écrivez un programme d'inventaire qui garde la trace de 12 articles numérotés de 1 à 12 et la quantité que vous avez de chaque article.
5 CLS
10 DATA
33,12,42,13,15,23
20 DATA 25,30,33,27,14,8
30 DIM I(12)
40 FOR X = 1 TO
12
50 READ I (X)
60 NEXT X
70 INPUT" ARTICLE NO. "; N
75 IF N<0 OR N
> 12 THEN 70
80 PRINT "INVENTAIRE POUR L'ARTICLE " N "EST" I(N)
90 GOTO 70
Distribuez les cartes
Pour garder une trace de 52 "cartes", vous devez utiliser un tableau. Effacez votre programme et tapez et exécutez celui-ci :
40 FOR X = 1 TO 52
50 C =
INT(52*RND(1)+1)
90 PRINT C;
100 NEXT X
L'ordinateur distribue 52 "cartes" aléatoires, mais si vous regardez attentivement, vous voyez que certaines cartes sont identiques.
Pour vous assurer que l'ordinateur ne distribue chaque qu'une seule fois, vous pouvez créer un autre tableau - Array T - qui garde une trace de chaque carte distribuée. Ajoutez ces lignes :
5 DIM T(52)
10 FOR X = 1 TO
52
20 T (X) = X
30 NEXT X
Les lignes ci-dessus
construisent le tableau T et y placent toutes les 52 cartes : T(l) = 1, T(2) =
2, T(3) = 3 ... T(52) = 52.
Ajoutez ensuite quelques lignes qui "effacent"
chaque carte du tableau T après qu'elle a été distribuée. Taper:
60 D(X) = C
80 T(C) = 0
Maintenant, l'ordinateur ne peut pas distribuer deux fois la même carte au hasard. Par exemple, supposons que l'ordinateur distribue d'abord un deux. La ligne 80 change la valeur de T(2)s de 2 à 0.
Supposons ensuite que
l'ordinateur en distribue deux autres. Puisque T(2) est maintenant égal à 0.
La ligne 60 retourne à la ligne 50 pour distribuer une autre carte.
Exécutez le programme. Notez comment l'ordinateur ralentit à la fin du pont. Il doit essayer plusieurs cartes différentes avant d'en trouver une qu'il n'a pas encore distribuée.
Pour jouer à un jeu de cartes, vous devez garder une trace des cartes qui ont été distribuées. Vous pouvez le faire en construisant un autre tableau-Array D.
Ajoutez ces lignes, qui stockent toutes les cartes, dans l'ordre où elles sont distribuées, dans Array D :
7 DIM D(52)
60 D(X) = C
90 PRINT D(X);
Programme faites-le vous même
Ajoutez des lignes au programme pour qu'il n'affiche que votre "main" - les 5 premières cartes distribuées.
1 RANDOMIZE TIMER
5 DIM
T(52)
7 DIM D(52)
10 FOR X = 1 TO 52
20 T (X) = X
30 NEXT X
34
CLS
36 PRINT " DISTRIBUTION DES CARTES"
40 FOR X = 1 TO 52
50 C =
INT(52*RND(1)+1)
55 IF T (C) = 0 THEN 50
60 D(X) = C
70 SOUND 128,1
80 T(C) = 0
90 PRINT D(X);
100 NEXT X
110 CLS
120 PRINT "Votre Main"
130 FOR X = 1 TO 5
140 PRINT D(X) " ";
150 NEXT X
Voir aussi BLACKJAC.BAS
Tableau à deux dimensions
Le tableau des résultats des élections pour les deux candidats peut être représenté dans un seul tableau à deux dimensions.
Colonne 1 | Colonne 2 | ||
No Ligne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
District 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Votes pour le
candidat A 143 215 125 331 442 324 213 115 318 314 223 152 314 92 |
Votes pour le
candidat B 678 514 430 475 302 520 613 694 420 518 370 412 460 502 |
La variable tableau A a deux dimensions, 14 lignes et 2 collonnes
70 DIM A(14,2)
Le programme ci-dessous attribut les valeurs pour la première colonne et ensuite pour la deuxième
5 CLS
10 DATA
14,215,125,331,442
20 DATA 324,213,115,318,314
30 DATA 223,152,314,92
40 DATA
678,514,430,475,302
50 DATA 520,613,694,420,518
60 DATA 370,412,460,502
70 DIM A(14,2)
80 FOR X = 1 TO 14
90 READ A(X,1)
100 NEXT X
110 FOR X = 1 TO 14
120 READ A(X,2)
130 NEXT X
140 PRINT "Résultats des élections"
150
PRINT "Candidat A",
"Candidat B"
160
FOR X = 1 TO 14
170 PRINT TAB(4);A(X,1);TAB(18);A(X,2)
180 NEXT X
Créer un fichier de résultats
10 CLS
20 OPEN "O",1,"Result.txt"
30 PRINT #1,"District";",Candidat
A,";"Candidat B"
40 FOR X = 1 TO 14
50 PRINT "ENTREZ LES VOTES - DISTRICT
";X
60 INPUT "Votes pour le Candidat A ";A
70 INPUT "Votes pour le
Candidat B ";B
80 PRINT #1,X; ","A;","B
90 NEXT X
100 CLOSE #1
110
OPEN "I", #1, "Result.txt"
120 INPUT #1,D$,A$,S$
130 PRINT D$,A$,S$
140
FOR X = 1 TO 14
150 INPUT #1,D,A,B
160 PRINT D,A,B
170 NEXT X
180
CLOSE #1
Maintenant faisons un programme créer un fichier de données brute pour le tableau ci-dessous:
District A(X) |
Population Pop A(X,1) P |
A A(X,2) A |
B A(X,3) B |
%A A(X,4) PA |
%B A(X,5) PB |
%Population %Pop A(X,6) PP |
%A Pop A(X,7) PPA |
%B Pop A(X,8) PPB |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
100 125 98 130 209 55 145 126 156 127 99 108 123 100 |
51 92 8 51 102 1 112 82 51 120 52 89 23 49 |
39 22 81 69 93 50 21 39 99 2 33 8 87 48 |
(Votes Total) VT = A + B, PA = A/VT, PB = B/VT, PP = VT / Pop, PPA= A/Pop, PPB = B/Pop
Maintenant faisons un programme avec un menu qui utilise un tableau pour:
1. Afficher le nombre de votes pour un district en particulier.
2. Afficher le nombre de votes pour tous les districts.
3. Quitter le programme
Maintenant voici un programme pour créer un fichier avec un entête.