Você está na página 1de 311

NOM CULTUOU

Presidente
Flávio Barros Pinto

REDAÇÃO
Diretor Editorial: Carmo Cíiagas
Editor*» Eieciithra;
Antonio José Filhu Berta Sztark Amar
rrlir-.Ttri.-J

Edito™ AuútenCErr: Ana Urda E de Lucena,


Marisa Soares de Andrade
CMerfcArtr.lartosLutiBaUsta
Arabtenles de Arte: latfriur I \in|..u..

Grace Alonso Arruda. Mónica Lenardon Corradi

Consultor Editorial Responaiwt


DrRenaloME. SabbaUru
pretor do Ntideode IrÉnnática da
Uffiveradade Estadual de Campúiasl

Ewcucão Editorial: DATAiJI ifST .Assessoria


eraWormábca Udi. Campinas, SP
Tradução, adaptação. pnigraiiuicão e redação;
Abí lio frdro Seta Aluis» 1 Domei las de Barros,

Mareio R Pra Thereza Marcos Huáscar Velasco.

Raul ISeder ftrmfli, Ricardo 1 R de Aquino taeira


Coordenai» Geni Finar* FrlLsatli Sabbalini

COMERCIAL
Diretor. RiibrrtiiSuvwa

Gfrarte de ( imuacão: Denise Maori


Gerente de Propaganda e PuMiddade: José Carlos Madio
Gerente de ftsquisa e Análise do Mercado:
Wagner M. P Nabuco de Araújo

(CLÇI

A Editora Nova Cullural Lida. é uma empresa do


Grupo QT — Comunir;a(.oes. Lazer, Cultora S A
PmMtnte: Richard Civita
Dortorirt Flávio Barros finto. Joio Gomez,
Menahen M. Polrli. René C. X Santos,
5télio Alves Campos

7
Marshall CavenrM Lirailed 1984/85.

C Erítora Nova Cultural. SJo Mu, BrasiL 1986

Edição organizada pela Editora Nova Cultural Lida.


Av Wigaderro Faria

C£P0H52-Sioftulo-5P-Brasl
Uma. n° M 3° andar

LArtiao 15 da Lei SM de 11/12/19731

Esta obra U composta na AM FToduçoes Gráfifas lida.


e impressa n> Divisão Gráfica da Editora Abril HA.
miCAÇòts
TRS-Color: um editor de discos 1216
Programa para (este do vídeo 1257
Consulta aos astros 1261
Ferramentas para o Spectrum 1281
Desenho arquitetônko (1) 1367
Desenho arquitetônko (2) 1386
Um editor musical (1) 1398
Um editor musical (2) 1408
Um editor musical (3) 1421
Organização de projetos 1451
Um indexador de programas 1461

As cinco vidas de Willk 1208


Avalanche: pontos ganhos 1228
Avalanche: as cobras vivem! 1241
Avalanche: começa o jogo 1271
Avalanche: listagem completa 1292

A torre de Babel 1288


Programa em LOGO 1314
O LOGO e a tartaruga 1326
LOGO: além da tartaruga 1341
Sprites em LOGO para o MSX 1426
Programação em Pascal 1436
Estruturas do Pascal 1446

Robôs controlados por computador 1284


Música, micros e MIDI 1306
Computadores que ouvem 1311
Controle por computador 1321
Processamento de imagens 1470

Compressão de melodias 1201


Operações com cadeias 1214
Técnicas de recursào 1221
O sistema operacional 1246
Como lidar com arquivos 1252
Controle a entrada de dados 1259
Operações com datas 1279
Divertimentos matemáticos 1301
Os segredos do TRS-80 (4) 1312
Os segredos do Spectrum (2) 1340
Funções poderosas 1347
Papel, pedra, tesoura 1348
A matemática da irregularidade (1) 1356
Domine o vídeo do MSX 1361
A matemática da irregularidade (2) 1372
Bits e bytes em BASIC 1378
Desenhos em perspectiva 1391
Formatação de telas 1396
Mais operações com cadeias 1401
Os segredos do TRS-80 (5) 1412
Rotinas em código de máquina (2) 1419
Formatação de valores 1440
Imprima seus desenhos 1441

Os dados vão rolar 1234


O pintor aloprado 1277
Compressão de textos (1) 1332
Compressão de textos (21 1414
Compressão de textos (3) 1428
Sumário geral 1471
Sumário dos quadros 1479
Processadores de textos 1381 índice remissivo 1481
Troca de mensagens 1404 Errata 1
ii n de bancos de dados 1464
D

Illllllll

xxwressao PROGRAMAÇÃO DE UMA MELODIA


COMO COMPRIMIR OS DADOS
DIVISÃO DA MÚSICA
ECONOMIA DE NOTAS
)E MES MODIFICAÇÃO DO ANDAMENTO

Amplie a capacidade musical de seu rá como comprimir os dados de suas sos. Para executá-la, precisaremos escre-
micro reduzindo os dados necessários melodias dentro dos programas BASIC, ver um programa em BASIC contendo
de maneira que eles tomem o menor es- um determinado número de linhas DA-
à execução de uma melodia. paço possível, liberando parte da memó- TA, como o apresentado a seguir:
As técnicas apresentadas aplicam-se à ria RAM para outro uso.
compressão de diferentes tipos de dados.
A aplicação das técnicas de compres-
são de dados não se restringe, natural-
10 LET T-.2
mente, aos programas destinados à exe- 20 RESTORE 100
cução de música. Estende-se a dados de 30 READ D
Tocar música utilizando o computa- todo tipo, desde que sejam repetitivos 50 IF D-255 THEN GOTO 20
dor é uma experiência fascinante, prin- e limitados a certos valores. 60 SOUND T ,

cipalmente quando se é o autor da pe- 70 GOTO 30


ça. Existem, porém, várias dificuldades 100 DATA 12,12,15,16.19,19,21,
UMA NOVA MELODIA 19
a superar, e uma delas é a quantidade
de dados que um programa requer para 110 DATA 12,24,22.21,19,17,16,
executar determinada melodia — mais Seja qual for seu estilo, as melodias
14
120 DATA 12.12,15,16,19,19,21,
de uma leia cheia de números, na maio- que o computador toca seguem um cer- 19
ria dos casos. Além de serem difíceis de to padrão que permite sua compressão. 130 DATA 12,24,22.21.19,17.16,
digitar, esses dados ocupam muito es- Tomemos como exemplo uma música 14
paço na memória. Neste artigo, você ve- simples, com um total de doze compas- 140 DATA 17,17,20,21,24,24.26.
3

IIIIIIIIIIIHH llllllllll
24 9.169,189 140 DATA 35,35,29.28.23,23,21
150 DATA 17,24.22.21,19,17.16, 160 DATA 213,213,179.169,142,14
14 2.126,142 150 DATA 35,23,26.28.31,35,37
160 DATA 12.12,15.16,19.19.21, 170 DATA 213,106.119,126,142,15 ,42
19 9,169,189 160 DATA 47,47,40,37,31,31,2
170 DATA 12,24,22,21.19,17,16, 180 DATA 142.142,112,106,94,94, 8,31
14 106,112 170 DATA 47, 23. 26. 2B, 31,35.
1B0 DATA 19.19.23.24,26.26.24, 190 DATA 159,159,134.126,106,10 7,42
23 6,134, 126 180 DATA 31,31,25,23.21,21,23
190 DATA 17,17.20.21.24,24.20. 200 DATA 213,213,179.169,142,14 .25
21 2,126,142 190 DATA 35,35,29.28.23,23,29
200 DATA 12.12.15,16,19.19.21, 210 DATA 213,106,119,126,142,15 ,2B
19 200 DATA 47,47.40.37,31,31,2
210 DATA 12,24,22.21,19,17,16, 8,31
14 210 DATA 47,23.26,28, 31,35,3
220 DATA 255 7,42
220 DATA 255
fffi
10 SOUHD 7,56:S0UND 8,15
20 SOUND 1.0 -.RESTORE
10
20
RESTORE

KE BOO + I,A: NEXT


30
80
FOR I = 0 TO 22: READ A:

DATA 160,0,174,133.3,238,4
PO D
10 T-3
30 READ D 8,192,136.208,5,206,132,3,240,6 20 RESTORE
50 IF D=255 THEN 20 ,202,208,245,76,34,3.96 30 READ D
60 SOUND 0.D 40 READ D S0 IF D-255 THEN 20
70 FOR T=0 TO 100:NEXT:GOTO 30 50 IF D - 255 THEN 10 60 SOUND D,T
100 DATA 213.213,179.169,142,14 60 POKE 900, T: POKE 901, D: CAL 70 GOTO 30
2,126,142 100 DATA 175.175.189,193,204,20
110 DATA 213.106,119,126,142,15 4,210.204
9,169.189 110 DATA 175,216.213.210,204.19
120 DATA 213,213,179,169,142,14 .31 7.193,185
2,126,142 110 DATA 47.23,26,28,31,35,37 120 DATA 175,175,189,193.204.20
130 DATA 213, 106. 119, 126, 142, ]5 .42 4,210,204
9,169.189 120 DATA 47.47,40,37,31,31,28 130 DATA 175,218,213,210,204.19
140 DATA 159.159.134,126,106,10 .31 7,193.165
6,94 106
, 130 DATA 47,23,26,28,31.35.37 140 DATA 197,197.207,210,218.21
150 DATA 159.106,119,126,142,15 .4; 8.223.218

-
Ê\
IIIIIIIIIIIHH lllllllll
150 DATA L97, 216,213, 210, 204. 19 linha 20 acerta o apontador das notas um buffer musical, capaz de guardar al-
7,193.185 no início dos dados. O laço FOR ... gumas notas. Se houver espaço no buf-
160 DATA 175,175,189,193.204,20 NEXT entre as linhas 30 e 70 lê os valo- fer para o som que está sendo emitido,
4.210,204 res das notas —
os números nas linhas o computador é liberado para outras ati-
170 DATA 175,218,213,210,204.19
7,193.185
DATA —
colocando-os dentro do co-
, vidades. Porém, havendo mais notas a
mando musical apropriado na linha 60. processar, o micro fica novamente com-
180 DATA 204.204,216,216,223,22
3.218.216
A linha 50 detecta o fim da melodia, prometido. Seja como for, o buffer não
190 DATA 197,197,207,210,218,21 marcado por um valor arbitrário — 255. alivia o trabalho de digitação das linhas
6,207.210 Se quisermos introduzir pausas no DATA nem reduz o espaço por elas ocu-
200 DATA 175,175,189,193,204.20 meio da melodia, podemos definir um pado na memória.
4,210,204 outro valor arbitrário, 254 por exemplo, Para contornar efetivamente esses
210 DATA 175,218,213,210,204.19 e incluir um teste para esse valor na li- problemas, o usuário só tem uma alter-
7. 193, 185 nha 40. Ao
surgir uma pausa no meio nativa: encontrar um meio de compri-
220 DATA 255 dos dados, a linha 40 desviaria o pro- mir os dados, tornando mais fácil seu
grama para uma outra linha. Esta pro- processamento e economizando espaço.
Se quiserem, os usuários do TK-2000 duziria um certo atraso, voltando depois
poderão modificar este e os próximos para a linha 30 a fim de continuar a exe-
programas a fim de usar o comando cução da música.
SOUND. Mas isto não é necessário: lai Tal como o programa está, as notas
como estão, os programas funcionam são fornecidas aos comandos musicais A compressão de dados é viabiliza-
tãobem em seu micro quanto no Apple. do BASIC e emitidas conforme vão sen- da pela existência, em uma melodia, de
Em geral, o MSX requer o dobro dos do lidas nas linhas DATA. padrões que se repetem. Quanto mais
dados utilizados pelos outros micros, já Embora esse processo funcione a padrões pudermos reconhecer, maior se-
que emprega dois bytes para definir a contento, ele exige um número muito rá o grau de compressão.
nota musical —
o byte mais significati- grande de dados, mesmo para uma Para identificar esses padrões de da-
vo e o menos significativo. A melodia lodía curta. Além de dificultar a digita dos, convém, em primeiro lugar, ouvir
que escolhemos, no entanto, é tão sim- ção e tomar espaço na memória, o ou tocar a melodia em um instrumen-
ples que o byte mais significativo de to- cesso de dados traz ainda um outro to, tentando distinguir as passagens que
das as suas notas é igual a 0, o que nos conveniente: enquanto a música está se repetem. Depois, escreva a música em
permite especificar só os bytes menos sendo lida e processada, o computador um papel, preocupando-sc apenas com
significativos. não pode se ocupar com outra tarefa. a frequência das notas —
ignore pautas,
A variável T estabelece um fator de Alguns micros, como o MSX, solu- claves, compassos etc.
tempo para a velocidade da música. A cionam parcialmente esse problema com Não há dificuldade em escrever, em
: K

IIIIIIIIIIIHI
qúência em que devem ser tocadas. Co- 29 RESTORE FOR W - 1 TO P +
:

sequência, as letras equivalentes às no-


mo costuma ocorrer quando comprimi- 23: READ WU: NEXT
tas, se estas têm sempre a mesma dura-
30 READ K: IF K - 255 THEN C '

ção. Mas, e se as notas tiverem duração mos dados, o programa que lê a melo-
C+l: GOTO 20
variada? Nesse caso, o trabalho torna- dia assim digitada é maior que a an-
40 POKE 900, T: POKE 901.
se um pouco mais complicado, pois pre- terior: 50 CALL 800
cisaremos levar em conta, além da to- 70 GOTO 30
nalidade, o tempo de cada uma o que — 100 DATA 13,23,13.23,31.23,1:
duplicará o volume de dados. 10 LET C-0: LET T-.2 ,23,41,50.13,23,0
Outra saída consiste em repetir as no- 20 RESTORE 100 110 DATA 47,47,40,37.31,31,:
30 FOR N-l TO C+l: READ P: 8.31,47.255
tas de maior duração. Se, por exemplo,
120 DATA 23. 26, 28. 31. 35, 37,.
uma nota dura duas batidas, ela será re- NEXT N
40 IF P=0 THEN GOTO 10 2.255
gistrada duas vezes. Esta foi a alterna- 130 DATA 35.35.29,28.23,23
50 RESTORE P
tiva que utilizamos ao transcrever a me- 21,23,35,255
Obtivemos 60 READ N
lodia do programa anterior. 140 DATA 31.31.25.23.21,21.:
70 IF N>=255 THEN LET C-C+l
a seguinte tabela: GOTO 20 3,25,255
150 DATA 35,35,29.28.23.23.:
80 SOUND T,N
TABELA I
90 GOTO 60 9,28,255
220 DATA 255
100 DATA 110,120.110,120,130,
G G A# B D D E DG 120,110,120,140,150,110,120,0
110 DATA 12,12,15,16.19.19,21,
G2 F E D C B A 19,12,255
120 DATA 24.22,21.19,17,16,14. DIM A(5.1):FOR K-l TO 1 3 READ
GGA#BDDEDG 255
130 DATA 7, 17,20.21.24. 24,26.
]
1

2
GOTO 3
P: NEXT:
READ P:IF P0255 THEN 2
:

24.17,255 3 N-N+1:A{N.0)-PEEK(51) :A(N.U-


G2 F E D C B A
140 DATA 19.19,23.24,26,26.24. PEEK (52) :IF N<5 THEN 2
23,255 10 C-0:T-3
C C D# E G2 G2 A2 G2 C 150 DATA 17.17,20.21,24.24.20. 20 RESTORE
21,255 30 FOR N-l TO C+l: READ PrNEXT
G2 F E D C B A 40 IF P-0 THEN 10
50 POKE 51,A(P,0) :P0KE 52.A(P,1
G G A# B D D E DG 1 SOUND 7,56:SOUND 8.15 )
60 READ N
2 SOUND 1.0
G2 F E D C B A 70 IF N-255 THEN C-C+l: GOTO 20
10 C-0:T-120
BO SOUND N,T
20 RESTORE
F# 90 GOTO 60
D D Ff G2 A2 A2 G2 27 FORZ-1TOC+1 :READP:NEXT
100 DATA 1.2,1,2.3.2.1,2.4,5.1.
28 IFP-0THEN10
2.0
C C D# E G2 G2 D# E 29 RESTORE:FORW-lTOP:READWW:NEX
110 DATA 175.175,189,193.204.20
T 4.210.204,175,255
G A# D D E D G 30 READK:IFK-255THENO-C+1:GOT02
G B 120 DATA 218,213,210,204,197.19
0
3,185,255
50 SOUND O.K
G2 F E D C B A 130 DATA 197,197,207,210,218.21
60 FORZ-1TOT:NEXT 8,223,218,197.255
70 GOTO 30
Se você examinar a tabela com 140 DATA 204,204.216,218,223,22
I
100 DATA 13,23.13.23.31.23,13,2
atenção, verá que a melodia se compõe 3.218,216.255
3,41,50,13,23,0 150 DATA 197,197.207.210.218.21
de apenas cinco sequências, ou minime- 110 DATA 213.213,179,169,142.14
— 8.207.210,255
lodias identificadas como T1.T2, 2.126.142,213,255
etc, como mostra a tabela 2 , em sua — 120 DATA 106,119,126,142,159,16
Note que o número de dados neces-
maioria tocadas repetidas vezes. 9,189,255
130 DATA 159.159.134.126,106,10 sáriospara execução da melodia
a foi

TABELA 2
6,94.106.159,255 muito reduzido —
no Spectrum, por
140 DATA 142.142,112.106,94,94, exemplo, diminuiu de 97 para 59 bytes.
106,112,255 Rodando o programa, você verá que a
Tl = 0 c A# B D D E D G 150 DATA 159,159.134.126.106,10 música é exatamente a mesma do pro-
6.134,126,255 grama anterior. Os usuários do Spec-
T2- G2 F E D C B A 10013 ,23,13.23.0
trum vão estranhar o andamento da me-
T3- c D# A2 G2 C lodia, mas logo terão uma explicação.
C E 02 G2
Os dados que definem as minimelo-
T4 = D D F# G2 A2 A2 G2 F# 1 FOR I - 0 TO 22: READ A: POK dias estão nas linhas 110 a 150 e a se-
E 800 + I,A: NEXT quência principal —
isto é, a ordem em
2 DATA 160.0,174, 133,3,238,4 que as minimelodias são executadas —
TS = c C D* E G2 G2 Dl E
8.192,136,208.5,206,132.3,240.6 fica na linha 100. O laço na linha 30
,202,208.245,76,34.3,96 acerta o valor de P (variável de traba-
Podemos agora utilizar uma técnica 10 C - 0:T - 100 lho utilizada na leitura das linhas DA'
de compressão: as minimelodias não se- 20 RESTORE
rão digitadas sempre que aparecem na 27 FOR Z - 1 TO C + 24: READ P TA) de acordo com a sequência princi
pai, definindo a minimelòdia a ser to
música completa, mas uma única vez, : NEXT
I junto a códigos que especificam a se- 28 IF P - 0 THEN 10 cada. Na realidade, a sequência princi
um IHIIIIIIIII!
pai é uma de números
lista ou de va- — uma melodia simples raramente ultra- 1000 RESTORE 2000: LET TO-0: LE
lores que,combinados com uma cons- passa dezesseis. T L=2000
tante, resultamem números de linha — Para utilizar essa técnica de compres- 1030 FOR N=23296 TO 23296+111 S
correspondentes às linhas onde se encon- são, precisamos reduzir o número de no- TEP 6
tram as minimelodias. tas a quinze, deixando o 16? valor co- 1040 FOR K=0 TO 7: READ A: LET
Identificada a minimelodia a ser exe- mo um código de controle. Já comen- TO=TO+A: POKE K+N.A: NEXT K
cutada, a linha 50 calcula o número da tamos que, quanto mais comprimidos os
1050 READ A: IF A TO THEN GOT O
O 1080
linha DATA
correspondente. Só o Spec- dados, maior é o programa necessário 1060 LET L=L+10: LET TO=0: NEXT
irum permite o uso da instrução RES- para interpretá-los. Aqui, o programa N
TORE durante a leitura do bloco de da- deve decifrar cada nota abreviada que 1065 RESTORE BETUBN :

dos. O Apple e o MSX empregamlaços vai lendo nas linhas DATA. 1080 PRINT "ERRO DE DADOS NA LI
FOR.. -NEXT e o TRS-Color tem os O usuário, por sua vez, terá o traba NHA " ;L STOP
:

pontos de entrada gravados na linha 3. lho de selecionar as notas que serão usa 2000 DATA 42,109,91.235.42,111,
Alinha 10 utiliza a variável para C das na melodia, classificando-as em or 91 ,58, 779
a contagem do número de minimelodias dem crescente, conforme a frequência 2010 DATA 113.91,70,183,202,24,
já tocadas. A
duração de cada nota é a partir da nota mais baixa da primeirí 91,175,949
controlada por T, que também determi- oitava — nesse caso, Gl. Em seguida
2020 DATA 8,35,62.15,160.195,36
,91,602
na o andamento da música. A linha 40 precisará calcular os números codifica-
2030 DATA 61.1.8.203.56.203.56,
(28, no Apple e no MSX) verifica a úl- dos que aparecerão nas linhas DATA. 203, 791
tima minimelodia, que é marcada com Nossa melodia inclui doze notas: G, A. 2040 DATA 56,203,56,120,254.15.
0 na linha 100. O número 255 assinala A# ,
B, C, D, D# E, F, F# G2 e A2.
, , 202,65,971
o final de cada minimelodia. Ao Digite o terceiro programa e veja o 2050 DATA 91,34,111.91,235.34.1
encontrá-lo, o computador volta à se- sistema em ação. 09.91, 796
quência principal para saber qual será 2060 DATA 8,50.113.91.33,114.91
a próxima minimelodia. ,22,522
Existem várias alternativas para a di- 2070 DATA 0,8.95.25,126.6.0,79,
visão de uma música em sequência prin- 339
12 GOSUB 1000: LET T=-15: LET 2080 DATA
201.26,19,183,194.81,
cipal e minimelodias. De um modo ge-
NT=130: LET MS-170: LET MT= 91,1,796
ral, quanto menores as minimelodias,
210; GOSUB 300 2090 DATA 255.0,201,17,130,91.1
maior é a sequência principal. Devemos 95.65.954
90 STOP
buscar um
equilíbrio entre esses dois ele-
100 DATA 12,14,15,16,17,19,2o, 2100 DATA 91.71.42.107.91,43,62
mentos, a fim de evitar que minimelo- ,255,762
21,22,23,24,26.0,0,0,0
dias muito curtas exijam uma sequên- 200 DATA 1,2.1,2.3,2.1,2,4,5.1 2110 DATA 16,5,35,175.195,10,91
longa que anule as van-
cia principal tão .2,0 .35,562
tagens da compressão. 210 DATA 0,35,85,117,15.255 2120 DATA 190,194.103.91,195,88
220 DATA 166,117.67,31,255 .91. 35.987
230 DATA 68.103.170,166.79,255 2130 DATA 195.96.91,0.0,0,0,0.3
DIVIDINDO PARA VENCER 82
240 DATA 85.154,187.169.255

A segunda técnica de compressão é


ainda mais eficiente. Ela parte do prin-
250 DATA 68.103.170.103,255
310 BESTOBE NT
320 FOB N=23410 TO 23425
330 BEAD X: POKE N.X: NEXT N
m
10 SOUND 7.56:SOUND 8.15
cípio de que. embora os micros possam
345 LET NM-0
tocar um grande número de notas ge- — 350 BESTOBE MS: LET HL=23426
20 SOUND 1,0
23 DIM X (16) : RESTORE FOR N-l TO
ralmente 256 —
poucas delas são de fa-
,
360 BEAD X 16 READ X(N) NEXT
! :
:

to utilizadas durante a execução de uma 365 IF X>NM THEN LET NM=X 25 C-0:T=10Q
melodia. Assim, não nos interessa e — 370 IF X=0 THEN GOTO 400 26 RESTORE1000
não é económico — empregar um siste- 380 POKE HL.X: LET HL-HL+1: 27 F0BZ«1T0C+1:READP:NEXT
ma planejado para aceitar um grande GOTO 360 28 IFP=0THEN25
número de notas. 400 POKE HL.X: LET HL=HL+1 29 RESTOBE1010:FORW=1TOP+2:BEAD
Cada posição de memória em seu mi- 401 LET X=HL: GOSUB 600 UW:NEXT
crocomputador de oito bits é capaz de 402 POKE 23403 LSB, 50 READN SS=N :

403 POKE 23404, MSB 60 N=INT[N/16)


armazenar um número inteiro entre 0 e
430 BESTOBE MT 70 IFN-15THENC=C+1 :GOT026
255. Restringindo a quantidade de no-
440 FOR N=l TO NM 80 GOSUB130
tas a serem armazenadas, será possível 450 BEAD X 90 N=SS:N-1SANDN
colocar duas delasem cada posição — 460 IF X = 255 THEN GOTO 500 100 IFN-15THENOC+1:GOT026
uma em cada quatro bits. Por exemplo, 470 POKE HL.X: LET HL-HL+1 110 GOSUB130
o númerobinário 10100010, de oito bits, GOTO 450 120 GOTO50
pode ser interpretado como um só va- 500 POKE HL.X: LET HL = HL+ 130 SOUND0.X(N+l)
lor decimal —
162 —
ou como dois va- 510 NEXT N 140 FOBZ«lTOT:NEXT
lores —
10 (1010 em binário) e 2 (0010 511 RAND USR 23371 150 RETUBN
em binário). 512 POKE 2.1409,0 450 DATA 213.189.179,169.159.14
530 LET X-USR 23296 2.134,126,119,112,106.94,0.0.0.
Dividir por dois o espaço disponível
540 IF X=255 THEN RETURN 0
diminui drasticamente o intervalo de va-
550 SOUND T.X: GOTO 530 1000 DATA 5.10.5,10.15.10
lores que podemos armazenar: 0 a 15. 600 LET MSB=INT (X/256) 1010 DATA 5,10,20,25.5,10,0
Contudo, muitas vezes isso é suficien- 610 LET LSB=X- [MSB*256) : 1110 DATA 0,35,85,117.15
te, pois o número de notas diferentes em RETURN 1120 DATA 168,117.67,31,255
IIIIIIIIIIIHI « P10CIAMACA0BASK 96 |H|||||||||
1130 DATA 66.103,170,186,79 1110 DATA 0,35,65,117,15
1140 DATA 85,154.187.169,255 1120 DATA 168,117,67,31,255
1150 DATA 68.103,170,103,255 1130 DATA 68,103.170,186,79
1140 DATA 65,154.187,169.255
H]E] 1150 DATA 68.103.170,103.255

1 FOR I - 0 TO 22: HEAD A: POK Os valores das frequências dessas no-


E 800 + I.Al NEXT
2 DATA 160.0,174.133,3,236,4 tas estão codificados na linha 450 (100
8,192,136,208,5,206,132,3,240,6 no Spectrum). Essa linha deve conter de- MAIS MELODIAS
,202,208,245,76.34,3,96 zesseis valores. No MSX, poderíamos
23 DIM X<16) FOR N - 1 TO 16:
:
precisar de 32 valores para outras me- Como exercício, tente codificar outras
READ X (N) : NEXT lodias, já que ele requer dois parâmetros melodias utilizando o último programa
.

25 C - 0:T - 100 para um valor de nota. deste artigo. Identifique as minimelo-


26 RESTORE Emtodas as versões, codificamos só dias e as sequências principais, calcu-
27 FOR Z - 1 TO C + 40: READ P le os valores correspondentes e colo-
doze notas; assim, quatro espaços são
NEXT que- os em linhas DATA. Será preciso
!
preenchidos com 0. Os quatro dígitos bi-
28 IF P - 0 THEN 25 redefinir as matrizes — XI 1
— da se-
nários (chamados nybble) que formam quência principal para cada nova me-
29 RESTORE FOR W - 1 TO P +
:

47: READ WW NEXT


:
cada nota das minimelodias estão codi- o que pode exigir a renumeração
lodia,
ficadas nas linhas 1000 e 1010 (200 e 210 do programa.
50 READ N:SS - N
60 H - INT (N / 16) no Spectrum). Para entender como se
70 IF N - 15 THEN C - C + 1: G calculam esses valores, tomemos como
OTO 26 exemplo a minimelodia Tl Veja os nú- . dos números decimais lidos nas linhas
80 GOSUB 130 meros da seqíiência principal na linha DATA. O Spectrum faz isso colocando
90 N = SS - N * 16 450 (100 no Spectrum). Chamemos a o valor em uma variável (linha 401) e
100 IF N = 15 THEN C = C + 1: primeira nota dessa linha de 0, a segun- chamando, em seguida, uma sub-rotina
GOTO 26 da de 1 e assim por diante, até a última (linhas 600 e 610) que separa os dois
110 GOSUB 130
nota, que será 15. Se escrevermos a mi- nybbles do byte. Devidamente proces-
120 GOTO 50
130 POKE 900, T: POKE 901, X (N + nimelodia Tl com esses códigos, tere- sados, esses valores são utilizados para
1) mos Tl - 0, 0, 2, 3, 5, 5, 7, 5, 0, 15. emitir duas notas.
140 CALL 800: RETURN O número 15, no caso, indica o final da Nos outros micros, as linhas 50 a 100
450 DATA 47,42,40,37.35,31,29 minimelodia, e não uma nota. Cada um cuidam da decodificação. Primeiro, o
.28.26.25,23.21,0,0.0,0 desses valores cabe em um nybble; as- byte em exame, N, é armazenado na li-
1000 DATA 5, 10, 5, 10,.15, 10 sim, precisamos combiná-los em pares nha 50. A linha 60 extrai o nybble mais
1010 DATA 5, 10. 20, 25. 5 10 . ,
para obter os bytes. significativo e a linha 70 verifica o có-
1110 DATA 0.35,85,117,15 Oprimeiro par de nybbles é 0 e 0, va- digo de final de melodia. Alinha 80 cha-
1120 DATA 168,117,67,31,255 lores que correspondem em binário, a ma a sub-rotina que executa a nota cor-
1130 DATA 68.103,170.186,79
0000 e 0000. Combinados em um byte, respondente e a linha 90 extrai o nybble
1140 DATA 85. 154. 1B7. 169. 255
1150 DATA 68.103,170.103.255 resultam no decimal 0. O
primeiro va- menos significativo, usando a operação
lógica AND (menos no Apple e no

Q
10 DIM A(5,l) ,XU6) :FOB K-l TO
lor da linha

O próximo par é 2 e 3
0010 e 001
DATA
1 1 10 (210 no Spec-

trum), que equivale a Tl é, portanto, 0.


,


em binário,
Combinados, esses valores
TK-2000, cuja função AND não permi-
te o cálculo de valores diferentes de 0 e
1). A nota é então emitida. Note que o
16: READ X (K) :NEXT : A (0 . 0) -PEEK (5 1 .

1) :A(0,1)-PEEK(S2) resultam em 0010001 1, ou 35 em deci- byte em exame é preservado, sem o que


15 FOR K-l TO 13 READ P:NEXT:GO :
mal. Este é o segundo valor da linha não seria possível recuperar o segundo
TO 30 1 1 10 (ou 210). Procedendo dessa manei- nybble.
20 FOR K-l TO 5 READ P NEXT : : ra com a minimelodia seguinte, teremos Ao executar esse programa, os usuá-
30 N-N+1:A(N,0)-PEEK(51) :A(N,1) T2 = 10, 9, 7, 5, 4, 3, l, 15. Combina- rios do Spectrum observarão que os pro-
-PEEK (52) :IF N<5 THEN 20 dos, os valores 10e9 —
1010 e 1001 em blemas de andamento causados pela
40 C-0:T-3
50 POKE 51. AIO, 0) :POKE 52,A(0,1
binário —
resultam 168 em decimal. Es- compressão já não ocorrem. O
defeito
te é o primeiro valor de T2 na linha 1 1 20 era provocado por um tempo extra de
):F0R N-l TO C+1:READ P :NEXTr IF
(220 no Spectrum). processamento, necessário ao realinha-
P-0 THEN 40
60 POKE 51,A(P,0) :POKE 52,A(P.l Utilizamos esse método para calcu- mento dos ponteiros, ou seja, ao uso de
)
lar os valores correspondentes às mini- RESTORE. O programa reduziu esse
65 READ N:S-N melodias, armazenados nas linhas 1 1 10 tempo de processamento por meio de
70 N-INTfN/16) a 1150 (210 a 250 no Spectrum). Como uma rotina em código, armazenada nas
75 IF N-15 THEN OC+1:GOTO 50 no programa anterior, a sequência prin- linhas 1000 a 2130. Esta é a razão das
80 GOSUB 130 cipal (linhas 1000 e 1010, ou 200 no diferenças de tamanho e numeração en-
90 N-S:N-15 AND N Spectrum) aponta para as linhas DATA tre o Spectrum e os demais micros.
100 IF N-15 THEN C-C+l :GOTO 50 onde estão as minimelodias, na ordem Para alterar a velocidade de execu-
110 GOSUB 130
120 GOTO 65
em que devem ser tocadas. ção, altere o valor de T. Ele fica na li-
nha 12, no Spectrum, e na linha 40, nos
130 SOUND X (N+l) ,T RETURN :

450 DATA 175,185,189.193,197,20 outros computadores. Observe, porém,


0 PROCESSO INVERSO que o intervalo de tempo entre o final
4.207.210.213.216,218,223,0,0.0
de uma minimelodia e o inicio da seguin-
Outra parte importante do programa te torna-se mais acentuado à medida que
é a que se encarrega de extrair os nybbles T diminui.
IIIIIIIIIIIM CÓDIGO Dl MAQUINA IHIIIIIIIIIII

A morte vem para todos - mas não tão

AS CINCO VIDAS insistentemente


Ele
como
morre cinco vezes
para Witlie.
em cada jogo...

e está sempre pronto a reiniciar

DE WILLIE a aventura na hora que você quiser!

Mesmo que você seja um exímio jo- REM ld bc, 15616


gador, mais cedo ou. mais larde a morte REM ld a, *5
levará Willie.Mas não se afobe. Ele tem REM call 58217
cinco vidas — nem tantas como um ga- A rotina apresentada a seguir promo- REM
REM
ld de, 32
add hl.de
to; bem mais, porém, do que os pobres ve a morte de Willie e verifica se ele po-
REM ld (57332) .hl
mortais. Quando a fatalidade atingir de ser ressuscitado. REM ld bc, 57000
Willie defini ti vamenle, você deverá REM ld a. 40
10 REM org 59652
enterrá-lo, imprimir o placar final e 20 REM die ld de, 196 REM ld de, 258
ajustar todas as variáveis. 30 REM ld hl 1086
,
REM call 58970
Os sons emitidos pelo Spcctrum são 40 REM call 949 REM ld de, 30
muito simples, acompanhando a execu- 50 REM ld de, 131 REM ld hl, 878
ção dos programas. O TRS-Color pode 60 REM ld hl. 1646 REM ld a,r
produzir sons sofisticados. Mas, como 70 REM call 949
para isso é necessário utilizar o proces- 60 REM dead ld hl, (57332)
sador, não se pode tocar um som e exe-
cutar o jogo simultaneamente.
9

llllllllll 16 CÓDIGO DC MÁQUINA 46


Ill
llllllllll

NOTAS FÚNEBRES DE WILLIE


DESCIDA PARA FUNERAL
0 INFERNO IMPRESSÃO
PERDENDO VIDAS DO PLACAR
A ULTIMA MORTE SONS FINAIS

220 BEM ld 1 ,a 350 REM ld a, 142 480 REM call 949


230 REM call 949 360 REM ld b.ll 490 REM ld a, 50
240 REM ld hl (57332)
, 370 REM ld ix. 57992 500 REM ld (5B732) ,a
250 REM ld de, 704 380 REM call me 510 REM jp 58576
260 REM sbc hl .de 390 REM call 58939
270 REM jr ç.dead 400 REM ld de. 261 Se Willie se atogou no mar, caiu num
280 REM ld a, 410 REM ld hl, 1646 buraco, foi picado por uma cobra ou
290 REM ld (60005) ,a 420 REM call 949
300 REM ld a, (57343) 430 REM ld de. 392
atingido por uma pedra, os sinos tocam,
310 REM dec a 440 REM ld hl. 1086 anunciando sua morte. Para que soem
320 REM ld (57343) ,a 450 REM call 949 as duas badaladas fúnebres, a rotina
330 REM jp nz.5B606 460 REM ld de. 261 BEEPER é chamada em 949 duas vezes
340 REM ld hl. 330 470 REM ld hl ,1646 — em cada uma delas, com parâmetros
diferentes nos pares HL e DE.

DESCIDA PARA 0 INFERNO

Quando Willie morre, ele desce para


o inferno, que se situa no fundo da te-
la. Para criar esse efeito, começamos
por apagar sua cabeça —
se não o fizer-
mos, teremos uma coluna de cabeças
descendo até o fundo da tela!
Assim, a posição de Willie na tela —
que aponta para a posição de sua cabe-
ça — é carregada da variável em 57332
e 57333 para o par HL. BC é carregado
com o endereço de um caractere limpo
de céu do topo da tela. A é ajustado pa-
ra ciano sobre dano. Finalmente, a ro-
tina prínl em 58217 é chamada, apagan-
do a cabeça de Willie.
O valor 32 é então somado ao apon-
tador de tela em HL, através do par DE,
o que o faz se mover para a linha de bai-
xo da leia. O resultado é colocado de
volta em 57332 e 57333 para ajustar
também a variável.
BC é carregado com o endereço ini-
cial da figura de Willie com as pernas
juntas. A
é ajustado com o código da
cor de Willie, azul sobre ciano. DE é
carregado com 258, especificando um
bloco de um por dois —
o conteúdo do
registro D define a largura do bloco, e
o conteúdo do registro E, sua profun-
didade: I x 256 + 2 - 258. A rotina de
impressão de bloco em 58970, blk, é
chamada, exibindo na tela a figura de
Willie com as pernas juntas, uma posi-
ção abaixo da que ele ocupava antes.
Enquanto Willie desce, ouve-se uma
música "celestial". Mais uma vez, os
pares de registros HL e DE são carre-
gados com parâmetros que a rotina
BEEPER utilizará, quando for chama- I
ÓDIGO DE MAQUINA Illlllllll!
Illlllllll

da cm 949. Desta vez, porém, em vez de terrodo personagem. Willie será afun ACABARAM-SE AS VIDAS
um som constante, o programa precisa dado mais uma posição e os sinos vol
de um som intermitente. Para isso, tarão a tocar —num tom diferente
os pés de Willie tocarem o Quando Willie tiver morrido pela
carrega-se o conteúdo do registrador R Quando
ferno, ele estará completamente enter quinta vez, o jogo acaba. Precisamos,
na pane menos significativa de HL, que "GAME
A baliza carry não será ajustada então, imprimir a mensagem
é o registro L. A operação é realizada rado.
chamamos a roti-
com 1 pela subtração, não haverá salto
OVER!". Para isso,
via acumulador porque não existe ne-
e o processador passará a executar a na de mensagens, ou me, em 58155. Co-
nhuma instrução Id l,r. mo sempre, os parâmetros devem ser co-
Usamos o registro R para manter a próxima instrução.
Tendo Willie chegado ao seu destino locados nos registros HL, A, B e IX.
memória dinâmica. Este é um recurso
final, convém tocar uma canção confor- A posição de impressão é carregada
do hardware com o qual você não pre-
tadora. Assim, carrega-se A com 9 e a em HL. A cor é ajustada em A. B car-
cisa se preocupar. Para nossos fins, bas-
rotina sound em 60006 é chamada. Ela rega o comprimento da mensagem e IX
ta saber que o valor' desse registro é va-
executa uma versão curta da melodia é usado como apontador de dados. Os
riável. Assim, cada vez que esta parte da
um som inicial do jogo. Para obter maiores de- dados para a mensagem estão em 57892.
rotina for acessada irá produzir
diferente. talhes sobre rotina da música, reveja o A rotina que imprime o escore em
artigo da página 788. 58939 é chamada para imprimir o pla-
Como nosso personagem perdeu uma car. Em seguida, ouve-se o toque que
SEIS PÉS OE PROFUNDIDADE vida, precisamos reajustar — ou me- marca o final do som no jogo. Para
lhor, decrementar —o número de vidas.
A posição da cabeça de Willie é car- O valor dessa variável é carregado de
regada da variável em 57332 e 57333 pa- 57343 para o acumulador, decremenla-
ra o par HL; 704 é carregado em DE e do e recolocado cm 57343.
subtraído do conteúdo de HL. O núme- Se Willie ainda dispõe de alguma vi-
ro 704 — 32 x 22 —indica o começo da, a instrução jp nz manda o proces-
da penúltima linha. Como Willie tem sador de volta ao programa de iniciali-
dois caracteres de altura, essa sjibtração zação, em 58606. Caso contrário, con-
colocará o valor 1 na baliza carry até tinua na rotina de nova partida.
que os pés de Willie tenham tocado o
fundo da teta.
Enquanto a baliza carry contiver 1,
a instrução jr c, dead manda o proces-
sador de volta ao início da rotina de en-
Illlllllll 46 CÓDIGO Dl MÁQUINA 46 llllllll

produzi-lo, a rotina BEEPER é chama- PB LDA 15 18249, que aponta para a posição que
da em 949 três vezes, com valores dife- PAA LDX (65535 o personagem ocupa na tela; U é carre-
rentes em HL e DE a cada vez. LEAX -1,X gado com 1536, o endereço do céu no
Para reajustar o atraso inicial BNE PAA topo da tela. Em seguida, a rotina
carrega-se o acumulador com 50 i
DECA CHARPR é chamada e imprime um
BNE PB
transfere-se o valor na posição 58732 bloco de céu, apagando a metade supe-
JSR CLS
Esse endereço ainda não foi menciona- rior da figura de Willie. O conteúdo de
LDA SFF 2
do: ele pertence à rotina final do jogo ANDA |15 X é então adicionado a 254 e recoloca-
e é incumbido de controlar o atraso ge- STA SFF22 do em 18249, para que o apontador de
ral. O processador salta para 58578, STA 3FFC2 Willie desça um caractere na tela.
ajustando-o de maneira que você possa STA SFFC4 U é carregado com 17774, o endere-
dar reinício à aventura, se quiser. STA 3FFC6 ço inicial dos dados para a figura de
LDY ISS0B Willie com as pernas juntas. Depois, o
390 LDX l$701 processador salta para a rotina
400 STX ,Y++ CHARPR, que imprime a metade supe-
410 LDX |$D05
rior de Willie uma posição abaixo da úl-
420 stx ,y++
A rotina a seguir coloca Willie em seu 430 LDX IS200F tima impressão. Novamente, X é incre-
túmulo: 440 stx ,y++ mentado com 254 e CHARPR é chama-
450 LDX 131605 da para imprimir a metade inferior da
460 STX figura.
470 LDX #31221 Enquanto Willie está descendo na te-
480 STX Y++ , la, ouve-se um grito de agonia para —
490 LDA 4200 isso, A e X são carregados de novo e o
500 LDX 4255 processador salta para SOUND.
510 JSR SOUND Willie deve chegar ao fundo da tela.
520 LDA 4200 Verificamos se isso já ocorreu carregan-
530 LDX 4200
540 JSR SOUND do X com o conteúdo de 18249 e com-
550 LDA 4255 parando esse valor com 6912, o início
560 LDX 4255 de 28? linha da tela. Se a posição de Wil-
570 JSR SOUND lie em X for menor do que 6912, a ins-
580 LDA 4100 trução BLO manda o processador rei-
590 STA DLL+1 niciar o laço Dl e move Willie um ca-
600 LBRA GBIN ractere para baixo. Caso contrário, o
610 SOUND EQU $5133 processador segue em frente, pois Wil-
620 CHARPR EQU S4BCA
lie chegou ao fundo da tela.
DLL EQU 551ED
630
64 0 GBIN EQU 34BE2 O conteúdo de 18249 que arma- —
650 NLV EQU S4BF7 zena o número de vidas que restam a
660 CLS EQU S4ACC Willie —
é então decrementado e LBNE
NLV manda o processador para a roti-
na que dá nova vida a Willie e traz de
volta a última tela. Uma instrução de
desvio longo é usada neste ponto, por-
Quando a rotina começa, ouve- se um que a rotina NLV encontra-se numa
sino bater duas vezes. A homenagem so- parte bem anterior do programa — cer-
nora ao finado Willie, porém, é promo- tamente mais do que 128 bytes, o limite
vida pela rotina SOUND, que será for- para um desvio curto.
LDX 4140 necida no próximo artigo de Avalanche,
JSR SOUND Antes de testar o programa aqui
LDA «131 apresentado, lembre-se de colocar um
LDX «213 RTS no endereço inicial de SOUND, Se o conteúdo de 18249 foi reduzido
JSR SOUND
S5133. Caso contrário, haverá um erro. a 0, Willie não tem mais nenhuma vi-
DI LDX 18249
LDU «1536 SOUND requer dois parâmetros que da, o jogo terminou e o processador exe-
I JSR CHARPR especifiquem o tipo e a duração do som. cuta a instrução seguinte.
i
LEAX 254.X Eles são utilizados pela rotina nos regis- A é carregado com 5; X é carregado
'
STX 18249 tradores A e X. Como as duas notas com 65535 depois, decrementado.
e, O
'
LDU #17774 produzidas diferem uma da outra, a ro- processador fica nesse laço até que X se-
i
JSR CHARPR tina SOUND trabalha com parâmetros ja 0. Em
seguida, A
é decrementado e
i
LEAX 254.X distintos a cada chamada. X volta a ser carregado com 65535. O
<
JSR CHARPR processo se repete até que A também te-
'
LDA «30 nha sido reduzido a 0.
LDX 4113 DESCENDO PARA 0 INFERNO
JSR SOUND
O
processador fica nesse laço 5 x
I

<
LDX 18249 65535 vezes —
pausa suficiente para que
i
CWPX (6912 Willie descerá na tela em direção ao o jogador medite sobre o trágico desti-
<
BLO DI inferno. Sua figura anterior deve, assim. no de Willie. Ao sair do laço de atraso,
i
DEC 18239 o processador salta para a rotina CLS,
'
LBHE NLU X é carregado com o conteúdo de que limpa a tela.
a

IIIIIIIHIIlIMMi BlllllllllHH
O conieúdo de SFF22 é então carre- do, começará com a mesma velocidade. 270
Encerrando a execução da rotina, o 280 inc hl
gado em A, onde se executa a operação
ld a, 255
processador faz um longo desvio para 290
lógica AND com o valor 15. O resulta- 300 call 77
do é armazenado nas posições de memó- o inicio do programa em GBIN. mo ld hl. (-5205)
310
ria $FF22, SFFC2, SFFC4 e SFFC6. 320 push hl
Informamos, assim, ao VDG (gera- 330 ld de. (62407)
dor do sinal de vídeo) e ao SAM (multi- 340 add hl .de
plexador síncrono de endereços) que es- A rotina a seguir enterra Willie e ve- 350 ld a. 255
tamos voltando ao modo texto. O pro- ri fica se pode ser ressi citado: 360 call 77
cedimento é o inverso do que utilizamos 370
360 ld de. 32
ao mudar para o modo gráfico. 1 d hl(~5205)
ld de (62407) 390 add hl.de
Y é carregado com S50B, posição on- Tf)
400 ld (-5205) .hl
de iremos imprimir a expressão "GA- 40 add hl de
50 410 ld de. (62407)
ME OVER!". X, por sua vez, é carre- 60 ld a, 255 420 add hl.de
gado com $701, códigos de tela para as 430 ld a.O
70 puah hl
letras GA. Essas letras são colocadas na 440 push hl
80 ca 11 77
tela na posição apontada por Y, que é 90 4S0 call 77
incrementado duas vezes. 100 dec hl 460
Em seguida, X é carregado com os 110 dec hl 470 ldTde, 32
códigos de tela para ME e as duas leiras 120 ld a. 255 480 add hl.de
são impressas na nova posição aponta- 130 puah hl 490 ld i ,1
140 call 77 500
da por Y, dois blocos à direita do início
150 510
de GA. Por fim, os últimos caracteres
— O, VE e R! —
são carregados e im-
160
170
ld de ,32
add hl.de
520
530
pressos nas posições adequadas. 540
180 ld a. 255
Um som anuncia o fim do jogo. Co- 190 puah hl 550
mo esse som é formado por três notas, 200 call 77 56G ld hl. (-5205)
A e X são carregados e a rotina SOUND 210 570 ld de, 704
é chamada três vezes. inc hl 580 abe hl.de
220
O número 100 é carregado no acumula- 590 jr cbo
230 inc hl
600 ld a, (-5221)
dor e armazenado em S51EE. Com isso, 240 ld a, 255
610
ajustamos o atraso com o valor inicial. 250
620 ld (-5221),
Quando o jogo for novamente executa- 260 call 77
. .

II llllllllll» 46 CÓNGODCMAQWNA 46
||||||||||
630 jp nz, 53888 255 x 255 vezes e tem como único fim
640 ld de, 234
APAGANDO OS VESTÍGIOS
atrasar a descida de Willie, para que o
650 ld a, 114 Antes de mandar Willie para o infer- jogador possa vê-la.
660 ld b.12 no, a rotina apaga seus vestígios na su- A posição de Willie é carregada da
670 tt puah bc
perfície.Se ele foi atingido por uma pe- variável em - 5205 e - 5204 para HL,
680 puah de
640 dra, esta também será apagada, evitan- onde é subtraída de 704 através de DE.
700 ld hl (62407) do a deformação de figuras. Para isso, Esse valor indica o começo da penúlti-
,

710 add hl, de coloca-se o padrão do céu, código 255, ma linha na tela. Como Willie tem dois
720 call 77 em cinco posições ao redor de Willie. caracteres de altura, a subi ração irá co-
7.10 pop af Examinando todas as situações de coli- locar o valor I na baliza carry até que
740 são, você verá que essas são as posições seus pés tenham tocado o fundo da te-
750 necessárias. la. Enquanto a baliza tiver esse valor,
760 O par HL é carregado com a posição a instrução jr c,mo manda o processa-
de Willie na que está no apontador
tela, dor de volta ao início da rotina do en-
djnz tt
ld b,30
em -5205 e -5204; DE é carregado terro, que afunda Willie mais uma po-
com o endereço inicial da TN da V RAM sição. Quando seus pés tocarem o chão.
RIO e somado em HL, o apontador na im- ele estará completamente enterrado; a
820 pressão. Em seguida, a rotina 77 da baliza carry não terá mais o valor 1 e
830 ROM é chamada cinco vezes, com o va- não haverá o salto. O
processador pas-
840 lor de HL apontando para cinco dife- sa, então, a executar a próxima ins-
650 rentes posições ao redor de Willie. trução.
860 Lembre-se de que a rotina 77 —
utiliza- O número de vidas precisa ser reajus-
870 da no decorrer do jogo para imprimir tado — ou melhor, decrementado, pois
880
890 ld (54133)
um padrão na tela —
coloca o valor o pobre Willie perdeu uma vida. O nú-
de A no endereço da VRAM apontado mero de vidas é carregado no acumula-
900 jp 53855
por HL. dor em - 5221 decrementado e recolo-
,
910
cado no mesmo endereço. Se ainda res-
DESCIDA PARA 0 INFERNO tam vidas a Willie, o processador salta
Essa rotina é executada quando nos- para o programa de inicialização, em
so personagem morre —
depois de se 53888. Caso contrário, continua na ro-
afogar no mar, cair num buraco, ser pi- Willie chega até o fundo da tela, em tina de nova partida.
cado por uma cobra ou ser atingido e sua descida ao inferno. Para criar esse
esmagado por uma pedra. efeito, começamos por apagar sua ca-
beça — se não o fizermos, veremos no ACABARAM-SE AS VIDAS
vídeo uma coluna de cabeças!
A posição de Willie, que aponta pa- Quando Willie tiver consumido suas
ra a sua cabeça, é carregada da variável cinco vidas, o jogo acaba. Devemos, en-
em - 5205 e - 5204 para HL, par de re- tão, imprimir "NOVA PARTIDA",
gistros guardado na pilha. O endereço com os padrões previamente colocados
inicial da TN na VRAM é carregado em na tabela de padrões da VRAM pela ro-
DE e somado em HL. A rotina 77 colo- tina fornecida no artigo da página 1001
ca o padrão 255 nessa posição, apagan- O par DE é carregado com 234, po-
do a cabeça de Willie. A posição é re- sição da tela onde a primeira letra será
cuperada da pilha para HL, sendo so- impressa. A contém o código de padrão
mada a 32 através de DE e colocada de da primeira letra; B, o número de pa-
volta em - 5205 e - 5204. Assim, Wil- drões (doze, incluindo o espaço em
lie afunda uma posição na tela. branco). O laço tt é executado doze ve-
Esse novo valor é somado com o en- zes, usando a rotina 77 para imprimir
dereço inicial da TN na VRAM
através a mensagem no centro da tela. Note que
de DE. O acumulador é carregado com este trabalho foi bem simplificado, por-
0, o código do primeiro padrão da fi- que os padrões para a mensagem já es-
gura de Willie com as pernas juntas. O tavam na VRAM, em sequência.
apontador é colocado na pilha e a roti- Depois, o laço formado por tu, du e
na 77 é chamada. O apontador é recu- su é executado 30 x 255 x 255 vezes, pro-
perado da pilha e somado com 32, mo- movendo o atraso necessário para a
vendo-se para a posição de baixo. A é mensagem ser lida na tela. A rotina que
carregado com 1, o código do segundo imprime o escore em 54023 é chamada
padrão da figura de Willie. Chama-se a para imprimir o placar final.
rotina 77 e Willie desce uma posição. Para reajustar o atraso geral do jo-
Em seguida, B e A são carregados go, carregamos o acumulador com 50 e
com 255. O
acumulador é decrementa- transferimos esse valor para 54133 —
do até 0 no laço dl. Quando chega a es- endereço que pertence à rotina final e
se valor,o processador, por meio da ins- controla a velocidade do jogo.
trução djnz alr, decrementa B, reajusta O processador salta para 53855, o ini-
A com 255 e repete o processo até que cio da rotina principal, para que você
B também seja 0. Esse laço é executado tente de novo, se quiser.
IIIIIIIIIIIHH
A programação dos blocos básicos de

©PEIRÂCÕES um processador de textos em BASIC


não é difícil. Aprenda aqui a remover
em

COM CÁDEiÂS espaços


maiúsculas em
branco e a converter
minúsculas e vice-versa.

não ocorre erro: o valor que se


A linguagem BASIC tem excelentes
com retorna é igualado a 0.
recursos para programação variá-
Diversas
veis literais (alfanuméricas).
Nem todas as versões do BASIC di-
Nos micros da linha Sinclair
põem do conjunto completo de funções
funções de manipulação de cadeias de ZX-81 e Spectrum não são — string. Além disso, faltam certas fun-
caracteres (string) garantem a essa lin- rias funções especiais para tratamento
ções, necessárias para a programação
guagem uma grande versatilidade. Va- de subcadeias. Damos, abaixo, a equi-
mos relembrar, resumidamente, o que avançada com cadeias (sobretudo em
valência entre a referência padronizada
faz cada uma dessas funções.
processamento de textos):
a subcadeias na linha Sinclair e as fun-
Funções gerais ções anteriores mencionadas. em branco no
• eliminação de espaços
começo ou no fim de uma cadeia;
LEN(X$) • Retorna o comprimenio X$(l TO N) « LEFT$(XS,N)
• conversão de minúsculas para maiús-
da cadeia XS (um núme- XS(LEN X$-N TO + 1) «* RIGHTS(XS.N)
culas e vice-versa;
ro inteiro entre 0 e 255). XS(N TO N + L-I) « MID$(X$,N,L)
• extraçào de palavras de uma frase.
Existe para todas as ver- XS(N TO) ~MID$(X$,N)
sões de BASIC. Nos mi-
Neste artigo, examinaremos como re-
crocomputadores ZX-81 e
solver alguns dos problemas menciona-
Speclrum não é necessá-
dos acima por meio de pequenas sub-ro-
rio colocar X$ entre pa-
INSTR (XS.VS) - A função inslring retorna tinas, que podem ser acrescentadas a
rênteses.
a posição em que se está qualquer programa.
ASC(X$) - Retorna o código ASCII
o caractere Y$ (ou o pri-
(um número inteiro entre
meiro caractere da cadeia
0 e 255) do primeiro ca-
Y$), dentro da cadeia X$.
ractere da cadeia XS. No
micro Sinclair ZX-81 de-
Essa função pode ser simulada nos
computadores onde não existe, por meio Para muitas aplicações de processa-
nomina-se CODE.
de um laço de repetição em que cada ca- mento de cadeias, é preciso remover an-
CHRStX) - Tem a função inversa de os espaços em branco existentes no
ASC, ou seja, retorna o
ractere em XS é extraído, sucessivamen- tes

te, sendo comparado com YS. Isso po- começo ou no final de um string. A sub-
caractere correspondente
de ser feito com a função MIDS(X$,1, 1), rotina que apresentamos a seguir mos-
ao código ASCII indica-
onde I é o indicador do laço. tra como remover brancos à direita. Ne-
do pela variável X.
la, a variável A$ contém a cadeia que
STRINC$(X,V) - Retorna uma cadeia com
Funções de conversão deve ser processada, e BS, o resultado
X caracteres iguais, com
da rotina:
código ASCII estipulado
por Y. Não existe para os
microcomputadores das
linhas Apple, Sinciair
Números podem ser representados 1000 FOR I=LEN(AS) TO 1 STEP -.
ZX-81 e Spectrum. 1010 IF MIDStAS.I.DO" " THEN
na forma de uma cadeia de dígitos,
1030
['unções do subcadeias mais os sinais de ponto (.), mais ( + ),
1020 NF.XT I
menos (-), e as letras E ou D (notação 1030 BS^LEFTS <AS I RETURN . ) :

científica em precisão simples ou dupla,


respectivamente. Esta última só existe
nos micros das linhas TRS-80, TRS-
Color e MSX). Para efetuar a conver- 1000 FOR I=LEN AS TO 1 STEP -1
1010 IF A3(I TO I)<>- - THEN
LEFTS (X$,N) -Extrai os N
primeiros ca- são da representação numérica para ca-
GOTO 1030
racteres da cadeia X$. deia, ou vice-versa, existem duas fun-
1020 NEXT I
R1GHT$ (XS.N)-Extrai os N últimos carac- ções especiais em ASCII: 1030 LET BS-AS(TO I)
teres da cadeia XS. 1040 RETURN
MIDS (XS,N,L) -Extrai L caracteres a par- STRS(X) - Retorna corresponden-
a cadeia

tir da posição N da cadeia teao número X. Um espaço em Para testar a rotina, acrescente este

X$. Pode ser utilizado branco é adicionado ao início da pequeno programa:


também no formato cadeia.
MIDS(XS,N), extraindo
então lodos os caracteres
VAL (XS) - Efetua a operação inversa, ou
seja, retorna o valor numérico
5SQQK<IIli
que existirem na cadeia correspondente à cadeia XS. Se
XS, a partir da posição N. XS não contiver um número,
IIIIIIIIIHIH lllllllll
MANIPULAÇÃO DE ELIMINAÇÃO DE
CADEIAS DE CARACTERES ESPAÇOS EM BRANCO
CONJUNTO DE FUNÇÕES STRING CONVERSÃO PARA
NOVAS ROTINAS MAIÚSCULAS
DE PROCESSAMENTO DE TEXTOS CONVERSÃO PARA MINÚSCULAS

30 GOSUB 1000 Note que apenas a primeira e a ulti-


40 PRINT BS ma linhas da sub-rotina são diferentes,
50 GOTO 10
pois é necessário percorrer a cadeia do
A
linha 1000 da sub-rotina percorre primeiro ao último caractere, até en-
a cadeia de caracteres do fim ao come- contrar o primeiro não branco. Feito is-
ço, recuando um caractere por vez. A so, eliminam-se todos os caracteres à
linha 1010 verifica se o caractere é um es- direita.
paço em branco. Enquanto for, o laço
se repete. A ocorrência do primeiro ca-
MINÚSCULAS E MAIÚSCULAS
ractere não branco causa a interrupção
Como uma cadeia é armazenada na
do laço e a extração dos I caracteres à memória do computador?
esquerda (linha 1030). Outro recurso útil é a conversão de A cadeia é uma estrutura de dados
Ao testar o programa nos micros das todas as letras minúsculas de uma cadeia muito útil, pois não exige um espaço
linhas TRS-80, TRS-Color, MSX, Apple em maiúsculas, ou vice-versa. Lembre- fixo para armazenagem de cada variá-
ou TK-2000, não se esqueça de digitar se de que o código ASCII de uma letra
a cadeia entre aspas, pois, normalmen- minúscula é igual ao código da maiús- riáveis numéricas. Uma variável de pre-
te, o comando INPUT já realiza a fun- cula correpondente, mais o valor 32. O cisão simples sempre ocupa quatro
bytes na memória; uma variável de pre-
ção de retirar os espaços colocados a di- código de A, por exemplo,é 65, e o de
cisão dupla (quinze decimais) ocupa
reita da mesma. a, 97. Portanto, para converter maiús-
seis bytes e assim por diante.
Nas versões do BASIC que permitem culas em minúsculas, precisamos apenas Manter esse esquema de alocação
funções programadas (DEF FN), a ro- somar 32 ao código das letras —
quan- fixa de espaço na memória para as ca-
tina anterior pode ser substituída por al- do o código ASCII for menor do que 65, deias levaria a um grande desperdício,
go bem mais compacto: que é a letra A, ou maior do que 90, que pois o comprimento das cadeias usa-
é a letra Z, o caractere não deve ser con- das em um programa pode variar mui-
vertido. to. Assim, o interpretador BASIC colo-
ca todas as cadeias em um único es-
Para fazer um teste, troque a linha paço, reservado para esse fim.
30 do programa de verificação por: Para saber onde começa e acaba ca-
da cadeia, o interpretador mantém
BS-FNTBS 1300 BS=""
30 (AS! duas outras estruturas de dados: uma
1305 FOR 1 = 1 TO LEN (AS) série de apontadores indica as locações
Observe que a função só opera cor- 1310 OASC(MIDS(A$.I.U) de memória onde começam as cadeias.
retamente se não houver mais do que 1320 IF C>64 AND CX91 THEN No byte 0 da cadeia está indicado o seu
um espaço em branco entre as palavras C-C+32 comprimento, em bytes. É por isso que
1330 BS-BS+CHR$(C> o comprimento máximo de uma cadeia,
de uma cadeia.
1340 NEXT I RETURN
Para remover os espaços em branco
:
no dialeto M<crosoft BASIC, é 255 (o
à esquerda podemos usar a seguinte
maior número decimal representável
versão da rotina anterior:
em oito bits).

1300 LET bS = "


1305 FOR 1=1 TO LEN ãO
1310 LET c-ASC aS(i TO í) uma letra maiúscula; portanto, devemos
1200 FOR 1-1 TO LEN(AS) 1320 IF c>64 AND c<91 THEN LET somar 32 ao mesmo. A linha 130 con-
1210 IF MIDSÍA3.I.DO" " '

c-c+32 catena o novo caractere à cadeia de saída.


1230 1330 LET bS-bS+CHRS c Para converter minúsculas em maiús-
1220 NEXT 1 1340 NEXT 1 culas basta alterar apenas uma linha da
1230 BS=KIDS(AS.I) :RETURN 1350 RETURN rotina:
Não apresentamos uma versão para
os compatíveis com o ZX-81, pois estes
1200 FOR 1=1 TO LEN AS não têm letras minúsculas.
1210 IF AS(I TO I)<>" " THEN Para testar a rotina acima, substitua
GOTO 1230 a linha 30 de nosso programa de verifi-
1220 NEXT I cação por GOSUB 1300.
1230 LET B$-AS(I TO) O funcionamento da rotina é simples: A rotina verifica se o código ASCII
1240 BETURN o laço que vai de 1305 a 1340 percorre do caractere está compreendido entre 97
Para testar a rotina, substitua a li- a cadeia de entrada, tomando um carac- e 122 {letras a a z, minúsculas). Se esti-
nha 30 do programa de verificação por tere de cada vez, na linha 1310. Se o seu ver, simplesmente subtrai 32 desse có-
GOSUB 1200. código estiver entre 65 e 90, trata-se de
27 APLICAÇÕES 27

yn^t j^^^^I f\^^m I IA A ^ om 0 P ,0 9 fama apresentado neste


I j ~ V^*^*U^g§C
mt m ^JffVl
artigo, os usuários do TRS-Color terão
acesso direto à informação contida
nos disquetes, podendo alterá-la ou

EDITOR DE DISCOS recuperá-la em caso de acidente.


27 APLICAÇÕES 27

ACESSO DIRETO O PROGRAMA


LEITURA E GRAVAÇ ÃO LEITURA
F ORMATO DO D ISCO DE UM SETOR
O DIRETÓRIO EXECUTANDO
- COMO UTILIZAR AS ALTERAÇÕES

A tarefa de gravar e ler arquivos em TRILHAS E SETORES


um disquete é gerenciada pelo sistema
operacional de disco (DOS). Em geral, Para utilizar nosso programa-editor,
o modo como se organiza a informação você deverá ter um mapa do formato do
no disco ou como se dá a transferência disco. Veremos aqui seus aspectos mais
de dados não constitui problema para relevantes; outros detalhes serão encon-
o usuário —
o DOS cuida de tudo, trados no manual do DOS.
transformando a unidade de disquete Se você vai trabalhar com um disco
em uma extensão do computador. que reúne dados importantes, recomen-
No entanto, podemos acessar partes damos que faça uma cópia dele. Qual-
individualizadas do disco, manipulando quer erro cometido ao usar este progra-
e alterando diretamente a informação ma poderá danificar toda a informação
nele contida. Este é um recurso ofereci- nele armanezada.
do pelo DOS que abre inúmeras possi- O TRS-Color tem uma interface es-
bilidades de aplicação. Permite, por pecial que contém o sistema operacio-
exemplo, que se alterem itens de um di- nal. Este não precisa, assim, estar gra-
retório e nomes ou dados de arquivos. vado no disco para ser lido quando se
Sua aplicação mais interessante talvez liga o computador —
como ocorre com
seja a recuperação de informações: com a maioria dos micros.
o acesso direto você pode, entre outras O disco divide-se em 34 trilhas, cada
coisas, recuperar arquivosque foram uma com dezoito setores de 338 bytes.
apagados, fechar arquivos ou restabe- Destes, apenas 256 são usados para ar-
lecer apontadores, corrigindo o enca- mazenamento de dados; os 82 restantes
deamento dos setores que compõem um são utilizados para controle do sistema
arquivo em particular. operacional.
O acesso direto a blocos individuais O diretório, que controla os arquivos
de informação em um disco funciona de do disco, fica armazenado na trilha 17.
modo semelhante a um monitor desti- Ele pode ser acessado por meio do co-
nado a examinar a memória do micro. mando DIR, que mostra todos os arqui-
A operação do monitor de disco (ou vos, discriminando seu tipo etambém
editor de disco) é viabilizada, basica- o número de blocos empregados. Veja-
mente, pela armazenagem temporária, mos como está dividida a trilha 17, a
em uma parte da memória, da informa- partir do setor 3:
ção lida do disco ou a ser gravada. En-
quanto está na memória, a informação Byte Conteúdo
pode ser alterada à vontade, sendo, em
seguida, substituída no disco. 0-7 Nome do arquivo. Ocupando
um número de bytes menor que
A GEOGRAFIA DO DISCO oito, é preenchido por espaços
em branco. Byte 0 igual a 0 in-
Algum conhecimento sobre a distri- dica arquivo apagado. Byte 0
buição dos dados no disco é fundamen- igual a FF significa que este e
tal para a manipulação do bloco de in- os próximos itens do diretório
formações em uma trilha ou setor deter- ainda não foram usados.
minado. O diagrama, normalmente re-
ferido como formato do disco, é defi- 8- 1 0 Extensão do nome do arquivo.
nido pelas rotinas de formatação do
DOS. 1 1 Tipo de arquivo:
Usa-se a notação em hexadecimal em 0 programa BASIC;
todas as referências sobre acesso direto 1 arquivo de dados BASIC;

ao disco — por isso, nossas referências 2 programa em linguagem de


também adotarão essa notação. Como máquina;
não empregaremos a notação decimal 3 arquivo de texto.
em nosso programa, será útil ter uma ta-
bela de conversão de decimais para hex 12 00 arquivo em formato binário.
e outra de hex para ASCII. FF arquivo em formato ASCII
27 APLICAÇÕES 27

13 Número do primeiro bloco do Pronto, seu programa está totalmente procurados no disco, setor por setor. O
arquivo (0-67). recuperado! programa só poderá ser carregado na
Quando o programa que você quer memória do computador quando tiver-
recuperar è maior, a operação torna-se mos montado a sequência correia de
14-15 Numero.de byles em uso no úl-
complicada, pois o DOS passa para FF blocos. Inicie a busca pelos blocos vizi-
timo setor do arquivo. nhos do inicial e vá se afastando até ter
o valor de todos os blocos usados pelo
programa que foi apagado. Assim, co- localizado todos eles. É um trabalho ár-
16-31 Sem uso. meçamos o trabalho conhecendo apenas duo, mas, certamente, haverá casos em
o primeiro bloco. Os demais têm que ser que valerá a pena.

Para distribuir os arquivos no disco,


o computador usa como referência blo-
cos, que nada mais são que metade de
uma Irilha. Assim, o bloco 0 será com-
posto pelos setores 1 a 9 da trilha 0; o
bloco 1, pelos setores 10 a 18 da trilha
0; o bloco 2, pelos setores 1 a 9 da tri-
lha 1 e assim por diante, até a (rilha 16.

A trilha 17 que contém o diretório —
não é levada em consideração, mas a di-
visão recomeça a partir da trilha 18 —
onde os setores I a 9 compõem o bloco
34 —e, com isso, prossegue até o fim
do disco...
A identificação dos blocos livres pa
ra uso é feita por meio do setor 2 da tri
lha 17. Os primeiros 68 bytes desse se
tor representam os blocos de 0 a 67
Quando determinado byte contém o
lor FF, o bloco está livre. Um
valor de
00 a 43 indica sua ocupação por um ar-
quivo cuja referência é dada pelo núme-
ro decimal obtido após a conversão do
valor. Um valor de CO a C9 indica que
o bloco em questão è o único ou o últi-
mo do arquivo; o segundo dígito espe-
cifica o número de setores que estão
ocupados no bloco.
Essas informações são importantes,
especialmente quando se trata de recu-
perar arquivos apagados por engano —
tarefa, aliás, nada fácil, mas que pode
ter bons resultados se realizada com um
pouco de paciência.
No caso da recuperação de um arqui-
vo pequeno, que não ocupa mais de um
bloco, o trabalho é mais simples. Em
primeiro lugar, você deve localizar o
programa desejado no diretório. Para
restaurar seu nome inicial, substitua o
00 da primeira posição pela letra ade-
quada. Depois procure o 13? byte do
item (o terceiro após a última letra da
extensão do nome do arquivo). Trans-
forme seu valor hexadecimal em
mal, para identificar o bloco usado pe-
lo seu programa. Em seguida, grave es-
sa informação no setor e carregue o se
tor 2 da trilha 17. Procure pelo byte cor
respondente ao bloco (lembre-se de que
a contagem começa no 0). Ele deve ter
o valor FF. Substitua esse valor por C9
e grave no setor. Saia do programa-
editor, carregue o seu programa na me-
mória e volte a gravá-lo, para que to-
dos os apontadores sejam atualizados.
27 APLICAÇÕES 27

10 CLEAR 500O:DIM AS 1 < DS 1 > D


) . ( . 40 R3-INKEYS:IF RS = "" THEN 40 218 VS-CHRS(VAL("S.H" + HS)1 P=H+Y :

(160) :CS""~"+CHRS (10) +CHRS (8) *C 50 R-INSTR("CVSD".RS) :IF R-0 TH «11+X


HR3(9)+"AH"+CHRSI13)+" ":D-1 EN 40 1000 SL-l:GOSUB 5000
15 TPS (0) ""BAS" TPS 1 ="DAD" TP
: (
)
; 60 IF SL-0 AND (R-2 OR R- 3) THEN 1010 DSKIS D.T.S.ASÍ0) ,ASU>
3 (2) -"LMA" :TPS (3) -"TXT" PRINT PRINT "NENHUM SETOR CARRE
: 1020 RE TU RN
20 CLS:PRINT «13. "menu" GADO" FOR K- 1 TO 2000 NEXT:GOTO
: : 2000 F-l:H-l:CLS:PRINT"aSCII OU
30 PRINT S105, "CARREGAR SETOR" 20 hEX ?"
PRINT «169. "vER/EDITAR SETOR" : 70 CLS:ON R GOSUB 1000.2000,300 2010 RS-INKEYS:IF RSO"A" AND R
RINT «233, "SALVAR SETOR" PRINT : 0.4000 3<>"H" THEN 2010
ê297."dIRETORIO" 80 GOTO 20 2020 AZ-0:1F RS-"A" THEN AZ=1
2030 IF F-0 THEN 2050
2040 PK-96 CP-1535 IF AZ=1 GOSU
: :

B 2320 ELSE GOSUB 2280


2050 POKE CP.PK:CP-1024+Y*32+X*
3:PK-PEEK{CP) POKE CP. 239 :

2060 PRINT «321, "BYTE SUPERIOR-


";H
2070 RS-INKEYS:IF RS-"" THEN 20
70
2080 R-INSTR(CS.RS) :IF R-0 THEN
2070
2090 F-0:ON R GOTO 2100.2110.21
20. 2130. 2140.2150. 2160.2170
2100 Y-Y-l :GOTO 2210
2110 Y=Y+l:GOT0 2210
2120 X-X-l:GOTO 2210
2130 X-X+l:GOTO 2210
2140 AZ-l :GOTO 2040
2150 AZ-0:GOTO 2040
2160 RETURN
2170 PRINT «384, "NOVO CONTEÚDO
(HEX) " INPUT HS
; :

2180 VS = CHRSÍVAL("Í.H" + HS) :P'H + )

Y*ll+X
2190 MIDS (AS(P/128) .P+128* (P>12
8) , D-US
2200 F=l:GOTO 2030
2210 IF Y<0 THEN H-H-44 Y-0 F-l : :

2220 IF Y>7 THEN H-H+44 Y-7 F-l : :

2230 IF X<0 THEN X=10 Y-Y-l IF : :

Y<0 THEN H-H-ll Y-0 :F-1 :

2240 IF X>10 THEN X*0 Y-Y+l IF : :

Y>7 THEN Y-=7:H-H + 11:F-1


2250 IF H- 10 OR H— 43 THEN H-l
:F=0:ELSE H<1 THEN H=1;F-1
IF
2260 IF H = 179 OR H=212 THEN H-l
68:F-0 ELSE IF H>168 THEN H-168
:F-1
2270 GOTO 2030
2280 CLS:FOR J-H TO H+87 STEP 1
1: FOR TT-0 TO 10
2290 PRINT RIGHTS("0"+HEXS(ASC(
MIDS (AS (J/128) J+TT+128* (J+TT) , (

>128)))) ,2) ;" "i


2300 NEXT PRINT CHRS (8)
: NEXT ; :

2310 RETURN
2320 CLS:FOR J-H TO H+87 STEP 1
1 :FOR TT=0 TO 10
2330 G-ASC(MIDS(AS(J/128) J+TT+ ,

1 28* (J+TT) >128)


( IF G<32 THEN ) ) :

2350
2340 PRINT " ";CHRSÍG)i" ";:GOT
O 2360
2350 PRINT LEFTS("D"+HEXS(G) .2)

2360 NEXT PRINT CHRS (8)


: ; : NEXT :

ETURN
3000 CLS:PRINT"SALVAR NO MESMO
SETOR (S/N) ?"
3010 RS-INKEYS:IF RS<>"S" AND R
SO"N" THEN 3010
3020 IF RS*"S" THEN 3040
030 CLSrGOSUB 5000
27 APLICAÇÕES 27

3040 PRINT :PRINT"VOCE TEM CERTE


ZA (S/N) ?"
3050 RS= INKEYS IF BSO"S" AND R
:

SO"N" THEN 3050


3060 IF RS-"N" THEN RETURN
3070 DSKOS D.T.S.AS(O) .AS(1)
3080 RETURN
4000 GOSUB 5050
4010 PRINT IPR.TABU4) ;"INICIO
NO.'
4020 PRINT *PR. NOME EXT T
IPO DEL"
4030 FOR J-0 TO 8:DSKIS D.17.J+
3.DSI0) .DS(l)
4040 FOR K-l TO 256 STEP 32
4050 GOSUB 6000
4060 IF ASC(VS)-255 THEN K-256:
J=8:G0T0 4120
4065 IF ASC(VS)=0 THEN MIDS (VS
1,1)-" ":DT-1
4070 PRINT #PR.MIDS(V$.1.6) ;TAB
(9) ;".";MIDS(VS,9,3)
4080 TP=VAL<MIDS<VS.11.U)
4100 PRINT #PR,TAB{15) :TPS(TP)
TAB(20)CHRS(42*DT)
4110 DT-0
4120 NEXT K.J:RS=INKEX3:IF PR--
2 THEN 4140
4130 RS-INKEYS:IF RS-"" THEN 41
30

5010 INPUT"NUMERO DO SETOR (1-1


B) " ;S
5020 INPUT"NUMERO DO DRIVE (0-3
) ':D
5030 IF D>3 OR D<0 OR T>34 OR T
<0 OR S>18 OR S<1 THEN 5000
5040 RETURN
5050 PR-0:IF(PEEK(150))Ol THEN
RETURN
5060 PRINT" SAÍDA PARA A IMPRESS
ORA (S/N) 7"
5070 BS-INKEYS:IF RS<>*S" AND R
SO"N" THEN 5070
5080 IF RS="S" THEN PR—
5090 RETURN
6000 VS-MIDS (DS (K/128) ,K+128*(K
>128),32):IF LEN(VS)<32 THEN VS
-VS+MIDS(DS(1+K/128) ,1 ,32-LEN (V
S)
6010 RETURN

COMO USAR 0 PROGRAMA no diretório não garante que ele esteja ção de nomes de arquivos e linhas BA-
disponível no disco —
os blocos usados SIC. O segundo deve ser usado quando
por ele podem ter sido reutilizados por se quer encontrar os valores hexadeci-
Carregue o programa na memória e
escolha o disco no qual você vai traba- um outro arquivo. Se você tem uma im- mais de um determinado byte.
lhar. Enquanto está aprendendo, con- pressora conectada ao Micro, digite PO- As setas movem o cursor para o pon-
KE 150,1 antes de executar o programa: to que se desejar. Para alterar um va-
vém utilizar um disquete que não con-
a opção de imprimir o diretório lhe se- lor, pressione a barra de espaços e for-
tenha dados importantes.
Digitando RUN, você terá quatro op- rá oferecida. neça o novo byte, sempre em hexadeci-
Emseguida, digite a tecla C para car- mal. Note que apenas uma parte do se-
ções: Carregar setor{C). Ver/ editar se-
regar um setor. Tente primeiro o dire- tor é exibida. À medida que se movi-
tor (V), Salvar setor (§), Direlório (D).
Pressione D
para obter uma listagem de- tório, pedindo a trilha 17, setor 3. Digi- menta o cursor para baixo, a tela vai ro-
talhada dos arquivos do disco, incluin- te V para visualizar os dados. Pressio- lando e mostrando o que resta.
do os que foram apagados anteriormen- nando A ou H, você poderá obter, a Ao terminar a edição de um setor,
qualquer momento, os dados no forma- pode-se gravá-lo usando a opção S do
te. Estes estarão marcados com um as-
terisco na coluna DEL. Lembre-se de to ASCII ou hexadecimal. O primeiro menu. Entre as informações solicitadas
é o mais conveniente para a identifica- pelo programa... e pronto!
que a inclusão do nome de um arquivo
IIIIIIIIIIIHI

UMA TÉCNICA MISTERIOSA?


A MAQUINA INTELIGENTE
PROCEDIMENTOS RECURSIVOS

COMO EVITAR ERROS

Se seu programa possui sub-rotinas menta complexa c até mesmo n


sa. A grande dificuldade está na c
que são chamadas repetidamente, preensão da própria listagem dc um pro-
é bem provável que as técnicas de grama desse tipo; até mesmo os fluxo-
gramas mais didáticos parecem obscu-
recursão possam torná-lo mais rápido
ros quando representam processos re-
e eficiente. Veja como utilizá-las. cursivos. Apesar de tudo, o princípio
básico dessa técnica não é tão com-
plicado.
A construção de um programa con- Na matemática, a palavra recursão é
essencialmente, em achar a melhor
siste, utilizada para designar a repetição de
solução para um determinado problema uma determinada operação. Em infor-
através de uma série de comandos. Â mática, porém, ela adquire um signifi-
medida que ganha experiência, o pro- cado especifico. Basicamente, a recur-
gramador aprende que o melhor cami- são é o chamamento sucessivo de uma
nho para isso é dividir o problema prin- sub-rotina ou de um procedimento, após
cipal em partes menores. Tal método, serem estabelecidos alguns parâmetros
no entanto, pode virar um pesadelo. iniciais. Depois de acionada, a sub-ro-
Muitas vezes, ao tentar resolver uma tina — ou procedimento —chama a si
etapa do processo, esbarra em outro mesma, repetidamente, alualizando os
processo e, quando resolve este, surge
ainda outro e assim por diante. Em cer-
to momento, o programador pensa em
desistir, poisimagina estar andando em
um verdadeiro círculo vicioso.
Mas um microcomputador não es-
moreceria tão facilmente: para casos
desse tipo, em que os problemas pare-
cem sair uns dos outros, existem técni-
cas avançadas de programação, as cha-
madas técnicas de recursão.

UMA TÉCNICA MISTERIOSA!

Geralmente, programadores inician


les consideram a recursão uma ferra-
: . ;

IIIIIIIIIIIMH llllllll!
parâmetros iniciais a cada vez, até que Caso pareça complicado, pro-
isso lhe o próximo programa.
sa técnica, execute
uma certa condição, previamente esta- cura uma oulra posição intermediaria, Ele imprime todos os valores inteiros
belecida, seja alcançada. D. O processo se repete até que ele atinja posilivos de N até I
seu destino.
Esse exemplo demonstra o princípio
A MÁQUINA INTELIGENTE básico da recursão, tal como é aplicada
em programação: a solução de um pro-
blema é obtida pela sua subdivisão em 20 PRINT INVEP.SE 1 ;TAB lj" I
Imaginemos a seguinte situação: um
motorista se encontra em uma grande ci- problemas menores ou mais fáceis. NTEIROS POSITIVOS DE N ATE 1"
30 INPUT "DIGITE O INTEIRO A
dade desconhecida e precisa ir do lugar Assim que o programa alcança um QUAL VOCE QUER C
PARTIR DO
A para o lugar B. Embora tenha o ma- novo nível de recursão, torna-se neces-
ONTAR REGREDIN- DO ATE 1 (0 P
pa da cidade, acha muito difícil ir dire- sário armazenar as informações que fo- ARA SAIR) -;N: LET N-INT N:
tamente ao local desejado. Decide en- ram conseguidas no nível anterior, pa- IF N<1 THEN STOP
tão dividir o itinerário em vários tre- ra recuperá-las no passo seguinte. Ao 40 GOSUB 80
chos, estudando um por vez. Escolhe, início de cada nível, um novo conjunlo 50 GOTO 30
assim, um lugar C, em uma posição in- de parâmetros é montado e, por meio 80 IF N-0 THEN RETURN
termediária. Analisa o trajeto entre A de um teste, verifica-se se tal etapa che- 90 PRINT ;N; " "

Ce se dirige para lá. gou ao fim. Sem esse leste, o processo 100 LET N=N-1: GOSUB 80
e
nunca terminaria. 110 RETURN
Chegando em C, o motorista avalia
a possibilidade de ir diretamente até B Para observar o funcionamento des-

10 CLS
20 PRINT " INTEIROS POSITIVOS DE
N A 1"
30 PRINT PRINT INPUT" DIGITE O V
: :

ALOR INTEIRO A PARTIR DO QUAL V


OCE QUER REGREDIR ATE 1(0 OU ti
EGATIVO PARA TERMINAR) ";N:N-IN
T(N) :IF N<1 THEN END
40 GOSUB 80
50 GOTO 30
80 IF N-0 THEN RETURN
90 PRINT N " " ; ,

100 N-N-l .GOSUB 80


10 RETURN
IIIIIIIIIIIHH lllllllll
ITIVOS DE 1 A N-
30 PRINT PBINT
! INPUT "DICI
:

TE UM VALOR INTEIRO PARA A CONT


AGEM REGRESSIVA {1-23 E 0 OU ME
NOS PARA SAIR) ";N:N = INT (N)
: IF N < 1 THEN END
40 gosub ao
SO GOTO 30
BO IF N = 0 THEN RETURN
90 PRINT N; " , "
100 N - N - 1 GOSUB 80
:

110 RETURN

10 CLS
20 PRINT TAB (5) " INTEIROS POSIT
IVOS DE 1 A N*
30 PRINT:PRINT:INPUT"DIGITE O N
ONERO PARA A CONTAGEM REGRES-SI
VA <0 OU MENOS PARA SAIR) " N :N- ;

INT(N):IF N<1 THEN END


40 GOSUB 80
50 GOTO 30
BO IF N=0 THEN RETURN
90 PRINT N; " , "
100 N-N-l :GOSUB 80
110 RETURN

O programa permite que você intro- desta vez, faz o programa retornar da
duza um valor inteiro e, a partir dele, sub-rotina chamada na linha 40. A Unha
faz uma contagem regressiva até 1. 50 executa o programa novamente.
Qualquer valor menor que 1 interrom- Note que quando o programa termi-
pe o programa. No Apple e no TK-2000, na, a variável N contém o valor 0, atri-
valores maiores que 23 não funcionarão, buído na linha 100. Mas a linha 90
pois esses micros podem memorizar ape- nunca imprime esse valor. Para colo-
nas 23 desvios para uma sub-rotina. car o último valor impresso na variá-
A linha 40 chama a sub-rotina recur- vel N, você poderia acrescentar a linha
siva. A primeira linha desta verifica se 105 com o comando N = N + 1 (LET
a tarefa foi completamente executada. N= N+ 1, para o Spectrum). Desse modo,
Esse teste é essencial para o término de N conteria sempre o último valor impresso.
todo o processo.
No primeiro nível da recursão, a va-
riável N possui o valor introduzido por
PROCEDIMENTOS RECURSIVOS Os tipos de BASIC com que traba-
você. Ele é impresso pela linha 90. se- O lhamos não permitem que uma variável
gundo nível é inicializado pela linha 100, Algumas outras linguagens, como o assuma um valor e, ao sair da sub-ro-
que reduz o valor de N em uma unida- PASCAL, incluem o que se chama de tina, retorne ao valor inicial sem a in-
de e chama a sub-rotina novamente, procedimento iprocedure). Trata-se de terferência de um
comando. Assim, so-
com o valor de N já alterado. O progra- um conjunto de linhas definidas em uma mos obrigados a restabelecer seus valo-
ma alterna-se, assim, repetidamenie, en- certa parte do programa — como uma res iniciais antes de iniciar outra sub-
tre as linhas 80 e 100. sub-rotina —que recebe um nome. Di rotina. O programa a seguir demonstra
Quando N alcança o valor 0 (na li- ferentemente das sub-rotinas, um pro- como contornar esse problema.
nha o programa é desviado, como
100), cedimento é chamado através dessi
de costume, para a linha 80, onde en- me. Quando se define um procedimen-
contra o comando RETURN, que o faz to, indicam-se também as variáveis que,
retornar da sub-rotina chamada na linha após seu término, retornarão ao estado
100. A próxima instrução, na linha i 10, inicial. Este é um bom expediente na
também é um comando RETURN, que, construção de processos recursivos.
:

IIIIIIIIIHHM llllllllll
30 PRINT TAB 6; INVERSE 1 "C |
30 PRINT §6. "CALCULO DE FATORIA 90 PRINT AN"! = ";A(1): PRINT
ALCULO DE FATORIAL" : GOTO 40
150 IF N(LE) - THEN A (LE) -
10 INPUT "DIGITE NUMERO PARA 0
FATORIAL (1-33, OU 0 PARA l: GOTO 1B0
SAIR) " ;NU " :NU 160 LE = LE + 1:N(LE) = N (LE -
50 IF NU>33 OR NUOINT (NU) 50 IF NU>33 OR NUOINT (NU) OR N 1) - 1: GOSUB 150
OR NU<0 THEN RUN U<0 THEN 20 170 LE - LE - 1:A(LE) - A (LE +
60 IF NU-0 THEN STOP 60 IF NU-0 THEN END 1) * N (LE)
70 LET LE-lt LET N(LE)=NU: 70 LE-1:N(LE)-NU:AN-NU 160 RETURN
LET AN=NU 80 GOSUB 150
BO G03UB 150 90 PRINT AN" - " A (1) PRINT :GO
! ; :

90 PRINT AN " ;
! = " ;A(1) TO 40
PRINT ! GOTO 40 150 IF N(LE)=0 THEN A(LE)-1:G0T
150 IF N(LE)-0 THEN LET A (LE) O 180 10 DIM N (34) .A(34)
-1: GOTO 180 160 LE-LE+l:N<LE)-N(LE-l)-l:GOS 20 CLS
160 LET LE-LE+1: LET N(LE)=N<L UB 150 30 PRINT TAB (9) "CALCULO DE FAT
E-D-l: GOSUB 150 170 LE-LE-1:A(LE)-A(LE+1)"N(LE) ORIAIS"
170 LET LE-LE-1: LET A(LE)-A(L 180 RETURN 40 PRINT:INPUT" DIGITE O NUMERO
E+1)*N(LE) FATORIAL (1-33 E 0 OU MENOS PA
180 RETURN RA SAIR) " ;NU
50 IF NU>33 OR NUOINT (NU) OR N
10 DIM N(34) ,A(34) U<0 THEN 20
20 HOME 60 IF NU=0 THEN END
30 PRINT TAB 10)"CALCULO DE
( 70 LE"1 :N (LE) =NU: AN'NU
FATORIAIS" 80 GOSUB 150
40 PRINT INPUT "DIGITE O NUM
: 90 PRINT PRINT AN ": = "iA(l):P i
'.

EP.0 FATORIAL (1-22 OU 0 PARASAI RINT:COT0 40


R) ";NU 150 IF N(LE)=0 THEN A(LE)-1:G0T
50 IF NU > 22 OR NU < > INT O 180
(NU) OH NU < 0 THEN 20 160 LE=LE+l:N(LE)-N(LE-l>-l:GOS
60 IF NU = 0 THEN END UB 150
70 LE - 1:N(LE) = NU AN - NU : 170 LE=LE-1:A(LE)«A<LE+1]*N(LE)
80 GOSUB 150 180 RETURN
" : ( ;

IIIIIIIIIIIHH llllillll
Execute o programa e introduza um lhamos apresentam uma limitação quan- GOTO 10
valor qualquer, Lembre-se de que valo- to ao número de vezes que uma sub- 50 DIM ACA): DIM R [2+SQR (A))
res maiores que 22 não funcionarão no rotina pode chamar outra. A cada cha- 60 LET A(A}-100: PRINT
Apple, nem no TK-2000. mada o sistema precisa guardar ha me- INVERSE 1; '"TABELA DESORDENAI)
O programa calcula o fatorial do nú- mória a posição de onde ela foi feita, o A "' :
FOR K-l TO A-l LET A
' : :

mero que você digitou e o imprime na que requer a utilização de um pontei- (K)-INT (RND*99) PRINT A (K) :

leia. O fatorial de um número é o resul- ro na pilha interna. É por esse motivo


" " NEXT K
; :

tado da multiplicação, entre si, de todos 70 LET L-l: LET LV-1 LET R-A
que o Apple e o TK-2000 não podem :

-ii GOSUB 1000


os números inteiros menores que ele e calcular fatoriais maiores que 22. Já o 80 PRINT INVERSE 1 "TABELA ; ' '

ele mesmo. Por exemplo, 5 fatorial limite de 33 níveis para outros micros ORDENADA FOR K-l TO A- :
1
'

alx2x3x4x
:

(escreve-se 5!) é igual deve-se simplesmente à capacidade de PRINT A (K) " "
1: NEXT K J
; :

5, ou seja, 120. O cálculo de fatoriais armazenamento de números. O fatorial 90 IF INKEYSO" " THEN GOTO
geralmente é necessário em aplicações de 34 excede 1.7 x 10 T 38, o máximo 90
estatísiicas. Um
método rápido de exe- que um computador pode manipular. 100 RUN
cutá-lo será sempre muito útil. 1000 IF R>L THEN LET I=L: LET
Inicialmente, o programa dir J=R+1: LET V=A(L): GOTO 1010
na algumas variáveis (linha 10), em nú-
1005 RETURN
1010 LET 1 = 1 + 1: IF AdXV THEN
mero suficiente para gerar o fatorial má-
GOTO 1010
ximo. A
variável N terá como índice o Para manter seu programa dentro 1020 LET J-J-l: IF A(J)>V THEN
nível da recursão (LE) —
N(LEÍ. dos limites do micro e evitar uma "pa- GOTO 1020
A estrutura principal do programa ne", você deve saber como ele se com- 1030 IF J>=I THEN LET T-A(I):
começa na linha
70, onde o nível é ini- porta desde o primeiro nível da recur- LET A(I)=A(J): LET A(J)=T: GOTO
ciaiizado em
Nessa mesma linha, o
I. são. Em gera!, utiliza-se como teste uma 1010
número que você introduziu supo- — informação inicial que culminará em 1040 LET T-A(L): LET A(L)=A(J)l
nhamos que seja 5 — é atribuído a N(l) uma resposta já esperada. Para facili- LET A(J)-T
e a AN (variável que irá acumular a res- tar o trabalho, você pode também con-
1050 LET R(LV)-R: LET LV-LV+1
posta). A
linha 80 chama então o pri- siderar a rotina recursiva como um cer-
LET R=J-1 GOSUB 1000 :

1060 LET Ltf»LV-l: LET R-R (LV)


meiro nível da recursão. primeira li- A to número de sub-rotinas em sequência.
LET L-l GOSUB 1000 :

nha da rotina de recursão (linha 150) ve- Note que um desvio condicional para 10 70 RETURN
rifica se a tarefa já chegou ao fim, ou fora da sub-rotina é desaconselhável,
seja, se N(LE) = 0. Como N(LE) ainda
é 5, o programa passa para a linha 160,
que incrementa o nível (para 2), estabe-
pois o ponteiro que marca a volta do
GOSUB ficaria desorientado.
Quando você estiver escrevendo uma
D
10 CLS
lece como número corrente o 4 e chama sub-rotina recursiva, procure começar
20 PRINT SI 1 "ORDENAÇÃO" .

a sub-rotína recursiva mais uma vez. sempre com um teste de saída. A fun-
30 PRINT: INPUT* QUANTOS NÚMEROS
Quando a linha 160 incrementar o va- ção desse teste é decidir se o problema VOCE QUER ORDENAR (1-10
lor do nível para 6 e decrementar o nú- (caracterizado pelos parâmetros iniciais) 00) ";A
mero corrente para 0, a linha 150 detec- pode ser resolvido diretamente, sem a 40 IF A<1 OH A>1000 THEN 10
tará esse último valor atribuindo 1 a necessidade de subdivisões. 50 DIM AIA) ,R(I+SQR(A))
N(6) e desviando o programa para a li- Antes de começar o programa, pla- 60 A(A)=100:PRINT" TABELA DESOR
nha 80. Encontrando um RETURN a
1 , neje com cuidado o que deseja que a DENADA :":FOR K-0 TO A-1.A(K)-R'
execução passará para a linha 170, que sub-rotina faça. E, quando já estiver es- ND(99) :PRINT A (K) NEXT PRINT ; : :

foi a última a chamar a sub-rotina. Es- crevendo o programa, não se preocupe 70 L-0 :R-A-1 :GOSUB 1000
sa linha reduzirá o valor do nível para com a sequência exata da execução, le- 80 PRINT " TABELA ORDENADA :":F
OR K-0 TO A-1:PRINT A(K);:NEXT
5 e A(5) passará a ter o valor de A(6) vando em conta apenas dois princípios
90 IF INKEYSO" " THEN 90:ELSE
vezes A(5). Com
isso, atribui-se a A(5) básicos: a condição de saída e a subdi- RUN
0 valor de 1 x 1 ou seja, 1, linha 1 80
. A visão em problemas menores. 1000 IF R>L THEN I-L J-R+l :V-A :

devolve, então, o controle para o final Seguindo o método aqui apresenta- L) ELSE RETURN
da linha 150, onde A(4) assume o valor do, você será capaz de aplicar a recur- 1010 I-I + 1:IF AdXV THEN 1010
de A(5) vezes A(4). Desse modo, será são aos seus programas sem maiores di- 1020 J-J-llIF A(J)>V THEN 1020
atribuído ao nível da recursão o valor ficuldades. Aqui está um exemplo de co- 1030 IF J>-I THEN T-A (I A Cl) -A ) :

1 (calculado acima) vezes 2. mo essa técnica pode melhorá-los, tor- (J) :A(J)-T:GOT0 1010
O
laço irá se repetir sempre que o nando-os assim mais rápidos e com- 1040 T-AtL) :A(L)-A(J) :A(J)-T
GOSUB da linha 160 for chamado. pactos. 1050 R(LV)=R:LV-LV+l:R-J-l:GOSU
B 1000
Quando o laço estiver completo, LE se-
1060 LV-LV-1:R=R(LV> :L-I:GOSUB
rá 1 e o último RETURN apontará pa- 1000
ra a linha 80. A próxima instrução (li-
1070 RETURN
nha 90) imprimirá então o resultado:
120.
10 BORDER
CLS
1: INK 7: PAPER 1«
BHS]
20 PRINT TAB 11; INVERSE l[" 10 HOME
ORDENAÇÃO " 20 HTAB (11): INVERSE PRINT :

30 INPUT "QUANTOS NÚMEROS VOC " ORDENANDO NÚMEROS NORMAL


Além do problema corr E QUER ORDENAR (1-1000)
:

que não ocorre com os procedimentos,


30 PRINT INPUT " QUANTOS NUM :

" ;A EROS A SEREM ORDENADOS ? {1-100 .


os tipos de BASIC com os quais traba- 40 IF A<1 OR A>1000 THEN 0)
) ( :

IIIIIIIIIIIHH llllllllll
>9 THEN GOTO 30

*
40 IF A < 1 OH A > 1000 THEN 1 Nosso programa não contém tantos des-
vios condicionais do tipo IF...THEN, 35 DIM T{3)
0
GOTO..., nem tantas variáveis. 36 LET AS-"B-'B": INK 2: FOR M
50 DIM A (A) ,B(1 + SQ.B (A)) "
PRINT -21 TO 21-N STEP -li PRINT AT
60 A (A) - 100: PRINT ! Inicialmente, o programa pede que
NÚMEROS FOBA DE ORDEM :-" FOR M.7:AS;AT M,15;AS:AT M.23:AS:
[ I
você introduza a quantidade de núme- NEXT M INK 0
K - 0 TO A - 1 :A(K) - INT (99 ros randômicos que serão ordenados. A 37 PRINT
:

INK 2;AT 21, 7


* BND (D) + 1: PBINT A(K) linha 50 dimensiona a matriz A(A), que AT 21,1S:"BBB";AT 21.23;"BB
" ;NEXT :PRINT !

70 L - 0:LV - 0:fl - A - 1: GOSU


armazena esses números, e a matriz R, "
;

que irá guardar o valor das variáveis du- 36 FOR M=l TO N: PRINT INK 7
B 1000
NÚMEROS NA ORDEM :- rante o processo recursivo. A
linha 60 PAPEH 0:AT 20-T U 8 ;N*1-M: .

;
)
BO PBINT :

= 0 TO A - 1: PRINT A
FOR K gera e imprime os números randômicos, LET T(l)-T(l)+1: NEXT M
(K) ;" " NEXT : : ainda fora de ordem, e a linha 70 cha- 39 PRINT |1:AT 0,3; "QUALQUER
90 GET IS: IF 1$ < > - " THEN ma a sub-rotina recursiva para ordená- TECLA PARA COMEÇAR"
40 PAUSE 0: PRINT *1]AT 0,3;"
90 los. A linha 80 é responsável pela im-
100 RUN pressão final.
1000 IF R > L THEN I = L:J = B 45 LET TT-2: LET TF-1: LET R-
+ 1:V = A(L) GOTO 1010
O método baseia-se na junção de 3
:
duas listas,ambas previamente subme- 50 GOSUB 90
1005 BETURN A
1010 I - I + 1: IF ACI) < V THE
tidas a uma ordenação. lista princi- 70 PRINT AT 10,5;"NUMEBO DE M
N 1010
pal, composta de números randômicos OVIMENTOS-n";2"N-l
1020 J - J - 1 IF A(J) > V THE :
desordenados, é dividida-em duas outras 60 STOP
N 1020 listas (linhas 1010 e 1020). Observe que, 90 IF N=0 THEN RETURN
1030 IF J > =1 THEN T - A(I) na linha 1000, há um teste de saída pa- 100 LET N-N-l : LET W-R: LET R-
:A(I) - A(J):A(J) - T: GOTO 101 ra determinar o fim da recursão. Cada TT: LET TT-W: GOSUB 90: LET W-
R: LET R-TT: LET TT-W
0 uma das listas sofre então uma ordena- 110 GOSUB 200
1040 T - AU):A(L) - A(J>:A(J) ção parcial (linha 1030), sendo poste-
120 LET W-R: LET B-TF: LET TF"
- T riormente reunidas. A sub-roiina irá GOSUB 90: LET W-E: LET R=TF
1050 R(LV) - R:LV - LV + 1:S - chamar a si mesma (linha 1050) até que
W:
J - 1: GOSUB 1000 ! LET TF-W
a ordenação esteja completa. 130 LET N-N+l RETURN
1060 LV - LV - 1:R - R(LV):L - :

I: GOSUB 1000
Apesar dos métodos de ordenação 200 PRINT AT 20- (T (TF) -1 TF*8 ) ,

1070 RETURN em BASIC não serem tão rápidos quan- INVERSE 1 AT 20-(T(TT)), ;

to os que empregam linguagem de má- TT*8;N+1: LET T (TF) -T {TF) -1


quina, este programa pode ser muito efi- LET T(TT)-T(TT)+1
fftá ciente em tarefas menos extensas. Por 210 SOUND .01,TT*T(TT)"2
exemplo, a ordenação de cem números, 220 RETURN
10 CLS
20 PRINT TAB(IO) "ORDENAÇiO DE N
UMEROS"
30 PRINT:INPUT"QUANTOS NÚMEROS
SERRO ORDENADOS (1-1000) " ;A
no Spectrum, leva mais ou menos 40 se-
gundos; a ordenação tipo bolha nos fa-
ria esperar mais de uma hora.
D
10 CLS:DIM H(3)
20 PRINT 88 "TORBES DE HANOI":P
,

40 IF A<1 OB A>1000 THEN 10


50 D IMA (A) B 1+SQR (A) , (
APLICAÇÕES BINT
60 A(A)-100:PRINT"NÚMEROS FORA 30 PRINT "NUMERO DE ANÉIS (2-9)
DE OBDEM:-" FOa K-0 TO A-1:A(K) 7";
:
A utilidade da recursão vai muito 40 AS-INKEYS:IF A$<"2" OR AS>"9
-INT(RND(-TIME)*99)+1:PBINT A (K além do cálculo de fatoriais e outras " THEN 40
) :NEXT PRINT
; :
funções matemáticas. Ela pode ser apli-
70 L-0:LV-0:R=A-1:GOSUB 1000 50 N-VAL(AS) :H(0)-N:PRINT «64
80 PRINT" NÚMEROS OBDENADOS " FO
:
:
cada na programação de jogos e na 60 FOB K-0 TO 8: FOR J-0 TO 2 PR" :

B K=0 TO A-l: PRINT A<K)::NEXT construção dos mais complexos gráfi- INT ei65+K*32+J*9.CHRS<175)+"
90 IF INKEYSO" " THEN 90 ELSE cos. Essa técnica também aparece em +CHR3(175) :NEXT J,K ;

RUN sistemas de inteligência artificial e no 70 FOR K-0 TO 2 PRINT e453+K*9. :

1000 IF R>L THEN I-L J-B+l V=A : :


controle de robôs, além de ser empre- STRING$(3,175) :NEXT ;

L) :GOTO 1010 80 FOB K-l TO N:POKE 1478-32*K.


gada em processamento de linguagens
1005 RETURN 49+N-K:NEXT
(compiladores e interpretadores).
1010 1-1+1:11 A(I)<V THEN 1010 90 TT-l:TF-0:R-2
Os jogos de estratégia, como o xa- 100 GOSUB 1000
1020 J-J-1:IF A(J)>V THEN 1020
drez ou os wargames, constituem uma 110 PRINT S65, "NUMERO DE MOVIME
1030 IF J>-I THEN T-A (I A(I) -A
outra área interessante de aplicação. O
) :

(J) :A(J)-T:GOTO 1010 NTOS -";INT(2-N-D


1040 T-A(L) :A(L)-A<J) :A{J)=T programa que apresentamos a seguir usa 120 PRINT" QUALQUER TECLA PARA
1050 R(LV)=R:LV-LV+l:R=J-l:GOSU a recursão na simulação de um jogo RECOMEÇAR"
B 1OO0 clássico. As Torres de Hanói. 130 IF INKEYS-" " THEN 130
1060 LV=LV-1:R=R(LV) :L=I: GOSUB 140 RUN
1000 1000 IF N-0 THEN RETURN
10 70 RETURN 1010 N-N-1:W-R:R-TT:TT-W:G0SUB
1000 W-R: R-TT: TT-W
:

10 BORDER 6: PAPER 6: INK 0: 1020 POKE 1478+9*TF-32*H[TF) ,96


PROGRAMA DE ORDENAÇÃO CLS :H(TF)-H{TF)-l:H(TT)-H(TT)+l:PO
20 PBINT TAB 8; INVERSE ii"D KE 1478+9*TT-32"H(TT) ,49+N
Compare a listagem do método de or- TORRES DE HANOIL1" 1030 W-R:R-TF:TF-W:GOSUB 1000:W
denação tipo bolha do artigo da página 30 INPUT "DIGITE 0 NUMERO DE -R :R-TF TF-W :

468 com esta, que utiliza a recursão. ANÉIS (2-9)n":N: IF N<2 OR N 1040 N-N+l RETURN :
) :

IIIIIIIIIUHH lllllllll
mm vareta,
xar um
movendo um por
disco maior sobre
terceira vareta serve
vez e
um
sem
menor.
como apoio tempo-
dei-
A
10 HOME DIM T 3 : (
rário durante o processo.
20 HTAB (14): INVEBSE PBINT
"TORRE DE HANOI " NORMAL :
:
O computador mostrará uma simu-
lação animada, pedindo, inicialmenle,
30 PBINT PRINT INPUT "
: :

NUMERO DE ANÉIS (2-9): ";N o número de discos que sairão da pri-


40 IF íl ( 2 OB N > 9 THEN RUN meira vareta. A transferência destes se-
rá bastante rápida, o que dificulta a vi-
50 FOR J - 1 TO 3: INVERSE V :
sualização dos movimentos. Caso quei-
TAB (16): HTAB (J * 10): PRINT ra observar melhor o processo, faça as
J: NEXT NORMAL
: modificações que se seguem. Para o
60 FOR I - 1 TO N: HTAB (10) Specirum, introduza esta linha:
VTAB {16 - I): PRINT N - I: NEX As Torres de Hanói e seus nove discos.
T I 215 PAUSE o
70 TU) - 15 - N:T(2) - 15:T(3)
- 15
Para o TRS-Color, adicione este co- movimento sucessivamente, até que to-

80 TT » 2:TF - 1:R - 3: GOSUB 1


mando ao final da linha 1020: dos os discos estejam na segunda vare-
ta. No fim, o computador também exi-
10 :SOUND 50+H{TT) «10,12
90 HTAB (14) : VTAB (20) : PRINT be o total de movimentos realizados.
MOVIMENTOS'"; 2 " N - 1 No Apple e no TK-2000, acrescente: Apesar de poderosa, a recursão po-
100 END de ser inconveniente quando há uma
110 IF N = 0 THEN RETURN 175 FOR 1-1 TO 800:NEXT grande limitação de memória, rouban-
120 N - N - 1:W = R:R TT:TT = do mais espaço e mais tempo do que o
Para o MSX, adicione esta linha:
M: GOSUB 110:U = R R =
: TT;TT » necessário. Porém, se não há tal impe-
U 165 BEEP FOR 1-1 TO B0O:NEXT
:
dimento e se em seu programa uma sub-
130 GOSUB 160 O programa é semelhante aos ante- rotina é chamada mais de duas vezes,
140 W » B:R - TF: TF - W: GOSUB
U0:W = R:R - TF TF - W :
riores. A rotina recursiva executa cada procure aperfeiçoá-lo com essa técnica.
150 N - N + 1: RETURN
160 T (TF) = T (TF) + li HTAB [TF
* 10): VTAB (T (TF) ) PRINT " " :

170 HTAB (TT * 10): VTAB (T (TT


)): PRINT N T (TT) - T (TT): - 1
180 RETURN

m
10 KEY OFF:CLS:DIM T(3)
20 PRINT TAB (13) "TORRE DE HANÚI

30 PRINT: PRINT: INPUT" NUMERO DE


ANÉIS (2-9) : " ;N
40 IF N<2 OR N>9 THEN RUN
50 FOR 1-1 TO N LOCATE 10,16-1:
:

PRINT N-I NEXT : I


60 T(1)-15-N:T(2)-15:T(3)-15
70 TT-2:TF-l:R-3:GOSUB 100
80 LO CATE 14, 20: PRINT" MOVIMENT
OS-":2-N-l
90 END
100 IF N-0 THEN RETURN
110 N-N-l :W-R:R-TT:TT-W: GOSUB 1
00:W-R:R-TT:TT-W
120 GOSUB 150
130 W-R:R-TF:TF-W: GOSUB 100:W-R
:R-TF:TF-M
140 N-N+l: RETURN
150 T(TF)-T(TF)+l:LOCATE TF*10,
"
T (TF) PRINT'
!

160 LOCATE TT*10,T(TT) PRINT N: :

T(TT)-T(TT)-1
170 RETURN

Quando o jogo começa, vários discos


de diâmetros diferentes acham-se empi-
lhados sobre a primeira de três varetas
montadas sobre o tabuleiro. O objetivo
épassar todos os discos para a segunda
a

CÓDIGO DE MAQUINA
IIIIIIIIIIIIHI
Nem tudo é desastre no caminho

AVÂLANGHEs de Willie. Para que não se desespere


totalmente, às vezes é recompensado,
conseguindo chegar ao topo da
montanha e recuperar seu lanche.

râmetros da duração e da tonalidade sào com 50. Como Willie não chegará à re-
Nenhum outro aventureiro conheceu
tantos infortúnios quanto Willie. Nos- fornecidos pelo método usual, através compensa mais do que cinquenta vezes,
dos pares de registros DE e HL. o jogo se tornará cada vez mais rápido
so personagem já experimentou até a
morte e a descida para o inferno. Mere-
— e, portanto, mais difícil. Cada vez

ce, agora, uma recompensa: finalmen-


que você enfrentar os mesmos quatro ní-
veis, eles estarão mais rápidos.
te, ele conseguirá alcançar o topo da
montanha e recuperar mais uma parte
do lanche perdido, conquistando, assim, O nível de dificuldade do jogo é car-
CONTAGEM DE PONTOS
alguns pontos no placar. regado da variável correspondente, em
57334, para o acumulador. O conteúdo
do acumulador é em seguida incremen- Por ter alcançado o prémio, Willie re-
tado. Precisamos, porém, impedir que cebe mais 500 pontos. Para isso. chama-
seu valor seja maior do que 3, já que mos a rotina do escore no endereço
A pequena rotina inicial executa a existem só quatro níveis de dificuldade. 58900 e fornecemos os parâmetros nos
melodia da recompensa, coloca Willie Para isso, usamos a instrução res 2, a registros e B.A
no próximo nível, aumenta a velocida- que ajusta com 0 o bit 2 do acumula- Ovalor 2 colocado em A especifica
de do jogo e incrementa o placar. dor. Quando o valor deste chega a 4, o o segundo dígito a partir da esquerda —
bit 2 é colocado em 0. O
conteúdo do o das centenas —
. que será
incrementa-
10 REM org 597B8 acumulador volta, assim, a 0, trazendo do. O valor 5 em B informa à rotina o
20 REM rwd ld de, 523 o jogo para o primeiro nível. número de vezes que esse dígito deve ser
30 BEM ld hl ,606 O resultado dessa operação é arma- aumentado. Incrementando as centenas
40 REM eall 949 zenado no endereço 57334, onde será cinco vezes, acrescentamos 500 pontos
50 BEM ld a, (57344) utilizado ao se ajustar o jogo. ao escore.
60 REM me a Em seguida, o processador volta pa-
70 REM rea 2.
REM ld (57344) ,a
ra a rotina de nova vida —rotulada nlv
80
90 REM ld a. (50732)
— , em 58601, e coloca nosso persona-
100 REM dec à gem na base da encosta.
110 REM ld (58732) ,a O valor do atraso do jogo — que fi-
120 REM ld a, 2
ca no endereço 58732 —
é carregado no
130 REM ld b,5
acumulador, decrementado e armazena-
140 REM ca 11- 59900
150 REM jp 58601 do de volta em 58732. Aceleramos, as-
sim, o jogo, uma vez que o tempo gas- A
pequena rotina apresentada a se-
As três primeiras instruções, encar- to pelo processador no laço de atraso da guir acerta o placar de Willie quando ele
regadas da música, usam a rotina BEE- rotina principal diminui. alcança uma recompensa ou escala uma
PER no endereço 949 da ROM. Os pa- O atraso foi originalmente ajustado outra parte da encosta.
IIIIIIHHHI ODIGO DE MAQUINA lllllllllll
nece em IX. Isso faz com que o aponta-
dor de dados percorra os dígitos arma-
zenados a partir de 57337, até chegar ao
especificado pelo conteúdo de A. A po-
sição é temporariamente armazenada,
colocando-se o conteúdo de IX na pilha.
A rotina sdi é chamada.

A rotina sdi é a que trata dos dígitos.


Ela começa carregando o acumulador
com o dígito apontado por IX. O des-
locamento do 0 é necessário aqui por
causa do formato da instrução.
O digito é então incrementado e com-
parado com 10. Se ele for 10, será pre-
ciso incrementar também no próximo
dígito. Caso contrário —
ou seja, se o
primeiro dígito ainda não foi incremen-
tado até 10 —, a instrução jr iw manda

o processador para o rótulo sno, que


volta a armazenar o dígito incrementa-
do na posição de onde veio.
Se o dígito que você está alterando foi
incrementado até 10, o salto não ocor-
re e o processador continua com a pró
xima instrução. O valor 0 é armazena
do no digito apropriado. Em seguida,
IX é decrementado, passando a apon
tar para o dígito imediatamente à es-
querda. A instrução jr sdi manda então
o processador de volta para sdi, inician-
do novamente a rotina de incremento no
próximo dígito.
Se este foi incrementado até 10, o
processador continua no laço. Mas, ce-
do ou tarde, um dígito que não chegou
a 10 será encontrado. O processador irá
então para sno, armazenando o último
dígito e retornando para o lugar da ro-
tina ser de onde sdi foi chamada.

Quando o processador retorna da ro-


tina, o apontador IX é recuperado da pi-
lha outra vez. Você pode agora perce-
ber por que precisamos armazená-lo ali:
se o dígito foi incrementado até-10, sdi
terá deslocado o apontador IX para o
digito seguinte; caso você tente incre-
mentá-lo mais uma vez, irá alterar o dí-
gito errado.
O laço desta parte da rotina é fecha-
do por uma instrução djnz, que decre-
menta o conteúdo de B até zerá-lo. Co-
mo você deve se lembrar, B carrega o
número de vezes que o digito do escore
tem que ser incrementado quando o pro-
cessador entra na rotina.
O pFocessador continua no laço atua-
lizando o escore o número de vezes ini-
I cialmente especificado por B. Quando
STA 18238 nível de dificuldade. Esse valor é incre-
DEC DLL+1 mentado e a operação AND é feita com
LDB |5 o número 3. Apagamos, assim, os seis
LDA |3 bits mais significativos e evitamos que
JSR SCI
LBRA NLV o nível do jogo ultrapasse o valor 3. O*
SCI EXG A, resultado é armazenado de volta na po-
SCT LDX #18240 sição 18238.
ABX Em seguida, a variável na posição de
PSHS A.X memória $5 EE é decrementada e o jo-
1

JSR SDI go se torna um pouco mais rápido.


PULS A.X Para atualizar o escore, carrega-se 5
DE CA em B e 3 em A; a rotina SCI, fornecida
BNE SCT a seguir, é então chamada. B carrega o
JSR PRSC
RTS
número de vezes que o dígito será incre-
SDI LDA. mentado e A identifica esse dígito. Desta
INCA vez, portanto, acrescentamos 500 pon-
CMPA #10 tos ao escore.
BNE SNO Finalmente, o processador volta pa-
CLR X . ra a rotina NLV, que irá colocar o pró-
LEAX -1,X ximo nível na tela.
BRA SDI
SNO STA .X
RTS CÁLCULO DO PLACAR
SOUND PSHS A
LDA SFF01
ANDA «247 Para serem utilizados na próxima ro-
STA SFF01 tina, os conteúdos dos registradores A
LDA SFF03 e B precisam ser trocados. Isso é feito
ANDA 1247 pela instrução EXG. X é enião carrega-
STA SFF03 do com 18240, o endereço inicial dos va-
LDA SFF23 lores do escore.
ORA te
STA SFF23 ABX adiciona a X o conteúdo de B
ORCC #$50 — que é o número do dígito a ser incre-
PULS A mentado. Em outras palavras, essa ins-
PSHS X trução desloca o apontador em X, que
LDB #252 estava no início dos dados do escore, pa-
SBN STB SFF20 ra a posição do dígito que se pretende
SC LEAX -l.X incrementar. O conteúdo de A (o núme-
BNE SC ro de vezes que o dígito será incremen-
LDX, S tado) e o de X (a posição de memória
CLH SFF20
desse dígito) são colocados na pilha de
SD LEAX -l.X
BNE SD máquina. Em seguida, o processador
LDX S,
salta para a sub-rotina SDI que executa
DECA o incremento. Os conteúdos de A e X
BNE SBN são recuperados da pilha.
ANDCC #SAF A é decrementado e, se não tiver che-
PULS X gado a 0. a instrução BNE SCT manda
RTS o processador continuar no laço. A ro-
B chega a O, a rotina de impressão em CLICK LDX #98 tina de incremento do digito é executa-
58939 é chamada, imprimindo o novo LDA (4
da A vezes, incrementando o dígito
escore na tela. JSR SOUND
RTS apropriado a cada volta do laço.
Emseguida, o processador retorna.
DLL EQU S51ED Com A reduzido a 0 e o escore acer-
NLV EQU S4BF7 tado, o processador sai do laço e vai pa-
PRSC EQU 34C77 ra a rotina PRSC, que imprime o resul-
tado na tela. Depois disso, o processa-
As três primeiras instruções, encar- dor encontra RTS e retorna para a roti-
Esta pequena rotina executa a melo- regadas da música, usam a rotina na principal.
dia da recompensa, coloca Willíe no SOUND, chamada pela linha 40. Os pa-
próximo nível, acelera o jogo e acrescen- râmetros da duração e da tonalidade são
ta pontos no placar. fornecidos pelo método usual, através ALTERANDO OS DÍGITOS
10 ORO 20721 de números carregados em A e X.
20 RWD LDA 1255 A é carregado com o conteúdo da po-
30 LDX 1150 sição de memória apontada por X. Es-
nível de dificuldade corresponde ao número comido no di-
40 JSR SOUND te
50 LDA 18238 gito apropriado do escore.
60 IKCA A é carregado com o conteúdo de O número é incrementado e o resul-
70 ANDA |3 18238, a posição de armazenamento do tado é comparado com 10. Se ainda não. I
2a a

CÓDIGO DÍMÁQUh Illlllllll


Illlllllll

BNE coloca ultrapassar 3. Para evitar que isso 130 org 55532
for igual a 10, a instrução
140 po ld hl ,-5219
o processador no róiulo SNO, que vol- ocorra, utilizamos a instrução res 2,a,
150 ld d,0
ta a armazenar o dígito que foi incre- que ajusta com 0 o bit 2 do acumula-
160 ld e.a
mentado no endereço apontado por X. dor. Assim, quando o valor incremen- add hl.de
170
O processador retorna. tado chega a 4, o bit 2 é ajustado com 180 pd push hl
Se o resultado for igual a 10, o dígi- 0. O conteúdo do acumulador volta, en- 190 ali
to apontado por X é ajustado com 0
— tão, a 0, colocando o jogo novamente 200 pop hl
ou seja, é limpo. X é então decremen- no primeiro nível. 210 djnz pd
tado, fazendo o apontador se mover pa- O resultado dessa operação é arma- 220 call 54023
ra o digito imediatamente à esquerda. zenado em -5228, onde o novo valor 230 ret
no controle do jogo. 240 ad ld a, (hl)
BRA SDI manda o processador de será utilizado
250 inc a
novo para o laço de incremento de dígi- 260 cp 10
to. Depois que o próximo dígito é incre- 270 jr nz.an
mentado, verifica-se se ele ultrapassou 280 ld a,0
o valor 9. Encontrando um dígito que 290 ld (hl) ,3
não exceda o valor máximo, o proces- O atraso do jogo em 54133 é coloca- 300 dec hl
sador o armazena na posição apontada 310 jr sd
do no acumulador, decrementado e ar- 320 an ld (hl) ,a
por X. Observe que, ao voltar da roti- mazenado de volta em 54133. Isso ace- 330 ret
na de escore, o processador recupera o lera o jogo, já que o tempo gasto pelo 340 end
valor de X da pilha. processador no laço de atraso da rotina
A rotina SOUND trabalha exatamen- principal diminui.
A posição de memória - 5219 corres-
te do mesmo modo que a rotina encar- Como você poderá verificar na últi- ponde ao endereço inicial das variáveis
regada de executar Greenleaves. Porém, que contêm os dígitos do escore, carre-
ma rotina da série Avalanche, esse atra-
toca apenas uma vez e usa a pilha como com gadas com 0 pela rotina de inicialização
so foi originalmente ajustado 50.
fonte de dados. Assim, sempre que aumenta o número dada em artigo anterior. O registro D é
Depois de SOUND, há uma outra pe- carregado com 0 e o registro E, com o
de pontos no placar, o jogo se torna
quena rotina chamada CLICK. Ela exe- conteúdo do acumulador. Lembre-se de
mais rápido e difícil. Cada vez que vo-
cuta a trilha sonora da caminhada de que o acumulador carrega o número do
cê enfrentar os mesmos quatro níveis,
carregando os parâmetros em X digito quando o processador entra nes-
Willie, a velocidade será maior.
e A e chamandoa rotina SOUND. ta rotina.
Para testar a rotina, use as teclas M O conteúdo do par DE é somado em
e N e este programa em BASIC. CONTAGEM DOS PONTOS HL. A operação faz o apontador de dí-
onde seus va-
gitos percorrer as variáveis
10 POKE 3000, 37 lores estão armazenados, a partir de
20 EXEC 19426 Por alcançado o premio, Willie re-
ter
- 5219, até o digito indicado pelo con-
30 EXEC 19902 cebe mais 500 pontos. Para isso, chama-
teúdo de A. O conteúdo de HL é colo-
40 GOTO 30 mos a rotina de contagem e fornecemos
cado na pilha, onde ficará temporaria-
os parâmetros nos registros A e B. O va-
mente armazenado, e sd é chamada.
lor 2 colocado em A especifica o segun-
do dígito a parur da esquerda —o das
centenas —
, que será
incrementado. O ALTERANDO 0S DÍGITOS
Esta pequena rotina coloca Willie no valor 5 em B informa à rotina o núme-
nível seguinte, aumenta a velocidade do ro de vezes que esse dígito deve ser au- A rotina sd, que trata dos dígitos, co-
mentado. Incrementando as centenas meça carregando o acumulador com o
placar. cinco vezes, acrescentamos 500 pontos
ao escore. Em seguida, o processador
10 org 55506 vai para a rotina principal do jogo, em
20 ld a, (-5228) 53888, e coloca Willie na base da
30 encosta.
40 res 2.
50 ld (-5228) ,a
60 ld a, (54133)
70 dec a
80 ld (54133),
90 ld a,
A pequena rotina que se segue acer-
ld b,5 ta os pontos de Willie quando ele alcan-
100
110 call 55532 ça uma recompensa ou escala uma par-
120 jp 538B8 te da encosta.

o nível de dificuldade

O de
dificuldade
nivel do jogo é
transferido da variável equivalente em
- 5228 para o acumulador. A seguir, o
conteúdo desse é incrementado. Como
existem apenas quatro níveis qp-
jogo, o valor dessa variável não deve
II lllllllllllll» 47 CODKODIMJiaUm 47 |||||||||
valor do digito apontado por HL. Este gito foi incrementado até 10, a rotina sd
é ineremeniado e comparado com 10. Se terá deslocado o apontador. Caso não
for igual alO — ou seja, se ultrapassou tivéssemos armazenado o valor inicial
o maior valor de um dígito decimal, 9 na pilha, desta vez estaríamos alteran-
— será preciso incrementar o próximo
, do o dígito errado.
digito. Se o dígito analisado ainda não O laço é fechado por uma instrução
ultrapassou 9, a instrução jr nz manda djnz, que decrementa o conteúdo de B
o processador para o róiulo sn, que ar- até zerar esse registro. Como você deve
mazena seu valor na variável corres- se lembrar, B carrega o número de ve-
pondente. zes que o dígito do escore tem que ser
Quando o dígito que está sendo alte- incrementado quando o processador en-
rado chega a 10, o salto não ocorre e o tra nesta rotina.
processador continua com a próxima O processador continua no laço pd
instrução. O valor 0 é armazenado nes- atualizando o escore o número de vezes
se digito e o par HL é decrementado, inicialmente especificado por B. Quan-
passando a apontar para o dígito ime- do B chega a 0, a rotina de impressão
diatamente á esquerda. A instrução jr dos dígitos em 54023 é chamada, impri-
sd manda o processador de volta para mindo o novo escore na tela.
sd e a rotina de incremento recomeça pa- Em seguida, o processador retorna.
ra o próximo dígito.
Se este também já ultrapassou 9, o
processador continua no laço. Mas, ce-
do ou tarde, um dígito que não chegou
a 10 será encontrado. O processador irá
então para sn, armazenando o último dí-
gito e retornando para o lugar da roti-
na pd de onde sd foi chamada.

Quando o processador retorna da ro


o apontador HL é recuperado da
pilha. Você pode agora perceber por que
precisamos armazená*lo ali: se algum dí-
IIIIIIIIIIIHBB « PROGRAMAÇÃODÍJOISOS 45 f B1HHIIIIIII
INPUT apresenta, finalmente, um jogo

de computador projetado para vários


participantes. Reúna a família e os

seus amigos e role os dados nesta


brincadeira de sorte e de perícia.

Um CURTO uma combinação de 60 DATA 1,0.1,1,0,1.1,0.1


Até aqui, a maioria dos jogos de IN- é
85 LOCATE7,10:PBINT"Quantoi jog
PUT — sejam os de aventura, estraté- quatro dados em sequência (1,2,3,4 ou
adoreis (1-6)?";
gia ou videogame —
basearam-se no 2,3,4,5) e um LONGO, uma combina-
90 AS-INKEYS:IFAS<"1" OR A3>"6"
confronto computador-usuário. A ção de cinco dados também em sequên- THEN90
maior dificuldade nesse tipo de disputa cia (1,2,3,4,5 ou 2,3,4,5,6). Um FULL 100 PRINTAS:NP-VAL(AS) :CLS
estava, como vimos, na criação de re- HOUSE compõe-se de uma trinca e um 110 F0RN-lT0NP:PRINT"no»e do jo
gras e situações que simulassem desafio par (5,5,5,1,1, por exemplo), enquanto gador" ;N; INPUTNS (N) NEXT
: :

ou, no caso dos jogos de estratégia, na um MISTO, como seu próprio nome 120 C!.S:CLS-STBINGS(35." ")
transformação do computador em um diz, aceita qualquer tipo de combinação 130 DIMO(NP,12) ,P<NP. 12) ,3(NP,1
adversário inteligente e de bom nível. O de dados. O YATCH, finalmente, é o 0)
jogo que apresentamos neste artigo é di- grupo formado por cinco dados iguais.
ferente: o confronto pode se dar entre O resultado obtido numa jogada de-
até seis jogadores. O computador não ve ser colocado num dos grupos.
participa como adversário — cabe-lhe Lembre-se de que só se pode indicar ca-
da grupo uma vez. Para selecionar o DIM AS (12)
apenas conferir as regras e manter o pla-
car. A máquina evita, assim, que alguém grupo e executar a escolha usam-se as
trapaceie, e, o que é melhor, libera os setas e a barra de espaço.
30 FOR T - 1 TO 6: READ AS DCS :

jogadores da contagem do placar, pos- Muitas vezes não é possível obter - AS: NEXT
(T)
sibilitando que se concentrem só nas uma combinação de dados que satisfa- 40 FOR T = 1 TO 12
questões estratégicas. ça um dos grupos vazios (os grupos 50 READ AS AS tT) - AS + LEFTS
!

Este jogo não passa de uma versão cheios não podem ser utilizados nova- (" ",12 - LEN (AS)
computadorizada do famoso Yatch, ou mente). Neste caso, a única opção é sa- ) NEXT
!

pôquer com dados. Combinando sorte crificar um dos grupos vazios —


de pre- 60 VTAB (10) PRI NT TAU
: 10); (

e estratégia, é muito absorvente, mas ferência, um dos que rendem menos 'QUANTOS JOGADORES (1-6)?";
suas regras são simples, parecidas com pontos — eliminando-o. A melhor es-
,
70 GET AS: IF AS < "1" OH AS >
"6" THEN 70
as do pôquer. Cada participante tem di- tratégia, portanto, é preencher primei-
reito a jogar cinco dados de uma só vez ro os grupos que rendem mais pontos — 80 NP - VAL (AS): PR1NT NP: DI
— M NS (NP) SC (NP) O (NP 12) P (NP
. , .

(no nosso caso, o computador simula os que são também os mais difíceis evi-
2) ,S(NP,10)
dados rolando). Se o jogador não esti- tando-se que venham a ser sacrificados. 90 HOME FOR N
: 1 TO NP PRI :

ver satisfeito com o resultado obtido, O programa está dividido em três NT TABI l):"NOME DO JOGADOR ";
poderá lançar os dados mais duas vezes partes principais: rotina de inicialização, N;" - " :

(num total de três jogadas). Na segun- laço-mestre e rotinas chamadas pelo 100 INPUT NS(N) NEXT :

da e terceira jogadas, é permitido esco- laço-mestre. 1170 DATA <1>,<2>,<3>


lher quais dentre os cinco dados serão
1180 DATA <4>.<5>.<6>
1190 DATA UNS. DOIS. TRES.QUAT
lançados novamente, para que se con-
ROS, CINCOS. SEIS, 4 IGUAIS
siga a melhor "mão" Depois
possível.
1200 DATA CASA CHEIA, CUSTO ,

do terceiro lançamento, o jogador deve ONGO, MISTO, YATCH


indicar o grupo do placar no qual sua Esta parte do programa configura os
combinação de dados vai ficar (cada UDG (gráficos definidos pelo usuário)
grupo poderá ser usado apenas uma que representarão os dados na tela (me-
vez). A
partida continua, então, com o nos nos micros das linhas Apple e
próximo jogador. TK-2000), inicializa as variáveis e arma- 20 LET QS = " "! I-ET
Os grupos de placar são: zena os nomes dos jogadores. ZS-" " DIM C(13) :

FOR N-l TO 13: READ C(N)


GRUPO PONTOS NEXT N: DIM T(5): DIM R(5):
DIM D(5)
UM
DOIS
soma dos
soma dos
1 obtidos
2 obtidos
TM 30 FOR N-USR "A" TO USB "G"+7
10 CLS:X$ = CHRSU3)+CHRS(10) ;DIM !READ A: POKE N A NEXT N , :

DS(6.4) 40 DATA 2,3,4.5.6,7,11,14.17.


20 F0BK-1T06:F0RJ-1T03:F0BL-1T0 20.23.25,27
3:READA:D$(K,J)-DS(K. J)+CHR$U> 50 DATA 0,0,0.24.24,0,0.0
SEIS soma dos 6 obtidos
+CHRS(219-145*A) NEXT NEXT: NEXT
: : 60 DATA 0.6.6,0,0,96,96,0
FULL HOUSE soma dos cinco dados 30 DATA 0.0.0,0,1,0,0.0,0 70 DATA 3.3.0.24,24,0,192,192
CURTO 15 40 DATA 1,0,0,0.0,0,0.0,1 DATA 0.102.102.0.0.102.102
LONGO 30 50 DATA 1,0.0.0,1.0.0,0.1 i D
MISTO soma dos cinco dados 60 DATA 1,0.1,0,0,0,1,0,1
YATCH 50 70 DATA 1,0,1,0,1.0,1,0.1
:

Illllllllllim í« PROGUMAÇÃODUOGOS 45 1H|||||||||||

AS REGRAS DO J OGO ROLANDO OS DADOS


A ESTRATÉGIA O PLACAR
GRUPOS DE PLACAR
UDG DOS DADOS
O LAÇO-MESTRE _ RESULTADO FINAL

100 DATA 102.102,0,102,102,0, 170 CLS:GOSUB350:CLS:NEXTN,I


102,102 180 CLS:GOSUB990:NEXTR:END
110 DATA O, 24,48.96. 255, 96.48. 980 L0CATE19-LEN{NS<N))/Z,Y:PRI
24 NTNS(N) RETURN
: 170 FOR R=l TO 5: FOR 1-1 TO
120 PRINT AT 10, 13; "YATCH" 12: FOR N=l TO NP
INK 1: PRINT AT 12,7; "QUANTOS 180 BORDER 4: INK 0: PAPER 4:
JOGADORES"' 'TAB 11;"(1 A 6)" CLS PRINT AT 3.13;N3(N)
:

130 INPUT NP: LET NP-INT (NP): 190 FOR M-5 TO 27: PRINT
IF NP<1 OR NP>6 TBEN GOTO 130 140 FOR R = 1 TO 5: FOR I - 1 PAPER 0;AT 5.M;" " AT 19, M; - "
;

140 DIM 01HP.12): DIM P(NP,12) TO 12 FOR N


: 1 TO NP NEXT M
:

: DIMS(NP,5): DIMNSÍNP.6): 150 HOME :Y - 2: GOSUB 980: GO 200 FOR M-6 TO 18: PRINT
DIM Q (NP) SUB 190 PAPER 0;AT M,5;" * AT M.27;" "
;
150 FOR N-l TO NP: CLS PRINT : 170 HOME GOSUB 350: HOME
: N : NEXT M
:

AT 8,5;"JOGADOR " (N) " " "TAB ;


; . '
EXT N,I 210 GOSUB 240: PAUSE 0: GOSUB
5; "QUAL E SEU NOME ?" INPUT : 180 HOME GOSUB 990: NEXT R:
: 430
«5: IF LEN W3>6 THEN LET WS- END 230 NEXT N: NEXT li GOSUB 1290
WS( TO 6) 980 HTAB (19 - LEN NS ( ( N) ) / : NEXT R: STOP
160 LET NS(N)=2S( TO 3- {LEN W$ VTAB (Y)
1/2) +US: NEXT N
2):
RN
PRINT NS (N)
: : RETU
U
140 FOR R-l TO 5:FOR 1-1 TO 12:
FOR N-l TO NP
10 CLS:X$-CHRS<13) DIM D$(6.4) :

20 FOR K-l TO 6: FOR J-l TO 3:FO


R L-l TO 3 READ A:D$ tK J) -DS (K,
: ,

J)+CHR$(128+65*A) NEXT :

30 DS (K J) -DS (K J) +CHRS (133) :NE


. ,

XT
40 DS(K,J)-STRINGS(3.131)+CHRS<
135) NEXT :

50 DATA 0.0,0,0.1,0,0,0,0,1,0,0
.0,0,0,0,0,1
60 DATA 1,0,0,0,1,0,0,0,1,1,0,1
,0,0,0.1,0,1
70 DATA 1.0,1,0,1.0.1.0.1,1,0.1
,1,0,1,1,0,1
80 PRINT: PRINT"QUANTOS JOGADO RE
S (1-6) ?;
90 AS-INKEYS:IF AS<"1" OR A$>"6
" THEN 90

100 PRINT A$:NP-VAL(A$) CLS :

110 FOR N-l TO NP:PRINT §65. "JO


GADOR" N PRINT" QUAL E SEU NOME
; :

7" INPUT NS (N)


:

120 CLS:NE5CT
130 DIM 0(NP, 12) ,P(NP,12) ,S(NP,
10)

0 LAÇO-MESTRE

A estrutura do jogo é bem simples,


e consiste nestas poucas linhas:

140 F0RR-1T0S:F0RI-1T012:F0RN-1
TONP
150 CLS:Y-2:GOSUB9B0:GOSUB190
45 PROGRAMAÇÃO Dt JOGO

200 LOCATE0.T*2+3:PRINT"JOGO";T
~10: GOTO 360
330 IF A$<>"S" THEN GOTO 310
210 GOSUB970:IFT-3 TBEN 310 340 SOUND .1.30
220 C-l: FOR D-l TO 5 350 LET R(C)-T(D): LET C-C+l ;

230 LOCATE9+D*4,9:PRINT"7" 360 PRINT AT 7+T*3 16+D"2 " "l


,

240 AS-INKEYS I FASO "d "ANDAS O™ !


NEXT D
n"ANDA$O"B-ANDAS<>*S"TBEN240 370 IF C-6 THEN GOSUB 420:
250 IF AS-"N"ORAS-"n"THENPLAY"0 LET T-4: GOTO 400
3L64CB" :G0TO270 380 FOR D-C TO 5: LET R(D)"INT
260 PLAY"06L64CB":TR<C)«T(D) :C= (RND*6)+1: NEXT D: GOSUB 420
C+l 390 LET T-T+l
270 LOCATE0.9:PRINTCL3:NEXTD 400 IF T<>4 THEN GOTO 250
280 IFC-6THENGOSUB340: RETURN 410 RETURN
290 FORD-C TO 5 :TB (D) -INT (RND (- 420 FOR D-l TO 5: LET T (D) -R (D
TIME)*6)+1:NEXTD ) NEXT D RETURN
: :

300 GOSUB340 1180 FOR D-l TO 5: PRINT PAPER


310 T-T+l 2; I NK 6: BBIGHT 1;AT 6+T*3.16
320 IFTO4THEN200 +D»2;CHRS (143+TÍD)): PAUSE 2:
330 FORE«lTO700:NEXT:RETURN SOUND .01.RNDM0: NEXT D: RETUR
340 FORD-1T05 T (D) -TR (D) :NEXTD: ;
N
RETURN
70 FORD-1T05:FORG-1T04:LOCATED
4+8,G+4:PRINTD$(T(D) ,G) :NEXTG
,D BETURN:
i a
140 FOR R-l TO 5:F0R 1-1 TO 12:
FOR N-l TO NP
150 CLS:W-6:Y-2:GOSUB 980:GOSUB
190 T = 1: FOR D - 1 TO 5:T(D) 190
INT ( RND (1) * 6) + 1 NEXT:
160 SOUND 50.3:FOB E-l TO 800:N
EXT
200 VTAB (T * 2 + 3) : PRINT "J 170 CLS:GOSUB 350:CL3:NEXT N.I
OGO ";Ti 180 CLS:GOSUB 990:NEXT R: END
210 GOSUB 970: IF T - 3 THEN 3 190 T-l FOR D-l TO 5:T(D)-RND(6
i

150 CLS:W-6:Y-2:GOSUB 980:GOSUB. 10


220 C - 1: FOR D - 1 TO 200 PRINT ê64*T+64, "LANCE:" ;Ti
190
230 HTAB (9 + D VTAB (9) 210 GOSUB 970 IF T-3 THEN 310
160 SOUND 50.3:FOR E-l TO 800:N
:

bcr : PRINT ?"; 220 C-l: FOR D-l TO 5


170 CLS:GOSUB 350:CLS:NEXT N.I 240 GET AS: IF AS < > "S" AND 230 PRINT e288,TAB<9+D*4) "7"
180 CLS:GOSUB 990:NEXT R:END AS < > "N" THEN 240 240 AS-INKEYS:IF A$<>"N" AND AS
9870 PRINT ey*32+W-((LEN(NS(N)) 250 IF AS = "N" THEN 270 <>"S" THEN 240
260 TR(C) T{D) :C - C + 1 250 IF AS-"N" THEN SOUND 10.1:G
)/2) ,NS(N) RETURN
:

270 HTAB (9 + D • 4): VTAB (9) OTO 270


O laço-mestre compõe-se de três la- : PBINT * " ! NEXT D 260 SOUND 100,1:TR(C)-T(D) :C-C+
ços encadeados (um dentro do outro) 280 IF C - 6 THEN GOSUB 340: 1
RETURN 270 NEXT D: PRINT *28B
que controlam o jogo. R é o número da IN 280 IF C-6 GOSUB 340: RETURN
290 FOB D - C TO 5:TB(D) -
partida; o número de jogadas dentro
I,
290 FOR D-C TO 5 TR (D) -RND (6)
T ( BND (1) * -6) + 1 NEXT : :
:

de uma número de joga-


partida 6 N, o EXT D
300 GOSUB 340
dores. As rotinas chamadas por esse la- 310 T - T + 1 300 GOSUB 340
ço fazem os dados rolar e apresentam 320 IF T < > 4 THEN 200 310 T-T+l
Todos os mi-
os placares parcial e final. 330 FOR E c 1 TO 700: NEXT : R 320 IF T<>4 THEN 200
cros, menos o Spectrum, chamam uma ETURN 330 RETURN
pequena rotina para centralizar os no- 340 FOR D = 1 TO 5:T[D) - TR (D 340 FOR D-l TO 5 :T tD) -TR (D) :NEX
mes na tela. As' rotinas chamadas pelo ) NEXT
: : RETURN T D: BETURN
também são subdivididas, 970 FOR D = 1 TO 5: HTAB (D * 970 FOR D-l TO 5iFOR G-l TO 4:P
laço-mestre
4 + 8) VTAB (6): PRINT DCS(T(D RINT êl36+G*32+DM.DS£T<D) .G) ; :

como veremos a seguir. :

NEXT G, D: RETURN
) ) ; : NEXT : RETURN
9870 PRINT «Y*32+H-((LEN(NS(N)>
)/2) ,NS(N) BETURN
:
OS DADOS VA0 ROLAR
No primeiro lançamento, utilizam-se
A
primeira dessas rotinas rola os da-
240 LET T-l: FOR D-l TO 5: LET os cinco dados. O resultado é exibido na
dos, exibe-os na tela e chama duas ou- T(D)-INT (RND*6)+1: NEXT D tela por meio da rotina da linha 970
tras rotinas. 250 PRINT AT 6+T*3 JOGO ";T ,
;
(1180, no Spectrum). O jogador escolhe
Acrescente as linhas que se seguem à 260 GOSUB 1180 então quais são os dados "bons" e quais
parte do programa já digitada: 270 IF T-3 THEN GOTO 390 são os "ruins", indicando os primeiros
280 LET C-l FOR D-l TO 5 :
com um S e os segundos com um N. Ele
290 PRINT AT 7+T*3,16+D*2;"?"
terá mais duas chances de lançar os da-
300 FOR J-l TO 50: NEXT J
310 LET AS-INKEYS: IF AS-"" dos ruins, devendo teclar S(im) para os
THEN GOTO 310 dados que quer "segurar" e N(ão) para
190 T=l:FORD-lT05:T(D)=INTlRND(
320 IF AS-"N" THEN SOUND .1. os demais.
I -TIME)*6)+1:NEXT
IIIIIIIHIMMI " PKOGRAMAÇAODUOGOS « jH|||||||||||
Os números dos cinco dados iniciais 450 RETURN 880 O(N,10)-30:RETURN
são armazenados na matriz T( ). Depois 460 FORD-lT012:IFP(N,D)-l THENL 890 IFBO1THEN900ELSE0 (N 12) -50 ,

do primeiro lançamento, os dados que OCATE16 1+D PRINT"X"


, : PLAY"GFG" FORE-1TO700 :NEXT RET
: : r

"seguramos" são guardados tempora- 470 IFO(N,D)OOTHENLOCATE15,1+D URN


riamente na matriz R( ), que é preenchi- :PRINT0(N.D) 900 PLAY"O3GGG":L0CATE22.5:PRIN
480 NEXTD:C-0:FORD-lTO12:C-C+O( T"ilegal_ ELIMINA?";
da com outros valores randômicos até
N.D) :NEXT:LOCATE15,15:PRINTC; :R 910 A$-INKEYS:IFASO"S"ANDAS<>"
ficar com cinco números. Esses valores
ETURN a"ANDA3O"N-ANDA3O"n"THEN910
são levados de volta para a matriz T( 490 LOCATE2 20 PRINT" TEMPO"R , : : : 920 LOCATE22.5:PRINTSTRINGS(17,
por meio da rotina da linha 340 (420, no OCATE1 21 PRINT" J0GADA"I
, :
32) i

Spectrum). Os resultados são exibidos 500 LOCATE0,17:PRINT"RESULTADO 930 IFAS-"N"0RA5-"n"THENP(N.A+6


na tela mais uma vez e o processo se re- )-0:GOT0530
pete no próximo lançamento. 510 F0RD-1T05:F0RG-1T04:L0CATE9 940 P (N A+6 - 1 RETURN,
)
:

+4"D,15+G:PRINTDS(T(D) ,G) NEXT ; :


950 PLAY"03CFD-:LOCATE22,5:PRIN
G, D T-GRUPO OCUPADO" FORE»lTO700 :N i :

520 LOCATE16,20:PRINT"ESCOLHA 0 EXT LOCATE22 5 PRINTSTRINGS (14


: , :

GRUPO" 32) :GOTO530 ;

530 A-l 960 RETURN


A maior parte da rotina dedica-se aos 540 LOCATE13,1+A:PRINTCHR$(60) 1140 C-0:FORD-lTO5:IFT(D)-F THE
cálculos do placar e à verificação de en- 550 BS-INKEYS:IFBS<>" "ANDBSOC NC-C+1
tradas. HRS 30) ANDBSOCHRS (31 THEN550
( )
1150 NEXTD RETURN :

560 IFBS-" "THEN620 1160 C-0:FORD-1TOB:C-C+D(D) NEX :

570 LOCATE13.1+ArPRINT" TD RETURN!

560 IFB3-CHR$(30)ANDA>1THENA-A-
1
350 CLS 590 IFBS=CHR$C31)ANDA<12THENA-A
360 Y-0:GOSUB980:PRINTSTRINGS<3 +1
0,205) ;" PLACAR" 600 PLAY"06A" 350 HOME
370 PRINT-UNS "XS"DOIS
:
610 GOTO540 360 Y - 1: GOSUB 980: INVERSE
UATROS
:"XS"TRES :"Xg-Q 620 L0CATE13,1+A:PRINT" ";:IFP( PRINT "»»»>»»»»»»»» :

i-XS-CINCOS "X : N,A)OQTHEN950 »> PLACAR <«"


S"SEIS i" 630 IFA>6THEN700 370 NORMAL PRINT FOR T = 1 ! :
380 PRINT"4 IGUAIS. ... :"XS"CASA 640 C-0 TC 12: PRINT AS (T) NEXT :

CHEIA. :"XS"CURTO
. :"X3"L 650 F0RD-1T05:IFT[D)-A THENC-C+ 380 PRINT INVERSE PRINT *? r :

ONGO :"XS"MISTO :"X 1 OTAL " NORMAL :

S-YATCH -X3
; 660 NEXTD 400 GOSUB 460
390 PRINT" TOTAL :" ; 670 O(N.A) -C*A 410 GOSUB 490: GOSUB 460
400 GOSUB4Ó0 680 P(N,A)*1 420 HTAB (22): VTAB (8): PRINT
410 G03UB490:C03UB460 690 RETURN "<QUALQUER TECLA>"
420 LOCATE22.5:PRINT"<au«l(iu«r 700 IFA-11THENFORD-1T05:0(N,11) 440 GET AS: IF AS "" THEN 44
tecla>" -0(N,11)+T<D) :NEXT:P(N,11)-1 :RE 0
440 A$«INKEY$:IFAS-""THEN440 TUBH 450 RETURN
710 FORD=1T05:D[D)-0:NEXT:B-0:F 460 FOR D - 1 TO 12: IF P(N,D)
0RE=1T06 C-0 FORD-1T05 IFT (D) -E
: : : - 1 THEN HTAB (15): VTAB (3 +
THENC-C+1 D) PRINT "X"
:

720 NEXTD IFCO0THENB-B+1 : 470 IF O(N.D) < > 0 THEN HTA


730 NEXTE B (15): VTAB (3 + D) PRINT 0 (N :

740 G-1:FORF-1T06:GOSUB1140:IFC .D) ;

O0THEND (G) *F G=G+1 :

750 NEXTF
760 P (N, A) -1 :A»A-6:ONA GOT0770,
810,830.870,960.890
770 IFB>2THEN900:IFB=1GOSUB1160
:0(N,7)=C*4:RETURN
780 F-l
790 G0SUB1140:F-F+l:IFCO4ANDF<
>7THEN790ELSEIFC<4THEN900
800 0tN,7)-4*{F-l) RETURN :

810 IFBO2THEN900ELSEF-D (1 :GOS )

UB1140 IFC-3THEN820ELSEF-D(2) :G
:

OSUB1140 IFCO3THEN900
!

820 FORD-1T05:0(N,8)-0(N,8)+T(D
):NEXT RETURN
:

830 IFBO4THEN850ELSEG0SUB1160:
IFCO18ANDCO10ANDCO14 0R(C-14
ANDD(4)-6)THEN900
840 0(N,9)-15:RETURN
850 IFBO5THEN900ELSEG0SUB1160:
IFCO20ANDCO15ANDCO16ANDCO19
THEN900
860 GOTÕ840
870 IFBO5THEN900ELSEG0SUB1160:
IFCO20ANDCO15THEN900
45 PROGRAMAÇÃO DE JOGO.

480 NEXT D:C - 0: FOR D - 1 TO "440 PLOT 4,4:DRAW 0,167: DRAW"


12:C - C + O(N.D) NEXT :
124,0: DRAW 0,-167: DRAW -124,
485 HTAB (15): VTAB (17): PRIN 0
T C: RETURN 450 PRINT INK 5;AT l 5;H$(N); t
**"
490 VTAB (22): PRINT TAB ( 3): INK 4;AT 2.1;"** PLACAR
*TEMPO";B: PBINT TAB ( l)i"JOGA 460 BESTORE 1280: FOB M-4 TO
17: READ AS: PBINT AT M,1;AS;
DA ":I
500 VTAB (19): PRINT "RESULTAD QS( TO 11-LEN AS);: IF M<>16
O - "j THEN PBINT " :

510 FOR D - 1 TO 5: VTAB (19): 470 NEXT M


HTAB (9 + 4 * D) PBINT DCS(T( :
460 GOSUB 530
D) NEXT D 490 GOSUB 560: GOSUB 530
500 PRINT FLASH 1 ;AT 20,18; "Q
) ; :

520 HTAB (16): VTAB (21): PRIN


T "ESCOLHA O GRUPO": UAL OU ER TECLA" AT 21,1B;"P/ CO
i

530 A - 1 NT I NUAR "


540 HTAB (13): VTAB (3 + A) P :
510 LET AS-INKEYS: IF AS-""
RINT CHRS (60); THEN GOTO 510
550 OET BS: IF BS < > CHRS (
520 RETURN
81) AND B3 < > CHBS (90) AND 530 FOR D-l TO 12: IF P(N,D)-1
B3 < > CHBS 132) THEN 550 THEN PRINT AT 3+D,13;"X"
560 IF BS - CHRS (32) THEN 62 540 IF O(N,D)<>0 THEN PRINT
0 AT 3+D,13;0(N,D)
570 HTAB (13): VTAB (3 + A): P 550 NEXT D: LET C-0 FOB D-l
:

RINT * "; TO 12: LET C-C+0{N.D): NEXT D:


5B0 IF BS - CHBS (81) AND A > PRINT AT 17,13;C: BETUBN
THEN A - A - 1
1 560 PRINT AT 8.18;"TEMP0 ";R;
590 IF BS - CHRS (90) AND A < AT 9.18;"SECAO ";I
12THEN A - A + 1 570 PRINT AT 2,18; "RESULTADO-
600 PBINT CHBS (7) 830 IF B < > 4 THEN B50 " LET T--1: GOSUB 1180
610 GOTO 540 835 GOSUB 1160: IF C < > 18 A 5B0 PRINT AT 5,16; "ESCOLHA O G
620 HTAB (13): VTAB {3 + A) :
P ND C < > 10 AND C í > 14 OR ( RUPO"
BI NT " ";: IF P(N,A) < > 0 THE C - 14 AND D(4) = 6) THEN 900 590 LET A-4
N 950 840 0(N,9) - 15: RETUBN 600 PRINT AT A,15;CHRS 150
630 IF A > 6 THEN 700 B50 IF B < > 5 THEN 900 610 LET BS-INKEYS: IF BS-""
640 C - 0 855 GOSUB 1160: IF C < > 20 A THEN GOTO 610
650 FOR D - 1 TO 5: IF (T(D) -
ND C < > 15 AND C < > 16 AND 620 IF BS-" " THEN LET A-A-3:
A) THEN C » C + 1 C < > 19 THEN 900 GOTO 710
660 NEXT D 860 GOTO 840 630 IF BS="K" THEN GOTO 650
670 O(N.A) = C * A 870 IF B < > 5 THEN 900 640 IF BSO"M" THEN GOTO 610
"
680 P(N.A) 1 B75 GOSUB 1160: IF C < > 20 A 650 PBINT AT A. 15;"
690 RETURN ND C < > 15 THEN 900 660 IF BS="K" AND A=4 THEN
700 IF A - 11 THEN FOB D - 1 B60 O(N.IO) - 30: BETUBN GOTO 600
TO 5:0<N.ll) - O(N.H) + TÍD): 890 IF B < > 1 THEN 900 670 IF B$="M" AND A-15 THEN
NEXT :P(N.ll) - 1: BETURN 095 0(N,12) = 50: PBINT CHRS ( GOTO 600
710 FOR D - 1 TO 5:D(D) - 0: N 7): FOB E - 1 TO 700: NEXT RE : 660 IF BS-"M" THEN LET A-A+l
EXT :B - 0: FOR E = 1 TO 6:C - TURN 690 IF BS-"K" THEN LET A-A-l
0: FOB D - 1 TO 5: IF T (D) - E 900 PRINT CHRS (7) ; CHBS (7) 700 SOUND .01,5: GOTO 600
THEN C - C + 1 HTAB (22): VTAB (5): PRINT "ll 710 PRINT AT A+3.15;" ": IF Pt
720 NEXT D: IF C < > 0 THEN B egal. ELIMINA?" N,A)O0 THEN GOTO 1240
- B + 1 910 GET AS: IF AS < > "8" AND 720 IF A>6 THEN GOTO 780
730 NEXT E AS < > "N" THEN 910 730 LET C-0
740 O— 1: FOR F 1 TO 6: GOSU 920 HTAB (22): VTAB (5): PRINT 740 FOR D-l TO 5: IF T(D)-A
B 1140: IF C < > 0 THEN D(G) - OLtl THEN LET C-C+l
F G * G + 1 930 IF AS - "N" THEN P(N,A + 6 750 NEXT D
760 LET 0(N.A)-C*A
:

750 NEXT F '


) - 0: GOTO 53*0
760 P(N,A) - 1:A - A - 6: ON A 940 P(N.A + 6) "1: RETURN 770 LET P(N,A)-1: RETURN
GOTO 770.810,830,870,960,890 950 PRINT CHRS (7); CHRS (7): 7BO IF A-ll THEN FOR D-l TO 5
770 IF B > 2, THEN 900: IF B - HTAB (22) VTAB (5) PRINT "GR LET O (N 11) -O (N 11) +T (D)
: , , :

NEXT D: LET P(N,11)-1: RETURN


: :

1 GOSUB 1160 ; O(N,7) - C


* 4 RE : UPO OCUPADO";: FOR E - 1 TO 700
TURN ! NEXT 790 FOR D-l TO 5: LET D(D)-0:
7B0 F - 1 955 HTAB (22) VTAB (5): PRINT :
NEXT D: LET B-0 FOR E-l TO 6:
:

LET C-O: FOR D-l TO 5 IF TÍD)


790 GOSUB 1140:F - F + 1: IF C GOTO 530 :
CL3 ; :

> 4 AND F < > 7 THEN 790 960 BETURN -E THEN LET C-C+l
<
IF C < 4 THEN 900 1140 C - 0: FOB D = 1 TO 5 IF 600 NEXT D: IF COO THEN LET
795 :

BETUR T (D) - F THEN C - C + 1 B-B+l


800 0(N,7) - 4 * (F - 1) :

1150 NEXT D: BETUBN 810 NEXT E


N
> 2 THEN 900 1160 C = 0: FOR D 1 TO B:C = 820 LET O-l: FOR F-l TO 6:
810 IF B C
612 F - D(l) GOSUB 1140: IF C : C + D (D): NEXT D: RETURN GOSUB 1250: IF COO THEN LET
= 3 THEN BÍ0
D(G)-F: LET G-G+l
830 NEXT F
B14 F - D(2): GOSUB 1140: IF C
840 LET P(N.A)-1: IF A-7 THEN
< > 3 THEN 900
_ 820 FOR D - 1 TO 5:0(N,B) - 0(
GOTO 950
NEXT RETUBN 650 IF A-8 THEN GOTO 1010
I N.8) + T (D) : :
4S PROGRAMAÇÃO DE JOGOS 45

860 IF A-9 THEN GOTO 1050 660 NEXTD


870 IF A-10 THEN GOTO 1120 670 0(N,A)-C»A
B90 IF A-12 THEN GOTO 1160 680 P(N,A)-1
950 IF B>2 THEN GOTO 1190 690 RETURN
960 IF B-l THEN GOSUB 1270: 700 IF* A-ll THEN FOR D-l TO 5:0
0(N,7)-C: RETURN
LET (N.ll)-OCN,ll)+T(D) :NEXT:P(N,11
970
LET F-l )-l: RETURN
GOSUB 1250: LET F-F+l I.
980 :
710 FOR D-l TO 5:D(D)-0:NEXT:B-
C04 AND F<>7 THEN GOTO 980 0:FOR E-l TO 6:C-0:FOR D-l TO 5
990 IF C<4 THEN GOTO 1190 :IF T(D)-E THEN C-C+l
1000 LET O (N, 7) -4* (F-l RETUBN ) :
720 NEXT D:IF COO THEN B-fl+1
730 NEXT E
1010 IF B<>2 THEN GOTO 1190 740 G-l: FOR F-l TO 6:GOSUB 1140
1020 LET F-D(l) GOSUB 1250: IF
:
:IF COO THEN D(G)-F:G-G+1
C-3 THEN GOTO 1040 750 NEXT F
1030 LET F-D(2) GOSUB 1250: IF
:
760 P{N,A)-l:A-A-6:ON A GOTO 77
C<>3 THEN GOTO 1190 0,810,830,870,960,890
1040 LET O(N,8)-0: FOR G-l TO 5 770 IF B>2 THEN 900 ELSE IF B-l
LET 0(N,B)-0(N.8)+T<G)
: NEXT : GOSUB 1160:O(N,7)-C*4:RETURN
G: RETURN 7B0 F-l
1050 IF B<>4 THEN GOTO 1080 790 GOSUB 1140 F-F+l IF C<>4 AN
: :

1060 GOSUB 1270: IF COIS AND C D F<>7 THEN 790 ELSE IF C<4 THE
<>10 AND C<>14 OR (C-14 AND D(4 N 900
)-6) THEN GOTO 1190 800 O (N, 7) -4* (F _ l ) :RETURN
1070 LET 0(N,9)-15: RETURN 810 IF B<>2 THEN 900 ELSE F-D(l
1080 IF B<>5 THEN GOTO 1190 ) GOSUB 1140:IF C-3 THEN 820 EL
:

1090 GOSUB 1270: IF C-15 OR C-l SE F-D(2):GOSUB 1140:IF C03 TH


6 OR C-19 THEN GOTO 1070 EN 900
1100 IF CO20 THEN GOTO 1190 380 PRINT"4 OF A KIND. "XS"FULL :

820 FOR D-l TO 5 O {N. 8 ) -O (N. 8)


:

1110 GOTO 1070 HOUESE. ,"XS"SHORT RUN...:"XS"


.
T(D) NEXT: RETURN
:

LONG RUN "


" XS " SHORT RUN
:

1120 IF B<>5 THEN GOTO 1190 . . . . . . . :


830 IF B<>4 THEN 850 ELSE GOSUB
1130 GOSUB 1270: IF C-15 OR C-2 X$"LONG RUN :"X$"CHOICE 1160 :IF C018 AND CO10 AND C<
0 THEN GOTO 1150 "X$"YATCH
. : "XS :
>14 OR (C-14 AND D{4)-6) THEN 9
1140 GOTO 1190 390 PRINT "TOTAL :" ; 00
1150 LET O(N,10)-30: RETURN 400 GOSUB 460 840 0(N,9)-15:RETURN
1160 IF BOI THEN GOTO 1190 410 GOSUB 490: GOSUB 460 850 IF B<>5 THEN 900 ELSE GOSUB
1170 LET 0(N, 121-50: RETURN 420 PRINT §466, "qualquer tecla" 1160 :IF CO20 AND COIS AND C<
1190 SOUND .5,5: PRINT AT 20, 1B ;:PRINT «498, "para continuar"; >16 AND C019 THEN 900
"ILEGAL !";AT 21 1B "ELIMINA ?
;
,
; 430 SOUND 60.1 860 GOTO 840
440 AS-INKEY$:IF AS-"" THEN 440 670 IF B<>5 THEN 900 ELSE GOSUB
1200 LET AS-INKEYS: IF AS-"" TH 450 RETURN 1160: IF CO20 AND C015 THEN 9
EN GOTO 1200 460 FOR D-l TO 12:IF P(N,D)-1 T 00
1210 IF AS-"N" THEN PRINT AT 2 HEN PRINT §45+D*32,"X"; 880 O(N,10)-30:RETURN
0.18;" " AT 21,18;" i
470 IF OfN.DlOO THEN PRINT §45 890 IF SOI THEN 900 ELSE OfN.l
": LET P(N,A)-0: GOTO 590 +D*32,0(N,D) 2)-50:SOUND 5,8: FOR E-l TO 700-
1220 IF AS<>"S" THEN GOTO 1200 480 NEXT D:C-0:FOR D-l TO 12:C- NEXT E: RETURN
1230 LET P(N.A)=1: RETURN C+OÍN.D) :NEXT:PRINT §493.C;:RET 900 SOUND 20,1:PRINT §432,"lleg
1240 SOUND .5,5: PRINT AT 20,18 URN al. PERDE?"
;
"GRUPO OCUPADO": FOR H-l TO 30 490 PRINT §53 "ROUND"R PRINT § , ,-
: 910 A$-INKEY$:IF AS<>"S" AND AS
0: NEXT H: PRINT AT 20,18;"
84,-SECAO'I; <>"N" THEN 910
500 PRINT §115 "GRUPO FINAL-* .
920 PRINT §432,"
' GOTO 590 :

510 FOR D-l TO 5:FOH G-l TO 4:P


1250 LET C-0: FOR D-l TO 5 IF :

RI NT §111+G*32-(D>3)*118+4*D,DS 930 IF AS-"N" THEN P(N,A+6)-0:G


T(D)-F THEN LET C-C+l
<T(D) ,G) NEXT G.D OTO 530
1260 NEXT D: RETURN ; :

520 PRINT §403."SELECT GROUP"; 940 P{N.A+6)-l:RETURN


1270 LET C-O: FOR D-l TO B: LET
530 A-l 950 SOUND 5,1:PRINT «433,"SECAO
C-C+D{D): NEXT D: RETURN
1280 DATA "UNS" "DOIS" "TRES"
, , ,
540 PRINT €49+32*A,CHRS (95) PREENCHIDA"; FOR E-l TO 700:NE
:
550 B$-INKEYS:IF BSO" " AND BS XT:PRINT $433,"
QUATROS* "CINCOS" "SEIS" "IGUAI
. , ,

<>""" AND BSOCHR$(10) THEN 550 " :GOTO 530


S","CASA CHEIA" "CURTO" "LONGO"
, ,

560 IF BS-" " THEN 620


;

,
"MISTO" "YATCH" " , ,
" 960 RETURN
570 PRINT §49+32*A," "; 1140 C-0:FOR D-l TO 5:IF T(D)-F
"TOTAL"
580 IF BS-""" AND A>1 THEN A-A- THEN C-C+l
1 1150 NEXT D: RETURN
590 IF B$-CHRSU0) AND A<12 THE 1160 C-0:FOR D-l TO B:C-C+D(D):
N A-A+l NEXT D: RETURN
600 SOUND 200,1
350 CLS 610 GOTO 540
360 W-6:Y-0:GOSUB 980 PRINT"*** :
620 PRINT §49+32*A," " IF P(N, ; :
IMPRESSÃO DO ESQUELETO
*SCORE****" A1O0 THEN 950
370 PRINT"UNS "XS"DOIS :
630 IF A>6 THEN 700
:"XSTRES :"XS"Q 640 C-0 A primeira seção dessa rotina que —
UATROS "XS" CINCOS: "X : 650 FOR D-l TO 5:IF T (D) -A THEN vai atéa linha 520 no Spectrum e linha
S"SEIS C-C+l 450 nos outros micros —
mostra na te- I
PROGRAMAÇÃO DE JOGOS lllllllll
IIIIIIIIIIHI
la o esqueleto do placar (nomes dos gru- 1000 LOCATEO,4:FORD-1TONP:PRINT
pos e do jogador) e chama duas outras NS (D) NEXT :

rotinas para preencher os grupos e re-


1020 FORD-1TONP
1030 C-0:FORE-1T012:C-C+0(D.E) :

ceber a última entrada.


NEXT S {D R) -C NEXTD
: , :

A rotina constituída pelas três linhas 1040 FORD-1T05:LOCATE3+D*4.2:PR


seguintes preenche o esqueleto com o INTD; :NEXT
placar anterior e fornece a soma dos to- 1050 PR I NT * TOTAL"
tais. Depois dela encontra-se uma roti- 1060 FORD-1TONP
na maior, incumbida de receber e ana- 1070 FORE=1TOR
lisar as entradas.
1080 LOCATE3+E*4.3+D:PRINTS(D,E
As primeiras linhas dessa rotina apre- ) NEXTE
| : ,

1090 FORD-1TONP:C-0:FORE-1TOR:C
sentam na tela informações sobre o nú-
-C+S(D.E) :NEXTE:LOCATE26,3+D:PR
mero da partida e da jogada e, o que é
INTC; NEXTD :

mais importante, mostram a combina- 1100 LOCATE2 19: PR1NT"< qualque ,

ção final obtida. As linhas seguintes, r tecla para outra rodada


>"
além de identificar a tecla que está sen- 1110 AS-INKEYS:IFAS-""THEN1110
do pressionada, movem o cursor para 1120 F0RE-1T0NP:F0RD=1T012:0(E,
cima e para baixo no esqueleto. Para a D)-0rP(E,D)-0:NEXTD.E
movimentação do cursor, o Spectrum 1130 RETURN
usa as teclas M e K; o MSX e o TRS-
Color, as setas, e o Apple e o TK-2000.
as teclas QeZ.
ff] Eu
Quando se pressiona a barra de es- 990 HOME INUERSE PR TNT "»
paço, o programa interpreta que o gru- »»>»»
i

PLACAR FINAL
:

««« T C-C+OtD.E): NEXT E: LET S(D.R


po apontado pelo cursor foi escolhido. <««": NORMAL
1000 VTAB (5) FOR D = 1 TO NP ) =C: NEXT D
A posição do cursor é armazenada na :

(NS(D),10): NEXT 1370'FOR D-l TO NP: FOR E-l TO


variável A, onde A= corresponde á
1
: PRINT LEFT3
R
posição do grupo dos UM, A = 2 equi- 1020 FOR D = 1 TO NP 1380 PRINT INK 4 ;AT 6+D*2.4+E*
vale à posição do grupo dos DOIS e as- 1030 C - 0: FOR E - 1 TO 12:C = 4;S(D,E) NEXT E: NEXT D :

sim por diante até A = 11. que corres- C + OÍD.E): NEXT :S(D,R) - C: 1390 FOR D-l TO NP: LET C-0 FO :

ponde à posição do YATCH. O valor NEXT D R E-l TO R: LET C=C+S(D,E): NEX


T E PRINT AT 6+D*2.28;C: NEXT
'

de A é usado pelo restante da rotina pa- 1040 FOR D - 1 TO 5: HTAB (9 :

ra calcular a pontuação do placar. D * 4) VTAB (3): PRINT D;:


ní; D
1400 PRINT II; INVERSE 1: INK 0
Uma outra variável importante é a XT
;- QUALQUER TECLA PARA CONTINUA
variável B, que contém o número de da- 1050 PRINT TOTAL"
1060 FOR D 1 TO NP
dos diferentes entre si: B = 2 (dois tipos 1410 LET A$=INKEYS IF AS = TH
1070 FOR E 1 TO R '

de valores), por exemplo, representaria VTAB (4 EN GOTO 1410


HTAB (9 .) :

uma FULL HOUSE e B = 5 (cinco tipos


PRINT (D.E) NEXT E.D ! : :
1420 FOR E-l TO NP: FOR D-l TO
de valores), um LONGO. 1090 FOR D - 1 TO NP:C - 0: FO 12: LET 0{E,D)-0: LET P(E.D)=0
Portanto, dependendo do valor de A, R E - 1 TO R:C - C + S(D,E) NE :
NEXT D: NEXT E
chamadas para ve-
rotinas diferentes são XT E: HTAB (33): VTAB (4 + D) 1430 RETURN
rificar se a combinação dos dados real- PRINT C: NEXT D :

mente corresponde ao grupo escolhido. 1100 HTAB (2): VTAB (22): PRIN
Se corresponder, o placar é calculado e T "< QUALQUER TECLA PARA OUTRA 990 CLS PRINT" *****TABELA DE PO
:

apresentado na tela. Caso contrário, a RODADA >" NTOS*****"


1110 GET AS: IF AS - THEN 1
mensagem "ILEGAL" é exibida. O jo- 1000 PRINT «128:FOR D-l TO NP:P
gador decide, então —
com um S ou um 110
1120 FOR E - 1 TO NP: FOR D - RINT NS(D) :NEXT
N — se o grupo deve ser eliminado. O
,
1 TO 12:OCE,D) - 0:P(E.D) = 0: 1010 PRINT 675, "R O U N D"
1020 FOR D-l TO NP
computador verifica também quais gru- NEXT D.E
1030 C-0:FOR E-l TO 12:C-C+0(D,
pos já foram usados. 1130 RETURN
E) :NEXT S (D. P) - T NEXT D
: :

1040 FOR D-l TO 5: PRINT 698+D*4


D NEXT
. ; :

1050 PRINT" TOTAL"


1290 BORDER 7 PAPER 7: INK 3: 1060 FOR. D-l TO NP
Esta última seção simplesmente apre- CLS 1070 FOR E-l TO R
1300 PRINT "* *******«PLACAF FI 1080 PRINT êl29+D*32+E*4 S (D.E)
senta na tela o placar final, com os pon-
.

O NAL*********"" :NEXT E.D


tos dos jogadores em cada partida.
;

1310 PRINT AT 7,0: FOR D-l TO N 1090 FOR D-l TO NP:C-0:FOR E-l
número da partida é exibido no topo do - :"': NEXT D TO R C-C+S (D, E) NEXT E PRINT 61
P: PRINT NS(D); : : :

placar final e os nomes dos jogadores 53+D*32,C; :NEXT D


1320 PRINT INK 1;AT 3.0;"JOGAD
mais abaixo, à esquerda. OR"; INK 2;AT 3,13;-T EMPO" 1100 PRINT 6448," QUALQUER TEC
JOGADA.";
1330 PRINT AT 5.12:: FOR D-l TO LA PARA PEOXIMA
5: PRINT INK 2 TAB (4+D*4);D; : 1110 AS-INKEYS:TF AS="" THEN 11
NEXT D: PRINT INK 0;"
:
TOTE 10
1120 FOR E-l TO NP:F0R D-l TO 1
2:O(E,D)-0:PIE.D)-0:NEXT D,E
1130 RETURN
Illlllllllll» « COOIGODCMAQUm 48 ||||||||||||||

do jogo
AVALANCHE: nível
0 ATRASO DAS COBRAS
MOVIMENTO DAS LÍNGUAS

AS COBRAS VIVEM! A COBRA ESTA SUBMERSA?

As cobras ainda não constituem ameaça: lam, os pássaros voam. As cobras, po- 20 BEM ank 1

rém, permanecem totalmente imóveis 30 REM cp 2


podem ser vistas dentro dos buracos,
40 REM jr nc
em seus buracos. Está na hora de lhes
mas estão sempre quietas. Agora vamos dar um pouco de vida. 50 REM ret
60 REM ako 1
dar-lhes movimento, complicando 70 REM ld hl ,425
um pouco mais a vida do pobre Willie. 80 REM call
90 REM ld hl 369
,

A rotina a seguir atiça as cobras, 100 REM call


fazendo-as sair de sua inatividade. 110 REM ld hl 282
Nossa aventura está bem movimen- 120 REM
tada: Willieanda e salta, as pedras ro- 10 Et EM org 59823 130 REM
CÓDIGO DE MAQUINA
IIIIIIIIIIHHI llllllllll

140 REM a km puah hl cisamos verificar a altura da maré. Se


150 BEM ld de, (57354) a cobra estiver submersa, a parte da ro-
160 BEM abe hl.de tina que movimenta sua língua pode ser
170 BEM pop hl pulada. Chegamos, finalmente, à rotina en-
190 BEM jr c.ana A seguir, a posição do mar no par carregada de imprimir ou apagar a lín-
190 BEM ret DE é subtraída da posição da língua em gua da cobra na tela. O par de registros
200 BEM ana ld a, (ix+0) BC é carregado com 57224, os dados pa-
HL. Se não houver resto, a posição do
210 BEM inc a
mar se encontra acima da posição da ra a língua da cobra. D é ajustado com
220 BEM rea 4,
O atraso da cobra
língua da cobra na tela. Nesse caso, a 43, a cor da figura.
230 BEM ld Ux+0) ,a
240 BEM InC lx instrução jr c.sns não tem efeito e o pro- em A é comparado com 15.
250 BEM cp 7 cessador retorna. Mas, se houver resto, Se o atraso não tiver chegado a 15,
260 BEM Jr ncaco ou seja, se a posição do mar estiver abai- a instrução jr nz leva o processador pa-
270 REM ret xo da posição da língua na tela, a ins-
280 BEM aco ld bc, 57224 trução jr c,sns faz com que o proces-
290 REM ld d. 43 sador salte a instrução rei e continue
300 BEM cp 15 a rotina.
310 BEM jr nz.ste
320 REM ld bc 15616
330 BEM ld d. 45 ESTÁ NA HORA DE MEXEU?
340 BEM ate ld a,
350 BEM call 58217
360 BEM ret
O atraso da cobra é carregado da po-
sição apontada por IX para o acumula-
A primeira tarefa da rotina consiste dor, onde é incrementado. O
bit 4 é apa-
em verificar se as cobras devem entrar gado para evitar que o atraso se torne
em açào. Para isso, o valor do nível do maior que 15. O resultado dessa opera-
jogo, armazenado em 57344, é carrega- ção é armazenado de volta na posição
do no acumulador e comparado com 2 indicada por IX. Esse apontador é en-
Essa comparação é feita por mei tão incrementado para indicar o atraso
uma subtração cujo resultado não arma da cobra seguinte. Seu valor é compa-
zenamos. Se compararmos 2 com um '
rado com o conteúdo do acumulador
número menor, teremos um resto. A pela instrução cp 7. Se o atraso dessa co-
liza carry será então ajustada com bra for maior ou igual a 7, jr
o processador retornará, porque as co manda o processador para a rotina que
bras não são necessárias. imprime a língua. Se o valor for menor
Se a baliza carry não foi ajustada, a que 7, a baliza carry é ajustada com 1,

instrução jr nc.sko pula a instrução rei. a instrução não tem efeito e o processa-
Você estará no terceiro ou quarto nível dor retorna.
do jogo (valor 2 ou 3) e as cobras de- Cada vez que essa rotina é chamada,
vem ser atiçadas. um atraso diferente da cobra é encon-
trado nos endereços 57350, 57351 e
57352, pois o apontador IX é incremen-
AS COBRAS AMEAÇAM tado entre cada chamada que se faz à
rotina skm. A língua da cobra fica para
fora oito ciclos, e não aparece nos oito
A posição de memória 57350 carre-
ciclos seguintes.
ga o primeiro dos atrasos das cobras,
que indicam quando elas devem mexer
a língua. IX é carregado com esse ende-
reço, e HL, com 425, a posição da pri-
meira língua de cobra. A rotina skm,
que executa o movimento, é chamada.
A posição da língua da próxima co-
bra é carregada em HL, e skm volta a ser
chamada. Em seguida, a posição da lín-
gua da terceira cobra é carregada em HL
e skm é chamada mais uma vez.
Quando todas as línguas estiverem se
mexendo, a rotina retorna.

Quando a rotina skm é chamada, as


posições das línguas são colocadas na pi-
lha para armazenamento temporário. A
posição do mar em 57354 é colocada no
I par DE. Neste ponto do programa, pre-
IIIIIIIIIIIHI 48 CÓDIGO DE MAQUINA 48 HIIIIIIIIIIUI
ra sle. Se for igual a esse valor, você pre- a rotina prinl, em 58217, é chamada. SNK LDA 18238
cisará apagar a língua, para que ela não Com isso, imprimimos a língua ou — CMPA 12
apareça nos próximos oito ciclos. BC é apagamos a que existia —
para fora da BUS SKO
RTS
carregado com 15616, o endereço dos boca de uma das cobras. A seguir, o
SKO LDY #18255
dados de um espaço vazio, e o registro processador retorna.
LDX 15095
D é carregado com 45, o código da cor JSR S KM
do céu. LDX 14591
Qualquer que seja o valor do atraso JSR SKM
da cobra (neste ponto da rotina, ele é Esta rotina movimenta as cobras, LDX (3833
sempre maior do que sete), o processa- acrescentando ação ao jogo. JSR SKM
dor encontra a instrução ld a, d. Depois RTS
que ela carrega a cor apropriada em A, 10 ORG 20856 SKM PSHS X
48 CÓDIGO Dl MÁQUINA 48 llllllllll
Illllllll

A primeira tarefa da rotina é verifi-


MEXER OU NÃO MEXER
car se as cobras devem entrar em ação.
Para isso, o valor do nível do jogo, ar- A é carregado com o conteúdo do
mazenado em 18238, é carregado no atraso da cobra que está apontado no
acumulador e comparado com 2. registrador Y. Esse valor é então incre-
Se você está no nível três ou quatro
— ou seja, se o valor é 2 ou 3 — , as co-
mentado e a operação AND
é feita com
$F, para ajustá-lo com 0 toda vez que
bras serão necessárias. Nesse caso, a ins-
ultrapassar o valor 15.
trução BHS faz o processador pular o
PROGRAMAS LONGOS: MELHORE RTS. seguindo a rotina.
Oresultado é armazenado de volta
A VELOCIDADE DE MONTAGEM no endereço apontado por Y. Esse re-
Como o leitor deve ter notado, apre- gistrador é então incrementado para
sentamos o programa Avalanche em AS COBRAS AMEAÇAM apontar o atraso da próxima cobra.
pequenos segmentos funcionais, que Oatraso da cobra que ainda está em
podem ser testados separadamente. A é comparado com 7. Se for maior ou
Essa técnica de construção de progra Y é carregado com o endereço do igual, o processador vai para a rotina de
mas, chamada de desenvolvimenti atraso da primeira cobra. Esta é a va-
impressão da língua; caso contrário, o
modular, é muito útil para qualquer ti riável incumbida de interromper ou co- processador retorna.
po de programa, pois agiliza o proces meçar o seu movimento. Os atrasos da
so de montagem e facilita enormemen segunda e da terceira cobras estão logo
te os testes de execução. Para a pro
gramação complexa em linguagem de
em seguida na memória.
máquina, o uso dessa técnica é e; X é carregado com 5095, a posição

ciai, devido á dificuldade de se doeu


na tela do primeiro buraco, e o proces- Ao entrar na rotina SCO, o proces-
mentsr internamente — isto é, na pro sador vai para a rotina SKM. sador carrega o apontador da pilha do
pria listagem do programa — o código Essa rotina atiça a primeira cobra e usuário com 18062, o endereço dos da-
em Assembler. incrementa o conteúdo de Y antes de re- dos para a língua da cobra.
Os profissionais que criam os sofis-
ticados videogames que vemos em fli-
tornar. Assim, quando o processador —
A que ainda contém o atraso da
peramas, por exemplo, dominam per-
salta para fazer com que a segunda e a
cobra que foi incrementado —
é com-
terceira cobras se movimentem, apenas
feitamente a técnica de modularização. parado com 15. Se ele não foi incremen-
as posições do segundo e do terceiro bu-
Na realidade, eles dispõem de progra- tado até esse valor, o processador pula
mas Assembler poderosíssimos, capa- racos precisam ser carregadas em X. Y para as instruções de impressão. Mas,
é incrementado automaticamente, apon-
zes de representar uma biblioteca de se já chegou a 15, U é carregado com
rotinas e ferramentas de programação tando os atrasos das três cobras. Quan- 1536, o endereço da parte de céu no can-
que facilitam muito a implementação do tiver passado por todas elas, o pro- to superior esquerdo da tela.
dos recursos normalmente usados em cessador retorna.
Seguindo adiante, X é subtraído de
videogames.
256, fazendo o apontador de tela se mo-
Infelizmente, os Assembler que IN-
Pt/7" apresentou para os diferentes mi-
ver um caractere para cima do buraco
cros são muito lentos. Se você quiser da cobra. Esta é a posição da língua.
melhorar a velocidade de montagem, Se o atraso da cobra estiver entre 7
divida um programa mais longo em
A primeira coisa que o processador e 14, a rotina CHARPR imprimirá a lín-
faz ao entrar na rotina SKM é colocar
segmentos menores e compile-os se- gua nessa posição ao ser chamada. Mas,
paradamente. Não se esqueça, porém, na pilha, para armazenamento tempo-
se o atraso tiver atingido o valor 15, a
de calcular o endereço de origem para rário, a posição da cobra na tela.
língua será apagada.
cada segmento e incluf-lo em um co- O registrador X é carregado com o A língua permanecerá invisível, isto
mando org ou equivalente, no começo conteúdo de 18247, a posição do mar.
e, não será impressa, até que o atraso
de cada segmento. Esse valor é somado com 31, para que
chegue novamente a 7.
o apontador de tela se mova para o can-
to direito da tela. X é então comparado
LDX 18247 com a posição do buraco da cobra, que
LEAX 31.X está na pilha de máquina, através da ins-
CMPX ,S trução CMPX ,S. A posição da cobra
A rotina apresentada a seguir atiça as
PULS X cobras que até agora permaneciam quie-
é recuperada da pilha, voltando para o
BHI 3NS tas em seus buracos.
registrador X.
RTS
SNS LOA ,Y
Como isso não afeta nenhuma das 10 org 55564
balizas, a instrução BHI ainda se refere 20 ld a, (-5228)
220 INCA
230 ANDA t$F à operação CMPX ,S. Assim, se o mar 30 cp 2
240 STA ,Y+ está acima do buraco —ou seja, se a po-
250 CMPA *7 sição do mar na tela não é maior do que
260 BHS SCO a posição do buraco que estava na pi-
270 RTS lha — o salto não ocorre, e o processa-
,

290 SCO LDU I1B062 dor retorna.


290 CMPA 115 Caso o mar não tenha encoberto" o
300
310
BNE STE
LDU 11536
buraco —
isto é, se a posição do mar na
tela é maior do que a posição do bura-
320 STE LEAX -256.X
330 JSR CHARPR co — o processador pula a instrução
,

RTS RTS, e dá continuidade à rotina que ati-


CHARPR EQU 19402 ça as cobras.
.

IIIIIIIIIIIIHI
sbc hl de ,

1 70
180
190
200
210
220

280 ac Id de, (62407)


290 add hl de
300 cp 15
310 ld b,36
320 ir nz.st
330 ld b,255
340 st ld a,b
350 call 77
360 ret
370 end

A primeira tarefa da rotina consiste


em verificar se as cobras devem entrar
em ação no nível atual do jogo. Para is-
so, o valor do nível, -5228, é carrega- cada na pilha para armazenamento tem- Ao ser chamada, essa rotina sempre
do no acumulador e comparado com 2. porário. A posição do mar em —5212 encontra um atraso diferente nos ende
Se você está no terceiro ou no quarto ní- é colocada no par DE. Neste ponto do reços -5198, -5199 e -5220, já que
vel —ou seja, se o valor é 2 ou 3 —
as programa, precisamos verificar se a co- o apontador BC é incrementado entre
cobras estão nos buracos e devemos bra se afogou com a subida da maré. cada acesso a sm. A língua da cobra fi-
atiçá-las. Em caso afirmativo, ela não precisa me- ca para fora oito ciclos, não aparecen-
A comparação é por meio de
feita xer a língua —
assim, a parte da rotina do nos oito seguintes.
uma subtração cujo resultado não arma- que faz isso pode ser pulada.
zenamos. Se compararmos 2 com um Para essa verificação, a posição do
número menor, teremos um resto e a ba- mar no par DE é subtraída da posição
liza carry passará a conter 1 Nesse ca-
. da língua em HL. Se não houver resto
so, o processador retornará, porque as — ou seja, se a posição do mar estiver Chegamos, finalmente, à rotina que
cobras não são necessárias. acima da posição da língua da cobra imprime ou apaga a língua da cobra na
Caso a baliza carry não tenha sido na tela — a instrução jr c,sn não tem
,
O endereço inicial da Tabela de No-
tela.
afetada, a instrução jr nc.sk pula a ins- efeito e o processador retorna. Mas, se mes da VRAM é carregado em DE e so-
trução ret, porque as cobras estão pre- houver resto, a posição do mar está mado a HL, que contém a posição da
sentes neste nível. abaixo da posição da língua na tela. A língua. Esse par de registros passa en-
instrução jr c.sn faz, então, o proces- tão a conter o endereço correspondente
sador saltar a instrução ret e continuar à posição da língua na TN.
AS COBRAS AMEAÇAM a rotina. O atraso da cobra que ainda eslá no
acumulador é comparado com 15. O re-
O endereço de memória — 5198 con- ESTA NA HORA DE MEXER? gistro B é carregado com 36, o código
tém o primeiro dos chamados atrasos do padrão da língua. Se o valor do atra-
das cobras, que indicam quando elas de- so não for 15, a instrução jr nz.sl leva
vem mostrar sua língua. O par BC é car- O atraso da cobra é carregado da po- o processador para st, pulando a instru-
regado com esse endereço, e HL, com sição apontada por BC para o acumu- ção ld b,255. Caso contrário, a língua
425, a posição da língua da primeira co- lador, onde é incrementado. O bit 4 deve ser apagada para que não apareça
bra. A rotina sm, encarregada de pro- também é incrementado para evitar que nos próximos oito ciclos; o desvio não
mover o movimento, é chamada. oatraso se torne maior que 15. O resul- ocorre e 255, o código do padrão de céu,
A posição da língua da próxima co- tado dessa operação é armazenada de é colocado em B.
bra é carregada em HL, e sm volta a ser volta na posição apontada por BC. Neste ponto do programa, o valor do
chamada. Em seguida, a posição da lín- O par de registros BC é incrementa- atraso da cobra será sempre superior a
gua da terceira cobra carregada em
é do para apontar o atraso da cobra se- 7. O processador encontra a instrução
HL, e sm é chamada mais uma vez. guinte. A instrução cp 7 compara esse ld a,b, que transfere o código do padrão
Depois de movimentar todas as lín- valor com o conteúdo do acumulador, apropriado de B para A. A rotina 77 da
guas, a rotina retorna. e a instrução jr nc.sc manda o proces- ROM, que coloca o código que está em
sador para a rotina que imprime a lín- A na posição da TN apontada por HL,
gua, se o atraso da cobra for maior ou é chamada. Com isso, imprimimos a lín-
igual a 7. Caso o valor seja inferior a gua — ou apagamos a que existia pa- —
7, a baliza é ajustada com 1, a instru ra fora da boca da cobra. A seguir, o
Quando a rotina sm é chamada, a po- ção de desvio não tem efeito e o proces- processador retorna ao laço principal do
sição da língua que está em HL
é colo- sador retorna. jogo.
IIIIIIIIIIHM llllllllll I

Sem o sistema operacional, seria


difícil trabalhar com o computador.
Veja de que modo funciona esse
importante componente do seu micro e
aprenda a fazer dele um aliado.

Todos os computadores trabalham e acessível por muitas pessoas.O que tor- Conhecer o funcionamento do SO
entendem apenas uma linguagem: o có- na mais simples a comunicação com o não é essencial para o usuário, porém
digo de máquina, que é representado in- operador é o Sistema Operacional do amplia bastante suas alternativas de pro-
ternamente por pequenas variações bi- computador (SO), um conjunto de ro- gramação. O uso de funções internas do
nárias de voltagem. Eie pode ser expres- tinas em código de máquina que contro- SO possibilita a obtenção de melhores
so por um conjunto de letras e núme- lam todas as funções da máquina. Seja resultados não só quanto à velocidade,
ros, o que facilita sua compreensão, ou qual for a linguagem empregada, BA- mas, também, quanto à qualidade ge-
por números binários, menos familiares SIC ou outra qualquer, essas rotinas se- ral do programa.
ao usuário. De uma forma ou de outra, rão sempre utilizadas para controlar as Dentro dos limites impostos por ca-
essa linguagem é considerada pouco diversas funções do computador. da máquina, este artigo procura mostrar

I!
IIIIIIIIIIIHH IIIIIIIII
0 QUE Ê 0 SISTEMA ROTINAS GRÁFICAS
OPERACIONAL COMUNICAÇÃO COMO CASSETE
0 INTERPRETADOR BASIC PROCESSAMENTO DE TEXTOS
ENTRADA E SAÍDA COMUNICAÇÃO COM
VARIÁVEIS DO SISTEMA A IMPRESSORA

algumas aplicações úteis para as rotinas sador existente dentro da máquina res- da execução das mesmas tarefas, cha-
e variáveis próprias de cada sistema ope- ponder aos comandos básicos de opera- mando as rotinas apropriadas. Umbom
racional. ção. Ele controla a comunicação da má- exemplo é o comando INPUT, que usa
quina com o mundo exterior —
o tecla- uma série de sub-rotinas do SO, tais co-
0 QUE E SISTEMA OPERACIONAL
do, a tela, o alto-falante e outras por- mo seleção e leitura da porta de entra-
tas de entrada e saída. da, varredura do teclado, uso e transfe-
O 50 tem ainda a função de assegu- rência de buffer etc.
O SO é apenas um tipo sofisticado de rar que a memória seja utilizada de for- Outroexemplo interessante é
programa —
escrito em código de má- ma eficiente pelo usuário e pelo inter- CLEAR. Esse comando força o SO a
quina —que permite ao microproces- pretador BASIC. Assim, quando liga- executar todas as rotinas necessárias à
mos o computador, ele ativa várias de liberação da memória RAM
disponível
suas rotinas da ROM para acertar os va- para o usuário, destruindo todas as va-
lores iniciais de variáveis e apontadores riáveis previamente existentes.
e, em seguida, avisa que está pronto a
aceitar comandos. TRABALHO SOB ENCOMENDA
Em todos os microcomputadores
abordados em INPUT, o SO é respon-
Sempre que digitamos um comando,
sável pela interpretação dos comandos
o SO seleciona e coloca em ação uma
em BASIC, contudo ele pode também
das rotinas de seu vasto acervo. Supo-
lidar com outros tipos de linguagem.
nhamos que você tecle a letra A: o SO
Na maior parte do tempo, o traba-
deverá instruir o processador a imprimir
lho do SO consiste em verificar e modi-
o caractere na tela, cabendo-lhe também
ficar os valores de determinadas variá-
detectar a tecla que foi pressionada. A
veis e apontadores especiais. É impor-
forma como ele faz isso varia de com-
tante, por exemplo, que o SO conheça
putador para computador. Em certas
o endereço exato tanto do inicio como
máquinas, o SO "varre" periodicamen-
do fim de um programa em BASIC. Se
te o teclado para verificar se alguma te-
o programa for modificado, seu tama-
nho também mudará, e esses valores
cla foi pressionada. Em outras, seu fun-
cionamento normal é interrompido sem-
precisarão ser atualizados.
pre que se pressiona uma tecla, a qual
O mesmo se aplica ao processo de é identificada, em seguida, por meio de
alocação e manutenção de espaço para
uma varredura.
as variáveis, particularmente as variáveis
Para responder adequadamente à
indexadas, ou matrizes. Quando dimen-
pressão da tecla, o SO aciona a sub-
sionamos uma variável desse tipo, um
rotina que manda o caractere correspon-
espaço deve ser reservado —e, quando
dente à tela. Sua execução, assim como
a variável não for mais necessária, ele
a de outras rotinas em código de máqui-
deve ser eliminado.
na, é muito rápida. Se pressionarmos a
É essencial que o SO utilize racional-
tecla < ENTER > ou a tecla <RE-
mente a memória, pois, caso contrário,
um programa longo ou algumas variá- TURN > o SO ativará uma rotina que
,

promove a mudança de linha na tela


veis mais compridas logo esgotarão a
(new Une).
quantidade de espaço disponível. Essa
administração da memória é chamada
de housekeeping —
que poderíamos tra- O INTERPRETADOR 8ASIC
duzir livremente por "cuidar da casa".
Uma boa "economia doméstica" é in- Quando executamos um programa
dispensável para que o computador fun- codificadoem uma linguagem como o
cione eficientemente. BASIC, as instruções que estão na me-
O SO contém ainda uma série de ro- mória são interpretadas, ou seja, tradu-
tinasde software montadas de modo zidas para os códigos que o computador
que tanto o usuário quanto o próprio pode entender. Esses códigos modificam
SO possam utilizá-las com facilidade. A os registradores de modo que as rotinas
maioria delas não é de interesse para o do SO possam ser chamadas adequada-
programador em BASIC, pois vários co- mente. Assim, as mesmas rotinas que
mandos dessa linguagem se encarregam possibilitam a execução de comandos
IIIIIIIIIIIH JL "Ullllí

entrados pelo teclado permitem ao SO Para programas em BASIC, há a alter- 23673, 23674. Se colocarmos 0 nelas,
a execução de um programa BASIC. nativa de se modificar determinadas va- usando o comando POKE, o contador
Mas por que o BASIC é tão lento, já riáveis por meio de comandos POKE. será zerado. Depois disso, sua atualiza-
que utiliza rotinas em código, que são POKE 23561, seguido de um núme- ção será feita automaticamente através

rápidas? Acontece que a linguagem de- ro entre 1 e 255, altera o lapso de tem- de interrupções. Aqui está um progra-
ve ser interpretada a partir de palavras- po que antecede a ativação da auto- ma simples que emprega o contador pa-
chave —como PR1NT —
e de outros repetição das teclas. O
valor normal é ra improvisar um relógio:
símbolos, antes que essas rotinas inter- dado por um POKE 23561,35. De mo- 10 POKE 23674,0: POKE 23673.0
nas possam ser executadas. Como a tra- do análogo, POKE
23562,5, que define ! POKE 23672,0
dução do BASIC é demorada, progra- o valor normal do período que decorre 20 B0RDER 0: PAPER 0: INK 6:
mas que exigem rapidez, como os de vi- entre duas auto-repetições sucessivas, CLS
deogame, por exemplo, são escritos di- também pode ser modificado. Tal recur- 30 DE F FN tO=INT ((65536*
retamente em linguagem de máquina. so é útil em jogos, ou qualquer outro ti- PEEK 23674+256*PEEK 23673+
PEEK 23672)/50>
O tempo que se leva para escrever um po de programa que exija respostas rá-
40 LET t=FN t()
programa em código de máquina é, em pidas do usuário, via teclado.
50 LET h-IMT (t/ (60*60))
média, dez vezes maior do que o gasto As posições 23606 e 23607 contêm o 60 LET m-INT (t/60)
em um programa BASIC. A velocidade endereço dos padrões de pontos dos ca- 70 LET s-t-((h*60)"60)-(a*60)
de execução do mesmo, contudo, che- racteres. Se usarmos POKE 23606,8 80 LET tS="["+STRS h+" "+STRS
:

]"
ga a ser cinquenta vezes maior. Assim, (byte menos significativo), o apontador M+" -+STRS S+"
:

a não ser que a rapidez de execução se- será movido um caractere para cima, na 90 PRINT AT 1,15-{(LEN t$) /2)
"
tabela. Assim, qualquer letra que digi- ' ";t$;'
ja muito importante, a maioria das pes-
:

soas prefere utilizar o BASIC, dada a fa- tarmos aparecerá na tela como o carac- 100 GOTO 100
cilidade de programação. tere seguinte do código ASCII. Tente di-
gitar esse POKE seguido de 1, 2, 3, 4.
A
linha 10 zera o contador de linhas
de vídeo, enquanto a linha 30 define a
ACESSO DIRETO AO SO Note que este é um método simples de
função t, que o lê. A linha 40 armazena
"criptografar" listagens em BASIC, de-
o valor encontrado em t. A partir desse
sencorajando curiosos que tentem lê-las.
A possibilidade de ter acesso direto valor, as horas, minutos e segundos são
Se, em vez do byte menos significativo
ao SO, sem passar pelo interpretador, você recorrer ao mais significativo — calculados
seria a solução ideal para quem prefere POKE 23607,0 —
o apontador será di-
,

as facilidades do BASIC, mas, por ou- rigido para o começo da memória


tro lado, não quer abrir mão da veloci- ROM, tornando os caracteres absoluta-
dade. Nemtodas as máquinas, porém, mente ininteligíveis. ENTRADA E SAÍDA
oferecem essa alternativa. A
posição de memória 23658 possi-
No TRS-80 e no TRS-Color, por o estado da tecla < CAPS
bilita alterar Os microcomputadores pertencentes
exemplo, o SO faz parte do interpreta- LOCK> durante a execução de um pro- à linha MSX possuem cerca de 32
dor de dezesseis Kbytes —
o Microsoft grama. POKE 23658,0 muda os carac- Kbytes de memória ROM dedicados ao
BASIC. No MSX, além de um conjun- teres de maiúsculos para minúsculos; SO. Os primeiros 16385 bytes são preen-
to de rotinas básicas, chamado BIOS POKE 23658,8 admite só maiúsculos. chidos com rotinas de entrada e saída.
(BASIC Inpui /Output System), o SO in-
1

O comando PLOT permite especifi- O interpretador BASIC começa em


cluitambém o interpretador. Os micros car uma posição absoluta da tela, en- 16385 e termina em 32769. Existem ain-
da unha Sinclair, como o ZX-81 e o Spec- quanto DRAW se refere de forma rela- da 3202 bytes dedicados às variáveis do
trum, são ainda mais restritivos, uma tiva à posição corrente do cursor gráfi- sistema, todos eles situados no topo da
vez que não permitem acesso aos regis- co. Se você precisar de um DRAW ab- memória —
62333 a 65535.
tradores internos diretamente do BASIC soluto, poderá consegui-lo através das Um
SO com essa extensão possui
(o que é essencial para que se possa se- posições de memória 23677 e 23678. Pa- quase todas as rotinas que o usuário po-
lecionar as rotinas existentes no SO). ra verificar seu efeito, digite PLOT de desejar. Muitas dessas rotinas têm si-
Seja qual for o microcomputador e 128,85. Esse comando colocará um pon- do aproveitadas no videogame Avalan-
o tipo de acesso que oferece ao SO, sem- to no centro da tela. Suponhamos que che. Contudo, como a maioria delas em-
pre é possível contornar diversos proble- você queira traçar uma linha que vá des- prega valores armazenados em registra-
mas —
inclusive a diminuição do tama- te ponto até o canto superior direito da dores internos do Z-80 —
o micropro-
nho das rotinas em código —
por meio tela, cuja posição absoluta é (255,175). cessador do MSX —
, poucas
podem ser
de alguns truques. DRAW 255,175 indicaria um ponto fo- utilizadas diretamente por programas
ra da tela, mas DRAW 255-PEEK em BASIC. A solução consiste em es-
23677, 175-PEEK 23678 lhe dará o resul- crever pequenas rotinas em código que
tado desejado. Ao subtrair PEEK 23677 modificam os valores dos registradores,
VARIÁVEIS DO SISTEMA da coordenada X e PEEK 23678 da de modo que o BASIC possa chamar a
coordenada Y, estamos, na verdade, rotina desejada do SO. exemplo Um
Os do Spectrum
usuários podem uti- efetuando uma operação para obter as desse procedimento foi dado no artigo
do SO através do coman-
lizar as rotinas coordenadas relativas do comando publicado à página 1141 de INPUT.
do USR, que também serve para execu- DRAW. De fato, é uma pena que o BASIC
tar rotinas em código de máquina colo- Um outro exemplo de utilização das não possa modificar os registradores di-
cadas temporariamente na RAM. Ten- do SO por meio de um coman-
rotinas retamente, sobretudo porque o SO do
te usar, por exemplo, o comando dire- do BASIC é dado pela simulação de um MSX dispõe de certos artifícios proje-
to RANDOM USR 0 ele provoca um
: relógio. No Spectrum, o contador de li- tados para facilitar a utilização de suas
reset geral na máquina (reinicialização). nhas de vídeo ocupa as posições 23672, rotinas pelo usuário. Algumas porções
IIIIIIIIIIIUH llllllllll
da ROM e da RAM
são preenchidas São variáveis de especial interesse pa- suas variáveis armazenadas nos primei-
com vetores que apontam para determi- ra a tela: ros 256 bytes da ROM
(página 0). Esses
nadas rotinas do SO, numa tentativa de micros não permitem a modificação di-
simplificar seu uso. 62387 a 62426 - Cada par de bytes reta dos registradores do microproces-
As rotinas de entrada e saída — co- corresponde ao endereço de sador 6502 através do BASIC. Assim,
municação com a tela, com o gerador uma BASE. Por exemplo, as rotinas que requerem parâmetros de-
de som, com o teclado e o cassete, en- 62407 e 62408 contêm o ende- vem ser usadas com pequenas rotinas em
tre outros periféricos —
estão espalha- reço de BASE(10), tabela de código para leitura e/ou modificação
das pelos primeiros 16K da ROM. Exis- nomes da tela gráfica. desses registradores.
te, porém, uma pequena região que — 62431 a 62438 - Conteúdo dos regis- O comando CALL serve para cha-
vai do endereço 59 ao 348 que con- — tradores do VDP ( Video Dis- mar não só essas rotinas mas, também,
tém vetores que apontam para as prin- play Processor). as que são montadas em código, na
cipais rotinas do BIOS. Assim, podemos 62441 - Cor de frente. RAM. Os endereços podem ser modifi-
ler acesso a essas rotinas de duas manei- 62442 - Cor de fundo. cados com POKE e lidos com PEEK.
ras: chamando seu endereço verdadei- 62443 - Cor da borda.
ro na memória ROM
ou usando seu ve- 64695 e 64696 - Coordenada X. ROTINAS DO MONITOR
tor na tabela. As rotinas do interpreta- 64697 e 64698 - Coordenada Y.
dor BASIC também são apontadas por -528 - Imprime na tela o caractere
vetores de uma tabela localizada no to- TECLADO CASSETE
cujo código está no acumula-
po da memória —
64922 a 65535.
E
dor (registrador A).
As rotinas mais interessantes neces- -384 - INVERSE.
sitam de parâmetros colocados nos re-
Apresentamos a seguir algumas roti- -380 - NORMAL.
nas de comunicação com o teclado e o Emite um sinal sonoro. No
gistradores internos. Como muitas de- -198 -

las já foram apresentadas em outros ar-


gravador cassete. A maioria dessas ro- Apple tente também -1059.
tigos publicados em INPUT, faremos tinas precisa de determinados parâme- -741 - Imprime um cursor piscante
tros nos registradores. e aguarda que se pressione
uma pequena lista de rotinas {endereços
da tabela de vetores) e endereços de va- 159 - Aguarda que uma tecia seja uma tecla, colocando então
riáveis úteis. pressionada pelo usuário e de- seu código no acumulador.
As rotinas podem ser usadas por volve seu código ASCII ao re- Também embaralha o gera-
meio dos comandos DEFUSR e USR(), gistrador A. Essa rotina pode dor de núfneros aleatórios.
por meio de
e as variáveis, PEEK e substituir a linha em BASIC -864 - Provoca um atraso de acor-
POKE. que geralmente aparece depois do com o valor do acumu-
que a mensagem "APERTE lador A. No Apple II a du-
QUALQUER TECLA" é im- ração do atraso é de (26 +
GRÁFICOS pressa: 27*A + 5*A*A)/2 microsse-
100 IF INKEYS-" " THEN 100 gundos. No TK-2000 a demo-
Eis algumas rotinas de interesse na ra é maior.
utilização da tela: 225 - Lê o cabeçalho de uma grava- -1948 - Determina qual será a cor do
65 - Desabilita a geração de ima- ção em fita cassete. gráfico de baixa resolução de
gens na tela. Pode ser útil 228 - Lê um byte da fita. O registra- acordo com o conteúdo do
quando se pretende que o dor A guardará o byte íido. acumulador.
usuário nãoacompanhe a ela- 231 - Encerra a leitura da fita. -1953 - Adiciona o valor 3 ao código
boração de um desenho com- 234 - Grava um cabeçalho na fita. da cor atual para gráficos de
plicado, vendo-o só depois de Se A = 0, o cabeçalho será baixa resolução.
completo. curto; se A= 1, será longo. -2048 - Desenha um ponto de baixa
68 - Reabilita a geração de ima- 237 - Grava um byte na fita. O
re- resolução. O acumulador de-
gens. Faz com que o processo gistrador A deverá conter o fine a coordenada vertical, e
de desenho, que a rotina an- byte a ser gravado. o registro Y determina a
terior oculta, apareça instan- 240 - Encerra a gravação. coordenada horizontal.
taneamente na tela. -2023 Desenha uma linha horizon-
98 - Muda as cores da tela de acor-
do com o valor das variáveis
UE] -

tal em baixa resolução


coordenada vertical em A,

do sistema. Muitos endereços e rotinas úteis dos coordenada horizontal inicial
108 - Equivale a SCREEN 0. Os en- microcomputadores das linhas Apple e em Y e coordenada horizon-
dereços das tabelas e as cores TK-2000 foram apresentados no ar- tal final no endereço $2C.
podem modificados atra-
ser tigo da página 261. Não voltaremos a -2008 - Desenha uma linha vertical
vés das variáveis do sistema. tratar deles, nem de alguns truques já em baixa resolução — coor-
111 -SCREEN 1 mencionados, como, por exemplo, o uso denada horizontal em Y,
114 - SCREEN 2. de CALL -151 para ativar o monitor. coordenada vertical inicial
117 - SCREEN 3. O SO do Apple e do TK-2000 divide- em A e coordenada vertical
192 - Emite um sinal sonoro. se em sistema monitor e rotina de ini- final no endereço S2D.
195 - CLS. cialização (Autostart ROM). As rotinas -1998 - Apaga a tela de baixa resolu-
207 - Mostra as teclas de função na citadas aqui são do monitor. ção. No micro Apple, preen-
parte inferior da tela. O SO do Apple e do TK-2000 co- — che a tela com caracteres @
204 - Apaga as teclas de função da mo o de todos os computadores que uti- invertidos, se for chamada no
tela. lizam o microprocessador 6502 — tem modo texto.
IHIIIIIIIII
-1994 - Igual à anterior, só que res- rotinas em código montadas na RAM. tinas principais, a saber: BLKIN no —
peita as quatro linhas de tex- Muitas variáveis são obtidas com endereço 42763 — que faz a leitura de
,

to no rodapé da tela. PEEK. um bloco de 255 bytes na fita; e


-1935 - Verifica a cor de uma posição BLKOUT — endereço 42996 — , que
da tela de baixa resolução, COMUNICAÇÃO COM 0 CASSETE grava um bloco na fita.
usando os mesmos registros Também são de utilidade para o pro-
que a rotina do endereço Todas as rotinas destinadas ao uso gramador BASIC os endereços da pá-
-2048. A cor do ponto retor- em gravador cassete empregam duas ro- gina 1, que listamos a seguir:
nará no acumulador.
-182 - Grava todos os registros do
microprocessador 6502. Usa
os endereços $45 a $49.
-193 - Recupera os registros. Usa os
endereços $45 a $49.

TELA DE ALTA RESOLUÇÃO

Os endereços que controlam o tipo de


tela no Apple foram muito usados nos
programas de INPUTe não serão repe-
tidos. Existem, contudo, alguns outros
endereços interessantes para gráficos de
alta resolução.

224/225 - Coordenada X do último


ponto plotado.
226 - Coordenada Y do último pon-
to plotado.
230 - Indica a página em que o pon-
to deve ser plotado. O
valor
32 corresponde à página 1, e
64, à página 2. Note que o
acesso a esse endereço permi-
te que se desenhe na página 2,
enquanto se mostra a página
I e vice-versa.
228 - Indica a cor do gráfico. Seus
valores estão na tabela apre-
sentada a seguir.

HCOLOR COR BYTE 228


0 preto 1 0
1 verde 42
2 violeta 85
3 branco 1 127
4 preto 2 128
5 vermelho 170
6 azul 213
7 branco 2 255

62450 - Limpa a tela (alta resolução).


62454 - Preenche a tela de alta reso-
lução com o byte 228. Além
de permitir a seleção de co-
res de fundo para seus dese-
nhos, essa rotina produz di-
versos padrões quando o
byte 228 assume valores que
não correspondem às cores
da tabela anterior.

As rotinas do SO são acessadas pelo


I comando EXEC, que também chama
IIIIIIIIIIIHH lllllllll
- Fornece o status da porta de zando o comando PEEK an- ter a largura do papel utiliza-
entrada e saída do gravador tes de abrir um arquivo. do (40, 80 ou 132).
cassete. Pode assumir os valo- 144 - Empregado pelo sistema ope- 330 - Contém o número de caracte-
res 0 (porta fechada), 1 (aber- racional para definir o compri- resenviados pelo computador
ta para entrada) e 2 (aberta pa- mento do cabeçalho. Se você para assinalar um final de li-
ra saída). Para evitar que er- tem problemas com o volume nha (EOL). Normalmente,
ros de saída destruam seu pro- do gravador, coloque um va- apenas um caractere é
grama, verifique a porta utili- lor mais alto nesta posição enviado.
por meio do comando POKE. 33 1 a 334 - Contêm os caracteres do
149/150 - Estas posições contêm o EOL: CR (13), LF (10), 0, 0.
lapso de tempo que se segue a Esses caracteres podem ser al-
um comando MOTOR ON. terados para corresponder a
POKE 149,0:POKE 150,1 re- um certo tipo de impressora.
sultará em lapso zero, útil 328 - Contém o indicador de ali-
ao se usar AUDIO ON/OFF mentação automática de li-
com controle do motor. nha. Se seu valor for 0, o
computador faz o papel avan-
PROCESSAMENTO DE TEXTOS çar automaticamente com o
retorno do carro. Qualquer
Outra seção do sistema operacional outro valor leva à impressão
que pode ser de interesse para o progra- dos caracteres do EOL após a
mador BASIC é aquela que executa os do número de caracteres indi-
testes de entrada e saída. Ela inclui en- cados por 155.

trada do teclado e saída para a tela e a


impressora.
Frequentemente, a mensagem "aper-
te qualquer tecla" surge na tela junto
O programador BASIC não tem
com um acesso às rotinas do SO que dizem res-
laço do tipo:
peito aos gráficos. Mas existem alguns
100 IF INKEVS=- - THEN 100 endereços que, junto com os comandos
PEEK e POKE, podem ser úteis.
Essa linha pode ser substituída por
outra bem mais curta: EXEC 44539. Se 182 - PMODE: número do modo gráfico.
você quiser um cursor piscante use 183/184 • Endereço final da tela.

EXEC 36038. 186/187 - Endereço inicial da tela.

Convém anotar ainda os seguintes 188 - Início da página 1.

endereços dessa seção: 200 - Coordenada X do cursor gráfico.


202 - Coordenada Y do cursor gráfico.
135 - Contém o código ASCII da
última tecla pressionada. OUTRAS ROTINAS INTERESSANTES
338 e 345 - Colocando o valor 255
nessas posições, antes do IN-
KEY$, obtém-se a auto-repe- EXEC 43486 - Atualiza todos os joys-
tiçâo das teclas. ticks; soluciona os problemas que
282 É a trava de letras maiúsculas. possam ocorrer com o comando
Você pode forçar as minúscu- JOYSTK.
las colocando um 0 ali. O va- EXEC 40999 Equivale ao botão RESET.
-

lor 255 força as maiúsculas e EXEC 41142- Reinicialização total:


qualquer outro valor desabi- equivale a desligar e ligar a máqui-
lita o uso de <SHIFT>0. na novamente.
43304 - Contém a rotina que limpa EXEC 46481 - Executa uma "coleta de
a tela. lixo" controlada nas variáveis al-
fanuméricas, evitando as desagra-
dáveis pausas que ocorrem inespe-
COMUNICAÇÃO COM A IMPRESSORA radamente nos programas que as
incluem. A quantidade de espaço
Entre as variáveis relacionadas à im- string remanescente pode ser cal-
pressora, são de maior utilidade para o culada com
programador aquelas que se encontram
nos seguintes endereços:
153 • Determina a distância entre
itens separados por vírgulas. O valor normal para o espaço
O nprmal é 16. string é 200. A
não observância
155 - Para que a função POS(-2) desse limite pode causar erros do
tenha um desempenho satisfa- tipo OS (out ofslring, que quer di-
tório, esse endereço deve con- zer: fim do espaço para string).
N " O ,

IIIIIIIIIHHH llllllllll
Abra um canal de comunicação com o

drive ou o cassete e mande seus


valiosos dados para o arquivo. Saber
manipular essa ferramenta é
fundamental para certas aplicações.

Qualquer programa que manipule apenas por um byte. Toda a informa- dos, digiteENTER ou RETURN e o la-
grande quantidade de informação deve ção deve estar na memória antes de ser ço de entrada será interrompido.
armazená-la da maneira apropriada. No transferida ao arquivo. A segunda parte do programa da —
artigo publicado à página 128, tratamos O primeiro passo para a criação de linha 100 em diante —
grava os dados
do armazenamento de uma pequena lis- um arquivo sequencial consiste na aber- no arquivo. Daremos explicações refe-
ta de telefones em DATA. O pro-
linhas tura de um canal de comunicação com rentes a seu funcionamento nas várias
o dispositivo que vai armazenar os da- i do programa.
grama apresentado permite ao usuá-
ali
rio procurar e imprimir qualquer item dos — cassete ou drive. Isso é feito por
da lista. Porém, para qualquer modifi- intermédio do comando OPEN, numa
cação na lista, é necessário interromper sintaxe que varia conforme o tipo do mi-
crocomputador. Para conhecer os co- 10 DIM A3<50,15): DIM B3 (50
a execução do programa e editar as li- 15): DIM T9C50.12): DIM Nd)
nhas DATA. Além disso, os dados só mandos mais utilizados, volte ao artigo 20 LET N-0
podem ser gravados junto com o pro- da página 688. 30 LET N-N+l
grama que os manipula. Aqui, explicamos em detalhe as téc- 40 INPUT -PRIMEIRO NOME ";AS(
Essa dependência dos dados ao pro- nicas envolvidas na criação de arquivos, H]
grama muitas vezes é indesejável. Para de modo que você poderá incorporá-las 50 INPUT "SEGUNDO NOME ";BS(N
evitá-la, convém guardar os dados em facilmente a seus programas. )

fita cassete ou disco A


recupe-
flexível. 60 INPUT "NUMERO DO TELEFONE
ração das informações é tão rápida
•;TS(N)
70 If A$(N)<>*
quanto no caso das linhas DATA, mas
AND N<50 THEN GOTO 30
a alteração e a edição de dados tornam- 60 CLS PRINT "SALVANDO DADO
se extremamente mais fáceis. Para O programa a seguir mostra como S AGORA"
:

efetuá-las, o usuário não precisa saber criar uma versão mais sofisticada da lis- 100 SAVE "CONT" DATA NO
nada a respeito do programa. ta de telefones mencionada anterior- 110 SAVE "P NOMES* DATA ASO
.

Como em muitos programas aplica- mente. Ao utilizá-la, você poderá mo- 120 SAVE "S. NOMES" DATA BS
tivos listados em INPUT, os dados são dificar, sem maiores dificuldades, as 130 SAVE "N.TELEF." DATA T3()
armazenados em arquivos, na fita ou mensagens dos comandos INPUT e o 140 PRINT "DADOS GRAVADOS"
disquete. O banco de dados, o orçamen- formato das matrizes, para que aceitem 150 STOP
to doméstico, a agenda eletrônica e a outro tipo de informação. Para a gravação, o Spectrum utiliza
planilha são exemplos de programas que Os dados são fornecidos nesta or- o comando SAVE seguido do nome do
envolvem grande quantidade de infor- dem: nome, sobrenome e número do te- arquivo. Note que cada matriz é grava-
mações. Se observarmos suas listagens lefone. Como números de telefone po- da como um arquivo distinto, receben-
com atenção, poderemos identificar as dem conter espaços, hífens e parênteses, do um nome especial. A instrução DA-
linhas que tratam da gravação e leitura convém dar-lhes a forma de cadeia de TA seguida do nome da matriz deve vir
dos dados. Elas ocupam uma porção caracteres. Se você quiser alterar o pro- depois do nome do arquivo.
mínima do programa, se comparadas às grama para lidar com outros tipos de in-
demais seções, encarregadas, entre ou- formação, poderá usar também matri-
tras coisas, de reservar espaço na memó- zes numéricas e alfanuméricas. ar-Um 10 DIM A$(50) .B3Í50) ,T$C50)
ria, estabelecer a comunicação com o quivo recebe dados em qualquer forma- 30 N-N+l
usuário e manipular os dados. to e em qualquer ordem. O
importante 40 INPUT "PRIMEIRO NOME"; AS (N)
Quando armazenamos os dados à é que a leitura se faça nessa mesma or- 50 INPUT "SEGUNDO N0ME";B3(N)
parte, as possibilidades de utilização do dem e que os dados sejam colocados no 60 INPUT "TELEFONE" T3 (N) ;

programa aumentam bastante, esten- tipo adequado de variável. 70 IF A3(N)<>"" AND N<50 THEN 3
dendo-se à criação e alteração de vários Embora seja possível armazenar in- 0
arquivos diferentes, com quantidades formações diretamente no arquivo, é 80 CLS: PRINT "GRAVANDO OS DADOS
diversas de registros e campos. mais conveniente que coloquemos os da-
100 OPEN "CAS:ARQ" FOR OUTPUT A
Empregamos em nosso programa o dos em uma matriz e depois guardemos B «1
método de armazenagem sequencial, cu- toda a matriz no arquivo. 110 PRINT II.
jo princípio é muito simples. Como vo- A primeira parte do programa tem 120 FOR L-l TO N
cê verá, ele permite que os dados sejam um pequeno laço que possibilita a en- 130 PRINT *1,A3(L) ,B3(L) ,T9(L)
convertidos a um formato que se adap- trada dos dados. Digite quantos nomes 140 NEXT
ta a diversos programas, e até mesmo a e números quiser —
o limite é a dimen- 150 CLOSE #1
computadores diferentes. são da matriz, especificada na linha 10. 160 PRINT "DADOS GRAVADOS
170 END
O arquivo sequencial caracteriza-se Modifique a dimensão, caso precise de
pela armazenagem dos dados em série, um número de itens superior a cinquen- Os dados entrados na primeira parte
dispostos um após o outro e separados ta. Quando tiver entrado todos os da- do programa são colocados em três va-
, .

um IHIIIIIIIIIII

THEN 30
80 HOME PRINT "GRAVANDO OS D
:

ADOS"
100 PRINT DS:"0PEN ARQUIVO" A primeira seção do programa, que
110 PRINT DS:"WRITE ARQUIVO" trata da entrada dos dados, é comum
120 PRINT N aos dois tipos de dispositivo, ao contrá-
130 FOR L - 1 TO N rio da segunda seção, incumbida de gra-
140 PRINT A3(L): PRINT B$(L): var os dados.
PRINT TS(L) Na versão para fita cassete, um ar-
150 NEXT L quivo é aberto pela instrução OPEN
160 PRINT D8; "CLOSE ARQUIVO"
170 PRINT "DADOS GRAVADOS" "O" que estabelece uma linha de comu-
180 ZND nicação com o dispositivo de armazena-
Como dados
gravar em fila cassete mento para a saída de dados. Ela é se-
no Apple e no TK-2000? Trataremos apenas da gravação em guida por um # - 1 que diz ao compu-
.

Para contornar os problemas de ar- disquete, pois a armazenagem de arqui- tador que se trata de gravador cassete,
quivamento no Apple e no TK-2000, a vos em fita no Apple e no TK-2000 é e pelo nome do arquivo entre aspas.
melhor solução é comprar um drive de O comando PRINT # - 1 significa
muito precária. Como você deve se lem-
discos flexíveis. Mas existem algumas "imprima o próximo valor no arquivo".
brar, para controlar o drive sem sair do
alternativas — nenhuma milagrosa, po-
BASIC Applesoft utilizamos o caracte- Assim, a linha 110 grava o valor de N
demos adiantar.
Esses micros só permitem a grava- re de controle CHRS(4), que foi colo-
— o número de telefones da lista. Para
ção de uma variável indexada unidi- cado na variável DS (linha 5). o processo de leitura, que descrevemos
mensional e não montam na fita um ar- A primeira parte do programa, que a seguir, é importante que esse valor en-
quivo propriamente dito. O leitor pode cuida da entrada dos dados, coloca-os cabece o arquivo,
achar que isso já é suficiente para al- em três variáveis indexadas: A$( ), A linha 1 30 escreve cada um dos itens
gumas aplicações. Porém, a lentidão e BS( ) e TS( ). Um arquivo é aberto na no arquivo — observe que eles são se-
o grande espaço que uma pequena va- Unha 100 através do caractere de con- parados por meio de vírgulas. Finalmen-
riável ocupa na fita certamente logo
trole, seguido do comando OPEN e do te, o comando CLOSE # - I fecha o ar-
vão desencorajar os mais afoitos. quivo (linha 150),
Em nossa opinião, a saída mais con- nome do arquivo (entre aspas).
veniente para quem não pode adquirir O comando WRITE, na linha 110, A criação de arquivos em discos fle-
drive é colocar os dados em um permite a gravação de dados no arqui- xíveis é muito semelhante, empregando
um
buffer no alto da memória, usando o vo que foi aberto. Todos os comandos os mesmos comandos. A única diferen-
comando POKE. Em seguida, basta en- PRINT que aparecem em seguida escre- ça é o número utilizado após o sinal #
trar no monitor de linguagem de máqui- vem no arquivo e não na tela. O coman- OPEN "O", #1, seguida do nome do
na - comCALL-151 - egravarobuf- do CLOSE fecha o arquivo e devolve a arquivo entre aspas, abre um arquivo;
fer por intermédio do comando do W função original ao PRINT. PRINT # 1 guarda um item nele e CLO-
SE #1 trata de fechá-lo.
Como você pode notar, na linha 130
os itens estão separados por ponto e vír-
10 DIM AS(50) ,B3(50) .T3Í50) gula. Embora se permita o uso de vír-
riáveis indexadas: AS( ), B$( )eT$( ). 30 N-N+l gulas, aquele é o modo mais económi-
Na linha 100, abrimos um arquivo para 40 INPUT"PRIMEIRO NOME ";AS(N) co de armazenar dados no disco.
50 INPUT-SEGUNDO NOME " B$ (N) Os disquetes admitem a criação de
a gravação de dados em
;

fita cassete por


60 INPUT"NUMERO DO TELEFONE " ;T mais de um arquivo ao mesmo tempo,
intermédio da instrução OPEN "CAS: 3CN)
nome do arquivo" FOR OUTPUT AS 70 IF AS(N)<>" AND N<50 THEN 3 pois, ao contrário do gravador cassete,
# número do arquivo. o drive é capaz de procurar a porção
A instrução PRINT #1 significa adequada para ali gravar os dados. As-
"imprima o próximo item no arquivo". sim, podemos numerar os arquivos com
Assim, a linha 1 10 grava o valor de N #1, #2, #3 e assim por diante, en-
— total de números e nomes da lista — Use esta seção para arquivos em fita quanto o cassete é sempre numerado
para que seja usado posteriormente na cassete: com # - 1 — um PRINT # - 2 manda-
leitura do arquivo. 100 OPEN "0".*-l, "ARQUIVO" rá o dado para a impressora.
O laço entre as linhas 120 e 140 utili- 110 PRINT »-l,N
za a mesma instrução PRINT # 1 para 120 FOR L-l TO N A LEITURA DO ARQUIVO
guardar o conteúdo das três variáveis in- 130 PRINT #-l.A$(L) ,BS(L) .TSU)
dexadas. A
instrução CLOSE # 1, por 140 NEXT
sua vez, fecha o arquivo. 150 CLOSE 1-1 O programa que recupera as infor-
160 PRINT" DADOS GRAVADOS" mações gravadas no arquivo é exata-
170 END mente o inverso do programa anterior.
SI Utilize esta seção para arquivos em Ele imprime os dados lidos na tela para
DIM AS (50) ,BS(50) ,T$(S0) disquete: que possamos conferi-los.
20 D3 - CHRS (4)
30 N - N + 1 100 OPEN "O", II. "ARQUIVO"
40 INPUT -PRIMEIRO NOME ";AS(N 110 PRINT tl.N
120 FOR L-l TO N
50 INPUT "SEGUNDO NOME ";B$(N) 130 PRINT *1.AS(L) ,8S(L) ,T$(L) 200 CLEAR
INPUT "TELEFONE * ;TS (N) 140 NEXT 210 DIM NU) : LOAD "C0NT" DATA
IF A$(N) < > "
AND N < 50 150 CLOSE tl N()
TT ,

IIIIIIIIIIUH llllllllll
215 DIM A$(N(1).15): DIM BS(N( PEN ARQUIVO" A linha 210 lê a quantidade de nomes
1) ,15)
220
:DIM T$(N(1) .12)
LOAD "P NOMES" DATA ASO
.
210
220
PRINT DS "READ ARQUIVO"
:

INPUT N: DIM AS (N) BS (N)


armazenada no arquivo — —
N e utili-
, .

za esse valor para dimensionar as variá-


230 LOAD "S. NOMES" DATA BSO S IN)
240 LOAD "N.TELEF." DATA T$() 230 FOR L 1 TO N
veis. N também controla o laço de lei-
250 FOR L-l TO Nd) 240 INPUT AS(L): PRINT ASU) tura do arquivo, para que ele seja recu-
260 PBINT AS(L) ,BS(L) ,TS(L) 250 INPUT BS(L): PRINT BS(L) perado até o final. Note que bs valores
270 NEXT L 260 INPUT TS(L): PRINT TSU) lidos são colocados nas variáveis na or-
270 NEXT L dem em que foram gravados, separados
Para utilizar esse programa, rebobi- 280 PRINT DS; "CLOSE ARQUIVO" pelo mesmo tipo de sinal —
no caso da
ne a fita até o começo do arquivo gra- no do
fita, a virgula; disco, ponto e vír-
vado pelo primeiro programa. Digite A linha 200 é encarregada de apagar gula. O arquivo deve ser fechado após
RUN 200 para recuperar os dados; não os antigos valores das variáveis; dessa ser lido.
rode o programa inteiro novamente. maneira, o programa imprime somente
A linha 200 apaga os antigos valores
das variáveis, para que só os obtidos no
arquivo sejam impressos. Alinha 210 di-
os valores que obtiver no arquivo. Este
è aberto para leitura pela instrução
OPEN seguida de READ.
HM
mensiona uma nova variável N( ) com A linha 210 lé a quantidade de nomes
um elemento. Ela será usada para recu- armazenada no arquivo — —
N e utili-
FIM DE ARQUIVO

perar o valor de'N gravado anteriormen- za esse valor para dimensionar as variá- O último programa usou a variável
te. As outras variáveis são dimensiona- veis. N também tem como função con- N para controlar a leitura do arquivo.
das de acordo com o valor de N( ). Co- trolar o laço de leitura do arquivo, pa- Contudo, nem sempre é possível saber
nhecendo o número exato de elementos ra que ele seja recuperado até o final. de antemão quantos itens devem ser li-
do arquivo, não tentaremos ler além do Note que os valores lidos são colocados dos. Um modo de contornar o proble-
seu final. nas variáveis na mesma ordem em que ma é usar um marcador para sinalizar
O resto do programa é fácil de enten- foram gravados, separados pelo mesmo o fim do arquivo. O TRS-Color e o
der: simplesmente substituímos os SA- tipo de sinal —
no caso da fita, a vírgu- MSX colocam automaticamente um si-
VE do primeiro programa por LOAD. la. O arquivo deve ser fechado após ser nal desse tipo — —
EOF no final, sem-
E preciso fechar um arquivo aberto pa- lido. pre que uma instrução CLOSE é en-
ra gravação, mas não para leitura. contrada.

fffÁ
Ql Assim os usuários dos microcompu-
tadores TRS-Color e MSX
podem mo-
Para fita cassete, use esta seção:
dificar o programa anterior para que ele
200 CLEAR 2000:OPEN"CAS:ABQUIVO
leia o arquivo desde o início, parando
"FOR INPUT AS *1 200 CLEAR 2000:OPEN-I",»-1."ARQ
210 INPUTI1.N.-DIM AS (N) BS (NI T UIVO" sempre que encontrar o sinal que indi-
ttm
, ,

210 INPUT|-1,N:DIM AS(N),BS{N), ca fim de arquivo —


EOF.
220 FOR L-l TO N TS IN) Listamos o programa a partir da li-
230 INPUT ll.AS(L) ,BS{L) ,TS(L) 220 FOR L-l TO N nha 100 para que você possa compará-
235 PRINT AS(L) ;BS(L) ;TS(L) 230 INPUT #-l,AS(L) .B$<L) ,T$(L) lo à versão já dada e escolher o método
240 NEXT L 235 PRINT AS(L) ;BS(L) :TS(L) que considerar melhor.
250 CLOSE |1 240 NEXT L Modifique as linhas conforme a lis-
Para usar esse programa, rebobine a 250 CLOSE i-1 tagem abaixo e, depois, tente gravar e
fita até o começo do arquivo gravado ler o arquivo novamente.
pelo primeiro programa. Digite RUN
No caso de discos flexíveis, recorra
a esta outra:
200 para ler o arquivo; não rode o pro-
grama inteiro novamente.
Wi
A linha 200 apaga as variáveis origi- 200 CLEAR 2000:OPEN "0",#1,"ARQ 100 OPEN "CAS:ARQUIVO"FOR OUTPU
nais; dessa maneira, o programa impri-
UIVO" T AS #1
210 INPUT*I,N:DIM AS (N) BS (N) , , 110 N-0
me só aquilo que obtiver no arquivo. Es- 120 N-N+l
StN)
te é aberto para leitura pela instrução 130 PRINT #1,AS(N) ,BS(N) ,TS(N)
220 FOR L-l TO N
OPEN "CAS:" FOR OUTPUT AS, se- 230 INPUT #1,AS(L) BS (L) ,TStL)
. 140 IF AS(N)<>"" AND N<50 THEN
guida do valor adequado. 235 PRINT AS(L) :BS(L) ;TS(L) 120
A linha 210 lê a quantidade de nomes 240 NEXT L 150 CLOSE 11
armazenada no arquivo — —
N e utili- 250 CLOSE «1 160 PRINT "DADOS GRAVADOS"
za esse valor para dimensionar as variá- 170 END
veis. N também controla o laço de lei- Para executar essa parte do progra- 200 CLEAR 2000;DIM AS(50),BS(50
tura do arquivo, para que ele seja recu- ma, rebobine a fita até o inicio do ar- ) ,T$(50) :OPEN "CAS ARQUIVO" FOR
:

perado até o final. Note que os valores quivo. Digite o comando RUN
200 pa- INPUT AS |1
ra recuperar os dados; não rode o pro- 230 N-N+1:INPUT I 1 AS (N) BS (N)
, .

lidos são colocados nas variáveis na or-


grama inteiro novamente. TSCN)
dem em que foram gravados, separados 235 PRINT AS(N) ;BS(N) ;TS(N)
pelo mesmo tipo de sinal — no caso da A linha 200 apaga os antigos valores 240 IF EOF(1)-0 THEN 230
fita, a vírgula. O arquivo deve ser fecha-
das variáveis; dessa maneira, o progra-
250 CLOSE (1
do após

SCI
ser lido.
ma imprime apenas os valores que ob-
tiver no arquivo. Este é aberto para lei-
tura pela instrução OPEN "I" seguida
do valor adequado —
# - 1 para fita e
D Apague as linhas 210 e 220 e modifi-
200 DS - CHRS (4): PBINT DS:"0 # 1 para disquete. que as demais. Para a fita:
100
110
120
130
140
miiimiiiM^
OPEN "O", |-1. "ARQUIVO"
N-0
N-N+l
PRINT |-1,AS(N) ,BS(N) ,TS(N)
IF AS(N)<>"" AND N<50 THEN
,

mm
120
150 CLOSE #-1
160 PRINT "DADOS GRAVADOS"
170 END
200 CLEAR 2000;DIM A5(50),B3(50
,TS(50) :0PEN "I" #~1 "ARQUIVO"
.
> .

230 N-N+l: INPUT #-1 AS (N> BS <N) , .

.T3(N)
235 PRINT AS (M B3 (M TS (N)
; ;

240 IF EOF(-1)-0 THEN 230


250 CLOSE #-1

Para o disquete:

100 OPEN "O*. #1, "ARQUIVO"


110 N-0
120 N-N+l
130 PRINT ll.AS(N) ,BS(N) ,T3<N)
140 IF ASÍNJO"" AND N<50 THEN
120
150 CLOSE *1
160 PRINT "DADOS GRAVADOS"
170 END
200 CLEAR 2000;DIM AS<50),BS(50
) ,T3(50) :OPEN "O" *1 , "ARQUIVO"
,

230 N-N+l : INPUT »1 . AS (N) BS <N) ,

TS(N)
235 PRINT AS(N) BS (N) :T3(N)
;

240 IF EOFÍD-0 THEN 230


250 CLOSE «1
A
linha 240 de ambos os programas
verifica a ocorrência de um sinal de fim
de arquivo — EOF.
OUTROS SINALIZADORES

Para indicar o final do arquivo, os


m
10 DIM AS (50) ,BS(50) ,TS(50)
250
260
270
< 50
INPUT BS(L): PRINT BS(L)
INPUT TS(L): PRINT TS (L)
IF AS(L) < > "FIM" AND L
THEN GOTO 230
usuários dos microcomputadores da li- 20 DS - CHHS (4) 2B0 PRINT D5 "CLOSE ARQUIVO"
;

nha Apple podem colocar ali um sinali-


zador arbitrário. Já no caso do Spec-
tmm, detectamos o fim do arquivo de
outra maneira: após entrar todos os da-
30 N
40
)

50
N * 1
INPUT "PRIMEIRO NOME ";A3(N

INPUT "SECUNDO NOME ":BS(N)


U
70 IF AS(NX>"FIM" AND N<50 THE
60 INPUT "TELEFONE ";TS(N1 N 30
dos no laço inicial, digitamos uma se- 70 IF AS(N) < > "FIM" AND N < 140 IF AS(N)0"FIM" AND N<50 TH
nha arbitrária. Esta pode ser ZZZ, 50 THEN 30
- 999, a palavra FIM ou qualquer ou- EN 120
80 HOME PRINT "GRAVANDO OS D
240 IF A3(N)<>"FIM" AND N<50 TH
:

tra coisa que normalmente não se inclui ADOS" EN 230


entre os dados de um arquivo. 100 PRINT DS;"0PEN ARQUIVO"
Altere as próximas linhas e veja co- 110 N = 0
120 N - N + 1 0 USO DOS DADOS
mo utilizar um sinalizador desse tipo.
130 PRINT D3:"WRITE ARQUIVO"
Ao digitar os dados do arquivo, entre
1.40 PRINT AS(N>: PRINT BS <N) Armazenados em um arquivo, ou se-
:

a palavra FIM após o último número de PRINT TS(N)


telefone e ENTER ou RETUitN após as 150 IF AS(N) < > "FIM" AND N ja, fora de um programa BASIC, os da-
outras duas solicitações. < 50 THEN 120 dos podem ser utilizados por vários pro-
160 PRINT DS; "CLOSE ARQUIVO* gramas diferentes. Qualquer uma das
170 PRINT "DADOS GRAVADOS* rotinas de ordenação apresentadas nos
ffU 160 END artigos das páginas 468 e 738, por exem-
200 DS - CHHS (4) PRINT DS;"0
:
plo, servem para ordenar alfabeticamen-
70 IF A3(NX>"FIM" AND N<50 THE PEN ARQUIVO" te nossa lista telefónica. Uma vez feito
N 30 210 PRINT DS "READ ARQUIVO"
;

isso, podemos localizar rapidamente de-


140 IF AS(NK>"FIM" AND N<50 TH 220 DIM AS (50) ,BS(50) ,TS(50)
terminado item da lista, por meio de
EN 120 225 L - 0
230 L - L + 1
uma busca binária, como mostra o ar-
240 IF AS(NK>*FIM" AND N<50 TH tigo da página 930.
EN 230 240 INPUT AS{L): PRINT AS (D
28 APLICAÇÕES 28

A IMAGEM ESTA CENTRADA?


DISTORÇÕES JUNTO ÀS BORDAS
DEFINIÇÃO DA IMAGEM

TESTE DO VÍDEO RAZÃO DE ASPECTO


DEFINIÇÃO DAS CORES

Se você sentir a vista cansada após Os padrões visuais variam de compu- Se o monitor ou TV for colorido,
tador para computador, mas contêm ba- examine as cores das barras (ou das le-
fixar por algum tempo o vídeo do micro,
sicamente os elementos utilizados em tes- tras, no programa para o TRS-Color) na
talvez seja a hora de providenciar tes como os que são transmitidos em ho- segunda parte do teste. Os cantos e bor-
ras mortas pelas emissoras de TV: cír- das das barras coloridas devem ser bem
um outro monitor. Use este programa
culos e linhas espaçadas a curta distân- definidos, e a cor de uma barra não de-
para testar a qualidade da imagem. cia, para testar o poder de definição de ve extravasar para outra. Como a den-
tela; padrões colocados nos cantos da te- sidade, brilho e a saturação das cores
la, para testar distorções marginais da podem variar de vídeo para vídeo, ex-
Até pouco tempo atrás, o preço de imagem, e barras ou faixas de todas as perimente mudar os controles do apa-
um monitor de vídeo colocava esse pe- cores disponíveis. relho, até obter a melhor combinação.
riférico totalmente fora do alcance da Ao rodar o programa de teste, obser- Lembre-se de que diferentes ajustes de
maioria dos proprietários de micros, ve primeiro se a imagem está bem cen- cor costumam ser necessários, confor-
obrigando -os a utilizar aparelhos co- trada. Em alguns computadores, o ge- me a aplicação: texto puro, por exem-
muns de TV como saída de vídeo. rador de vídeo não deixa margem na te- plo, requer pouca cor e brilho médio;
Os televisores apresentam vários in- la, e, se ela estiver mal ajustada, haverá um jogo exige muita cor e brilho.
convenientes: a imagem pisca e oscila uma perda de gráficos e textos junto à Os programas para o MSX e o TRS-
continuamente de modo imperceptível, borda. Muitos monitores e televisores Color permitem variar a cor de fundo na
o que provoca dores de cabeça e cansa- dispõem de botões giratórios de ajuste tela pressionando seguidamente a tecla
ço visual após um certo tempo. Outro de centralização e expansão de imagem, < ENTER > na última parte do progra-
,

problema é causado pela baixa resolu- localizados atrás do aparelho.' Você po- ma. Para interrompê-lo, pressione
ção da tela, que resulta em perda de de- derá usá-los para conseguir um resulta- <BREAK> ou <CTRL><STOP>.
talhes e definição da imagem em textos do melhor. No Apple e no TK-2000, os caracte-
e gráficos. Verifique em seguida se as linhas dos res de texto não podem ser coloridos.
Entretanto, o custo relativo dos mo- retángulos junto às bordas da imagem Assim, para testar a qualidade do vídeo
nitores profissionais de vídeo tem caí- não sofrem uma grande distorção (as li- quanto a este aspecto, interrompa o pro-
do bastante nos últimos anos, tornan- nhas retas se transformam em arcos con- grama e liste-o na tela. Observe se as le-
do esse periférico cada vez mais acessí- vexos: quanto menor o raio destes, maior tras aparecem em branco puro e se não
vel. E, se você ainda não tem um, vale a probabilidade de que o monitor seja há nenhum efeito de "arco-iris" (letras
a pena ir pensando em adquiri-lo, pois de baixa qualidade). multicoloridas e borradas).
a qualidade da imagem é bem superior Todas as linhas aparecem nitidamen- Se você conhece um pouco de progra-
à de um televisor. te separadas umas das outras? Se isso mação gráfica em BASIC, não terá ne-
No artigo da página 851, descreve- não ocorrer, há problemas de definição nhuma dificuldade em modificar os pro-
mos as características técnicas que dife- na imagem, o que poderá prejudicar a gramas aqui apresentados para torná-los
renciam um televisor de um monitor e legibilidade de textos. Em muitos mo- mais completos ou atraentes. Procure
falamos dos aspectos que devem ser con- nitores e televisores, a resolução é me- alterar a combinação de cores de frente
siderados na escolha de um bom moni- lhor no sentido horizontal do que no ver- e de fundo, para verificar o efeito, gere
tor. Não há dúvida, porém, de que o tical, ou vice-versa, devido à maneira mais uma tela de textos e caracteres grá-
melhor critério para essa seleção ainda como os pontos coloridos de fósforo são ficos etc.
é o "Teste de São Tomé" ou seja, — dispostos na tela. Monitores de boa qua-
ver como fica a imagem no vídeo, quan- lidade têm resolução igual em todas as
do o conectamos ao nosso computador. direções.
Como há problemas de compatibilida- Os círculos que o programa desenha
10 PMODE 4. 1:PCLS:SCREEN 1,1
de entre monitores e micros, é funda não são perfeitos, tendendo a assumir 20 FOR K-0 TO 1:F0R J-0 TO 15 S
mental que você use o seu modelo na ho uma forma ovalada? Este é um bom tes- TEP K+2
ra desse teste. te para uma das características dos ví- 30 LINE (K*16+J,K*16+J)-(255-K»
O programa listado neste artigo foi deos de boa qualidade, a chamada ra- 16-J.191-K"16-J) ,PSET,B
projetado para testar as características zão de aspecto: para obtê-la, dividimos 40 NEXT J.K
do vídeo em diferentes linhas de compu- o diâmetro transversal do circulo pelo .50FOR K-100 TO 154 STEP 2:LINE
tadores. A versão para o Spectrum mos- diâmetro vertical. Idealmente, é claro, (K.85)-(K,105) PSET: LINE (113. K-
,

tra um único padrão visual na tela; já o resultado deverá ser 1. 32)-(141.K-32) ,PSET:NEXT
60 FOR K-l TO 100 STEP 10:CIRCL
as versões para o|MSX, Apple, TK-2000 Verifique também se as linhas apare-
E<127,95) ,K,5:NEXT
e TRS-Color mostram duas ou três te- cem traçadas com nitidez ou se as bor- 70 IF INKEY3--" THEN 70
las sucessivas, cada qual projetada pa- das e cantos parecem borrados. Umpro- 80 PMODE 1,1:PCLS:SCREEN 1.0
ra testar um aspecto do funcionamento blema desse tipo pode prejudicar a legi- 90 FOR J-0 TO 191 STEP 48:C0L0R
do vídeo. bilidade de um texto na tela. J/48+1
Y/l': i i d u i li H t

niHilt!
IjjjjiHH

Padrões de teste de vídeo utilizadas em diferentes computadores.

100 LINEíO. J)-{255.J+47) .PSET.B 57 PRINT AT 19.4;: FOR n-0 TO 25 LET YO - XOrLX - LX - 10:LY
2: FOR m-0 TO 7: PRINT - LY - 10
F NEXT
HPLOT XO.YO TO XO + LX.YO T
:

110 FOB J-0 TO 255 STEP 63:FOB BRIGHT 1; INK m; PAPER p-.CHBS 30
K-0 TO 63 STEP 4:COLOR J/63+1 (64+n*7+ia) NEXT m: NEXT n
-, : O XO + LX.YO + LY TO XO.YO + LY
120 LINE(K+J,0)-(K+J.191) ,PSET 60 FOR n-0 TO 7: B0RP p R n: TO XO.YO
130 NEXT K,J PAUSE 50: NEXT n: PAUSE 50 40 NEXT XO
140 IF INKEYS-"" THEN 140 200 NEXT l NEXT p! 50 FOB Y - 60 TO 100 STEP 2
150 S-l-StSCBEEN 1,S:GOTO 140 55 HPLOT 110. Y TO 150.
57 HPLOT 50, Y TO 70, Y: HPLOT 1
90. Y TO 210,
f/fi
60 NEXT Y
65 FOR X - 95 TO 165 STEP 3
10 S-S+l: COLOB 15 S S SCBEEN 2 . . :

70 HPLOT X.6B TO X.93


5 FOB P-O TO 7: FOB i-0 TO 7 15 CL=15:IF S-15 THEN CL-1
75 NEXT X
IF p-i THEN GOTO 200 20 FOB K-0 TO 1 FOR J-0 TO 15 S :
:
85 FOR R = 10 TO 60 STEP 10
6 PAPEB p: INK ll BORDER 0: TEP K+2
66 HPLOT 130 + R.BO
CLS 30 LINE(K*16+J.K»16+J)-{255-K*l
87 FOR A - 0 TO 6.4 STEP .1
10 FOR n-0 TO 12 STEP 2: PLOT 6-J.191-K*16-J) ,CL,B 90 HPLOT TO 130 + R * COS (A
n.n: DBA« 0,175-2"n: DRAW 255 40 NEXT J.K + B * SIN (A)
) .80
-2«n,0: DBAW 0 - 175-2*n) ,
( 50 FOB K=100 TO 154 STEP3 LINE :

DBAW -(255-2*n) ,0: NEXT n K,85)-(K,105) CL NEXT , :


95 NEXT A: NEXT R
20 FOR n-10 TO 20 STEP 2: 55 FOB K-65 TO 135 STEP3:LINE(1 100 GET AS
CIBCLE INK i;12B,85,n: NEXT 40 ,K) - (114 ,K) CL: NEXT ,
105 TEXT : HOME
60 FOR K-l TO 100 STEP 10:CIRCL 110 GR :C = 0
30 FOR n=5 TO 7: PBINT INK i E (127. 95) ,K,CL:NEXT 120 FOB I - 0 TO 36 STEP 3
;AT n.B;" * AT n+10,8;" ":
; 70 IF INKEYS- - " THEN 70 130 LET C - C + 1: COLOR- C: V
NEXT n 80 COLOB 15. S, S :SCREEN 2 LIN 1,15 AT I
40 PBINT AT 4,B;: FOB P-0 TO 90 FOB J-0 TO 191 STEP 13 135 VLIN 1,15 AT I + 1: VLIN 1
1: FOB n-0 TO 7: PRINT PAPER 100 LINE(0,J)-(255,J+11) .J/13+1 .15 AT I + 2
n;" " NEXT n: NEXT m
i : , BF NEXT
:
140 NEXT I:C - 0
50 PBINT AT 18.8;: FOB m=0 TO 110 IF INKEYS-"" THEN 110 145 FOB J - 18 TO 36 STEP 2
1: FOB n-0 TO 7: PRINT PAPEB 130 GOTO 10 150 LET C - C + 1: COLOB- C
n;" "; NEXT n: NEXT m
:
155 HLIN 0.38 AT J: HLIN 0,38
AT J + 1
55 PRINT AT 2,4;: FOB n-0 TO
2: FOR B-0 TO 7: PBINT INK m BEQH 160 NEXT J
i PAPER p;CHR$ 64+n* 7+m) ( ; 10 HGB2 -LX = 279:LY - 180 190 GET AS
NEXT m: NEXT n 20 FOR XO - 0 TO 20 STEP 4 200 TEXT : HOME: END
; |

IIIIIIIIIHUH lllllllll
BNTROLE A UMA ROTINA BÁSICA
TESTANDO A ROTINA
OUTRAS TECLAS DE RETORNO
ENTRADAS SECRETAS
ROTINA DE ENTRADA NUMÉRICA

"Envenene" seus programas de entrada salda, na linha 1030, e impressa na li-


nha 1040. Finalmente, o programa re-
de dados com uma rotina de
1000 LET SS = "" torna à linha 1010, para aguardar a pró-
grande versatilidade. Ela substitui xima tecla.
1010 LET CS-INKEYS
com vantagem o comando INPUT, 1020 IF CS-"" THEN GOTO 1010
1022 LET C=A8C(CS)
superando várias de suas limitações. 1025 IF C-13 THEN RETURN LIMITE PARA A ENTRADA
1030 LET SS-SS+CS
1040 PRINT CS; Ao retornar da rotina, o cursor
O comando INPUT satisfaz a maio- 1060 GOTO 1010 continua na mesma linha de entrada. A
ria das necessidades de programação de linha 100 força sua mudança para a li-
entrada de dados. Em certas situações, nha seguinte, mas pode ser retirada, se
porém, a utilização desse comando apre- necessário —
por exemplo, se você esti-
senta alguns sérios inconvenientes. En- Modifique as seguintes linhas, para ver escrevendo um programa de forma-
tre eles, podemos citar: micro ZX-81: tação de tela de entrada, com vários
- toda vez que o programa executa um campos da mesma linha.
comando INPUT, o cursor muda de li- O programa principal pode ser mo-
nha na tela quando o usuário pressiona dificado de modo a colocar o cursor
a tecla < ENTER > num ponto determinado da tela, antes
-um ponto de interrogação é sempre co- de chamar a sub-rotina da linha 1000.
locado na tela (nos micros pertencentes Suprima a linha 1020 e substitua a li- Acrescente as seguintes linhas para ve-
às linhas TRS-80, TRS-Color e MSX), nha 1010, para o programa funcionar no rificaro efeito obtido:
ou força a entrada na última linha (ca- Apple e no TK-2000:
so dos micros da linha Sinclair: ZX-81
e Spectrum); 1010 GET CS
- todos os caracteres digitados aparecem Teste a rotina, acrescentando a este
na leia: é impossível ocultá-los (como se pequeno programa:
faz, por exemplo, na entrada de uma se-
nha secreta);
-é necessário pressionar < ENTER >
para terminar a entrada; 10 PRINT
- nào existe nenhum controle sobre os 90 PRINT "ENTRE: "
caracteres que estão sendo digitados. I)la 100 GOSUB 1000
110 PRINT
APLICAÇÕES PARA A BOTINA
linha TRS, por exemplo, se pressionar-
120 PRINT SS A rotina apresentada neste artigo tem
mos a tecla de alimentação de linha (re- variadas aplicações. Usando a criativa-
130 GOTO 10
presentada pela flecha para baixo), pre- mente, você poderá trabalhar com diver-
judicaremos a formatação de uma tela sas funções impossíveis de se obter com
de entrada. El El o BASIC. Essa rotina equivale, de fato. a
É possível contornar todos os proble- Para evitar problemas de "estouro" um poderoso comando LINE INPUT que
mas mencionados recorrendo a uma ro- da área alfanumérica, acrescente esta li- alguns interpretadores possuem.
de entrada, que substitui o
tina especial nha para o TRS-80 e TRS-Color: Em programas educativos e de jogos,
comando INPUT. você pode incluir uma função de atraso
5 CLEAR 1000 máximo de tempo dentro da rotina de en-
Neste artigo, ensinaremos como de- — ou seja, a cada repetição do la-
trada
senvolver essa rotina usando a função FUNCIONAMENTO DA ROTINA ço de varredura (apenas para as versões
INKEYS, disponível no BASIC dos mi- com o comando INKEYS). uma variável
cros pertencentes às linhas Sinclair, TRS Alinha 1000 inicíaliza a cadeia de saí- T de tempo pode ser incrementada. Ao
e MSX, ou o comando GET, nos micros da, S$, que conterá tudo o que for digi- sair da rotina, o programa tem acesso ao
das linhas Apple e TK-2000. tado. As linhas 1010 e 1020 verificam se T total, informando ao usuário o tempo
alguma tecla foi pressionada. Se a res- que levou para entrar os dados.
posta for negativa, o programa continua Outra aplicação interessante consis-
UMA ROTINA SIMPLES esperando. Caso contrário, o programa te em sair automaticamente da rotina
quando um tempo máximo estipulado
prossegue para a linha 1030, que testa
para a resposta foi ultrapassado — o
Inicialmente, vamos programar a ro- se a tecla pressionada foi < ENTER >
que é últil em jogos de rapidez de ra-
tina de entrada de dados da forma mais ou < RETURN > , que assinalam o fim ciocínio, por exemplo.
simples possível, para que você possa da entrada de dados. Se foi outra tecla
entendê-la sem dificuldade: qualquer, ela é concatenada à cadeia de
; ,

IIIIIIIIIHHH IHIIIIIIIIIII

QHúEElM
80 PRINT AT 10 10; .
1026 IF C-3 AND LEN(SS)>0 THEN
1070
IIÚ 80 PRINT 128,
1070 LET SS-LEFT$(SS.LEN(S$)-1)
1080 GOTO 1040

fífi 1026 IF C = 8 AND LEN [S$. >0 THEN


80 LOCATE 10,10 1070
1070 LET SS-SSÍTO LEN(SS)-l) O que faz a instrução LINE INPUT?
1080 GOTO 1040 Esta resposta é dirigida aos usuários
a] si de computadores TRS-80 (com BASIC
nível II), ZX-81, Sinclair, Apple e TK-2000.
80 HTAB 10 VTAB 10 :
O BASIC padrão de suas máquinas não
1026 IF C = H4 AND LEN(SS)>0 dispõe da instrução LINE INPUT, mas a
APERFEIÇOAMENTOS THEN 1070 sub rotina apresentada neste artigo po-
1070 LET S$=SS(TO LEN (SS) "D de substituí-la muito bem.
1080 GOTO 1040 Como o nome sugere, a instrução
Como está, a rotina oferece poucos LINE INPUT permite a entrada de' uma
recursos e não apresenta vantagens de A linha 1026 verifica se a variável de linha de texto pelo teclado. Essa linha
ordem significativa em relação ao co- saída já tem no mínimo um caractere e se é armazenada em uma variável literal

mando INPUT. Mas existem várias ma- a tecla de correção foi pressionada (códi- ou string, nomeada pela instrução. Por
exemplo:
neiras de aperfeiçoá-la. Podemos, por go ASCII 8; em se tratando do ZX-81, de-
exemplo, estabelecer um limite máximo ve ser pressionada a tecla < -, cujo códi-
LINE INPUT X9
para o número de caracteres que devem go é 114).
ser digitados, o que nos permitirá entrar Em caso positivo, a rotina desvia pa- Não podemos colocar outras variá-
dados sem a necessidade de pressionar ra a linha 1070, que extrai o caractere mesma instrução.
veis para entrada pela
a tecla <ENTER>. apagado e vai para a linha 1040. Esta
Ao contrário da instrução INPUT, LI-
Acrescsnte esta linha à sub-rotina: faz retornar o cursor, imprimindo-a so- NE INPUT não imprime na tela o ponto

sshhmse
1050 IF LEN(S$)-MX THEN RETURN
bre a posição anterior.

ENTRADAS SECRETAS
de interrogação -
para o usuário -. o que dá
liberdade de programação.
sinal

O LINE INPUT aceita uma linha de


de prontidão
uma maior

texto contendo vírgulas, pontos e vír-


Se quiser que os caracteres digitados gulas e outras pontuações - que nos
A variável MX, que indica o tama-
— obrigariam ao uso de aspas, para deli-
nho máximo do campo, deve ser espe- não apareçam na tela para a entrada
cificada antes de se chamar a rotina. Pa- de uma senha secreta, por exemplo — mitar o string de entrada, caso utilizás-
semos uma instrução INPUT. Assim, é
ra testá-la, acrescente estas linhas ao substitua a linha 1040 por:
ideal para a entrada em processamen-
programa principal:

20 PRINT "TAMANHO DO CAMPO ";


30 INPUT MX
5 SHOWS] El to de texto.

corram certos caracteres, como vírgulas,


1040 IF SX-1 THEN PRINT CS;
Podemos ainda utilizar uma outra te- ou, também, que a entrada seja apenas
cla — como <SCAPE> — para con- Avariável SX indica se o caractere
numérica.
digitado deve ser mostrado (SX= 1) ou
cluir a entrada de dados. O procedimento é, na verdade, bas-
não (SX < > 1). Para testar essa modi- tante simples. Para obter uma rotina de
Substitua a linha 1025 por:
ficação, acrescente as próximas linhas

SSOHWSE1 ao programa principal:

60 PRINT "ENTRADA INVISÍVEL


entrada numérica, por exemplo, basta
que acrescentemos:

SOOWSE
1025 IF C-TX THEN RETURN tSIM-0) "1
70 INPUT SX
1027 IF NOT (C>-43 AND C<-46)
Note que TX deve ser especificada
AND NOT (C>-4B AND C<=57) THEN
pelo programa que chama a sub-rotina. GOTO 1020
ENTRADAS NUMÉRICAS
Acrescente estas linhas, para testar a
nova opção:
Podemos tornar nossa rotina de en-
40 PRINT "CÓDIGO DE TERMINO trada ainda mais versátil. Uma opção in-
50 INPUT TX teressante consiste em utilizar a chama- 1027 IF C<>21 AND C022 AND
da censura de entrada, por intermédio C<>26 AND C< >27 AND NOT IO-28
AND C<-37) THEN COTO 1020
Umarotina de entrada de dados tam- da qual fazemos com que a rotina igno-
re automaticamente toda tecla que não Essa linha verifica se o caractere en-
bém não estaria completa se não ofere-
esteja incluída dentro de um
determina- trado está entre 0 e 9 ou se é um sinal
cesse ao usuário a possibilidade de cor-
do conjunto de entrada. Essa alternati- de mais, de menos, vírgula ou ponto. Se
rigir erros, usando a tecla <BACKSPA-
va nos permite estabelecer que todas as não for um desses, retorna para a linha
CE> ou <-. Adicione ao programa as
1020, de espera.
I seguintes linhas: teclas sejam maiúsculas, ou que não o-
29 APUCAÇÕCS 29

CARREIRA /DINHEIRO
CONSULTA CONTATOSA/IAGENS

AOS ASTROS PERSONALIDADE

Muitas pessoas não saem de casa sem do motivo de muita controvérsia. Cien- tão que permanece aberta ã discussão
tistas de histórico tão distinto, como Ainda que o tema não o apaixone
consultar o horóscopo: Você pode
Einstein e Jung, acreditavam na influên- você poderá passar horas muito agrada
não ser uma delas, mas certamente se —
cia dos astros sobre as pessoas hipóte- veis com seus amigos em torno de ui
divertirá ouvindo o que o computador se rejeitada pela maioria dos seus con- computador astrólogo. Para atribuir
temporâneos. Estudos multidisciplina- máquina esse papel, basta digitar o pro-
tem a dizer sobre seu destino.
res recentes,contudo, têm apresentado grama aqui apresentado. Ele fornecerá
algumas evidências difíceis de se refu- características de personalidade de ca-
tar. Seja como
for, o papel dos astros da um de acordo com seu signo solar
Astrologia e horóscopos intrigam as na determinação da personalidade e do assim como as previsões para o próxi
pessoas desde a Antiguidade, e lêm si- destino dos seres humanos é uma ques- mo ano. Estas se dividem em quatro ca-
" ) : : ;

29 APUCAÇÔCS 29

AO SOBBE :""TAB 4;"<1> DINHEI


0 PROGRAMA BO/CARREIRA" 'TAB 4:"<2> CONTAT
OS/VIAGENS" 'TAB 4;"<3> FAMÍLIA
Uma parte do programa é específica "
'TAB 4 "<4> AMOB "
;

para cada computador. As linhas DA- 310 LET KS=INKEYS IF K$="" :

TA são comuns a lodos, embora algu- THEN GOTO 310


mas alterações sejam necessárias, como 320 IF KS<"1" OB K$>"4" THEN
mostramos mais adiante. GOTO 310
330 BESTOBE {4000+320* (ST-1 ))
FOB T-l TO (VAL KS) -1 FOR N=0 :

TO 7: READ BS NEXT N: NEXT T


:

335 CLS PBINT AT 1,15- ((LEN


:

5 POKE 23658.8 AS) /2) ;AS" '

10 INPUT 'DIGITE SUA DATA DE 340 FOR T=0 TO 7: READ B3


NASCIMENTO CDIA, MES ANO) , PRINT BS NEXT T
' :

X.Y.Z 500 PRINT AT 21. 10: "OUTRA VEZ


20 IF X<1 OR X>31 OR Y<1 OB Y
>12 THEN GOTO 10 510 IF INKEYS="S" THEN GOTO
40 GOSUB 700 90
90 CLS : PBINT AT 1,1; "SEU SI 520 IF INKEYSO"N" THEN GOTO
GNO E " INVERSE 1 ;A3
: 510
100 PBINT AT 5. li" VOCE DESEJA 530 STOP
:"''TAB 3;"<1> PEHFIL DE PEBSO 700 FOR T=l TO 12: RESTORE (

PREVISÃO
N AL IDADE" TAB 3;"<2>
' 1000+250* (T-l)
PARA 1988"TAB 3:"<N> ENTRAB N 710 READ AS. A, B, CD
OVA DATA" 720 IF B=Y AND X>=A THEN LET
120 LET KS=INKEYS IF KS<"1" i
ST-T: LET T-12: NEXT T: RETURN
OB KS>"5" AND K3<>"N" THEN
GOTO 120 730 IF D°=Y AND X< = C THEN LET
130 IF KS="2" THEN GOTO 300 ST=T: LET T-12: NEXT T: RETURN
140 IF KS="N" THEN GOTO 10
150 CLS PBINT AT 0.15-{<LEN
:
740 NEXT T: RETURN
(AS))/2) ;AS
160 FOR B=l TO
RNDMJ + l
170 FOR N=l TO A:
2:

READ BS.CS.D
LET A-INT [
U
10 PCLEAR 1
3: NEXT N 20 DIM H$C11.7,3) .DO, 11) .83(11
180 PRINT PBINT BS'CS'DS: ) .PSU1.3.7)
NEXT B: PAUSE 0: GOSUB 700: 30 FOR K-0 TO 11 READ SS(R>.D(Q ;

GOTO 500 ,K) ,D(1,K) ,D(2.K) ,D<3.X) :FOR J-


tegorias: Dinheiro/Carreira, Conta-
300 CLS PBINT AT 8,8;"PREVIS
: 0 TO 7:FOR L-0 TO 2 : READ HS(K.J
tos/Viagens, Família e Amor.
,L) NEXT L.J.K
:

Como os horóscopos publicados nos 40 FOR K-0 TO ll:FOR J-0 TO 3:F


jornais, o nosso também não leva cm OR L-0 TO 7: READ PS (K J L) NEXT
conta a hora exata do nascimento —da- L.J.K
. , :

do que os astrólogos usam para forne- 50 CLS:INPUT"DIGITE SUA DATA DE


cer uma leitura mais completa do mapa NASCIMENTO (DIA. MES E ANO) *
astral de seus clientes. D,M, A: D-INT (D) :M-INT(M)
60 IF D<1 OR D>31 OR M<1 OR M>1
2 OR (D>30 AND (M=4 OR M-6 OR M=
OPÇÕES 9 OR M=10)) OR |D>29 AND M*2)TH
EN 50
70 SS-0
O programa pede a data dc nascimen- 80 IF M-CD(l.SS)+12MSS-2 AND M-
1) OR M>D(3.SS)-12*(SS-2 AND M-
to do consulente e dÍ2 o seu signo.
12) OB (M-D(l.SS) AND D<D(0.SS)
Oferece-lhe, em seguida, duas opções:
OR(M=D(3.SS)AND D>D{2,SS)) TH
obter um perfil de sua personalidade ou
)

EN SS-SS+1 :GOTO 80
as previsões para o próximo ano. 90 CLS:PBINT"SEU SIGNO E ";SS(S
Se o consulente escolher a primeira S)
alternativa, o programa selecionará duas 100 PBINT PBINT TAB 10 "VOCE DE
: (
)

sentenças relacionadas ao seu signo, das SEJA:


oito que tem guardadas na memória. Se 110 PRINT PBINT TAB(3}"1- PERFI
:

optar pela segunda, terá que indicar um L DE PERSONALIDADE"


dos seguintes tópicos: Dinheiro/Carrei- 120 PRINT TAB(3)"2- PREVISÃO PA
ra, Contatos/Viagens, Família e Amor.
RA 1988" :PRINT:PBINT TAB (3) "N-
A ENTRAR NOVA DATA"
Duas previsões vão então aparecer. 130 KS-INKEY$:IF KS<"1" OR(KS>"
máquina tem somente duas guardadas 2" AND KS<>"N")THEN 130
para cada tópico (por signo); portanto, 140 IF KS="2* THEN 190 ELSE IF
não haverá nenhuma variação na res- KS-"N" THEN 50
posta, se você fizer novamente a mes- 150 CLS:PBINT 616-LEN {SS (SS) /2 )

ma escolha. .SS(SS) :PRINT


IHIIIIIIIHHHH^MMHIHIIIIIIIIII

160 C-8:FOB K-l TO 2:B-RND(S|-1 T L.J.K 180 GOTO 240


:IF BOC THEN C = B ELSE K-1:NEXT 50 CLS:INPUT"DIGITE SUA DATA DE 190 CLS:PRINT TAB ( 1 0)
M
PREVISÃO
170 FOR L-0 TO 3:PBINT #L*32+K* NASCIMENTO (D.M.A) ";D.M,A:D=I SOBRE :

12B,HS(SS.C,L) NEXT L.K : NT (D! :M=.1NT(M) 200 PBINT PRINT" 1- DINHETRO/CA :

180 GOTO 240 60 IF DO OB D>31 OR M<1 OR M>] RREIHA" PRINT" 2- CONTATOíí/VTAG


:

190 CLS PHINT ê2 "VOCE GUEB SAB


:

2 OB (D>30 AND (M=4 OR M=6 OR M ENS" PBTNT" 1- FAMTLIA" PB TNT"
: :

EB SOBRE " : -9 OR B=LD) OR (D>29 AND M = 2) 4- AMOR"


200 PBINT PRINT" 1- DINHEIBO/C
: THEN 50 210 KS-INKEYS:IF KS<"1" OR KS>"
ABRE IRA" PRINT" :2- CONTATOS/VI 70 SS-0 4" THEN 210
AGEN5" PRINT"
: 3- FAMÍLIA" PRIN : 80 IF M<D 1 SS) +1 2* (SS=2 AND M=
{ .
220 CLS:PR1NT TAB {20-LEN (SS (SS)
T" 4- AMOR" 1) OR M>D(3,22)-1?*(SS=2 AND M= )/2) SS (SS) PRINT
; :

210 KS-INKEYS:IF K$<"1" OR KS>" 12) OR (M-DU.SS) AND D<D(0,SS) 230 FOH K=0 TO 7 LOCATE (64-* 32»K :

4" THEN 210 ) OR (M-DI3.SS) AND D>D (2 SS) , ) -32* (K>3) JMOD32 TNT ( (64+32"K-32 .

220 CLS:PRINT S16-LEN {SS (SS) )/2 THEN SS=SS+1 GOTO BO : * (K>3) ) /32) 'PRINT PS(SS.VAHKS)
,SS(SS) PBINT : 90 CLS PH INT "SEU SIGNO £ ":SS(
: -] ,K) ! NFXT
230 FOR K-0 TO 7 PRINT «64+32*K
: SS) 240 PBINT TAB (10) ;

" OUTRA VEZ (S


-32*(K>3) .P$(SS,VAL(KS)-1,K) NE : 100 PRINT PRINT TAB (10): "VOCE D
:
/ti)?'
XT ESEJA 250 KS = TNKEYS TF KSO"S" AND KS :

240 PRINT §448." OUTBA VEZ (S/N 1)0 PHINT PRINT TAB{3);"1- PEBF
:
<>"N" THEN 250
?" IL DE PERSONALIDADE"
) 260 IF KS="S" THEN 90 ELSE CLS:
250 KS=INKEYS:IF KSO"S" AND K$ 120 PRINT TAB<3);"2- PBEVISAO P END
<>"N- THEN 250 ABA L988" PRINT: PRINT TAB(3);"N
:

260 IF KS-"S" THEN 90 ELSE CLS: - ENTRAR NOVA DATA"


END 130 K$=TNKEYS IF KS<"1" OR (KS>
"2" AND KSO"N") THEN 130
!
ú
1.40 IF KS = "2" THEN 190 ELSE IF
Wi KS-"N" THEN 50
10
20
HOME
DIM HS(n .7. 3) ,D(3,11) .SSI1
20 DIM HS til .7. 3) ,D{3,11) .SSÍ11 150 CLS: PRINT TAB(20-LEN(SS(SS 1 ) ,PS (11 , 3.7)
) .PStll .3,7) ))/2) ;SS(SS) :PRINT 30 FOR K • 0 TO 11: READ SS(K)
30 FOB K-0 TO llrBEAD S$(K).D(0 160 C-B: FOR K-l TO 2:B»B*RND(- .D(O.K) .D(l.K) .D(2.K) .D(3,K) F :

,K) ,D(1 ,K) ,D(2.K> ,D(3.K) :FOR J- TIME)-1:IF BOC THEN C-B ELSE K OR J = 0 TO 7 FOR L - 0 TO 2: :

0 TO 7:FOR L=0 TO 2 : READ HS(K.J =1:NEXT READ HS(K.J.L): NEXT L.J.K


,L) NEXT L,J,K
:

40 FOR K-0 TO ll:FOR J-0 TO 3:F


170 FOB L=0 TO 3 LOCATE (L*32+K
*1 28)
: { 40 FOR TO 1 i FOR K-0 : J-0
MOD32) +4 TNT (L*32 + K*l 2B)
. ( TO 3: FOR L = 0 TO /: READ PS(K
OB L-0 TO 7: READ PS (K J L) :NEX , , 32):PRTNT HS (SS C L) NEXT L
. , ; , .J.L) NEXT L.J.K
:
29 APLICAÇÕES 29

SO HOME PRINT "DIGITE SOA DA :


1 ! NEXT
TA Dt NASCIMENTO (D.M.A) ": INP 170 FOB L = 0 TO 3: LET WW = L
UT D. M A D = INC (D) :M -
, INT :
* 32 + K * HTAB 123: (WW - 32
(M) * INT (WW / 32)): VTAB INT ( (

60 IF D < 1 Oíl D > 31 OH M < 1 WW / 32}): PBINT HS(8S,C,L): NE


<>R M > 12 OH IO > 30 AND (M XT L.K
4OBM-6 0BM- 4 OB M 1 1 ) 180
190
GOTO 240
HOME PBINT TAB { 10) "VOC
0R (D > 29 AND M ' 2) THEN 50 :

E DESEJA
:

70 KS * O
200 PRINT PRINT " 1- DINHEI
no ti H < 0(1>68) - 12 * tss :

= 1) OH M > D(3,SS) HO/CARBEIBA" PRINT " 2- CONTA


2 AND M ' :

TOS/VIAGENS": PBINT " 3- FAMIL


12 * (SS = 2 AND M = 12) OB (M
1 SS ) iND D < [HO, SS)
.
OB ( )
IA" PRINT " 4- AMOR"
:

210 GET KS: IF KS < "1" OR KS


l I

D{3,S9 AND D > DÍ2.SS) TH )

98 - SS + 1 COTO BO :
> "4" THEN 210
90 HOME PR I NT " SEI) SIGNO E
:
"
220 HOME :CE - 20 - LEN (SS (S
3 (SS) S)) / 2: HTAB (CE): PBINT SS (SS
" PBINT
100 PRINT IITA1J (10): PHINT :
) :

230 FOB K - 0 TO 7 LET YY - 6


VOC8 DESEJA: HTAB
32 (K > 3)
[10 PHINT PB NT TAB 3) " 1- : I I
32 :

INT (YY 32))


PEBFIL DE PKHSONAL IDADE"
:

120 PHINT TAP 3)"2- PREVISÃO !


AB INT (WW / 32)): PBINT PS(S
(

p AH A 19RB" PHINT PBINT TAB ! :


S. VAL (KS) - l.K) NEXT :

( 3t"N- ENTHAH NOVA DATA" 240 VTAB (18): PBINT " OUTRA V
130 OEt K5: IF KS < "1" OB (KS EZ (S/N) ?"
250 GET KS: IF KS < > "S" AND
> "2" AND KS < > "N") THKM 13
0 KS < > "N" THEN 250
140 11 KS " "2" THEN 190 260 IF KS " "S" THEN 90
14b IF KS - "N" THEN SO 270 IF KS = "N" THEN HOME E :

LM HOME LET CE - 20 - LEN :


ND
|SS(SS)) / 2: HTAB ICE): PHINT
SS !SS) PBINT :

160 C - B FOR K = 1 TO 2 B = :
:

INT ! HND (1 ) * 8) : IF B < > C


THEN C = B: IF B = C THEN K •
As linhas a seguir podem ser intro-
duzidas como eslão no MSX e no Ap-
ple. Se você possui um TRS-Color, de-
ve usar aspas em todas as linhas DATA
que contêm dois pontos (:) ou virgula.
Os usuários do Specirum precisarão usar
aspas em todas as linhas, exceto naque-
las que contêm números.

uso

1330
29 APLICAÇÕES 29
29 APLICAÇÕES 29
29 APLICAÇÕES 29
29 APLICAÇÕES 29
29 APLICAÇÕES 29

6390 t

6400 I
6410 E

COMO APERFEIÇOAR O PROGRAMA


Embora seja muito divertido, o pro-
grama de horóscopo apresenta uma sé-
ria desvantagem: não renova as inter-
pretações e previsões, a não ser por um
sorteio muito restrito. Assim, ele "per-
de a graça" depois de uma ou duas
consultas.
Se você conhece um pouco de pro-
gramação BASIC, porém, poderá mo-
dificar o programa e tornar seu interes-
se mais duradouro. Eis aqui algumas
práticas sugestões:
— aproveite a ideia adotada em nosso
programa original e aumente o núme-
ro de alternativas de interpretação do
horóscopo para cada signo. Se você
colocar oito ou dez alternativas mais
curtas para cada signo, e usar o gera-
7260 DATA pata
dor de números aleatórios para esco-
7270 DATA
lher uma delas, diminuirá a chance de
que o programa se repita;
— além do signo do zodíaco Ique cor-
responde a constelação que está no
ponto mais alto do céu, no momento
do nascimento), existe o signo ascen-
dente ique é a constelação que está
apontando no horizonte no momento
do nascimento!. Inclua-o no programa,
com o conjunto de interpretações cor-
respondente;
— armazene os textos de interpretação
em um arquivo de disco, separadamen-
te do programa. Depois que o signo da
pessoa foi determinado, o texto corres-
pondente será carregado na memória
e mostrado no video. Você poderá, as-
sim mudar constantemente os textos,
sem precisar alterar o programa pro-
priamente dito.

7490 c

7S00 c

7510 r.
IIIIIIIIHI IGODtMÀQUh llllfl
ÂVÂLANO ORDEM DE CHAMADA
RECOMPENSA, MO R TE OU VIDA

COMEÇA ( CÂMARA LENTA

Na base da encosta, Willie permanece 150 REM <

160 REM .

em compasso de espera. 0 cenário I 70 REM (

está completo - com pedras, buracos, A rotina a seguir é o laço principal 180 REM
que completa o jogo: 190 REM :

cobras e mar. Para que o jogo 200 REM I

10 BEM org 5B702 210 REM


comece, falta só um comando: "Ação!" 220 REM
.

20 BEM alp cal 1 59153 l

.10 REM call 58993


40 BEM call 59823
Até agora, você digitou e testou se- 50 REM call 58B82
paradamente as várias rotinas que com- 60 REM call 5B795
põem o videogame A valanche. Neste ar- 70 REM ca 58751
tigo, fornecemos a rotina final, que cha- 80 REM ld 157336)
ma Iodas as outras na ordem certa e exe- 90 REM cp
cuta o jogo completo. 100 BEM jp 59788
Depois de digitar e rodar esta rotina, 110 REM cp 2
120 REM jp z,59652
comece a jogar. Certamente você se sen- 130 BEM dll ld b,50
tirá recompensado por todo o trabalho
140 REM tJelb ld a, 255
que teve.
Caso o programa não funcione ade-
quadamente, confira-o com a listagem
completa e revisada (veja o próximo ar-
tigo desta série).
IIIIIIIIIIHI ^lllllllll!
Quando essa rotina e o restante do valor, o processador é mandado para a O registro B contém o valor 50 ape-
rotina da morte, no endereço 59652. Es- nas quando o jogo começa. Ã medida
programa estiverem na memória, come-
ta é a rotina que enterra Willie e encer-
que Willie recupera seu lanche, um no-
ce o jogo digitando a instrução:
ra a vo valor é colocado no endereço ocupa-
LET L=USH 58576 do por 50 na instrução Id b. Se você vol-
tar ao programa dos prémios, verá que
Como você deve ter notado, ela cha- o valor nesse endereço é carregado em
ma o endereço do rótulo gbin, que está
A, decrementado e colocado de volta em
na origem da rotina de inicialização do
jogo, no artigo da página 969. Se o processador fosse instruído só B cada vez que Willie recupera um item
para executar repetidamente a rotina fi- do seu lanche. Essa operação resulta,
nal, a cada vez ele chamaria todas as ou- efetivamente, em uma alteração no pro-
tras rotinas na memória, e o jogo seria grama — ou seja. uma rotina altera ou-
tão rápido que se tornaria impraticável. tra rotina. Tal expediente só é recomen-
Assim, para tornar o movimento mais dável quando seus efeitos forem total-
A rotina principal chama, nesta or-
.dem, a rotina de movimentação de Wil- lento, dois laços são construídos, o que mente controlados.
em 59153; a rotina das pedras, em
llie,
atrasa o processador em dois centésimos O processador executará o laço de
de segundo. Pode não parecer muito, atraso uma vez menos, acelerando o jo-
58993; a rotina das cobras, em 59823;
mas, considerando-se que a rotina é cha- go em cerca de 90 microssegundos.
a rotina do mar. em 58882; a rotina da
nuvem, em 58795, e a rotina das gaivo- mada seguidamente, trata-se de um tem-

tas, em 58751. po significativo.


| Bcarregado com 50. e A, com 255.
é
A o conteúdo de A é decremen-
seguir,
RECOMPENSA, MORTE OU VIDA tado. instrução jr ai manda o proces-
A Como todo bom programa, este tam-
bém oferece ao usuário a alternativa de
sador para o laço dela 256 vezes, para
A decrementado até 0. interromper a execução, sem ter que des-
Em seguida, a rotina verifica a eha- que seja
ligar o computador e perder tudo o que
Imada variável da morte. Ela é transfe- A instrução djnz decrementa o con-
teúdo do registro B e faz o processador está na memória.
Irida de 57336 para o acumulador e com- Neste ponto do programa, precisa-
Iparada com I. Se este for o seu valor,
voltar e carregar A com 255 de novo. Is-
Da instrução jr z manda o processador pa- so é feito até que B acabe sendo reduzi-
ira a rotina da recompensa, no endereço do a 0. Portanto, o laço externo é exe-
159788. Essa rotina incrementa o escore cutado cinquenta vezes, e o interno, 255
x 50 vezes.
fe coloca uma nova teia.
li O conteúdo do acumulador é então
Jlcomparado com 2. Se ele contém esse
D

IIIIIIIIIIIIH « títaOOHMWm 49 IIIIIIIIIU


mos verificar se a tecla < BREAK > foi ALP LDA »5 DEL CLRA
pressionada. Para isso, usamos o co- STA 18258 160 DELA DECA
mando in. Se < BREAK > não foi pres-
CLB 18261 190 BNE DELA
sionada, a instrução jr nz, alp faz o pro-
JSR ELB 200 DECB
BLP JSR MAN 210 BNE DEL
cessador iniciar o laço principal outra
JSR BAR 220 JSR 41409
vez. Se foi, o processador encontra a
JSR SNK 230 CMPA *3
instrução ret e volta para o BASIC. JSR SEA 240 BNE BLP
JSR MOVSUN 250 RTS
LDA 18252 260 MOVSUN EQU S4D0F
CMPA tl 270 ELB EQU S4B59
LBEQ RU 230 MAN EQU S4DBE
O programa a seguir é o laço princi- CMPA #2 290 SNK EQU 35178
pal que completa o jogo. LBEQ DIE 300 SEA EQU S4CDE
10 ORG 20932 DLL LDB 1100 310 RWD EQU S50P1
320 DIE EQU S5050
33(1 BAR EQU 34045

Carregue a parte já digitada de A va-


lanche e monte esse programa no topo.

10 ORG 19572
IIIIIIIIIHHI CÓDIGO Dl MÃQUIl IHHIIIIIIIIII
O conteúdo da variável morte, em presentação binária. A instrução BNE
PREPARANDO A ROTINA 18252, é carregado no acumulador e verifica se A chegou a 0; se ainda não
comparado com I. Se seu valor for igual chegou, é novamente decrementado.
a L Willie conquistou um prémio. Caso contrário, o processador sai fora
A é carregado com armaze-
5, valor
desse laço. Em seguida, decrementa B
nado em 18258, para ajustar o atraso do LBEQ faz o processador executar um
longo desvio para a rotina que oferece e salta para o laço interno, onde A é de-
sol. A posição de memória 18261, que
a Willie sua recompensa. crementado. Isso é feito até que B tenha
contém a variável do salto, é carregada
Se a variável morte não for igual a chegado a 0.
com 0. Garantimos, assim, que Willie
não apareça saltando na tela. 1, CMPA #2 verifica se seu valor é 2. Em outras palavras: no início, o pro-
A presença desse número indica que cessador rica no laço 256 x 100 vezes,
O processador vai para a rotina ELB
e define os bits necessáriospara os ní- Willie está morto — o processador se para tornar a execução mais lenta. Po-
desvia então para a rotina D1E, que to- rém, quando Willie consegue uma re-
veis superiores do jogo. Segue, então,
ma todas as providências necessárias pa- compensa, o jogo se acelera, pois o pro-
para a rotina MAN, que cuida do mo-
ra os funerais. cessador fica nesse laço apenas 256 x
vimento de Willie e, em seguida, salta
para BAR, SNK, SEA e MOVSUN — 99 vezes, ou 256 x 98 ou 256 x 97 e
assim por diante.
rotinas que movimentam, respectiva-
mente, a pedra, as cobras, o mar e o sol.

B é carregado com 100, funcionan-


do como contador para o maior laço de
atraso. Note que a posição de memória Para examinar o teclado, saltamos
ocupada por 100 quando o programa é para a sub-rotina em 32774. Verificamos
montado — S51EE — equivale ao byte então se a tecla < BREAK > foi pres-
decrementado na rotina do escore. sionada, comparando o valor recebido
A é apagado e decrementado, o que no acumulador com 3.

torna seu conteúdo, 255 igual a -1 na re- Se a tecla não foi pressionada, a ins-
IIIIIIIIIHH *t CÓDIGO DC MÁQUINA
llllllllll
BNE volta para dar prossegui-
Iruçâo
mento ao jogo. Caso contrário, o pro-
cessador continua, encontra RTS e re-
mi
torna para o BASIC. O
programa a seguir é o laço princi- Como você deve ter notado, esse pro-
pai que completa o jogo: grama chama o endereço inicial da ro-
tina que inicializa o jogo, publicada no
10 org 54101
artigo da página 969.
20 jg call 54603
30 call -11136
Acrescentamos um último detalhe ao 10 call 55564
programa. Na rotina que seleciona a tela so call -1131B
apropriada e ajusta o escore havia, ori- 60 call -11266
ginalmente, um RTS e duas instruções 70 call -11380 O laço principal chama, nesta ordem,
NOP. Elas foram usadas para reservar 80 Id a, {-5201) a rotina de movimentação de Willie, em
o espaço em que colocaríamos uma ins-
90 cp 1 54603; a rotina das pedras, em -1 1 136;
100 JV z. 55506 a rotina das cobras, em 55564; a rotina
trução de salto, que iria funcionar quan-
110 cp 2 do mar, em-1 1318: a rotina da nuvem,
do o jogo fosse executado pela primei- 120 jp z, 55334
ra vez. Não podíamos introduzir essa 130 ld b,50
em -1 1266, e a rotina das gaivotas, em
instrução antes de escrever a rotina de HO -11380.
atr ld a, 255
acionamento. Agora que o programa es- 150
tá pronto, montamos um JMP ALP na- 160 jr nz!dl
PREMIO. MORTE OU VIDA
quele endereço. Com isto, fechamos o i 76 djnz atr
círculo, completando Avalanche, nosso
180 ld a,
videogame em Assembler. 190 call 321 Em seguida, a rotina verifica a cha-
200 bit 4, mada variável da morte. Ela é transfe-
2 10 jr nz.jg rida de -5201 para o acumulador e com-
220 ret parada com t. Se este for o seu valor,
230
a instrução jp z manda o processador
Quando essa rotina e o restante do para a rotina da recompensa, no ende-
programa já estiverem na memória, dê reço 55506. Essa rotina aumenta os pon-
início ao jogo executando o pequeno tos de Willie e seleciona um nível maior
programa BASIC: de dificuldade.
.1681
O conteúdo do acumulador é compa-
rado com 2. Se ele contém esse valor,
o processador é mandado para a n
da morte, em 55334. Essa rotina ente
ra Willie e encerra a partida.

Se instruíssemos o processador para


executar continuamente esse laço, a ca-
da volta ele chamaria todas as rotinas
da memória com crescente velocidade,
tornando o jogo impraticável. Para lor-
nar a execução mais lenta, montamos
laços de atraso, como já fizemos na
rotina da morte.
IIIIIIIIIIIIHH
B é carregado com 50, e A, com 255.
A seguir, o conteúdo de A e decremen-
tado. A instrução jr nz faz o processa- Como todo bom programa, este tam-
dor continuar a decrementar A, no la- bém oferece ao usuário a alternativa de
ço dl, até que seu valor seja 0. interromper a execução, sem ter que des-
A instrução djnz decrementa o con- ligar o computador e perder tudo o que
teúdo do registro B e faz o processador está na memória,
voltar ao rótulo atr e carregar A com Neste ponto do programa, pre-
255 de novo. Isso é feito até que B se cisamos ver se <STOP> foi pres-
reduza a 0. Portanto, o laço exierno é sionada. Essa operação é idêntica à
executado cinquenta vezes, e o laço ín- que executamos para checar se M
terno, 255 x 50 vezes.
O registro B contém o valor 50 só de movimentação de Willie.
quando o jogo começa. À medida que O número 7 é carregado no aeu-
Willie recupera seu lanche, um novo va- mulador e a rotina 321 da ROM é
lor é colocado no endereço ocupado por chamada. O número em A corres-
50 na instrução ld b. Se você voltar à ro- ponde à linha da matriz do teclado
tina do escore, verá que o valor nesse en- na qual está a tecla que desejamos
dereço (54133) é decrementado cada vez verificar. Se alguma tecla dessa linha foi

que Wiilie recupera uma pane de seu pressionada, a rotina 321 coloca o va-
lanche. Essa operação resulta, efetiva- lor 1 no bit do acumulador correspon-
mente, em uma alteração no próprio dente a ela.
programa — ou seja, uma rotina altera A instrução bit 4,a examina o bit 4
outra rotina. Esse expediente só é reco- do acumulador, que corresponde à te-
mendável quando seus efeitos forem cia <STOP>. Se ela não foi pressio-
controlados. nada, a instrução jr nz, jg faz o proces-
Diminuindo o valor carregado em B, sador reiniciar o laço principal, jg. Ca-
o processador executará o laço interno so contrário, o processador enconlra a
256 vezes menos, acelerando o jogo. instrução rei e volta para o BASIC.
A +
7

46 PROGRAMAÇÃO DE JOGOS 46

O PINTOR OBJETIVO DO JOGO


O ROLO E A TINTA
SOMA DE VERIFICAÇÃO
NÍVEIS DE DIFICULDADE

Este divertido jogo é um bom treino 6 LET DS-INKEYS: IF DS<"1"


para os pintores "de fim de semana".
OP. DS>"5" THEN GOTO 6
7 POKE ZB951, (DS-" 1 ") '200)
t

Manejando o rolo, eles devem impedir ( (DS-"2")*175)+( (DS«"3"1 «80)


+ í(DS-"4")M0) + (D$-"5")
que a tinta escorra pela parede 10 BORDER 0:
PAPEH 7: NK 2: 1

e manche seu precioso carpete... CLSLET a$-*": FOR n-1 TO


:

LET aS"*S+" ": NEXT n


32:
14 POKE 28953,0:
FOR n-l TO 4
Manchar o carpeie de tinta é um dos PRINT PAPER 2;aS:: NEXT n
:

15 FOR N-19 TO 21: PRINT


pesadelos dos pintores domésticos. Eis
PAPER 6: AT N,0;A$: NEXT N
aqui uma boa oportunidade para que 16 PLOT 0,143: DRAW 255,0
aprimorem sua técnica de trabalho e dei- 20 RAND tJSR 28672: RAND HSR
xem de fazer tanta sujeira e provocar 28702
tanta confusão na casa, 40 PRINT AT 12,7; FLASH 1| 620 DATA 205,214,112,193.62,
O
objetivo do jogo é impedir que a PAPER Sl INK 0;" F I M DE 223,219.254,1482
JOGO"*'
FLASH OiAT 14 630 DATA 245,203.31,203,31.48,
tinta, que escorre pela parede (a tela), .

16. 203,980
chegue até o chão (linha inferior da te- PAPER 7; "PLACAR FINAL "::
;

LET BS-": FOR N-28945 TO 640 DATA 31.48, 15. 203. 31. 4B. 14
la). Para isso, você deve movimentar um .203,593
28950: LET BS=BS*CHRS (PEEK N
rolo de pintura (um sinal gráfico hori- 650 DATA 31, 4B, 13. 241.195. 156.
) NEXT N: PRINT BS
:

zontal, na tela), usando as teclas de con- 112.12.808


45 FOR N=l TO 500: NEXT U
trole do cursor. 50 IF INKEYS-"" THEN GOTO 50 660 DATA 24.7,4,24,4,5,24,1.93
670 DATA 13,241,121,254,240,48
60 RON 5
100 LET L-500: R ESTORE L: FOR ,13.120,1050
VERSÕES DO PROGRAMA 680 DATA 254,150,48.8.254,32.
N-28672 TO 28961 STEP 8
56. 4,806
110 LET T-0: FOR D-0 TO 7:
690 DATA 237,67,32.113,237,75.
O programa é apresentado em duas READ A: POKE N+D, LET T-T+A: 1

32.113,906
versões:uma para os microcomputado- NEXT D
700 DATA 197.33,29.113,205,214
compatíveis com a linha Sinclair
120 READ A: IF AOT THEN
res
PRINT "ERRO NOS DADOS DA LINHA ,112,193,1096
Specirum (TK-90X), e outra, para os da ":L: STOP 710 DATA 121.230,248,79,89.22,
linhaTRS-Color. Ambas utilizam códi- 130 LET L-L+10: NEXT N: RETURN 0,33,822
go de máquina, para que os cálculos se- 720 DATA 34.113.25.72,6.24.126
500 DATA 33.34.113,6,0,62.32, 185,585
jam efetuados com a rapidez necessária. 119,399
.

Os programas em código de máqui- 730 DATA 32.5.61.119.205.252.


510 DATA 35. 16, 252 33 128, 00, , , ]
112. 35.821
na estão incluídos no programa em BA- .14.32.630 740 DATA 16.244,42,23,113,45,
SIC, na forma de listagens numéricas 520 DATA 113.33,48.48.34.17. 32,253.766
decimais, dentro de linhas DATA. O 113,34.440 750 DATA 37.242.197.112.62.127
programa de carregamento vê se os có- 530 DATA 19,113,34.21.113.201. .219,254,1250
digos foram digitados corretamente, por 205,228.934 760 DATA 203.31,218.30.112.201
meio de somas de verificação (check- 540 DATA 112.89.22.0,33.34.113 .229.120,1144
sum). Apesar disso, convém gravar o .25.428 770 DATA 205.176.34.235.225.1.
550 DATA 126.60,254,156,200, 3.0,879
programa em fita ou disco antes de usá-
245,229,205,1475 780 DATA 237.176.235,201,42,
lo, pois um só código errado poderá da-
560 DATA 176.34.209,193,245. 118.92,237.1338
nificar o conteúdo da memória. 126,254.255.1492 790 DATA 91,120.92.25.237.90.
570 DATA 40,2.120.18.241.254,0 84.93,832
71 746
. ,
80(1 DATA 41,41.25,41.41.41.25.
580 DATA 62,128,40,4,203,31,16 34.289
1 Cl EAR 28761: GOSUB 100 .252, 736 810 DATA 118. 92. 76, 201. 213. 24S
5 CLS : PRINT AT 8, 2: "DIGITE 590 DATA 70.176.119.58.25.113, .17,22,984
NÍVEL DE DIFICULDADE" TAB H ' 214,64.839 820 DATA 113,26,60.254.58,32.6
;"<1> MUITO FÁCIL" 'TAB 8;*<2 600 DATA 50.25,113.194,194.112 .62.611
> FÁCIL" TAB 8;"<3> NORMAL"'
" .237.75,1000 830 DATA 48,18.27.24.244.18.
TAB 8;"<4> DIFICIL"'TAB 8:"< 610 DATA 32.113.62.0.33.26.113 241.209.829
5> IMPOSSÍVEL" ,197,576 840 DATA 201.48.48.48.48.48.48
46 PROGRAMAÇÃO DC JOGOS 46

1100 DATA 6,188.63.43,34,3,46,1


. 200,689 36,32.116,63.40,36.14.188,63.41
850 DATA 0.64.0.0.0.255.255. ,37.9.46.136,224.52.16.141.13.1
255.629 792
860 DATA 128.100,36.36,37.37,
1110 DATA 53, 16. 191. 63. 51. 198,
35.35,444 .111.128.90.38,251.57.31.16.142
O jogador controla o rolo por meio .63.53.14 7.186,52.4.196.31.66.8
das teclas Y. U, e O. O programa em
I 8.2347
código de máquina é responsável pelo 1120 DATA 48,133.53.4.88.73.86.
movimento do rolo e dos pingos de tin- 73.31.68.73,137,92,134.12.225.1
ta, além de cuidar do escore (número de
32.36.4.106,132.141.6.48.1.74.2
pomos marcados). 034
No programa em BASIC, a linha 1
U30 DATA 36.243,57.52,22.142,6
3.45.198.6,26,1,166.132.137.0.1
reserva espaço para o programa em có- A tinta escorrendo na tela do TRS-Color. 67.128.90.38.247,53.150,1.3,0.2
digo de máquina, por intermédio do co- 205
mando MIAR. e chama a rotina que
começa na linha 100. Esta 18 os códigos
numéricos correspondentes ao progra-
167,RND(256)-1 O jogador controla o rolo de tinta pe-
90 PMODE 3,1:PCLS 2:SCREEN 1.0 las teclas de movimentação do cursor
ma em linguagem de máquina e os co- 100 COLOR 4:LINE[0,01'(2255,0) (flechas). O programa em código de má-
loca na memória reservada (usando co- PSETrCOLOR 3 LINE (0 166) - (255 .
: ,
quina é responsável pelo movimento do
mandos POKE, na linha 10). 1
91) .PSET.BF rolo e dos pingos de tinta, além de cui-
110 DEFUSRO-15800:S-USRO{0)
dar do escore (número de pontos mar-
SOMA DE VERIFICAÇÃO 120 SC-0;CLS:FOR K-5 TO 0 STEP
~1:SC-SC*256 + PEEKU6173+K) NEXT :
cados). Ele verifica se alguma das teclas
130 PRI NT §8.-yOCE GANHOU"iSC de controle do cursor está sendo pres-
A soma de verificação é
armazenada 140 PRI NT §161, "QUALQUER TECLA sionada e desloca o rolo de tinta na di-
na variável T, que é checada a cada oi- PARA RECOMEÇAR" :AS=INKEYS reção indicada. Se o jogador consegue
to códigos pela Unha 120 do programa. 150 IF INKEYS-"" THEN 150 ELSE deslocar um pingo de tinta, um atraso
Essa linha informa se o valor da soma 50 de tempo é introduzido e o escore é au-
é igual ao primeiro número lido na li- 1000 DATA 127.63.33.127,63,37.7 mentado.
nha DATA. Em caso afirmativo, o pro- 9,95.253,63,45,253.63.47.253,63 No programa em BASIC, a linha 10
,49.142.19,14.191,63,51,158.186
grama continua até ler todos os códigos, reserva espaço para o programa em có-
,48. 2585
que estão armazenados da linha 500 ã
1010 DATA 137,1,0,191.63.41.48, digo de máquina através do comando
linha 860. 137.19.223,191,63.43.204,0,128. CLEAR. As linhas 20 a 40 lêem os có-
As linhas 5 a 7 inicializam o nível de 142.63,53,167.128.90.38,251.141 digos numéricos correspondentes ao
dificuldade —
que pode ser fácil, razoa- .29.2591 programa em linguagem de máquina e
velmente fácil, normal ou difícil e co- — 1020 DATA 182.63.37,176.63.36.1 os coloca na memória reservada (usan-
locam o valor correspondente de atraso 83,63,37.38.243,141.119,23.0.14 do comandos POKE, na linha 30).
de tempo nas locações absolutas do pro- 5,190,63,34,48,31.38,252.125.63 A soma de verificação é armazenada
grama em código de máquina, por meio ,33.2426 na variável T, que é checada pela linha
de comandos POKE. 1030 DATA 39.226.57.206.63.53,1 40 do programa. Essa linha informa se
As linhas 10 a 16 montam a tela grá- 41 ,59. 196, 127.52.4.51. 197. 166.
96.198,32,61.211.186.31,1.53.4, o valor da soma é igual ao primeiro nú-
20 chama a rotina em linguagem
fica c a
31,2641 mero lido na linha DATA. Em caso afir-
de máquina. As linhas 40 a 60 finalizam 1040 DATA 152,84.64.58,230.132. mativo, o programa continua até ler to-
o jogo e imprimem o escore. 38.1,57,132,3.64.139.3,198.3,74 dos os códigos, que estão armazenados
.43.4.68.68.32.249,234,132,231. nas linhas 1000 a 1130.
2553
1050 DATA 132,108.196.166.196.1 nível de dificuldade
10 CLEAR 200, 15799:CLS 29.168.37,5,134.1,183,63 33,57,
20 FOR K-0 TO 13:T-0:FOR J-0 TO 190,63.38.79.95.179.63,38.36,2.
25 READ A:T-T+A
:
46,2439 A linhas 50 a 80 inicializam o nível
30 POKE15800+K«26*J.A 1060 DATA 31,179.63,38,36.2.48.
de dificuldade —
que pode ser simples,
40 NEXT:READ A:IF TOA THEN PRI 31.195.255.254,36.2,46.1.52.16,
163.225.37,3,131.0.1.253,63.216 médio, difícil c "impossível" —
e colo-
NT" ERRO NOS DADOS DA LINHA" 100 ;

cam o valor correspondente de atraso de


0+K*10:END ELSE NEXT 3
locações absolutas do progra-
50 CLS PRI NT #2. "ESCOLHA NÍVEL
:
1070 DATA 38,57.134.247.127,63. tempo tias

DE DIFICULDADE" 40,120,63.40,183.255.2.246.255. ma em código de máquina, por meio de


60 PRI NT §200. "1 - FACIL-:PRINT 0.193.247.36,3,124,63,40.26.1.7 comandos POKE.
§232.-2 - SIMPLES* PRI NT §264.
: 3,2678 A linha 100 monta a tela gráfica e
*3 - MEDIO":PRINT §296, "4 - DIF 1080 DATA 129,127,34.233,57.190 a linha 110 chama a rotina em lingua-
ICIL":PRINT §326. "5 - IKPOSSIVE .63.51,198,3,134,85.167,128,90. gem de máquina.
L" 38,251.190.63.51.116.63,40.36,1 As linhas 120 a 150 finalizam o jogo
70 AS-INKEYS:IF A$<"1" OR AS>"5 0.31,2573
e imprimem o escore. A seguir, o pro- I
• THEN 70 1090 DATA 16,203.3.196,31,39,2.
48.1.116,63,40,36.8.31,16,196,3 grama pergunta ao jogador se ele dese-
80 LV-VAKAS) :POKE 16162, 6-LV:P uma rodada.
1.39,2.48.31.116.63.40,36.1451 ja participar de mais
OKE 16164. 128*64« (LW>2) :POKE 16
Mil HOGHAMAÇÁC
lllllll!

OPERAQOB CONVERSÃO DO FORMATO


COMPRESSÃO DE DATAS
TESTE DE VALIDADE

ATAS INTERVALO ENTRE DATAS

A armazenagem e a manipulação de DDMMAA ço de memória ocupado por uma data


datasem BASIC apresentam problemas de calendário, mas isso envolve algumas
Armazenando as datas como são vi- manipulações que codificam a data, im-
nem sempre fáceis de resolver. sualizadas, é impossível ordená-las. Co- pedindo sua exibição imediata (sem a
Com as rotinas aqui fornecidas, você locar um conjunto de datas em ordem prévia decodificação).
simplificará bastante seu trabalho.
ascendente, por exemplo, resultará em Um dos formatos codificados de da-
uma enorme confusão: uma data como tas é o formato de três bytes:
010187 virá antes de 011286.
Mais cedo ou mais larde, o progra- Por essa razão, é preferível usar o CHHS AA) +CHRS
l (MM) +CHR5 (DD)
mador vai ler que trabalhar com cálcu- formato sueco, já adotado universal- A
data será armazenada em uma ca-
los de datas. Como no BASIC não há mente em sistemas de computação: deia literal de três bytes, no formato sue-
nenhuma função que a realiza-
facilite co; mas não poderá ser impressa ainda.
ção desses cálculos, a tarefa poderá en-
volver algumas complicações, devido à
AAMMDD Seguem-se duas rotinas que realizam as
conversões. Nelas, D$ é uma variável li-
própria irregularidade do sistema de da- No exemplo acima, 861201 aparece- teral com uma data em oito bytes, e CS,
tação em uso —meses com número di- rá, corretamente, antes de 870101. uma variável com uma data em forma-
ferente de dias, anos bissextos etc. Eis aqui duas rotinas para converter to comprimido de três bytes.
Os principais problemas de cálculo e uma notação em outra. A variável NS
manipulação de datas, que surgem so- representa uma data em formato nor- Compressão de oito para três bytes:
bretudo em
programas para aplicações mal, de oito bytes; IS. uma data em for-
financeiras e/ou comerciais, são:
— representação interna de datas na
memória do computador;
mato invertido, de seis bytes.

Conversão de formato normal para


QQl^Sli
1200 CS=CHH3(VAL[MIDS(D3,7,2)))
— checagem da validade de uma data; mato invertido:
for-
+CHRS (UAL (MIDS ÍDS 4 2) ) +CHRS (V )

— determinação do dia da semana pa- AL(MIDS(D$.1.2))) RETURN


,

:
,

ra uma data e do número de dias com-


preendido entre duas datas;
— cálculo de data corrida a partir de
1200 LET C$=CHR$ VAL DS(7 TO 8)
certa data de calendário. +CHRS VAL DS(4 TO 5) + CHRS VAL
Mostraremos em INPUT alguns tru- DSU TO 2)
ques que simplificam essas manipu- 1210 RETURN
lações. 1000 LLT IS=NS(7 TO)+NS{4 TO 5
)+N3(l TO 2) Não se esqueça de dimensionar CS(3)
1010 RETURN e D$(8), no começo do programa.
ARMAZENAGEM DE UMA DATA
Lembre-se de dimensionar N$(8) e Descompressão de três para oito hvtes:
1$(6)no começo do programa.
Há diversos tipos de
tas. A mais comum é
notação para da-
a data gregoria-
Conversão de formato invertido para
El BttU HE]
na, ou data de calendário, que tem a for- 1300 D3-RIGHTS(STR$(ASC(MIDS(CS
formato normal:
ma: dia/mês/ano (D/M/A). 2) )
, 2) + V+RIGHTS (STRS (ASCÍMI
) ,

Essa data pode ser armazenada no D${CS, 3) ,2)+"/"+RIGHTS (STRS (A


El El MH] El
) )

micro de diferentes maneiras. A mais di-


SC(CS)) ,2) RETURN :

reta usa o formato de oito bytes:

DD/MM/ AA 1300 LET DS-STRS CODE CS (3 TO 3


)+STR3 CODE C3(2 TO 2)+STR3 COD
Em consequência, deve ser armaze- E CS(1 TO 1)
nada em uma variável literal (alfanumé- 1100 LET NS-1SI5 TO)+"/"+I3(3
1310 RETURN
rica), e não em uma variável numérica,
TO 4)+"/"+IS(l TO 2)
1110 RETURN Essa técnica tem só uma desvanta-
ocupando, ao todo, oito bytes. gem: na armazenagem de datas compri-
Podemos reduzir o espaço para a ar- Seis bytes podem significar muito es- midas em três bytes em arquivos sequen-
mazenagem suprimindo os sinais de se- paço de memória para certas aplicações ciais (filaou disco), a transmissão será
paração (barras ou pontos), já que é por exemplo, para um banco de dados, truncada sempre que surgir um dia 13
possível inseri-losnovamente no mo- em que cada registro deve reservar (pois CHRS(13) é o código ASCII para
mento de exibir ou imprimir uma data. espaço para uma ou mais datas. fim de linha). Isto não ocorrerá com ar-
Temos, então, o formato de seis bytes: Podemos reduzir ainda mais o espa- quivos de acesso aleatório.
) . /

IIIIIIIIIHHH lllllllll
se armazene uma Se a variável E retornar igual a 0, a losímpares —
a não ser que o ano em
Nada impede que questão seja divisível por 400.
data de calendário em formato numéri- data é válida; se retornar igual a 1 hou- ,

co—o que é até desejável em certas ve erro de entrada.


Porém será desperdício de DIAS ENTRE DUAS DATAS
aplicações.
memória, mesmo que usemos variáveis
inteiras (que ocupam só dois bytes de es- O modo mais fácil de determinar o
paço cada no TRS-80, TRS-Color, Ap- Para muitas das técnicas de cálculo- número de dias transcorridos entre duas
ple, TK-2000 e MSX; o ZX-81 e o Spec- de funções relacionadas a datas, é pre- datas de calendário consiste em calcu- a

trum não oferecem essa possibilidade). ciso saber o dia do ano de certa data de lar a data corrida de cada uma e obter

A armazenagem de uma data de ca- calendário. Isso caracteriza a data cor- a sua diferença mais 1 . A
operação fun-
lendário em três variáveis inteiras — por rida, composta do ano dia do ano
e do cionará bem se as datas forem do mes-
exemplo. D, M e A — ocupará oito (um número de 1 Por exemplo,
a 366). mo ano; caso contrário, dará resultados
bytes. Podemos armazená-las em uma a data corrida para 14 de maio de 1981 errados.
variável de precisão simples: é 134/81. Por isso, devemos obter um outro
Esta sub-rotina calcula a data corri- número (chamado data juliana), que le-
10000 100
da a partir de uma data de calendário va em conta o total de dias entre uma
Veja os exemplos seguintes: D$, em formato de oito bytes. O resul- data-base, fixa. c a data de calendário
tado será armazenado em N. que especificamos. Para simplificar o
Data DT cálculo, multiplicamos o ano por 365,
de forma que a data-base passa a ser
01/01/47 470.101 1900; depois, somamos o número de
31/12/87 871.231
1600 MS C "0000310590891201501812 dias referente aos anos bissextos entre
12242273303334" 1900 e o ano atual.
Note que DT não pode ser uma va- 1605 Dt=VAL(MIDS(DS. 1.2) :MI=VA ) A próxima sub-rotina calcula a dife-
riável inteira, pois esta não aceitaria os L(MIDS(DS.4,2) Aí -VAL [MIDS (DS
) : rença entre duas datas, entre 1901 e
números maiores. Assim, ficamos, de 7.2) ) 1999. Adicione-a à sub-rotina anterior,
novo, com seis bytes por data. 1610 NÍ=VAL(MIDS(M$. (M*-l)*3+l. que começa na linha 1600.
3! )+DI
1620 IF Mi>2 AND (Al AND NOT-4)
VALIDADE DE UMA DATA =0 THEN NÍ=NÍ+1
1630 RETURN
Uma boa prática de programação 1700 DS=DlS:COSUB 1600:Nl=Ni+
consiste em
testar a validade da data de A**365+INT (Ai-1) /4) (

calendário que foi entrada pelo teclado, - 1710 DS=D2S:G0SUB


1600 LET MS="000D310590a9120150 1600*N2=Ni+A*«365+INT( (At-1)
checando separadamente o dia, o mês 181212242273303334" 1720 P-INT (N2-N1 :RETURN )

e o ano. 1605 LET D=VAL DS 1 TO 2) (

Eis aqui uma rotina simples para teste 1606 LET M=VAL DS (4 TO 5)
de uma data entrada no formato de oi- 1607 LET A=VAL DS(7 TO 9)
to bytes (variável D$): 1610 LET N-VAL MS((M-1)*3+1 TO 1700 LET DS=D1S
(M-l)*3+3)+D 1705 GOSUB 1600
HHWlilEl 1620 IF M>2 AND (A AND NOT-4 =0 1706 LET N1 = N+A«365 + INT (A-U/4
THEN LET N=N+1
1630 RETURN
)

1710 LET DS=D2S


1715 GOSUB 1600
1500 E-0:MS-"312931303130313130 1716 LET N2=N+A*365+INT (A-D/4
313031" A variável MS, na linha 1600, con- 1720 LET P = INT N2-N1
1510 IF LEN(DS)<>B THEN E-1:RET tém o número do dia no ano equivalen- 17 25 RETURN
UHN te ao primeiro dia de cada mês, menos
1520 M-VAL(MIDS(DS,4,2)) :IF M<1 1, para ano não bissexto. As
variáveis A sub-rotina aceita como argumen-
OR M>13 THEN E"l RETURN :

D, M e A são extraídas da variável DS, tos duas datas, D1S e D2S. no formato
1530 D-VAL(HIDS(DS. 1, 2) :IF D<1 )
de oito bytes (DD/MM/AA), e retorna
que contém a data de calendário. Na li-
OH D>VAL (MIDS (MS (M-l) "2+1 ,2)
,
o resultado armazenado em P.
THEN 1590 nha 1610, o número de dias correspon-
dente à data D.M.A é calculado Para testá-la. acrescente as seguintes
1550 RETURN
somando~se D ao número que se obtém linhas:
extraindo-se do stríng MS o valor para
o primeiro dia do mês M.
1500 LET MS="312931303130313130 Finalmente, a linha 1620 verifica se
313031" 10 PRINT " PRIMEIRA DaTA (DD/MM/
1505 LET E-0 o mês é março ou um dos meses que o AA) " ;

1510 IF LEN(D3)<>8 THEN GOTO 15 sucedem e se o ano é divisível por 4 (ano 20 INPUT D1S
bissexto). Nesse caso. acrescenta-se ao 1
30 PRINT "SEGUNDA DATA (DD/MM/
60
1520 LET M-VAL DS (4 TO 5) número do dia, para compensar o fato
1S25 IF M<1 OR M>13 THEN GOTO 1 de fevereiro ter 29 dias. O emprego, 40 INPUT D2S
560 pouco usual, da expressão lógica AND 50 GOSUB 1700
1530 LET D-VAL DS (1 TO 2) NOT funciona como teste do resto da 60 PRINT P
1535 IF D<1 OR D>VAL MS((M-1>*2 divisão por 4. 70 GOSUB 10
+1 TO (M-l)*2+2) THEN GOTO 1590
1550 RETURN
A rotina só pode ser usada para os
anos de 1901 a 1999, pois o cálculo de Use o programa para saber quantos
1590 LET E-l dias você viveu até hoje!
I 1600 RETURN anos bissextos não funciona para sécu-
llilllllllHHHBHHi^HHHHIIIIIIIIII
COMANDOS EXTRAS
FERRAMENTAS RENUMERAC AO DE LINHAS
AU TON UM ERA C ÃO DE LINHAS
ELIMINAÇÃO EM BLOCO
OUTROS COMANDOS

Este conjunto de ferramentas de


• número de bytes livres na memória; gum erro na digitação das linhas DATA,
• comprimento de um programa; que contêm o programa em código de
programação BASIC tornará seu • numeração automática de linhas; máquina, pois efetua automaticamente
trabalho mais fácil. Com ele, você • catalogador de fitas; uma soma de verificação. Corrija todos
• conversão de hexa para decimal e os erros, antes de armazenar o progra-
terá acesso a diversos comandos
vice-versa. ma em fita.
inteiramente novos no Spectrum. Os códigos conjuntos do referenda-
Todas essas funções são chamadas dor e do extensor de comandos serão ar-
por intermédio do comando RANDO- mazenados em fita sob a denominação
Embora lodos os micros examinados M1ZE USR, seguido de um número, "TOOLK1T" CODE.
em INPUT utilizem a mesma linguagem conforme mostramos mais adiante. Para carregar o programa, digite:
BASIC, você já deve ter percebido que Uma vez que um novo comando te-
há diversas variantes, ou "dialetos" da nha sido ativado, ele pedirá diversos pa-
mesma. De fato, é muito raro encontrar râmetros —tais como os números das
um programa, mesmo curto, que possa linhas a serem apagadas — através de
ser executado sem modificações em mensagens exibidas na tela.
qualquer linha de computadores. Com O programa utiliza diversas rotinas
frequência, trata-se apenas de uma va- em linguagem de máquina fornecidas
riação na sintaxe dos comandos ou na em artigo posterior {Referência Cruza-
maneira como eles são usados; nesse ca- da). Assim, será necessário juntar os
so, a adaptação do programa não envol- dois programas. As instruções para a
ve maiores complicações. Algumas ve- execução dessa tarefa estão contidas
zes, porém, constata-se que muitos dos dentro do programa aqui apresentado.
comandos destinados a um computador Bastará, portanto, digitar o programa,
simplesmente não existem para outros. acioná-lo com um comando RUN e, en-
Ainda que eles não sejam essenciais pa- tão, seguir a orientação dada pelas men-
ra a programação de muitas tarefas, não sagens exibidas na tela.O programa in-
há dúvida de que, se fossem disponíveis, formará, também, se você cometeu al-
o trabalho do programador se tornaria
bem mais fácil. Incluem-se nessa cate-
goria os comandos para renumeração
das linhas de um programa (RENUM),
para eliminação de blocos de linhas
(DEL) etc. Presentes em computadores
de linhas mais recentes, como o MSX,
esses comandos fazem muita falta nos
micros da Unha Sinclair.
O programa apresentado neste arti-
go adiciona vários comandos desse tipo
ao interpretador dos microcomputado-
res da linha Sinclair Spectrum, facilitan-
do o desenvolvimento de programas em
BASIC. Os micros das linhas TRS-80,
TRS-Color e MSX não precisam de um
programa como este, pois já dispõem da
maioria dos comandos necessários em
seu interpretador BASIC.
O programa foi desenvolvido em có-
digo de máquina, de modo a coexistir,
na memória, com o programa em BA-
SIC e o interpretador.
São adicionados ao interpretador oi-
to novos comandos e funções:

• renumeração de linhas;
• eliminação de um bloco de linhas;
30 APLICAÇÕES 30

A rotina de remuneração de linhas é Em seguida o programa pedirá o nú- birá na tela informações contidas no ca-
ativada pelo comando: mero da linha inicial (entre 1 e 9900) e beçalho do
arquivo (header).
o incremento (1 a 9900). Para cancelar Finalmente, para converter números
RANDOMIZE USB 63489
o comando, entre dois zeros quando o decimais para hexadecimais, use:
O programa pede que se informe o número de linha aparecer na tela. A ro- RANDOMIZE USR 64394
incremento de linhas a ser utilizado (um tina terminará com uma mensagem de
erro, que deverá ser ignorada. Para efetuar a conversão no sentido
número entre 1 e 255). Para achar o
oposto, digite:
comprimento de um programa BASIC Para apagar um conjunto de linhas
residente na memória, use: de um programa, digite: RANDOMIZE USR 64453
RANDOMIZE USB 63889 RANDOMIZE USR 64000 Não é preciso pressionar <EN-
Para achar o número de bytes dispo- O programa solicita que o usuário di-
TER> após entrar o número hexa-
decimaJ.
níveisna memória, digite: gite osnúmeros de linha do início e do
fim do bloco a ser apagado. Para acio- CLEAR 63488: BORDER 0:
5
RANDOMIZE USB 63860 nar o catalogador de fitas, chame: PAPER 0: INK 6: CLS
10 PRINT AT 0,5: INVERSE 1 "C !

A numeração automática de linhas RANDOMIZE USR 63919 ONJUNTO DE FERRAMENTAS"


(comando AUTO, em outros computa- 12 PRINT AT 8,2;" Qualquer te
dores) é ativada por: A seguir, a borda da tela começará cia para carregar programa
a piscar. Posicione a fita a catalogar no em código de maquina.": PAUSE
RANDOMIZE USR 64154 inicio de um programa e pressione a te- 0
cla PLAV do gravador. O programa exi- 14 LOAD "CREF-CODE
30 APLICAÇÕES 30

15 CLS PRINT "Pokeando


: codi 198,48.119.43,16.228,229.42, 550 DATA 62,0,205,1,22,33,59,
go de maquina. Prepare o 104.92,35. 2035 255.6.4,126,229.197,205.129,15
cassete para gravar .
310 DATA 35,126,225.196,46,119 .1548
20 LET L-100: RESTORE L :FOH , 241 , 193 24 5 ,42 63 ,92 167 229
, , , , 560 DATA 193,225,35.16.245,205
N-63489 TO 64560 STEP 16 237,66,2346 ,44,15,205,23,27,221,33,58,92,
30 LET T-0: FOR D-0 TO 15 320 DATA 225,48.8.197,205,184, 221,1858
40 READ A POKE (N+D),A: LET
! 25,193,235,24.242,235,35,35, 570 DATA 203,0.126,32,13,42,89
T=T+A: NEXT D 293,126,2210 ,92.205,167.17,62,255,50.58,92
50 READ A: IF AOT THEN 330 DATA 128.119.201,62.0,205. ,1503
PRINT "ERRO DE CHECKSUM EM "; 48,252,205,26,31,33.0.0,62,0. 580 DATA 24,206,42,89,92.34.93
L! STOP 1372 .92,205,251.25,120,177,32,10,
60 LET L=L+10 340 DATA 237,66.229,193.205.43 223, 1715
70 NEXT N .45,62,254.205.1.22.205,227,45 590 DATA 254,13,40,174.205,176
100 DATA 62.12.205,48.252,205, .201 .2240 ,22,207.1.237,67,73,92,42,93,
60, 250,237.67, 155. 248, 42. 8 3. -92 350 DATA 42.75.92,237.75,83,92 92.1786
,1,2019 .62,0. 237,66,229,62,1 ,205,46, 600 DATA 235.33.65.21.229.42.
110 DATA 0.0.126,254,128.40,9, 1606 97, 92. 55, 237, B2. 229, 96, 105, 205
197,205.184,25.193,3,235.24, 360 DATA 252,193,205,43,45,205 ,110.1953
242. 1865 .227,45,62,2,205,48,252,201. 610 DATA 25,32,6,205,184,25,
120 DATA 205,43,45,58.155.248. 221.33,2239 205,232,25,193,121.61,176,40,
205,40,45.239.4.56.205,162,45, 370 DATA 32,255,37,17.0,175.55 47,197.1774
33,1788 ,205,86,5,62,3,205.48,252,221, 620 DATA 3.3.3,3.43,237.91.83.
130 DATA 15.39.167,237,66,48,2 1638 92,213,205.85,22,225,34,83,
,207.5,33.145.248.126.60.40.32 380 DATA 33,32,255,221,126,0, 1425
,1470 198.6.221.229,205,46,252,62,13 630 DATA 92.193,197,19,42,97,
140 DATA 35,229,237.91.83.92. ,215. 21 16 92,43,43,237,184,42,73.92,235,
42.75.92.167,237.82.68,77.235. 390 DATA 62.4,205,48.252,221. 193, 1874
237,2079 225.221,35,221,126,0,254.255, 640 DATA 112.43.113.43,115,43.
150 DATA 177,197.229,245.204, 40, 10.2179 114.237.75,28.255.205,115,251,
157,248,241.225,193,234.80,248 400 DATA 6.10,221.126,0,221.35 241,195.2185
.225,24.220,3147 ,215,16.248.62,13,215,62,5.205 650 DATA 195,250,33.62,255,126
160 DATA 42.83,92,58.155.248, .1660 ,60,254,58,40,8,119.11,121,128
54.0.35,119,205.40.45,239.49, 410 DATA 48,252,221.33.32,255, ,176,1896
192. 1656 221.76.11.221,70.12,195.163, 660 DATA 200,24,239,62,46.119,
170 DATA 56.42,83.92.205.184. 249,205,2266 43,24,236,62,14,205.48,252,205
25.42,75,92,43.167,237,82.216. 420 DATA 142.250,62,10.205,48, ,60.1641
235,1876 252,205.60,250,205,110,25.229, 670 DATA 250,62,13,215.197,62.
180 DATA 229,239,224.15.49.56. 62,13,2128 15,205.48.252.193.46.2.96,124.
205.162.45,225.112,35,113,43, 430 DATA 215,62.11.205,48,252, 203.1983
24,228.2004 205 60 250 ,205.110,25.193,32,
. , 660 DATA 31.203,31.201.31,203,
190 DATA 201,224,228.235.236, 16,229,2118 31,230.15.205.189,251,215,124,
239.246,255.0.0,10,0.229.6,4, 440 DATA 35,35,126,35.95,126, 230,15,2207
35.2148 87.225.237.90,17,4,0,237.90, 690 DATA 205,189,251,215,97.45
200 DATA 126,254.14,40,4,16. 229,1666 ,32,230,62,13,215,201.198,48.
246.225.201,197,35,35,35,76.35 450 DATA 197.62.0,237.66,218. 254.58.2313
,70.1613 87.252.195.89,252.6.0.197,205. 700 DATA 216,198,7,201,62,16.
210 DATA 42,83,92,217,1,1,0, 95,2158 205,48,252,17,65,255,6,4,213,
217,205,149,22,43,235,167.237, 460 DATA 252,205.115,252,193, 197,1982
66,1777 254,13.40,26,254,58,48,240.214 710 DATA 205,95,252,205,115,
220 DATA 235,48,11,217,3,217. ,48,56.2266 252,215,245,241,193,209,18,19,
197.205,184.25,193,235,24,2 34, 470 DATA 236.245,4,120,254,6, 16.239,62,2581
217,197,2442 32.4,5.241.24.225.241,245,198, 720 DATA 13.215,62.17,205.48.
230 DATA 217,209,42,155,248, 48,2126 252.221,33.85,255,17,0,16,33,0
205,169.48,235,42,104,92.35,35 480 DATA 215.24,218,221,33,49. .1472
,115.35,1986 255,120.254.0.40,207.33,0,0, 730 DATA 0,14,4,221.126.0.221.
240 DATA 114.235,62.0,167,1,9, 221, 1890 35.214,48,218,87.252,254,10.56
0.237,66.56.17.60,1,90,0,1115 490 DATA 94,0,221.86,1,241,254 ,1760
2S0 DATA 237.66.56.9.60,1,132, 0,40,7,237,90.56,13,61.32,1433 740 DATA 2,214,7,254,16.210,87
3,237.66,56,1,60.209,225,229, 500 DATA 249.221,35,221,35,5, ,252.71,254.0,40,3.25,16,1704
1647 32.231.229,193,201,207,5,42,75 750 DATA 203,58,203,27,203.56,
260 DATA 245.130,214.4.245,6,0 .92, 2073 203.27,203.58.203,27,203,58,
,56,9,79,40.12.205,65.22.35. 510 DATA 237.75.83,92,237.66, 203,27,1964
1387 192,207,9,62,10,205,48,252,205 760 DATA 13.32,208.229,193.205
270 DATA 24.6,237.68,79,205, ,60. 2040 ,43,45,205,227,45.62,13.215,
232.25.193. 241. 197. 79,6,0.9.65 520 DATA 250.34,30,255,62.13, 201.203.2139
,1666 215.62.12,205.46,252,205.60. 800 CLS PRINT AT 5,S|" COMPI
:

280 DATA 229.197.35,35,235,42, 250,34,1987 LACAO COMPLETA. "


104.92.1.5.0,237,176,193,225, 530 DATA 28.255,33,48.48.34,59 810 PRINT AT 7,2; "PREPARE O CA
229.2035 ,255,34,61.255,237.75.30.255. SSETE PARA GRAVAR"
290 DATA 397.239.224,164,5,58, 205, 1912 B20 PRINT AT 9,4; "O NOME E TOO
103.164.4,224,1,3.225,192,2,56 540 DATA 115,251.62.2,50,107, LKIT" " CODE"
,1951 92 50 10 7 ,92 205 149 23 205.
, , , , , , 830 SAvE "TOOLKIT-CODE 63489,
300 DATA 205.213,45.193.225, 176.22,1708 2000 1»
Illlllll ^^lllllllll!!
tade saída. Essas instruções são deno- dem ter até nove graus de liberdade. O
COMUMCaÇÃO COM O EXTERIOR
nível de sofisticação do braço se refle-
minadas OUT e INP, respectivamente.
Em BASIC, por exemplo, um comando: te, é claro, em seu preço final.
Para se comunicar com um robô, os Os braços mais baratos, como o Ar-
microcomputadores pessoais geralmente OUT 32,127 matron, comercializado na Europa, não
lêm pelo menos uma porta de entra- coloca o número decimal 127 na porta são programáveis. A designação de ro-
da/saída (E/S), através da qual podem de salda número 32. Normalmente, a bô não se aplica a eles, portanto não —
entrar em contato com dispositivos me- maioria dos micros de oito bits admite passam de um brinquedo mais elabora-
cânicos externos. Existem dois tipos de até 256 portas de E/S, numeradas de 0 do. Outros, como o Armbot e o Arm-
porta E/S: as seriais e as paralelas. Elas a 255. Embora algumas delas estejam re- droid 1 podem ser controlados por vá-
,

diferem entre si quanto à maneira de en- servadas para periféricos já existentes, rios tipos de microcomputador. Têm
viar e receber o fluxo de bits do perifé- como o gravador cassete, as outras es- cinco ou seis motores de passo variável
rico. Na maioria dos micros, a unidade tão disponíveis para outros usos, como e custam tanto quanto uma UCP de
básica de intercâmbio de informação é o controle de um robô. bom preço. Seus movimentos, realiza-
o byte — um conjunto de oito bits, ou O comando INP tem a mesma sinta- dos um por vez ou de modo continuo,
dígitos binários. A informação armaze- xe e é usado para ler um byte no ende- são controlados de modo direto ou por
nada em um byte é uma sequência de oi- reço da porta. Em geral, o computador uma sequência armazenada no micro. E
to algarismos 0 ou 1 —
por exemplo: não sabe quando este dado esta dispo- possível adicionar pausas, alterar a ve-
00101101. nível. Assim, costuma-se usar um outro locidade do braço e editar as sequências
Na memória interna de trabalho do comando em BASIC para testar a dis- armazenadas, para modificar ou acres-
computador, dois bytes são rotulados ponibilidade de um novo dado: WAIT centar novas fases de movimento. O
especialmente para intercâmbio de da- (não confundircom o comando PAU- programa para controle do braço pode
dos com cada porta de entrada e saída. SE dos micros da linha Sinclair). ser escrito em Assembler ou BASIC,
O primeiro byte, chamado de Registro Em uma porta paralela, os oito bits com chamadas às rotinas em código de
de Direção dos Dados {Data Direction disponíveis no periférico ou byte de en- máquina que controlam as portas de
Register, DDR), determina o status da dereço da porta são transmitidos, simul- E/S. Estas são fornecidas pelo fabrican-
porta, definindo quando o intercâmbio taneamente, por oito fios distintos. Na te que tambémcoloca à disposição do
será no sentido da entrada ou no senti- porta serial, a transmissão se realiza em usuário listagens-exemplo de BASIC,
do da saída. Em geral, se um bit no um bit de cada vez, em "fila indiana", com comentários e explicações.
DDR tiver valor igual a 0, a porta cor- por um único fio. Existem ainda braços robóticos que
respondente está recebendo informações Quando chega a seu destino, no pe- utilizam servomotores, em vez de mo-
de fora; se for igual a 1, ela está trans- riférico, a>Ínformação é usada para con- tores de passo. Um
servomotor possui
com o auxilio de um
mitindo. Portanto, trolar várias operações. Em umdispo- um sensor de posição que verifica con-
comando POKE, em BASIC, podemos sitivo eletromecãnico, como um robô, tinuamente se as posições determinadas
ajustar cada um dos oito canais coman- ela é utilizada para ligar e desligar mo- por comandos estão sendo atingidas.
dados pelo DDR, colocando um núme- tores, relés etc. Após selecionar o ende- Circuitos integrados de preço bastante
ro decimal entre 0 (todos os canais re- reço da porta de saída, o programador acessível (amplificadores lineares) per-
cebendo) e 255 (todos os canais trans- pode enviar sinais para destinos especí- mitem umcontrole razoável do perifé-
mitindo, ou seja, DDR = 1 1 1 1 1 1 1 1 em ficos. Por exemplo, se o valor é ajusta- rico. Um exemplo de braços desse tipo
binário). Colocando o valor 15, por do em 00110111, um sinal é mandado é o Beasty, comercializado na Inglater-
exemplo, teremos DDR - 00001111 — para as destinações correspondentes, ra para os micros da linha BBC.
isto é, os quatro primeiro canais estão através do terceiro, quarto, sexto, séti- O Beasty tem diversos implementos
emitindo, e os quatro últimos, receben- mo e oitavo condutores de uma porta úteis para o desenvolvimento de proje-
do. O endereço absoluto do DDR, a ser paralela, ou, sequencialmente, por um tos de robótica aplicada. Uma câmara
usado com o comando POKE, varia de fio só, de uma porta serial. miniaturizada, chamada Snap, permite
computador para computador. que o micro "veja" e mova o braço. Es-
O segundo byte que controla a porta se dispositivo contém um circuito inte-
corresponde ao endereço da mesma. Um ROBÔS PARA MICROCOMPUTADORES grado sensível à luz, que transmite uma
dado colocado nesse byte é convertido imagem digitalizada com uma resolução
pela interface, conforme a aplicação a Com o aumento do interesse pela ro- de 128 x 256. Pesa menos que 45 g, me-
que se destina, em uma série de pulsos bótica, surgiram nos últimos anos vários de 8 x 10 cm, e é capaz de captar até
de voltagem, que são então passados pa- tipos de robôs baratos que podem ser vinte imagens por segundo. Vários pro-
ra o dispositivo. No sentido oposto, as controlados por um computador domés- gramas interessantes são fornecidos com
voltagens emitidas pelo dispositivo pe- tico. As duas categorias básicas de ro- o Snap, possibilitando, entre outras
riférico são convertidas para bits pela in- bôs desse tipo são os braços robóticos coisas:
terface, e colocadas no byte de endere- e os robôs móveis (tartarugas e buggies),
ço da porta. Dessa forma, o processa- geralmente fornecidos em forma de kits -exibir as imagens captadas no vídeo do

dor central —
e qualquer programa in- para montar, e com o software neces- microcomputador. A imagem pode ser
troduzido nele —
tem fácil acesso à por- sário para operá-los. "fixada", como se fosse uma foto, ar-

ta de entrada e saída, não precisando se Os braços robóticos procuram imitar mazenada em disco ou fita, e, posterior-

ocupar com as conversões a serem rea- os movimentos do braço humano. Cos- mente, reproduzida por meio de uma
lizadas. tumam ter cinco pontos de movimento, impressora gráfica;
A linguagem de máquina, como al- ou graus de liberdade: ombro, cotove-
gumas linguagens de alto nível, entre lo, pulso, garra (com ou sem rotação ao
- animar uma sequência de imagens
elas o BASIC, dispõe de instruções pa- redor do pulso) e base do braço (movi- (vinte quadros), como se fosse um fil-

ra escrever e ler numa determinada por- mento basculante). Braços robóticos po- me ou desenho animado;
16 pmmicos 16
IHIIIIIII
- comparar duas imagens tomadas em LOGO ou uma simplificação da mesma
períodos distintos. Esse recurso tem lar- (com comandos de uma tecla), a crian-
ga aplicação, por exemplo, na monito- ça aprende a programar a tartaruga pa-
rização de residências, edifícios ou lo- ra realizar movimentos complexos. Um
jas, no sentido de evitar a penetração de dos jogos preferidos consiste em dar co-
estranhos. Se a imagem tiver se modifi- mandos pelo teclado, até que a tartaru-
cado além de um limite prefixado, um ga entre em sua "casinha". Os coman-
alarme pode ser ativado. O programa dos em LOGO, digitados em um micro-
mostra um gráfico com o número de computador, são traduzidos por uma in-
mudanças, em função do tempo; terface de software para códigos biná-
Há robôs para micros no Brasil?
rios de controle das portas de saída. Es- Os leitores que se interessaram pe
• reconhecer cenas e objetos e movimen- ses sinais são enviados por um "cordão lo assunto com certeza ficarão frustra-
tar o braço em função disso. umbilical" ligado à tartaruga, ou, nos dos com a resposta: atualmente não
modelos mais sofisticados, como a Va- há,no Brasil, robôs comerciais para co-
Muitas empresas que fabricam jogos liant Turtle, por meio de sinais infraver- nexão a microcomputadores.
mecânicos de armar, como Meccano e melhos. Uma
placa com circuitos eletrô- A Universidade Estadual de Campi-
Lego, lançaram kits com braços robó- nicos, na tartaruga, traduz os comandos
nas (Unicamp) construiu uma tartaru-
ticos, que podem ser conectados a mi- ga semelhante à criada pelo MIT, para
binários em ações sobre os motores das
uso em seus projetos com a linguagem
crocomputadores baratos, como o Sin- rodas e da caneta. A tartaruga tem ain-
LOGO. Porém, essa tartaruga não che-
clair Spectrum. Esses jogos são muito da um olho luminoso, que acende quan-
educativos —aprende-se muito sobre o do ela se movimenta.
gou a ser produzida industrialmente.
Grupos de trabalho da Universidade de
funcionamento de um robô, quando se Os comandos do LOGO permitem a São Paulo |USP) e da Universidade Fe-
tem a oportunidade de armar e progra- movimentação da tartaruga segundo um deral do Rio de Janeiro [UFRJ) desen-
mar um sistema desde o inicio. sistema geométrico, em que a própria volveram protótipos de braços robóti-
tartaruga é o ponto de referência. Exa- cos, como os descritos no artigo, mas
minaremos esses comandos em detalhe,
estes também não são comercializados
ROBÔS MÓVEIS ainda.
na série de artigos sobre novas lingua-
Para Quem tem condições, resta a
gens. Adiantamos aqui, entretanto, as
Ao contrário dos braços robóticos, possibilidade de mandar trazer do ex-
instruções mais típicas: terior um dos modelos de robô mais co-
de base estacionária, alguns robôs para
nhecidos, como a Terrapin Turtle ou a
microcomputadores, como as tartarugas
e os buggies, movimentam-se sobre ro-
FORWARD - Move a tartaruga, em Valiant Turtle (tartarugas), o Hero (ro- I

linha reta, para a frente. bô buggy da Zenith/Heathkitl, Armbot,


das. O primeiro robô desse tipo data dos
anos 40, quando o cientista britânico
BACK -Move a tartaruga, em linha re- Armdroid ou Beasty (braços robóticos)
ta, para trás. e kits da Lego.
Ross Ashby desenvolveu uma tartaruga
eletrõnica que tinha a tarefa de achar
R1GHT - Vira a tartaruga para o la-
do direito.
uma tomada para alimentar suas bate- LEFT Vira a tartaruga para o lado
- TO TRIANGULO
rias. O "bichinho", apesar de muito BEPEAT 3 (FORWARD 200 BIGHT
esquerdo.
simples, exibia notáveis e surpreenden- 120]
tes padrões "comportamentais".
PENUP - Levanta a caneta, interrom- END
pendo o desenho.
A primeira tartaruga para micros PENDOWN - Abaixa a caneta, per- Uma vez definida, a palavra TRIAN-
apareceu no Laboratório de Inteligên-
mitindo o desenho. GULO passa a fazer parte do vocabu-
cia Artificial do MIT (Massachusetts lário LOGO. Depois, para traçar a fi-
Institute of Technology), nos Estados
REPEAT - Repete uma sequência de
movimentos várias vezes. gura, basta digitar o comando TRIAN-
Unidos. Era o "filhote" da equipe do - Armazena uma sequência GULO pelo teclado.
TO...END
Prof. Seymour Papert, criador da lin- Pode-se utilizar um mesmo procedi-
programada de movimentos, que rece-
guagem LOGO. Sua estrutura também mento dentro de outros, destinados a
be um nome (procedimento).
é simples: consta de uma campânula he- realizarmovimentos mais complexos.
misférica de acrílico,montada sobre Para fazer a tartaruga desenhar um Por exemplo, para fazer com que a tar-
uma base móvel com duas rodas inde-
triângulo com lados de duzentos passos taruga desenhe uma
formada
flor de do-
pendentes, acionadas por motores con- ze pétalas triangulares iguais, digitamos
(unidades de deslocamento), as instru-
trolados pelo microcomputador. A cam- ções a serem dadas são: o seguinte:
pânula pode ser acoplada a um sensor
de contato, que se comunica com o com- FORWARD 200 TO FLOR
putador quando o robô colide com al- BIGHT 120 BEPEAT 12 [TRIANGULO BIGHT 30]
gum objeto ou parede. Na "barriga" da FORWARD 200 END
tartaruga, um solenóide controla um
RIGHT 120
FOBUABD 200 O LOGO é uma linguagem muito
porta-caneta, que levanta ou abaixa sob RIGHT 120 versátil,também empregada para fazer
controle do computador. Assim, a tar- cálculos matemáticos, manipular dados
taruga pode ser "ensinada" a traçar de- Poderíamos escrever o mesmo com simbólicos como listas, palavras e no-
senhos sobre um papel colocado no mais economia: mes etc. Associado a uma tartaruga, tem
chão. BEPEAT 3 [FORWARD 200 RIGHT o poder de tornar muito divertido o
As tartarugas têm sido muito utiliza- 1201 aprendizado da programação.
das em escolas secundárias, para ensi- Ou, ainda, armazenar as instruções Programas em outras linguagens, co-
nar conceitos de programação a crian- na forma de um procedimento denomi- mo o BASIC, também podem ser usa-
ças menores. Empregando a linguagem nado TRIANGULO: dos para controlar a tartaruga.
IH RAÍZES DE UMA LINGUAGEM
EVOLUÇÃO
LINGUAGENS IMPERATIVAS
LINGUAGENS FUNCIONAIS
QUARTA GERAÇÃO

de linguagens. Dentro de uma família, mais "pesadas", como o COBOL,


Existem atualmente mais de duzentas
as semelhanças são maiores que as dife- APL, PL/1, SNOBOL, MODULA,
linguagens de programação. renças, o que facilita muito a compreen- ALGOL e ADA, já podem ser utiliza-
Algumas delas prometem tornar-se são e o aprendizado das linguagens que das em microcomputadores da faixa
a compõem. profissional.
tão conhecidas quanto o BASIC Ao que :udo indica, a difusão dessas
no decorrer dos próximos anos. linguagens tende a crescer, conforme os
NOVAS LINGUAGENS usuários forem se familiarizando com as
suas vantagens. A expansão na capaci-
Até agora, focalizamos em INPUT Um dos fatores condicionantes do dade e velocidade dos micros fornecerá
duas linguagens de programação: As- aparecimento de novas linguagens de as bases para esse avanço.
programação é o progresso tecnológico Outro fenómeno registrado na mi-
sembler e BASIC. Estas são, de fato, as
linguagens mais difundidas entre os do hardware dos computadores — ou croinformática é a multiplicação de pro-
usuários dos microcomputadores pes- seja, a disponibilidade de memórias cen- gramas que funcionam.ao mesmo tem-
soais e domésticos existentes atualmen- trais cada vez maiores, o aumento na ve- po, como um aplicativo (bancos de da-
te no mercado brasileiro. Não são, po- locidade do processador central (UCP), dos, planilhas eletrònicas etç.) e como
rém, as únicas disponíveis. o custo mais baixo das memórias auxi- linguagem de programação. É o caso do
Algumas linguagens vêm se tornan- liares de disco, o aparecimento de redes dBASE 11 (banco de dados) e do FRED
de computadores etc. (planilha eletrònica), entre outros.
do gradativamente mais conhecidas e
utilizadas em micros pessoais — em par- Nos úitimos anos, as linguagens de O
desenvolvimento de muitos desses
ticular o LOGO, o PASCAL e o alto nível — que se parecem mais com novos aplicativos "genéricos" deu ori-

a linguagem natural humana do que gem a linguagens altamente específicas,


FORTH. Outras, criadas já há algum (DYNAMO.
com a binária, entendida somente pelos usadas para simulação
tempo, mas destinadas a computadores
de maior porte, prometem estender seu computadores —sofreram grande evo- GPSS), controle de equipamentos indus-
uso aos micros, podendo se tornar o fu- lução. Avanços técnicos recentes permi- triais (PEARL), controle de interfaces

turo "esperanto" das máquinas de me- tem que elas sejam utilizadas como a lin- e equipamentos musicais (AMPLE) etc.
nor porte. Entre elas, inc!uem-se o L1SP guagem nativa dos computadores, no lu-
e o PROLOG. Entretanto, como as lin- gar da linguagem de máquina. Com is- 0 DESENVOLVIMENTO DE LINGUAGENS
guagens mais recentes ainda se encon- so, a programação se torna muito mais
fácil, podendo sor realizada, em muitos Nada impede que todas as linguagens
tram em processo de aceitação e difu-
casos, pelos próprios usuários. de programação venham a ser desenvol-
são, nem sempre estão disponíveis para
No da década de 70, o Assem- vidas para microcomputadores Mas pa-
os micros de todas as marcas. final
BASIC erampraticamente as rece pouco provável que isso ocorra, vis-
'
Na série que se inicia com este arti- bler e o
únicas linguagens para micros de custo to o grande número de linguagens exis-
go, apresentaremos duas linguagens de
mais baixo, pois o tamanho das memó- tentes. Das mais dc duzentas desenvol-
programação cuja popularidade tem
rias ROM disponíveis limitavam muito vidas até agora, não chegam a vinte as
crescido dia a dia entre os usuários de
micros: o LOGO e o PASCAL. Cada a complexidade e a extensão do progra- que se tornaram conhecidas c utilizadas.
uma tem características que permitem ma interpretador, que deveria ficar per- Como as linguagens naturais, as lin-
sua aplicação seja como linguagem ge- manentemente na memória da máquina. guagens de programação passam por
ral de programação (como o PASCAL), Entretanto, à medida que o espaço contínuo processo de transformação, re-
seja como linguagem destinada a áreas para a memória foi sendo ampliado, visão e alteração.O FORTRAN (FOR-
específicas — a área educativa, por cresceu também a demanda por outros mula TRANstation), por exemplo, evo-
exemplo (como o LOGO). tipos de linguagem —
o que era de se luiu tanto a partir da versão original,

Examinaremos aqui alguns aspectos esperar, dado o número cada vez maior lançada em 1954, que, em alguns aspec-
do desenvolvimento de linguagens de de usuários e de possibilidades de apli- tos, é uma linguagem diversa.
cação. Surgiram então as primeiras im- Além desse contínuo aperfeiçoamen-
programação, a evolução histórica das
plementações práticas, cm microcompu- to, as linguagens também passam por
linguagens existentes e os critérios usa-
dos em sua classificação. tadores, dc FORTH, PASCAL, LOGO, um processo de geração de uma enor-
Há atualmente mais de duzentas lin- FORTRAN. PILOT, C, LISP, PRO- me quantidade de "dialetos" ou varian-
LOG, SMALLTALK e várias outras lin- desenvolvidas para implementação
guagens de programação catalogadas. A tes,
guagens. Muitas delas só podiam ser em linhas específicas de hardware, em
primeira vista, podemos ter a impressão
usadas, anteriormente, em computado- diferentes sistemas e organizações.
de que se trata de uma enorme e bíblica
"torre de Babel". No entanto, as lin- res de grande porte. Uma das limitações mais sérias en-
guagens de programação, tal como as Mesmo algumas linguagens de maior contradas pelo usuário de micros é jus-
linguagens naturais, podem ser enqua- complexidade, que encontram aplica- tamente a incompatibilidade entre dife-
I dradas em linhas evolutivas, ou famílias ções em áreas comerciais ou científicas rentes dialetos do BASIC. Um progra-
IIIIIIIIIIIIHHI '
LINGUAGENS ÚM iiiim

BASIC da temáticos e científicos, mas extrema- guagem de fácil uso pelos iniciantes em
ma desenvolvido segundo o
linha Apple, por exemplo, em geral não mente inadequada (ou mesmo inútil) pa- programação. O ALGOL 60 deu origem
pode executado em um micro de ou-
ser ra tarefas como processamento de tex- ao ALGOL 68 — tão diferente, que po-
tra linha, como o Spectrum ou o MSX. tos ou bancos de dados. Além disso, não de ser considerado uma nova linguagem,
Apesar de todo o esforço despendi- é uma linguagem estruturada, o que apesar do mesmo nome — , bem como
do na elaboração de um padrão inter- restringe a ação do programador. ao PASCAL e ao SIMULA. De uma
nacional, o ANSI BASIC, o problema Na década de 60, desenvolveu-se uma combinação entre o ALGOL e o CO-
ainda não foi solucionado. A inadequa- outra linguagem, o ALGOL 60, com BOL surgiu o PL/ Do PASCAL e do
1 .

ção desse padrão é evidente: tanto que uma filosofia distinta de projeto. Seus SIMULA nasceu um grupo de lingua-
não há uma única marca de computa- pontos fracos e fortes diferem bastante gens procedimentais e algorítmicas, que
dor que o adote integralmente. Por is- daqueles que caracterizam o FORTRAN incluem o MODULA, o MESA, o EU-
so, o interpretador BASIC, criado pela
— sobretudo por se tratar da primeira CLID e o ADA. Finalmente, uma lin-
firma norte-americana Microsoft, tem linguagem de programação estruturada guagem bastante poderosa, voltada à

sido usado como uma espécie de padrão Ela foi projetada para ser essencialmen programação de objetos. originou-se do
por fabricantes de máquinas tão distin- te algorítmica (daí seu nome, ALGO- SIMULA —
o SMALLTALK.
tas como o Apple, o TRS-80 e o MSX, rithmic Language), ou seja, para corres-
O projeto do MSX, aliás, é fruto de ponder não às fórmulas matemáticas: LINGUAGENS IMPERATIVAS
uma das últimas tentativas de se padro- mas ao processo inerente usado na re-
nizar hardware e software de microcom- solução de um problema (algoritmo). A Todas as linguagens citadas são clas-
putadores pessoais através da implemen- unidade básica do ALGOL é o procedi
sificadas como imperativas, pois ope-
tação de mais um dialeto do BASIC Mi- mento, um bloco autónomo de código, ram através de uma sequência de co-
crosoft. Essepadrão tem tido excelente com uma tarefa claramente definida, mandos declarativos — isto é, coman-
repercussão mundial, principalmente no que trabalha com tipos predefinidos dc dos que determinam um tipo altamente
Japão (seu pais de origem), na Europa, variáveis (declarações). Por essa razão, especifico de ação sobre dados da me-
e no Brasil. todas as linguagens derivadas direta- mória, rotulados na forma de variáveis.
A
história das outras linguagens não mente do ALGOL, como o PASCAL, Muitas pessoas estão tão acostumadas
foi muito diferente: o sucesso de um pa- o MODULA-2 e o ADA, são classifica- a essa forma de programação, que ima-
drão resultou sempre da conquista de das como procedimentais, declarativas, ginam tratar-se da única possível. En-
uma boa fatia do mercado pela empre- algorítmicas e estruturadas. tretanto, outras famílias, que incluem
sa que o desenvolveu. O FORTRAN, Embora não tenha sido muito usado, linguagens como o FORTH, o L1SP e
por exemplo, foi desenvolvido pela IBM o ALGOL 60 desempenhou um papel de o LOGO, têm estruturas de dados e de
e, como era distribuído gratuitamente destaque, gerando um grande número processamento bastante diferentes. Elas
com os computadores dessa empresa, de linguagens. Já o COBOL, conside- constituem o grupo de linguagens cha-
passou a ser amplamente adotado e se- rado o terceiro "avô" da computação, madas funcionais ou aplicativas, ope-
guido, inclusive por outros fabricantes. foi intensamente utilizado — mas só dei- rando basicamente através da aplicação
Contando com uma grande base de xou um "descendente", o PL/1. recursiva de funções.
usuários, a própria IBM pôde realizar O COBOL (Common Business —
melhorias subsequentes do FORTRAN Oriented Language) surgiu como respos-
— como o FORTRAN II, o FORTRAN ta à conclusão — enunciada pelo Minis- LINGUAGENS FUNCIONAIS

IV, as versões G e H, o FORTRAN 77 tério da Defesa dos Estados Unidos



etc. de que as instalações militares e centros As linguagens funcionais, como o
Entretanto, uma linguagem como o de pesquisa necessitavam de uma lingua- próprio nome sugere, atuam sobre os
PASCAL, que talvez seja a segunda lin- gem de programação comum, se quises- dados por meio de funções ou procedi-
guagem mais popular para micros, pos- sem operar o sistema americano de de mentos. Um procedimento é algo bem
sui pelo menos sete versões diferentes. fesa como um todo, efetivamente. De- mais poderoso do que um comando. Ve-
Cada uma delas é um semipadrão para senvolvida a partir de um esquema de jamos por quê: toda linguagem de pro-
o PASCAL relativo ao sistema opera- cooperação entre governo e indústria, gramação tem um vocabulário fixo de
essa linguagem difundiu-se rápida e am- instruções, chamado conjunto de instrur
cional sob o qual roda.
plamente. E provável que seja, hoje, a ções. As linguagens imperativas utilizam

AS RAÍZES DA LINGUAGEM linguagem mais utilizada para aplicações um conjunto fixo de instruções, ou se-
comerciais em computadores de grande ja, um conjunto que não pode ser am-
A
torre de Babel é uma consequên- porte. Uma das razões que explicam a pliado pelo próprio usuário. A lingua-
cia inevitável da necessidade de desen- grande aceitação do COBOL é sua pro- gem funcional, ao contrário, não faz
volvimento de novas linguagens. ximidade do inglês natural. distinção entre os comandos, declara-
Voltemos ao exemplo do FOR- ções ou funções pertencentes ao conjun-
TRAN. Seguramente, foi a primeira lin- to original e as funções ou procedimen-
guagem de alto nível desenvolvida. Sua tos criados pelo usuário. Por isso, diz-
criação atendeu a duas exigências: a re- se que certas classes de linguagens fun-
solução de fórmulas matemáticas e cien- As linguagens de alto nível anterior- cionais são extensíveis.
tificas, e o uso eficiente dos recursos mente mencionadas deram origem à O processamento baseado em fun-
computacionais disponíveis. Nesses as- grande maioria das linguagens de pro- ções apresenta ainda outra vantagem:
pectos, foi um sucesso. Mas, em dois gramação da década de 60, muitas das ela age sobre parâmetros de entrada e
outros pontos, que não tinham sido jul- quais ainda em uso. O BASIC, por devolve parâmetros de saída, sem "sa-
gados importantes pelos projetistas do exemplo, é um descendente direto do ber" necessariamente o que eles repre-
FORTRAN, a linguagem mostrou-se FORTRAN. As diferenças entre ambos sentam. Isso justifica a classificação das
I deficiente. Ela è excelente para fins ma- refletem o intuito de se chegar a uma lin- funções como generalizáveis.
MIIIIIIIIHHHHBHHHHHHIIIIIIIII
As linguagens funcionais podem ser Um processo semelhante ocorreu câmbio de "mensagens" entre objetos.
divididas em módulos (blocos autóno- com o BASIC original das linhas Sin- Como não existe outro tipo de proces-
mos de processamento) mais facilmen- O SuperBASIC do modelo QL
clair. samento, qualquer ação em um progra-
te do que as imperativas, e possuem uma Spectrum, que dele deriva, tem não só ma é sempre a mesma coisa: uma men-
estrutura interna hierárquica que é usa- estruturas —
como CASE SELECT — sagem enviada para um objeto, que, por
da tanto para o armazenamento do pro- próprias do PASCAL, como também sua vez, envia mensagens para outros
grama quanto dos dados. No LISP ou oferece a possibilidade de se chamar objetos.
no LOGO, por exemplo, uma lista de- funções apenas pelo nome e de se utili- Os objetos podem realizar processa-
finida como uma estrutura de dados po- zar a recursâo. Desenvolvimentos futu- mentos internos, conforme a mensagem
de ser usada para armazenar um progra- ros da linguagem BASIC provavelmen- que recebem. Um objeto do SmallTalk
ma. Existem comandos para modificar te a afastarão ainda mais do padrão ori- é, assim, semelhante a uma função LISP
e executar um programa, armazenado ginal (ANSI), incorporando elementos ou a um procedimento PASCAL. Só
em uma lista (EXECUTE, em LOGO, de linguagens funcionais como o que, em vez de construir procedimentos
e EVAL, em LISP). Essa propriedade FORTH e o LISP. e incorporá-los a uma estrutura em ár-
de uma linguagem é chamada indireção. Como já vimos, o LISP foi desenvol- vore, como no LISP e LOGO, os obje-
Já em uma linguagem imperativa, co- vido como uma linguagem para o cam- tos podem ser considerados entidades
mo o BASIC, programa e dados são ele- po de Inteligência Artificial, e, ainda ho- independentes — como os registros de
mentos inteiramente distintos. con- O je, predomina nessa área. Uma de suas uma base de dados, em que cada regis-
junto de instruções não pode ser amplia- principais características é o intenso uso tro interroga ou responde aos demais.
do e a ordem de execução é muito im- de cadeias de caracteres (slring). Outra Em outras palavras, um objeto pode
portante: se ela sofrer alguma modifi- linguagem útil na mesma área é o SNO- conter tanto dados quanto programas.
cação, determinados valores de memó- BOL (SlriNg Oriented SymBOlic Lan- A idéia não é muito fácil de enten-
ria não serão criados ou atualizados. guage), originalmente desenvolvida pa- der, a não ser que se observe o funcio-
Linguagens como o LISP permitem ra o processamcnio de linguagem natu- namento do sistema. Infelizmente, ain-
uma abordagem bem diferente. Em um ral em Inteligência Artificial, Linguísti- da não se encontram implementações de
certo sentido, cada programa em LISP ca etc, em tarefas como a determina- SmallTalk para todos os micros. Mas
— ou nas linguagens que dele derivam ção da autoria de manuscritos, análise certamente vale a pena investigar essa
— é uma exLensão da linguagem origi- estilística" de textos literários e geração linguagem, pois ela representa uma ten-
nal, com o acréscimo das novas funções automática de poemas. dência importante para o futuro. Siste-
definidas pelo usuário. Com uma lin- Também merece destaque a recente mas operacionais de micros modernos,
guagem funcional, o programador tem evolução das linguagens de desenvolvi- como o Macintosh, da Apple, foram
maior controle sobre o que faz do que mento de sistemas. São linguagens de al- muito influenciados pela filosofia Small-
com uma linguagem imperativa. to nível, mas que incorporam recursos Talk, inclusive quanto ao tratamento da
As três propriedades mencionadas — avançados de trabalho direto com a me- interface com o usuário, que é feita atra-
recursâo, extensibilidade e indireção — mória, processador e periféricos do vés de "janelas" múltiplas, menus e
são fundamentais em um campo muito computador. Entre as linguagens desse acionamento do "mouse".
atuai das ciências da computação: a In- tipo, a de maior sucesso é o C, que foi
teligência Artificial ("raciocínio" e usada para desenvolver o sistema ope- LINGUAGENS DE QUARTA GERAÇÃO
"aprendizado" por máquina). LISP e racional UNIX. Ela possui um podero-
LOGO, aliás, foram criados especifica- so conjunto de ferramentas de desenvol- Certas linguagens aplicativas mais re-
mente para facilitar o processamento vimento de software e tem sido utiliza- centes (de quarta geração) foram desen-
simbólico, não-numérico, característico da sobretudo por programadores mais volvidas a fim de dotar o programador
das aplicações de Inteligência Artificial. experientes. Para o usuário comum, o de poderosíssimos recursos, denomina-
Ambos nasceram no Laboratório de In- C parece um tanto inacessível — está en- dos macros. Com efeito, nessas lingua-
teligência Artificial do MIT (Massachu- tre uma linguagem de alto nível, como gens, um único comando ou função
setts Institute of Technology, nos EUA). o PASCAL, e um Assembler, bem mais equivale a centenas ou milhares de ins-
flexível, mas difícil de usar. Mesmo as- truções de uma linguagem imperativa
sim, essa linguagem vem se difundindo, comum, como o BASIC. Um exemplo
principalmente entre os amadores que de linguagem de quarta geração para mi-
Como já dissemos, as linguagens de desejam dominar sua máquina sem ter cros, o dBASE II (e sua extensão para
computador, da mesma forma que as o trabalho de aprender Assembler. Exis- micros de dezesseis bits, o dBASE III),
linguagens naturais, não permanecem tem diversas implementações do C pa- é, ao mesmo tempo, um sistema aplica-
estáticas: elas evoluem constantemente, ra micros, inclusive o Spectrum. tivo —mais especificamente, um siste-
absorvendo aspectos de outras lingua- O
SmallTalk é outra linguagem que ma gerenciador de bases de dados, ou
gens. Com isso, as diferenças entre lin- segue de perto a filosofia do LISP. Tí- SGBD —e uma linguagem de pro-
guagens imperativas e linguagens fun- pica de uma nova família, a das lingua- gramação.
cionais tendem a diminuir. gens de programação de objetos, ela Outra linguagem de quarta geração
Tomemos como exemplo o BASIC: constitui um
"ambiente" completo de em franca ascensão é o PROLOG
os dialetos mais difundidos do Micro- programação, como o C, e não apenas {PROgrammmg in LOGic), desenvolvi-
soft BASIC (para as linhas Apple, uma linguagem. O SmallTalk tem, no do na França e adotado pelos japone-
TRS-80, TRS-Color e MSX) são lingua- entanto, diversos recursos voltados pa- ses em seu programa de computadores
gens puramente imperativas. Seus des- ra a máxima simplificação do conceito de quinta geração. O PROLOG está pa-
cendentes mais modernos, porém, como de programa e da tarefa de programa- ra ocampo da Inteligência Artificial co-
o QuickBASIC (da própria Microsoft), ção. Nessa linguagem, cada item de um mo o dBASE para a área de gerencia-
possuem características funcionais, en- programa é considerado um objeto. A mento de dados. Existem PROLOG pa-
tre elas a programação estruturada. programação é feita através do inter- ra micros de oito e dezesseis bits.
IIIIHIHIHW—
MfAL ANCHE
— MllMIHIIIIIli

KíSIS
montanha, enfrentar o mar,
*

LISTAGEM COMPLETA tt.VZztz,


DF98 16 18 OC OC 06 06 03 03
Avalanche agora está completo, mas lanche às suas preferências pessoais. Se-
DFAO 06 06 OC OC 18 18 30 30
pode precisar de alguns acertos. É pou- ja curioso. Experimente. Afinal, o jo-
DFA8 60 60 C6 C3 66 6C 38 38
co provável que você tenha digitado um go agora é seu. E você pode fazer dele
DFBO 84 D6 FF FF FF FF FF FF
programa tão longo sem cometer alguns o que bem entender. 1F 3F 7F FF
DFB8 00 01 03 07
enganos. Dedique-se à resolução de DFCO 00 00 FF FF 3C 3C FF FF
eventuais problemas causados ao criar DFC8 06 08 76 FF FF FF 3E 3C
ou copiar erros. Para descobri-los, ve- DFDO 10 10 10 38 38 39 38 38
rifique suas listagens Assembly; se achar DFD8 10 1C 7C 38 38 38 10 10
conveniente, remonte-as. O jogo está escrito na região 50000 DFEO 00 00 00 20 51 8A 04 00
da memória para que possa ser monta- DFE8 00 00 00 82 45 2B 10 00
Depois que as rotinas separadas esti-
DFFO 00 00 00 00 00 00 00 00
verem funcionando, carregue-as na me- do pelo Assembler de INPUT.
DFFB 00 00 00 00 00 00 00 00
mória, salve-as numa fita e teste o con- Se você não está usando o Assembler
junto completo, chamando-o com o co- de INPUT, talvez precise deslocar o jo- EOOO 00 00 00 00 00 00 00 00
mando de execução de código de máqui- go na memória por causa do espaço ocu- E008 00 00 00 00 00 00 00 62
na de seu microcomputador. pado pelo próprio Assembler. A melhor E010 00 B4 05 E9 00 C7 04 83
alternativa é a região 20000. Para fazer E018 00 3E 04 DC 00 C4 03 4E
Por sua estrutura modular, o progra- E020 00 8C 03 93 00 C4 03 05
ma do videogame Avalanche é fácil de a transferência basta mudar para 2 os
E028 01 3E 04 6E 00 11 05 83
corrigir. Caso encontre algum problema endereços que iniciam com 5. E030 00 6A 06 31 00 B4 05 6E
durante a execução do jogo, tenha o cui- Lembre-se de verificar se a rotina que E038 00 11 05 E9 00 C7 04 62
dado de identificar a parte que apresen- executa a música não apagou outras ro- E040 00 B4 05 93 00 B4 05 2C
tou o defeito e concentre nela seus es- tinas ao ser deslocada. E048 00 6A 06 62 00 B4 05 DC
forços para descobrir o erro. Use o monitor de código de máqui- EOSO 00 11 05 5C 00 OC 06 DC
Mesmo que todas as rotinas funcio- na para analisar a memória do seu mi- E058 00 A7 07 43 4C 49 46 46
cro e ver se ela confere com a listagem E060 48 41 4E 47 45 52 43 52
nem adequadamente quando rodadas 20 42 59
em hexa dada a seguir. Se você tiver des- E068 45 41 54 45 44
uma a uma, é possível que o programa E070 20 41 2E 44 4F 45 57 52
completo apresente falhas. Rotinas cha- locado o jogo, as posições de memória 49 54 54 45 4E 20 42 59
E078
mam outras rotinas —e se uma delas serão diferentes, mas a sequência de có- EOBO 20 50 2E 43 4C 41 52 4B
contiver algum tipo de erro ou estiver digos hexa deve ser a mesma. E088 20 41 66 74 65 72 20 61
montada cm lugar inadequado, o pro- E090 20 73 6B 6F 72 74 20 77
grama poderá não funcionar. Estamos, DE AS 18 3C 3C 18 3C 3C 3C 3C E098 61 6C 6B 20 57 69 6C 6C
18 18 1B 18 18 1E EOAO 69 65 20 20 20 20 20 20
por isso, publicando uma listagem he- DEBO 3C 3C
6E 73 20
DEB8 01 03 03 01 00 01 01 01 E0A8 72 65 74 75 72
xadecimal completa do jogo. Utilize-a 74 6F 20 66 69 6E 64 20
DECO 80 CO 60 80 00 00 00 E0 EOBO
para checar sua versão final. EOBB 74 68 65 20 67 6F 61 74
DEC9 OE 00 01 02 04 08 04 00
Depois de montar A valanche, o pro- EOCO 73 20 6B 61 76 65 20 20
DEDO 00 00 BO AO 20 20 30 00
grama estará na memória do computa- DED8 00 00 00 00 18 3C 3C 1B E0C8 73 70 72 65 61 64 29 68
dor como uma série de números hexa- DEE0 00 10 10 1E EO 00 0C 24 EODO 69 73 20 70 69 63 6E 69
decimais em posições sucessivas, tal qual DEE8 42 B2 43 00 00 00 00 00 E0D8 63 20 67 6F 6F 64 69 65
mostramos neste artigo. O número de DEF0 00 00 00 00 01 03 03 01 EOEO 73 20 61 6C 6C 20 20 20
DEF8 00 00 00 00 BO CO CO 80 E0E8 6F 76 65 72 20 61 20 72
quatro dígitos na coluna esquerda cor- 62
DFO0 00 01 01 01 0E 00 01 02 EOFO 6F 63 6B 79 20 65 6D
responde ao endereço da posição de me- 6E 74 20
DF0B 00 00 00 E0 00 00 80 40 E0F8 61 6E 6B 6D 65
mória ocupado pelos dois primeiros 04 08 04 00 00 00 00 00 E100 20 20 20 20 20 20 20 20
DF10
bytes de programa naquela linha. Os pa- DF 18 20 20 30 00 00 00 00 00 E108 57 69 6C 6C 69 65 20 63
res subsequentes de dígitos ocupam as DF20 1C 3E 7F FF FF FE FC 38 E110 65 74 73 20 6F 66 66 20
posições seguintes. Você tem, portanto, DF28 03 07 OF 0F 0F 07 03 01 E118 74 6F 20 72 65 63 6C 61
a possibilidade de examinar cada byte DF30 80 CO EO FO FO F0 E0 CO E120 69 6D 20 68 69 73 20 20
de Avalanche através do conteúdo da DF38 00 00 07 18 20 40 40 80 E128 6C 6F 73 74 20 70 6F 73
posição de memória correspondente e DF40 00 00 1F AO CO 00 00 00 E130 73 65 73 73 69 6F 6E 73
verificar se cada instrução do jogo foi DF48 00 00 80 40 SC 22 02 02 E138 2C 62 75 74 20 69 73 20
DF50 80 40 7C 02 02 01 00 00 E140 6B 61 6D 70 65 72 65 64
montada corretamente. 00 04 0A 11 60 00 E148 62 79 20 66 61 6C 6C 69
DF58 00 00
Ao contrário de alguns outros jogos DF60 02 04 08 04 04 04 F8 00 E150 6E 67 20 62 6F 75 6C 64
de computador. Avalanche nunca che- DF68 00 00 78 B6 01 01 00 00 E158 65 72 73 2C 70 6F 74 20
ga a entediar, pois seus parâmetros de DF70 00 00 1E 61 80 BO 00 00 E160 68 6F 6C 65 73 20 20 20
execução podem ser alterados. A
cons- DF78 00 00 00 00 B7 79 00 00 E16B 61 6E 64 20 76 69 63 69
trução modular do programa deixa o DF80 00 00 00 00 El 9E 00 00 E170 6F 75 73 20 73 6E 61 6B
usuário livre para fazer as modificações DF88 22 14 Oa 08 08 08 08 08 E178 65 73 2E 54 6F 20 6D 61
DF90 18 3C 36 3E 7E 3C 18 IS E180 6B 65 20 20 20 20 20 20
que quiser, permitindo-the adaptar Ava-
um 50 coueootMÃumu so

m COMO DESCOBRIR DA VERSÃO FINAL


OS ERROS 0 CÓDIGO HEXADECIMAL
m TESTE 0 ALTERAÇÕES POSSÍVEIS
CONJUNTO COMPLETO DESLOCAMENTO DO JOGO
VERIFICAÇÃO NA MEMORIA

E188 6D 61 74 74 65 72 73 20 E1E8 72 65 61 64 20 74 68 65 E248 56 65


72 74 69 63 61 6C
E190 77 6F 72 73 65 20 74 68 E1F0 20 66 6F 6C 6C 6F 77 69 E2S0 20 75 6D 70 20
6A 20 20
E198 65 20 74 69 64 65 20 69 E1F8 6E 67 20 61 6E 64 20 70 E258 20 20 20 20 20
20 20 20
E1A0 73 20 72 69 73 69 6E 67 E200 72 65 73 73 20 27 53 27 E260 20 6F 74 68 20
42 2D 20
E1A8 61 6E 64 20 68 65 20 69 E208 74 6F 20 73 74 61 72 74 E268 44 69
61 67 6F 6E 61 6C
E1B0 73 20 69 6E 20 64 61 6E E210 2E 20 20 20 20 20 20 20 E270 20 6A
75 6D 70 53 43 4F
E1B8 67 65 72 20 6F 66 20 62 E218 20 20 20 20 20 20 20 20 E27S 52 45
2D 30 30 30 30 30
E1C0 65 69 6E 67 20 63 75 74 E220 20 4E 20 20 20 20 2D 20 E280 30 49 56 45 53
4C 2D 35
E1C8 6F 66 66 2E 54 6F 20 68 E228 52 75 6E 20 20 20 20 20 E288 47 41 4D 45 20 4F 56 45
EIDO 65 6C 70 20 57 69 6C 6C E230 20 20 20 20 20 20 20 20 E290 52 20 21 21 21 23 23 21
E1D8 69 65 20 69 6E 20 68 69 E238 20 20 20 20 20 20 20 20 E29B 23 23 23 21 23 23 21 23
E1E0 73 20 71 75 65 73 74 20 E240 20 4D 20 20 20 20 2D 20 E2A0 21 23 23 23 23 21 23 21
IIIIIIIMIWM—^M^MBMIIIIIIIIHIH
23 23 E4F8 EO 21 82 00 22 01 EO 3E E7A8 79 FE OF 28 75 3E 00 DB
E2A8 23 23 23 23 21 21
E500 03 32 03 EO 3E 00 32 OA E750 FE CB 57 20 OE 06 01 CB
E2B0 23 23 23 CD 50 E3 3E 02
F7
E2B8 D3 FE 3E 10 32 48 SC DD E508 EO 3E 02 32 OS EO 21 Cl E758 SF 20 02 06 BI 78 32
ES10 01 22 F4 DF 21 00 00 22 E760 DF 18 09 CB SF 20 OS 3E
E2C0 21 SB EO 06 05 3E A6 21
E518 F6 DF 3E 00 32 FB DF 21 E768 01 32 F6 DF 2A FA DF 11
E2C8 86 00 CD 2B E3 06 06 21
E2D0 CC 00 CD 2B E3 06 10 3E E520 DF 00 22 OC EO 3E 00 06 E770 BF 00 ED 52 30 05 3E 01
E528 05 32 06 EO 80 32 07 EO E77B 32 F8 DF C9 11 03 00 21
E2D8 07 21 62 02 CD 2B E3 06
E2E0 12 21 A2 02 CD 2B E3 06 E530 80 32 08 EO CD BF E3 CD E780 OC 06 CD B5 03 2A F4 DF
00 2B E538 3B E6 21 77 00 3A FF DF E7B8 11 21 58 19 7E FE 2B 28
E2E8 02 21 E8 FD 11 00
2A 28
F9 ES40 06 30 BO CD 3E E3 3E 29 E790 31 FE 2C 28 27 FE
E2F0 E5 ED 52 El 20 10 Fl
CD 50 E3 DD 21 88 EO 21 E5AB CD 69 E3 CD 60 EA CD 11 E798 29 11 20 00 19 7E FE OF
E2F8 FE 2B
CD 2B E5S0 E7 CD 71 E6 CD AF E9 CD E7A0 28 20 FE 2D 28 1C
E300 20 00 3E 07 06 FF
ES58 02 E6 CD AB ES CD 7F ES E7A8 28 1B 2A FA DF 3E 28 01
E30B E3 06 8A CD 2B E3 11 26
A6 CD 2B ES60 3A FB DF EF 01 CA BC E9 E7B0 B8 DE 11 02 02 CD 5A E6
E310 00 19 06 i
3E F6
E568 FE 02 CA OA E9 06 32 3E E7B8 23 22 FA DF 3E 00 32
E316 E3 3E FD DB FE CB 4F 20 C9
CB AF E570 FF 3D 20 FD 10 FB 3E FE E7C0 DF C9 3E 02 32 FB DF
E320 F8 C9 3E FD DB FE
E7C8 11 06 00 21 F7 02 CD B5
E328 20 F8 C9 C5 FS DD 7E 00 E578 DB FE CB A7 20 DO C9 3A
E7D0 03 3A F7 DF FE 01 20 1B
E330 CD 3E CD 69 E3 23 E580 05 EO 3C CB 9F 32 05 EO
ES E588 01 68 DF FE OA 38 03 01 E7D8 3C 32 F7 DF 2A FA DF 11
E338 DD 23 EE C9 21
DF 01
06 1F 90 ES90 78 DF 3E 2E 21 2A 00 C5 E7E0 20 00 ED 52 22 FA
E340 F8 3C 00 01 CD
D8 DE 3E 28 11 03
:

E5 Cl El C9 E598 CD 69 E3 23 CD 69 E3 Cl E7E8
E348 19 3D:

E7F0 56 E6 C9 FE 02 20 1F 3C
E350 DD 21 21 00 1B 3E E5A0 21 A A 00 CD 69 E3 23 CD
i

E7F8 32 F7 DF 2A F4 DF 01 AB
E3S8 00 DD 77 00 DD 23 2B E5 ESA8 69 E3 C9 3A 03 EO 3D 32 CD 5A
E80 0 DE 3E 28 11 02 01
E360 00 00 ED 52 El 20 Fl E5B0 03 EO FE 00 28 01 C9 3E 2D 01
E808 E6 11 AO 00 19 3E
E368 C9 F5 E5 C5 ES Dl 7A FE E5B8 06 32 03 EO 3E 2D 01 00 00 3D CD 69 E3 C9 FE 03
E5C0 AO 2A 01 EO 16 03 1E 02 E810
E370 01 38 11 00 07 19 E818 20 IA 3C 32 F7 DF 2A FA
E378 Dl 7A 28 06 D5 11 E5CS CD 5A E6 3A OA EO FE 00 11 03
E820 DF 01 D8 DE 3E 2B
E3B0 00 97 D5 11 00 AO E5D0 28 03 2B 18 01 23 22 01
E828 01 CD 5A E6 11 20 00 19
E388 19 Dl Cl F5 OA 77 E5D8 EO 01 38 DF 3E 2F 16 03
E5E0 1E 02 CD SA E6 11 81 00 E830 22 FA DF C9 FE 04 20 18
E390 24 03 Fl 3D 28 03 F5 18 E838 3E 00 32 F7 DF 2A FA DF
E398 F5 El Fl DS 11 00 58 19 E5E8 ED 52 20 06 3E 00 32 OA
E840 11 20 00 ED 52 01 00 3D
E3A0 Dl 77 D5 El C9 00 00 00 E5F0 EO C9 11 90 00 2A 01 EO
E848 3E 2D CD 69 E3 C3 11 E7
E3A8 00 00 00 00 00 00 00 00 ESF8 ED 52 20 OS 3E 01 32 OA
E600 EO C9 01 EO DF 3A 09 EO E850 FE 81 20 33 3C 32 F7 DF
E3B0 00 00 00 00 00 00 00 00 2A FA DF 11 21 58 19 7E
E3B8 00 00 00 00 00 00 00 3E E608 CB 57 2B 03 01 EB DF 2A
E610 OA EO 3E OF 16 20 D5 CS FE 2B CA C2 E7 FE 2C 20
E3C0 10 32 FO DF DD 21 B2 E2 07 2A FA DF 2B 22 FA DF
E3C8 06 20 CS DC 35 EA 3E 00 E618 CD 69 E3 23 Cl Dl IS 20
E620 F5 3A 09 EO 3D 32 09 EO 2A FA DF 11 20 00 ED 52
E3D0 32 Fl DF DD 7E 00 DD 2B 22 FA DF 01 FO DE 11 03
E3D8 FE 21 20 OD 05 3A FO DF E62B 20 10 3E OA 32 09 EO 2A
E630 OA EO 11 20 00 ED 52 22 02 3E 28 CD 5A E6 C9 FE
E3E0 3D 32 FO DF 3E 01 32 Fl 8A 28 5B 3C 32 F7 DF 3A
DF 3A FO DF A7 21 1F 00 E63S OA EO C9 21 37 00 DD 21
E3E8 F6 DF FE 01 28 23 2A FA
E3F0 3E 2D CD 48 EA 01 BO DF E640 F9 D7 06 06 C5 DD 7E 00
E6A8 06 30 80 CD 3E E3 3E 29 DF 01 00 AO 3E 2D 11 03
E3FS 3A Fl DF FE 01 20 03 01 FA DF
E650 CD 69 E3 23 DD 23 Cl 10 ES A O 02 CD SA E6 23 22
EAOO B8 DF 3E 2C CD 69 E3 3A
EBA8 01 A8 DE 3E 28 11 02 01
E408 FO DF 47 3E 17 90 47 3E E658 EB C9 E5 D5 E5 D5 CD 69
E660 E3 23 Dl IS 20 F7 El 11 EBBO CD SA E6 3E 01 32 F6 DF
E410 20 11 20 00 19 CD 48 EA
EA18 Cl 10 AF 21 31 00 06 OC E668 20 00 19 Dl 1D 20 EC El EBBB C9 2A F4 DF 01 B8 DE 3E
E670 C9 3A 00 EO FE 00 28 05 EBCO 28 11 02 02 CD 5A E6 23
E420 3E 29 DD 21 75 E2 CD 2B
07 CD 2B E678 FE 03 28 01 C9 3A OE EO E8C8 22 F4 DE 11 AO 58 19 7E
E428 E3 21 71 00 06 32 F7
AO E680 FE 01 2B S5 2A OC EO 01 E8D0 FE 2C 20 OC 3E 00
EA30 E3 CD 57 E4 C9 21 00
E43B 06 D8 OE 1F 23 7E 2B 77 E688 20 DF 3E 2A CD 69 E3 23 E8D8 DF 3E 04 06 05 CD FC E9
EA AO 23 OD 20 F8 23 10 F3 C9 E690 3E 2D 01 00 3D CD 69 E3 E8E0 3E 00 32 F6 DF C9 3E 00
CD 69 E3 E698 2A OC EO 11 EO 01 ED 52 E8E8 32 F7 DF 2A FA DF 2B 01
E448 C5 01 11
02 CD
E4S0 20 00 10 F2 C9 3A E6A0 28 SD 2A OC EO 11 20 58 E8F0 00 AO 3E 2D 11 02
47 04 E6A8 19 7E FE OF 28 51 FE 2D EBF8 5A E6 11 21 00 19 22 FA
E458 00 EO DF 11
E6B0 20 IA 2A OC EO 01 00 3D E900 DF C3 11 E7 11 C4 00 21
E460 08 00 19 10 FD E5 Cl 21
83 00
EA68 BF 00 3E 3A CD 69 E3 3A E6B8 3E 2D CD 69 E3 11 20 00 E908 3E 04 CD B5 03 11
CD E6C0 19 22 OC EO 01 20 DF 3E E910 21 6E 06 CD B5 03 2A FA
E470 00 EO FE 00 28 OC F5
CD 69
E47B 83 EA Fl FE 01 28 03 CD E6C8 2A CD 69 E3 2A OC EO 2B E918 DF 01 11 3D 3E 2D
E6D0 22 OC EO 3E 01 32 OE EO E920 E3 11 20 00 19 22 FA DF
E480 A9 EA C9 21 C9 01 CD 96
E6D8 C9 2A OC EO 11 00 58 19 E928 01 A8 DE 3E 28 11 02 01
EA88 EA 21 91 01 CD 96 EA 21
E6E0 7E FE 28 20 05 3E 02 32 E930 CD 5A E6 11 1E 00 21 6E
E490 3A 01 CD 96 EA C9 06 OA
2D CD 69 E6E8 F8 DF 2A OC EO 3E 2A 01 E938 03 ED 5F 6F CD B5 03 2A
EA9B CS 01 00 3D 3E 52 38
Cl 10 FD E6F0 2B DF CD 69 E3 23 CD 69 E9A0 FA DF 11 CO 02 ED
EAAO E3 11 20 00 19
E4A8 C9 21 C9 01 CD BC EA 21 E6F8 E3 3E 00 32 OE EO 69 2A E948 CD 3E 09 32 65 EA 3A FF
E700 OC EO 01 00 3D 3E 2D CD E950 DF 3D 32 FF DF C2 EE EA
EABO 91 01 CD BC EA 21 3A 01 OB DD
E708 69 E3 21 DF 00 22 OC EO E958 21 4A 01 3E 8E 06
E4B8 CD BC EA C9 3E OA 01 90
E710 C9 3A F7 DF FE 00 C2 CB E960 21 88 E2 CD 2B E3 CD 3B
E4C0 DF F5 3E 2B CD 69 E3 -11
20 F2 C9 E71B E7 3A F6 DF FE 01 28 5C E968 E6 11 05 01 21 6E 06 CD
E4C8 20 00 19 Fl 3D E970 B5 03 11 88 01 21 3E OA
E4D0 CD B3 E2 3E 05 32 FF DF E720 2A F4 DF 2B 01 00 AO 3E
E728 2D 11 02 02 CD 5A E6 01 E978 CD B5 03 11 05 01 21 6E
E4D8 3E 00 32 00 EO 21 00 00
DF 22 FD E730 A8 DE 3E 28 23 11 02 01 E980 06 CD B5 03 3E 32 32 6E
EAEO 22 F9 DF 22 FB
EA 3E 06 E738 CD SA E6 11 AO 58 19 7E E988 E5 C3 DO E4 11 OB 02 21
| EAE8 DF 3E 13 32 6S 00 EO
02 22 OA E7A0 FE 2D CA C2 E7 FE 2B 2B E990 26 03 CD BS 03 3A
I E4F0 32 09 EO 21 EO
E998 3C CB 97 32 00 E0 3A 6E 42E0 16 05 20 20 13 10 12 05 4528 55 D7 75 D5 55 D7 75 75
E9A0 E5 3D 32 6E E5 3E 03 06 42E8 01 04 20 08 09 13 20 10 4530 57 57 5D 75 57 57 5D 55
E9A8 05 CD FC E9 C3 E9 E4 3A 42F0 09 03 OE 09 03 20 07 OF 4538 55 57 5D 55 7D D7 D7 D7
E9B0 00 EO FE 02 30 01 C9 DD 42F8 OF 04 09 05 13 20 01 OC 4540 7D 5D 7D 5D 5D FF 7D D7
E9B8 21 06 EO 21 A9 01 CD CE 4300 OC 20 20 20 OF 16 05 12 4548 5D 75 FF FD 57 FD 57 FD
E9C0 E9 21 71 01 CD CE E9 21 4308 20 OJ 20 12 OF 03 OB 19 4550 5D 7D DD FF 5D FF D5 7D
E9C8 IA 01 CD CE E9 C9 E5 ED 4310 20 05 OD 02 01 OE OB OD 455B 57 FD 7F D5 FD D7 7D FF
E9D0 SB OA EO ED 52 El 38 01 4318 05 OE M 2E 20 20 20 20 4560 57 5D 75 75 7D D7 7D D7
E9D8 C9 DD 7E 00 3C CB A7 DD 4320 20 20 20 20 20 17 09 OC 4568 7D 7F D7 7F 57 57 57 5F
E9E0 77 00 DD 23 FE 07 30 01 43211 OC 09 05 20 13 05 14 13 4570 5F 57 5F 5F 5F 5F D5 F5
E9E8 C9 01 8B DF 16 2B FE OF 4330 20 OF 06 06 20 14 OF 20 4578 F5 D5 F5 F5 F5 F5 5F 5F
E9F0 20 05 01 00 3D 16 2D 7A 4338 12 05 03 OC 01 09 OD 20 4580 57 57 57 57 S7 57 F5 F5
E9FB CD 69 E3 C9 DD 21 F9 DF 4340 08 09 13 20 OC OF 13 14 4588 D5 D5 D5 D5 D5 FD 55 55
EAOO 16 00 5F DD 19 DD E5 CD 4348 20 10 OF 13 13 05 13 13 4590 55 55 55 55 55 55 57 5F
EA08 12 EA DD EA 10 F7 CD 3B 4350 09 OF OE 13 2C 02 15 14 4598 5F 57 55 57 57 57 D5 F5
EA10 E6 C9 DD E7 00 3C FE OA 4358 20 09 13 20 08 01 OD 10 45A0 F5 D5 55 55 55 FD 55 55
EA18 20 09 3E 00 DD 77 00 DD 4360 05 12 05 04 02 19 20 06 45A8 55 55 55 55 55 55 55 55
EA20 2B 18 EF DD 77 00 C9 00 4368 01 OC OC 09 OE 07 20 02 45B0 55 55 55 55 55 55 FD 55
EA28 00 00 00 00 00 00 00 00 4370 OF 15 OC 04 05 12 13 2C 45B8 57 5D 75 D5 75 55 55 55
EA30 00 00 00 00 00 00 00 00 4378 10 OF 14 20 08 OF OC 05 45C0 D5 75 5D 5D 5F 55 55 55
EA38 00 00 00 00 00 00 00 00 4380 13 2C 20 20 01 OE 04 20 45C8 55 55 55 55 55 55 55 55
EA40 00 00 00 00 00 00 00 00 43BS 16 09 03 09 OF 15 13 20 45D0 55 55 57 5F 5F 57 55 55
EAíiS 00 00 00 00 00 00 00 00 4390 13 OE 01 OB 05 13 2E 14 45D8 55 55 D5 F5 F5 D5 55 57
EA50 00 00 00 00 00 00 00 00 4398 OF 20 OD 01 OB 05 20 20 45E0 57 57 FD 55 S7 5D 55 55
EA58 00 00 00 00 00 00 00 00 43A0 20 20 20 20 OD 01 14 14 45E8 55 FD 55 55 D5 75 75 D5
EA60 DD 21 OF EO 06 13 C5 DD 43A8 05 12 13 20 17 OF 12 13 45F0 75 55 55 55 55 55 5D 5D
EA68 56 01 DD 5E 00 DD 66 03 4JB0 05 20 14 08 05 20 14 09 4SF8 5F 55 55 55 55 55 55 55
EA70 DD 6E 02 DD E5 CD B5 03 43B8 04 05 20 09 13 20 12 09 4600 55 55 55 55 55 55 55 55
EA78 DD El 11 04 00 DD 19 Cl 43C0 13 09 OE 07 01 OE 04 20 4608 55 55 57 5F 5F 57 55 55
EA80 10 E4 C9 00 00 00 00 00 43C8 08 05 20 09 13 20 09 OE 4610 55 55 D5 F5 F5 D5 55 55
43D0 20 04 01 OE 07 05 12 20 4618 55 55 55 55 55 55 55 55
43D8 OF 06 20 02 05 09 OE 07 4620 55 55 55 55 55 55 55 57
43E0 20 03 15 14 OF 06 06 2E 4628 57 57 FD 55 57 5D 55 55
43E8 14 OF 20 08 05 OC 10 20 4630 55 FD 55 55 D5 75 55 55
43F0 17 09 OC OC 09 05 20 09 4638 55 55 55 55 55 55 55 55
Você já deve ler observado que a ro- 43F8 OE 20 08 09 13 20 11 15 4640 55 55 55 55 55 55 75 D5
tina da música funciona independente- 4400 05 13 14 20 12 05 01 04 4648 75 55 55 55 55 55 5D 5D
mente de qualquer outra e foi montada 440B 20 14 08 05 20 06 OF OC 4650 5F 55 55 55 55 55 55 55
distante do programa principal. Isso não 4410 OC OF 17 09 OE 07 20 01 4658 55 55 55 55 55 55 57 5F
interfere com o Assembler de INPUT, 4418 OE 04 20 10 12 05 13 13 4660 7F FF FF FF 7F 5F F5 FD
mas,se você usou outro montador, po- 4420 20 27 13 27 14 OF 20 13 4668 FF FF FF FD F5 D5 55 55
derá descobrir que a rotina da música 4428 14 01 12 14 2E OE 20 20 4670 55 55 55 55 55 55 5F 7F
4430 20 20 2D 20 12 15 OE OD 4678 FF FF FF 7F 5F 57 D5 F5
está na região de memória ocupada pe-
4438 20 20 20 20 2D 20 16 05 4680 FD FF FF FF FD F5 55 55
lo próprio Assembler. Nesse caso, co-
4440 12 14 09 0,3 01 OC 20 OA 4698 55 55 55 55 55 55 5D 57
loque uma nova origem na rotina da 4448 15 OD 10 02 OF 14 08 20 55 5D 75
4690 55 55 55 55 55
música. Tente usar 24000 em vez de 4450 2D 20 04 09 01 07 OF OE 4698 D5 D5 D5 D5 D5 D5 57 5F
30000 — e não se esqueça de mudar as 4458 01 OC 20 OA 15 OD 10 23 46A0 7D 7F 7F 5F 57 57 D5 F5
declarações EQU e as instruções JSR 4460 23 23 21 23 23 21 23 23 46A8 FD FD FD F5 D5 D5 57 57
30000, para que o processador vá para 4468 23 21 23 23 21 23 23 23 46B0 55 55 55 55 55 55 D5 D5
o novo endereço inicial quando a roti- 4470 23 21 23 23 21 23 23 21 46B8 F5 F5 7D 7D 5F 5F 55 55
4470 23 23 23 21 23 23 21 21 46C0 55 55 57 57 5F 5F 7D 7D
na da música for chamada.
4480 55 54 50 50 40 40 00 00 46C8 F5 F5 D5 D5 55 55 7D 7D
Use o monitor de código de máqui-
4488 7F 5F 57 D7 F5 FF D5 75 46D0 F5 F5 7D 7D 5F 5F 55 55
na do seu computador para ler (com
4490 DD 77 5D D5 7D 75 5D 77 46D8 7D 5F 7D F5 D5 D5 55 55
PEEK) a memória e verificar se ela con- 4498 F5 FD 57 75 DD 77 5D D5 AA AA 56 56 AA AA 55 55
46E0
fere com a listagem hexa dada a seguir. 44A0 FD 5F 57 D7 5D FF D5 7F 46E8 AA AA 95 95 AA AA 55 55
44AB 75 77 FD F7 D5 5D 75 77 46F0 7F FF FF FF 7F 5F 81 15
4268 03 oc 09 0 6 06 OH 01 OE 44B0 -55 D5 D5 5D 5D D7 F5 7D 46F8 7D FF FF FF FD F5 57 57
4270 07 DS 12 0 i 12 05 01 14 44B8 D5 5D 5D D7 55 57 FF 7F 4700 57 5F 5F 5F 5F 5F 55 55
4 i ? B 05 04 20 02 19 20 01 2E 44C0 57 57 FD FD 55 75 D5 55 4708 55 D5 D5 D5 D5 D5 57 5F
4280 04 OF 03 17 12 09 14 14 44C8 55 75 D5 55 75 75 D5 D5 4710 7F 5F 5F 5F 57 57 55 D5
4238 05 DE 20 02 19 20 13 2E 44D0 5D 5D D5 D5 5D 5D D7 55 4718 F5 D5 D5 D5 55 55 AA AA
4290 OB 05 OC OC 01 17 01 19 44D8 57 5D D/ 5D D5 D5 5D 5D 4720 AA A6 99 6A AA AA AA AA
429B 01 0E 04 20 07 2E 08 05 44E0 75 D7 DD 75 7D 5D 75 D5 472B AA AA A9 66 9A AA AA AA
4 2A0 04 OC 05 19 20 01 06 14 44E8 5D 75 5D D7 57 75 5D 5D 4730 AA 6A 9A A6 A9 AA AA AA
42A8 06 12 20 01 20 13 0 8 OF 44F0 F5 D5 57 75 5D D5 57 75 4738 AA A6 99 6A AA AA 00 05
42B0 12 U 20 17 01 OC OB ,0 44F8»57 55 55 D7 F7 55 55 DD 4740 00 00 00 00 00 00 06 1D
42B8. 17 09 0 C OC 09 05 20 20 4500 57 55 55 D5 77 55 55 DF 4A38 BD 4A CC BE 04 21 10 8E
A2C0 20 20 20 20 12 0 6 14 05 4508 D5 D5 57 55 5D D5 57 7F 4A40 42 68 C6 05 BD 4A E6 8E
42C6 12 OE 13 20 H OF 20 06 4510 F5 75 5D 55 57 75 5D F5 4A48 04 67 C6 06 BD 4A E6 8E
12D0 09 DE 04 20 14 OH 0 6 20 4518 57 5D 75 5F 5D 57 D7 55 4A50 05 61 C6 10 BD 4A E6 8E
5 2 DS 07 OF 01 14 13 20 08 01 4520 75 75 57 55 55 77 75 D5 4A58 05 AO C6 15 BD 4A E6 8E
IIIIIIIIIIHH 50 coDiGODtmaum 50

4A60 05 C7 C6 OC BD 4A E6 66 4CA8 5A 26 D7 35 36 39 C6 05
30 1F 26 FC 4CB0 3D C3 45 3C 1F 01 34 20
4A68 05 8E FF FF
4A70 4A 2b F6 BD 4A CC 8E 04 4CB8 C6 05 A6 80 34 02 84 OF
4A76 00 10 8E 42 A4 5F BD 4A 4CC0 48 48 48 48 8A 05 A7 21
8D 4A E6 30 B8 4CC8 35 02 44 44 44 44 8A 50
4A80 E6 C6 89
4A88 18 C6 OA BD 4A E6 30 88 4CD0 A7 A4 31 A8 20 5A 26 E2
BD 4A E6 30 OC 4CD8 35 20 31 22 20 C6 CE 47
4A90 16 C6 14
4A E6 BD 80 06 4CE0 1E B6 47 46 85 02 27 03
4A98 C6 14 BD
4AA0 81 53 26 F9 39 BD 4A EE 4CEB CE 47 2E BE 47 47 86 10
BE FF 10 BE 4CF0 34 42 BD 4B CA 35 42 4A
4AAB BD 4A D9 15
04 BD 4A 4CF8 26 F6 7A 47 46 26 OF 96
4AB0 44 5F C6 20 34
04 5A 26 4D0U OA B7 47 4b BE 47 47 30
4AB8 FD BD 4B 12 35
4D08 89 FF 00 BF 47 47 39 7A
4AC0 F3 10 8E 44 C4 8E 06 21
86 4D10 47 52 26 30 86 05 27 47
4AC8 BD 4B 43 39 8E 04 00
4ADQ 80 A7 80 8C 06 00 25 F9 4D18 52 13 BE 06 21 86 1E 34
4D20 02 86 02 1C FE 34 01 5F
4ADB 39 8E 06 00 86 55 A7 00
4AE3 BC 1E 00 25 F9 39 A6 AO 4D28 35 01 66 85 34 01 5C Cl
26 F9 39 86 E5 4D30 8E 26 F5 68 84 35 01 66
4AE8 A7 80 5A
4AF0 B7 FF 22 B7 FF C3 B7 FF 4D38 84 4A 26 E7 30 88 20 35
4AF8 C5 B7 FF C7 39 34 30 8E 4D40 02 4A 26 DB 39 86 47 3E
AO 4D48 27 05 81 03 27 01 39 BE
4B00 06 00 10 8E 06 01 A6
1D FF 25 F7 35 4D50 47 4D CE 06 00 34 10 BD
4B08 A7 80 8C
10 A6 AO 80 21 4D58 4B CA 35 10 30 1F 8C 14
4B10 30 39 34
4918 26 1C 35 10 30 89 FF 00 4D60 EO 27 4B BF 47 4D A6 84
20 10 8E 44 80 4D68 81 AA 27 42 81 55 27 09
4B20 34 10 34
AO A7 84 30 88 4D70 81 5D 27 05 86 02 27 47
4B28 C6 08 A6
4B30 20 5A 2b F6 35 20 6F 84 4D78 4C 30 89 01 21 Ab 84 BI
4B38 30 88 20 8C 1E 00 25 F6 4D80 AA 27 2B 81 55 26 06 30
4B40 35 10 39 C6 1E 34 04 C6 4D88 B8 DF BF 47 4D B6 47 54
A7 80 5A 26 F9 4D90 27 02 BE 47 4D CE 46 76
4B48 04 A6 AO
35 04 5A 26 ED 4D98 BD 4B CA 7F 47 54 39 BE
4B50 30 88 1C
3E C6 10 3D C3 4DA0 47 4D CE 46 5E BD 4B CA
4B58 39 B6 47
03 8E OA DE BD 4DA8 86 01 B7 47 54 39 BE 47
4B60 46 DE 1F CA 8E
4B68 4B CA B6 47 3E 27 OE 34 4DB0 4D CE 06 00 BD 4B
4DB8 OB FE BF 47 4D 39 FC 47
4B70 02 BD 4B 7E 35 02 81 01
4DC0 49 C4 1F Cl 1E 26 05 86
4B78 27 03 BD 4B 9A 39 8E 13 CE 45 CE BD 4B CA 30 89
4DC8 01 B7 47 4C B6 47 55 10 4EF0
4B80 E7 CE OB FF BD 4B B6 8E 89 00
4DD0 26 00 D9 BE 47 49 30 4EFB 00 FE BD 4B CA 30 89
4B88 11 EF CE 08 FF BD 4B B6 26
4DD8 02 20 AE 84 8C 55 55 10 4FO0 FE BD 4B CA 39 81 03
4B90 8E OE F9 CE OB FF BD 48
4DE0 27 00 BB 8C AA AA 10 27 4F08 2F 7C 47 55 BE 47 49 30
4B9B B6 39 8E 13 E7 CE 4b 9E 4B
4DE8 00 B4 8C 5F F5 10 27 00 4F10 89 FF 00 CE 06 00 BD
4BA0 BD 4B B6 8E 11 EF CE 46 BF B7 06
4DF0 AD 5F 7F 47 5B 86 4F18 CA 30 89 00 FE CE 46
4BAB 9E BD 4B B6 8E OE F9 CE 47 56 CE
4DFB FF 02 B6 FF 00 B7 4F20 BD 4B CA 30 89 00 FE
4BB0 46 9E BD 4B Bb 39 C6 04 FF 00
4EO0 86 DF B7 FF 02 B6 4F28 46 26 BD 4B CA 30 89 00
4BB8 34 54 BD 4B CA 35 54 30
4b BD 4B CA
4E08 B7 47 57 81 FD 26 IA C6 4F30 FE CE 4b 39
4BC0 89 01 00 33 C8 10 5A 26
4E10 01 Bb 47 56 81 FD 26 02 4F38 61 04 2b 25 7F 47 55 BE
4BC8 EF 39 C6 02 34 14 C6 08
4E18 C6 81 F7 47 55 Bb 47 58 4F40 47 49 34 10 CE 06 00 BD
4BDÒ 37 02 A7 84 30 88 20 5A
4E20 26 15 BE 47 49 34 10 20 4F48 4B CA 35 10 30 89 01 00
4BD8 26 F6 35 14 30 01 5A 26
4E28 3C B6 47 56 61 FD 26 EA 4F50 BF 47 49 CE 45 6E BD 4B
4BE0 EB 39 BD 4A 38 86 05 B7 86 01 B7 47 58 20 E3 BE CA 30 89 00 FE BD 4B CA
4E30 4F58
4BEB 47 3F 7F 47 3E SE 47 40
4B CA 26 30 7C 47 55
4E38 47 49 CE 06 00 BD 4F60 39 81 81
48F0 C6 06 6F 80 5A 26 FB 86
CA BE Ab
4E40 30 89 00 FE BD 4B 4F68 BE 47 49 30 89 01 22
4BF8 06 B7 47 46 BE 1D 00 BF
4E48 47 49 30 01 34 10 30 89 4F70 84 61 57 10 27 FF 27 BD
4CO0 47 47 8E 13 EO BF 47 49
OB 4E50 01 61 A6 84 81 D5 D7 44 4F78 50 3F BE 47 49 30 89 FF
4C08 7F 47 4B 7F 47 4C 8E
4D 7F 47 4F 86 4E58 81 FF 27 40 81 50 27 44 4F80 01 BF 47 49 CE 45 96 BD
4C10 FE BF 47
50 Bb OA B7 47 4E60 B6 47 4B 27 16 AE E4 CE 4FSB 4B CA 30 89 00 FE CE 45
4C18 05 B7 47
CE 4E68 45 CE BD 4B CA AE E4 30 4F90 B6 BD 4B CA 39 81 82 26
4C20 51 BD 4A A5 8E 07 OF
05 66 03 37 20 4E70 89 01 00 BD 4B CA 7F 47 4F9B 40 7C 47 55 BD 50 3F BE
4C28 44 88 C6
4A 26 F8 30 88 4E78 4B 20 19 AE E4 CE 45 96 4FA0 47 49 30 B9 FF 01 BF 47
4C30 10 AF 81
4C38 IA 5A 26 FO BD 4C 77 8E 4E80 BD 4B CA AE E4 30 89 01 4FA8 49 CE 45 CE BD 4B CA 30
4C40 08 OF CE 44 A6 C6 05 86 4E88 00 CE 45 B6 BD 4B CA 86 4FB0 89 00 FE BD 4B CA 30 89
10 AF 81 4A 26 4E90 01 B7 47 4B AE E4 BF 47 4FB8 00 FE BD 4B CA BE 47 49
4C48 03 37 20
4C50 F8 30 88 IA 5A 26 FO B6 4E98 49 35 10 39 35 10 86 02 4FC0 30 89 03 60 A6 80 81 FF
4C58 47 3F C6 05 3D C3 45 3C 4EA0 B7 47 4C 39 35 10 30 1F 4FCS 27 07 A6 64 81 FF 27 01
4C60 1F 03 8E 08 16 C6 05 37 4EA8 34 10 20 B9 BD 51 6F B6 4FD0 39 86 04 C6 05 BD 51 OF
30 88 20 5A 26 4EB0 47 55 61 01 26 2C 7C 47 4FD8 39 81 83 26 2B 7C 47 55
4C68 02 A7 84
4C70 F6 BD 75 30 7E 51 C4 34 4F.B8 55 BE 47 49 34 10 30 89 4FE0 BD 50 3F 30 89 00 FE CE
4C78 36 8E 47 40 C6 06 10 8E 4EC0 01 00 CE 06 00 BD 4B CA 4FE8 Ob 00 BD 4B CA BE 47 49
84 34 14 C5 01 4EC8 35 10 30 89 FF 00 BF 47 4FF0 30 89 01 01 BF 47 49 CE
4C80 07 16 A6
4ED0 49 CE 45 96 BD 4B CA 30 4FF8 45 96 BD 4B CA 30 89 00
4C88 26 24 C6 05 3D C3 45 3C
4C90 1F 01 34 20 C6 05 A6 80 4ED8 89 00 FE CE 45 B6 BD 4B 5000 FE CE 45 B6 BD 4B CA 39
F6 4EE0 CA 39 BI 02 26 1F 7C 47 5008 81 84 26 1C BD 50 3F BE
4C98 A7 A4 31 A8 20 5A 26
21 35 14 30 01 4EE8 55 BE 47 49 30 89 FF 00 5010 47 49 34 10 30 89 02 00
4CA0 35 20 31
7590 83 00 6D DC 00 7D 4E 00
7598 76 93 00 7D FF 00 8D 6E
75A0 00 A6 83 00 D4 31 00 BD
75A8 6E 00 A8 E9 00 9E 62 00
75B0 BD 93 00 BD 2C 00 D4 62
75B8 00 BD DC 00 A8 5C 00 C8
75C0 DC 00 FC 00 00 00 00 00
75C8 00 00 00 00 00 00 00 00

Avalanche foi montado a partir do


endereço 49436, para possibilitar a uti-
lização do Assembler de INPUT.
Provavelmente você já percebeu que
alguns trechos da memória do compu-
tador não foram aproveitados: entre a
tabela de cores e a tabela de padrões e
entre o fim do programa e a tabela de
perfil. Assim, você terá a possibilidade
de alterar os endereços de montagem
tanto da tabela de cores como da tabela
de perfil, mas não se esqueça de alterar
também todas as instruções nas rotinas
que fazem referência a essas tabelas. Es-
sa precaução deve ser tomada sempre
que quiser modificar determinado ende-
reço de montagem no programa.
Faça um programa BASIC ou exami-
ne manualmente as posições da memó-
ria, verificando se os
conteúdos confe-
rem com a listagem hexadecimal a se-
5018 10 AE 84 35 10 10 8C 55 5140 B7 FF 03 B6 FF 23 guir. Se você tiver deslocado alguma
5020 55 26 05 30 01 BF 47 49 5148 B7 FF 23 IA 50 35 parle do jogo, os endereços serão dife-
5028 7F 47 55 7F 47 4B BE 4 7 5150 02 34 10 C6 FC F7 FF 20 rentes, mas a sequência de códigos he-
5030 49 CE 45 6E SD 4B CA 30 5156 30 1F 26 FC AE E4 7F FF xa deve ser exatamente a mesma.
5038 89 00 FE BD 4B CA 39 BE 5160 20 30 1F 26 FC AE E4 4A
5040 47 49 CE 06 00 BD 4B CA 5168 26 EB 1C AF 35 10 39 8E Clic 17 17 17 17 17 17 17 17
5048 30 89 00 FE BD 48 CA 39 5170 00 62 86 04 BD 51 33 39 C124 17 17 17 17 17 17 17 17
5050 66 88 8K 00 8C 5178 B6 4 7 E3 81 02 24 01 39 C12C 17 17 17 17 17 17 17 17
5058 86 83 8E 00 D5 5180 10 8E 47 4F 8E 13 E7 BD C134 17 17 17 17 17 17 17 17
5060 BE 47 49 CE 06 00 BD 4B 5188 51 97 11 EF BD 51 97 C13C 17 17 17 17 17 17 17 17
5068 CA 30 89 00 FE BF 47 49 5190 6E OE F9 BD 51 97 39 34 C144 17 17 17 17 17 17 17 17
5070 CE. 45 6E BD 4B CA 30 89 5198 10 BE 47 47 30 1F I
C14C 17 17 17 17 17 17 17 17
5078 00 EE BD 4B CA 86 1E BE 51A0 E4 35 10 22 01 39 A6 A4 C154 17 17 17 17 17 17 17 17
5080 00 71 BD 51 33 DE 47 49 51A8 4C 84 OF A7 AO 81 07 24 C15C 17 17 17 17 17 17 17 17
5088 8C 1B 00 25 D3 7A 47 3F 51B0 01 39 CE 46 8E 81 OF 26 C164 17 17 17 17 17 17 17 17
5090 10 26 FB 63 86 05 BE FF 51B6 03 CE 06 00 30 89 FF 00 C16C 17 17 17 17 17 17 17 17
5098 FF 30 1F 26 FC 4A 26 F6 51C0 BD 4B CA 39 86 05 B7 47 C174 17 17 17 17 17 17 17 17
50 AO BD 4A CC B6 FF 22 84 OF 51C8 52 7F 47 55 BD 4B 59 BD C17C 67 67 67 67 67 67 67 67
50A8 B7 FF 22 B7 FF C2 B7 FF 51D0 4D BE BD 4D 45 BD 51 78 C184 67 67 67 67 67 67 67 67
50B0 C4 B7 FF C6 10 8E 05 OB 51D8 BD 4C DE BD 4D OF B6 47 C18C 67 67 67 67 67 67 67 67
50B8 8E 07 01 AF Al 8E OD 05 51E0 4C 81 01 10 27 FF OA 61 C194 67 67 67 67 67 67 67 67
5OC0 AF Al 8E 20 OF AE Al 8E 51E8 02 10 27 FE 63 C6 64 4F C19C 67 67 67 67 67 67 67 67
50C8 16 05 AF Al BE 12 21 AF 51F0 4A 26 CD 5A 26 F9 BD 80 C1A4 67 67 67 67 67 67 67 67
50DO Al 86 C8 8E 00 FF BD 51 51F8 06 81 03 26 D2 39 39 03 C1AC 67 67 67 67 67 67 67 67
50D8 33 86 C8 8E 00 C6 BD 51 5200 00 00 00 00 00 00 00 00 C1B4 67 67 67 67 67 67 67 67
50EO 33 86 FF 8E 00 FF BD 51 7530 8E 75 SA BF 75 88 86 13 C1BC F7 F7 F7 F7 F7 F7 F7 F7
50E8 33 86 64 D7 51 EE 16 FA 7538 34 02 B6 FF 01 84 F7 B7 C1C4 F7 F7 F7 F7 F7 F7 F" F7
50FO Fl 86 FF 8E 00 96 BD 51 7540 FF 01 B6 FF 03 84 F7 67 C1CC F7 F7 F7 F7 F7 F7
50F8 33 B6 47 3E 4C 84 03 B7 7548 FF 03 B6 FF 23 8A 08 B7 C1D4 F7 F7 F7 F7 F7 F7
5100 47 3E 7A 51 EE C6 05 86 7550 FF 23 FE 75 88 IA 50 37 Cl DC F7 F7 F7 F7 F7 F7 F7 F7
5108 03 BD 51 OF 16 FA E8 1E 7558 12 11 83 75 CD 25 03 CE C1E4 F7 F7 F7 F7 F7 F7 F7 F7
5110 69 8E 47 40 3A 34 12 BD 7560 75 8A FF 75 88 34 10 C6 C1EC F7 F7 F7 F7 F7 F7 F7 F7
5118 51 23 35 12 4A 26 F2 BD 7568 FC F7 FF 20 30 1F 26 FC C1F4 F7 F7 F7 F7 F7 F7 F7 F7
5120 4C 77 39 A6 84 4C 61 OA 7570 AE E4 7F FF 20 30 1F 26 C1FC 17 17 17 17 17 17 17 37
5128 26 06 6F 84 30 1F 20 F3 v S 7tí
.
FC AE E4 4A 26 EB 32 62 C204 17 17 17 17 17 17 17 17
5130 AF 84 39 34 02 B6 FF 01 7580 6A E4 26 CE 1C AF 35 82 C20C 17" 17 17 17 17 17 17 17
5138 84 FF B7 FF 01 B6 FF 03 75 C3 62 00 BD E9 00 9E C214 17 17 17 17 17 17 17 17
J A

IIHIIHII11W—11BBB11IIIIIIIHI1
68 ZD 94 DB C6BC 00 00 00 00 10 38 7C 36
C21C 17 17 17 17 17 17 17 17
C4 74 62 F3 62 01 46 00 00 00 C6C4 38 36 10 10 00 00 00 00
C224 17 17 17 1/ 17 17 17 17
C47C FF FF 00 00 FF FF 00 00 C6CC 00 00 00 00 00 00 00 00
C22C 17 17 17 17 17 17 17 17
C484 FF FF 00 00 FF FF 00 00 C6D4 00 00 00 00 00 00 00 00
CZ34 17 1? 17 17 17 17 17 17
C23C C7 C7 C7 C7 C48C FF FF 00 00 FF FF 00 00 C6DC 00 00 00 00 00 00 00 20
C7 C7 C7 C7
C244 C7 C7 C7 C7 C7 C7 C7 C7 C494 FF FF 00 00 FF FF 00 00 C6E4 51 8A 04 00 00 00 00 00
C24C C7 C7 C7 C7 C7 C7 C7 C7 C49C FF FF 00 00 18 3C 3C 18 C6EC 00 00 00 00 00 00 00 00
C254 C7 C7 C7 C7 C7 C7 C7 C7 C4A4 3C 3C 3C 3C 3C 3C 18 18 C6F4 00 00 00 00 00 00 00 00
C25C C7 C7 C7 C7 C? C7 C7 C7 C4AC 18 18 18 1E 00 00 00 00 C6FC 00 00 00 00 00 00 00 82
C264 C7 C7 C7 C7 C7 C7 C7 C7 C4B4 00 00 00 00 00 00 00 00 C704 45 ZB 10 00 00 00 00 00
C26C C7 C7 C7 C7 C? C7 C7 C7 C4BC 00 00 00 00 01 03 03 01 C70C 00 00 00 00 00 00 00 00
C274 C7 C7 C7 C7 C? C7 C7 C7 C4C4 00 01 01 01 OE 00 01 02 C714 00 00 00 00 00 00 00 00
C2 7C C7 C7 C7 C7 C7 C7 C7 C7 C4CC 04 OB 04 00 80 CO CO BO C71C 00 00 00 00 53 43 4F 52
C4D4 00 00 00 EO 00 00 80 40 C724 45 20 30 30 30 30 30 30
CZ84 C7 C7 C7 C7 C7 C7 C7 C7
C28C C7 C7 C7 C7 C7 C7 C7 C7 C4DC 20 20 30 00 0 0 00 00 00 C72C 20 20 56 49 44 41 53 20
C294 C7 C7 C7 C7 C7 C7 C7 C7 C4E4 00 00 00 00 00 00 00 00 C734 30 20 20 4E 49 56 45 4C
C4EC 00 00 00 00 1B 3C 3C 18 C73C 20 30 4E 4F 56 41 20 50
C29C 37 37 37 37 37 37 37 37
C2A4 37 37 37 37 37 37 37 37 C4F4 00 10 10 1E EO 00 OC 24 C744 41 52 54 49 44 41 30 31
C4FC 42 B2 43 00 00 00 00 00 C74C 32 33 34 35 36 37 38 39
C2AC 37 37 37 37 37 37 37 37
C2B4 3 7 3 7 3 7 3/ 37 37 37 37 C504 00 00 00 00 1C 3E 7F FF C754 00 00 00 A6 JO BA 30 95
C50C FF FE FC 38 00 00 00 00 C75C 07 18 08 OF 09 OF FD 00
C2BC 37 37 37 37 37 37 37 37
C2C4 37 3/ 37 37 37 37 37 37 C514 00 00 00 00 00 00 00 00 C764 FD 00 O D5 00 FD 00 IE
C2CC 37 37 37 37 37 37 37 37 C51C 00 00 00 00 00 00 00 00 C76C BD 00 D5 00 OA A'J 00 D5
C2D4 37 37 37 17 37 37 37 37 C524 00 00 00 00 03 07 OF OF C774 00 OF 9F 00 Di 00 05 A9
C2DC A7 A7 A7 A7 A7 A7 A7 A7 C52C OF 07 03 01 00 00 00 00 C77C 00 1C 01 OA BD 00 1C 01
C?E4 A7 A7 A7 A7 A? A7 A7 A7 C534 00 00 00 00 60 CO EO FO C784 1E El 00 El 00 OA 1C 01
C2EC A7 A7 A7 A7 A 7 A7 A7 A7 C53C FO FO EO CO 00 00 07 18 C78C El 00 OF FD 00 El 00 05
C2F4 A7 A7 A7 A7 A7 A7 A7 A7 C544 20 40 40 BO 80 40 7C 02 C794 El 00 FD no oa 1)5 00 FD
C2FC 87 B7 B7 67 87 87 87 87 C54C 02 01 00 00 DO 00 1F AO C79C 00 Fi 00 FD 00 O A FD
C304 87 87 87 87 67 87 87 87 C554 CO 00 00 00 00 00 00 04 C7A4 00 3F 01 OF OC 3F
C30C 87 87 67 67 87 87 87 87 C55C OA 11 EO 00 00 00 80 40 C7AC 05 FD 00 3F 01 [)A Fl 00

C314 87 87 87 B7 87 87 87 67 C564 iC 22 02 02 02 U4 08 04 C784 FD 00 11 El 00 no oa


C31C D7 D7 D7 D7 D7 D7 D7 D7 C56C 04 04 F8 00 00 00 00 00 C7BC OC 01 El 00 OA A9 00 52
C324 D7 07 D7 D7 D7 D7 D7 D7 C574 00 00 00 00 00 00 00 00 C7C4 01 14 FD 00 52 01 OA D5
D7 C57C 00 00 00 00 00 00 7B 86 C7CC 00 FD 00 1E BD 00 FD 00
C32C D7 D7 07 D7 D7 D7 D7
C-334 D7 D7 D7 D7 D7 D7 D7 D7 C584
C5BC
01
00 00
01 00 00 M oo oo oo
00 00 OO 00 1E 61
C7D4
C7DC
OA A9 00 D5 00
D5 00 05 A9 00
OF 9F
D5 00
00
OA
C33C 97 97 97 97 97 97 97
C344 97 97 97 97 97 97 97 C594 80 80 00 00 00 00 00 00 C7E4 BD 00 1C 01 1E El 00 1C
C59C 00 00 00 00 00 00 00 00 C7EC 01 OA 1C 01 El 00 OF FD
C34C 97 97 97 97 97 97 97 97
Cl 54 97 97 97 97 97 97 97 97 C5A4 87 79 00 00 00 00 00 00 C7F4 00 El 00 05 El 00 El 00
C35C F4 F4 F4 F4 F4 F4 F4 F4 C5AC 00 00 00 00 00 00 00 00 C7FC OA D5 00 FD 00 IE El 00
C5B4 El 9E 00 00 00 00 00 00 C804 El 00 05 FD 00 D5 0 0 05
C364 F4 F4 F4 F4 F4
C36C F4 F4 F4 F4 F4 C5BC 00 00 00 00 22 14 08 08 CBOC FD 00 BD 00 05 OC 01 A9
C374 F4 F4 F4 M F4 C5C4
C5CC
0 8 08 08 08 18 3C 36
7E 3C 18 18 00 00 00
7E
00
C814
CB1C
00 OF 2D 01 A9
01 A9 00 OA FD
00 05 OC
00 FD 00
C37C F4 F4
C3B<! F4 F4 C5D4 00 00 00 00 00 00 00 00 C824 iE FD 00 7E 00 OA FD 00
C3Bí. F4 F4 C5DC 00 00 00 00 ja ia oc oc C82C A9 00 OA FD 00 FD 00 IE
C394 F4 F4 C5E4 06 06 03 03 06 06 OC OC CB34 BE 00 D5 00 1E 8E 00 BD
C39C C5EC 18 1B 30 30 00 00 00 00 C83C 00 05 BE 00 A9 00 05 8E
C3A4 33 33 3J C5F4 00 00 00 00 00 00 00 00 C844 00 A9 00 OF 9F 0 0 BD 00
C5FC 00 00 00 00 60 60 C6 C3 C64C 05 A9 00 D5 00 00
C3AC 33 33 33 33 33
C3B4 33 33 33 33 33 C604 66 6C 38 18 00 00 00 00 CB54 1C 01 1E BD 00 FD 00 05
C3BC 4C 41 20 00 00 C60C 00 00 00 00 00 00 00 00 C85C El 00 El 00 OA 1C 01 El
C3C4 00 o» 56 33 43 C614 no 00 00 00 00 0 0 OU 00 CB64 00 OF FD 00 FD 00 05 El
C3CC 0 0 0 0 00 00 08 C61C 00 00 00 00 64 D6 FF FF C86C 00 1C 01 OA D5 00 FD 00
C3D4 5 o i j a 1
15 70 0000 00 C624 FF FF FF FF 00 00 00 00 CBM 1E D5 00 El 00 05 FD 00
C3DC 00 00 O 42 00 01 28 Fl C62C 00 00 00 00 00 00 00 00 C87C D5 00 OA FD 00 D5 00 OF
C3E4 06 00 FF' FF 00 00 FF FF C634 00 00 00 00 OO 00 00 00 CS84 OC 01 El 00 05 FD 00 FD
C1EC FF 00 UO FF FF C63C 00 00 00 00 00 01 03 07 CBBC 00 OA El 00 52 01 11 El
C644 1F 3F 7F FF 00 00 00 00 ('894 00 A9 00 OA OC 01 El 00
C3F4 FF 00 00 FF FF
C64C 00 00 00 00 00 00 00 00 C89C OA 52 01 52 01 14 52 01
C3FC FF FF FF 0 0 00
C404 no F F FF OC 00 C654 00 00 00 00 00 00 00 00 C8A4 7B 01 OA BE 00 AA 01 IE
C4QC 00 FF FF 00 00 C65C 00 00 00 00 00 00 FF FF C8AC 8E 00 ;b 01 05 8E 00 52
C664 3C 3C FF FF 00 00 00 00 C8B4 01 OA 8E 00 52 01 OF 9F
C414 FF I 00
1

I FF 00 00
C41C FF FF 00 FF 00 00 C66C 00 00 00 00 00 00 00 00 C8BC 00 7B 01 05 A9 00 01
,

C424 FF FF 00 00 FF FF 24 U C674 00 00 00 00 00 00 00
00 06 08 76
00 C8C4
C8CC
OA BD 00 1C 01
FD 00 05 El 00
IE BD 00
El 00 OA
C4 2C 2,4 12 AE OC 24 1Z 24 12 C67C 00 00 00 FF
C4 34 AE OC 02 OD 48 6C D 3 00 C684 FF FF 7E 3C 00 00 00
00 C8R4 8E 00 El 00 OF FD 00 FD
C4 3C 54 5C OF 24 12 AE OC EB C6BC 00 00 00 00 00 00 00
00 CBDC 00 05 El 00 1C 01 OA D5
C444 OC 48 fiC D3 00 54 FO F3 C694 00 00 00 00 00 00 00
00 C8E4 00 FD 00 1E El 00 El 00
C44C 00 OC 00 48 6C 04 20 11 C69C 00 00 00 00 10 10 10 38 C6EC 05 FD 00 D5 00 05 FD 00
C454 00 2E FC 71 03 4B 07 18 C6A4 38 38 38 36 00 00 00 00 C8F4 SD 00 05 OC 01 A9 00 OF
C4 5C 01 CF 46 01 00 C8 7D F2 C6AC 00 00 00 00 00 00 00 00 CBFC 2D 01 A9 00 05 OC 01 52
C4 64 2E BB 46 49 C5 ZD 94 F3 C6B4 00 00 00 00 00 00 00 00 C904 01 OA FD 00 FD 00 IE FD
Mllllllllim » CÓDIGO D£ MÁQUINA
llllll
C90C 00 7E 00 0A FD 00 A9 00 CB54 20 20 20 20 20 20 20 20 D058 20 F6 C9 06 04 OE Al 3E
C914 OA FD 00 FD 00 IE 08 00 CB5C 20 20 20 20 50 61 72 61 D060 00 D3 AO 3C ED A3 20 F9
C9lC 09 00 OA 00 64 68 6C 28 CB64 20 70 69 6F 72 61 72 20 D068 C9 46 21 EB 03 11 00 00
C924 2D 35 32 30 30 29 23 2D CB6C 61 20 73 69 74 75 61 87 D070 2B E5 ED 52 El 20 F9 10
C92C 35 32 30 30 29 2C 68 SC CB74 BI 6F 2C 20 61 20 6D 61 D078 Fl C9 CD 4B DO 06 14 C5
C9J4 28 2D 35 32 30 30 29 2C CB7C 72 82 20 20 20 20 20 20 DOBO CD 5B DO E5 CD 69 DO El
C93C 68 6C 6C 64 21 6C 64 6C CB84 65 73 74 AO 20 73 75 62 D088 23 Cl 10 F3 CD 4E DO C9
C944 64 35 35 35 35 35 32 32 CBBC 69 6E 64 6F 20 65 20 65 D090 21 E9 F3 36 04 23 36 07
C94C 35 35 32 35 41 56 41 4C CH94 6C 65 20 70 6F 64 65 20 D098 23 36 07 CD 72 00 3E E2
C954 41 4E 43 48 45 43 72 6» CB9C 73 65 20 61 66 6F 67 61 DOAO 32 EO F3 CD 69 00 C9 ED
C95C 61 87 BI 6F 3A 52 2E 4E CBA4 72 2E 20 20 20 20 20 20 DOAS 5B CB F3 21 AO C4 01 80
C964 65 64 65 72 50 72 6F 67 CHAC 53 65 20 76 6F 63 8B 20 DOBO 02 C5 E5 D5 CD 5C 00 Dl
C96C 72 61 6D 61 3A 4D 2E 48 CHB4 71 75 65 72 20 61 6A 75 D0B8 21 00 08 19 54 5D El Cl
C974 75 61 73 63 61 72 20 20 CBBC 64 61 72 20 57 69 6C 6C DOCO C5 E5 D5 CD 5C 00 Dl 21
C97C 20 20 20 20 41 70 A2 73 CBC4 69 65 2C 20 6C 65 69 61 DOCS 00 OB 19 54 5D El Cl CS
C964 20 75 6D 20 70 65 71 75 CBCC 20 61 73 20 20 20 20 20 DODO E5 CD 5B5C 00 ED CF^H
C98C 65 6E 6F 20 70 61 73 73 CBD4 69 6E 73 74 72 7S 87 B5 D0D8 CL El C9CD 5C 00 ED 59
C994 65 69 OF 2 :' ,
!

ú 5/ 69 6C CBOC t.5 73 20 65 20 70 71 65 DOEO C9 F3 0121 1C Cl AO 02


C99C 69 65 20 20 20 20 20 20 CBE4 73 73 69 6F fiE 65 20 61 D0E8 C5 E5 00D5 CD 5C Dl 21
C9A4 76 6F .6C 74 6J 20 61 6F CBEC 20 74 65 63 6C 61 20 27 DOFO 00 08 El19 54 5D Cl C5
C9AC 20 6C 6F 63 61 6C 20 6F cari b 27 2E 20 20 20 20 20
i D0F8 E5 D5 DlCD 5C 00 21 00
C9B4 6E 64 65 20 70 72 65 74 C8FC 20 20 20 20 20 20 20 20 DlOO 08 19 Cl54 5D El CD 5C
C9BC 65 6E 64 69 61 20 66 61 CC04 20 20 20 20 20 20 20 20 D108 00 C9 112A C7 F3 90 E8
C9C4 7A 65 72 20 20 20 20 20 CCOC 20 20 20 20 2D 20 20 20 DUO 01 00 0003 CD 59 C9 11
j 65 75 20 70 69 71 75 CC14 20 20 20 20 20 20 20 20 D11B 8F EB 21 8E EB 06 18 C5
I
2D 6E 69 71 7b 65 20 CC1C 20 20 20 20 20 20 20 20 D120 IA 01 1F 00 ED B8 12 2B
! 20 64 65 73 63 6F 62 CC24 20 20 20 20 20 20 20 20 D128 1B Cl 10 F3 C9 Eli 5B C7
. 65 20 7] 75 65 20 75 CC2C 20 20 20 20 20 20 20 20 D130 F3 21 90 ER 01 00 03 CD
20 20 20 20 20 20 20 CC34 20 20 20 20 20 20 20 20 D138 5C 00 C9 3E FF 2A C7 F3
-
2 61 6E 64 6F 20 64 65 CC3C 20 20 20 20 20 20 20 20 D140 01 00 03 CD 56 00 CD A7
0 63 61 62 72 69 74 6F CC44 20 20 20 20 20 20 20 20 D148 00 CD DE DO CD OA D3 IF.
1
:'06D 6F ÒE 74 65 73 CC4C 55 73 65 3A 20 20 20 20 DibO 08 32 92 EB 3E 00 32 'J3
73 20 65 73 7 O 61 6C CC54 20 20 20 20 20 20 20 20 BB 21 8F EH 06 21
!

D158 C5 íb
CA14 68 'j
Í5 20
F 20 20 20 20 CC5C 20 20 20 20 20 20 20 20 D160 CD 2D Dl CD 17 Di El 3A
I 61 1 6F 20 73 6b 75 CC64 20 20 20 20 20 20 20 20 D168 93 EB FE 01 20 07
63 68 65
3A 92
6C 61 6E 20 CC6C 20 20 20 20 20 20 20 20 D170 EB 1C 32 92 EB 3E 00 32
61 20 65 6E 63 6F 73 CC74 20 20 20 20 20 4E 20 20
CA D178 93 EB 7E 2B E5 FE 21 20
(4 74 6 2E 20 20 20 20 20 CC7C 20 20 20 20 70 61 72 61 D180 05 JE 01 32 93 EB
.

CA3-T 70 3A 92
20 20 20 20 20 20 20 CC84 20 20 20 20 20 43 6F 72 IUBH EB 47 21 90 E8 3E FF CD
CA44 20 20 20 20 20 20 20 20 CC8C 72 65 72 20 20 20 20 20 D190 B5 Dl 06 30 3A 93 EB FE
CA4r 20 20 20 20 20 20 20 20 CC94 20 20 20 20 20 20 20 20 D198 01 20 02 06 34 78 77 3A
CA54 20 20 20 20 20 20 20 20 CC9C 20 20 20 20 20 4D 20 20 D1A0 92 EB 47 3E 17 90 47 3E
CA5C 20 20 20 20 20 20 20 20 CCA4 20 20 20 20 70 61 72 61 D1A8 51 11 20 00 19 CD B5 Dl
CA64 20 20 20 20 20 20 20 20 CCAC 20 20 20 20 20 53 61 6C D190 El Cl 10 AA C9 77 11 20
CA6C 20 20 20 20 41 67 6F 72 CCB4 74 61 72 20 20 20 20 20 DIBB 00 19 10 F9 C9 3A 94 EB
CA74 61 20 65 6C 65 20 64 65 CCBC 20 20 20 20 20 20 20 20 D1C0 17 17 06 38 80 2A C7 F3
CA7C 76 65 20 73 75 62 69 72 CCC4 20 20 20 20 20 41 6D 62 D1C8 11 DE 00 19 CD 4D 00 3A
CA84 20 61 6F 20 74 6F 70 6F CCCC 6F 73 20 20 70 61 72 61 DIDO 94 EB FE 00 28 OC F5 CD
CA6C 20 64 61 20 20 20 20 20 CC04 20 75 6D 20 20 53 61 6C Dl DP E Dl Fl FE 01 28
I 03 CD
CA94 6D 6F 6E 74 61 6E 68 61 CCDC 74 6F 20 44 69 61 67 6F D1E0 OA D2 C9 11 C9 01 Db 11
CA9C 20 70 61 72 61 20 72 65 CCF.4 6E 61 6C 20 20 20 20 20 DlEfl 91 OJ D5 3A 01 i 1 D5 OE
CAA4 63 75 70 65 72 61 72 20 CCEC 20 20 20 20 20 20 20 20 D1F0 03. 2A CV F 06
[)1 .1 04 19
CAAC 73 75 61 73 20 63 6F 69 CCF4 20 20 20 20 20 20 20 20 D1F8 .SE FE E5 C5 <*D 40 00 Cl
CAB4 73 61 73 2C 20 CCFC 20 20 20 20 ZO 20 20 20
CABC 65 6E 66 72 65
20 20
6E 74 61
20
CD04 20 20 20 20 20 20 20 20
D200 El 11 20 00 10 f^^^^H
D208 Efi C9 iE 25 32 9í
CAC4 6E 64 6F 20 75 6D 61 20 CDOC 20 20 20 20 20 20 20 20 D21 03 32 96 EB
0 C6 01
CACC 61 76 61 6C 61 6E 63 68 CDU 20 20 20 20 20 20 20 20 D218 EB C6 03 J2 98 EB 11 C9^
CAD4 65 2C 20 63 6F 62 72 61 CD1C 20 20 20 20 20 20 20 20
CADC 73 20 2020 20 20 20 20 CD24 20 20 20 20 20 20 20 20
D220 01 D5 11 91 01 D5 3AU 1

D228 01 D5 OE 03 7A C7 F3 11 i
CAE4 76 65 6E 65 6E 6F 73 61 CD2C 20 20 20 20 20 20 20 20 D230 95 EB ED 53 99 EB Dl 06 J
CAEC 73 20 65 20 63 6F 72 72 CD34 20 20 20 20 20 20 20 20 D23B 04 19 ED 5B 99 EB IA 13«
CAF4 65 6E 64 6F 20 6F 20 72 D240 ED 53 99 EB
'

E5 C5 CD 4D>
CAFO 69 73 63 6F 20 64 65 20 DOOO CD6C 00 11 28 01 21 50
CB04 63 61 69 72 20 20 20 20
D248 00 Cl El 11 20 UO 10 E*J
D008 C901 09 00 CD 5C 00 11 D250 OD 20 D9 C9 00 00 00 oJH
CB0C 6E 75 6D 20 62 75 72 61 D010 ED01 21 59 C9 01 OF 00
CB14 63 6F 2E
D258 00 00 CD 00 DO 3E 58 J^Ê
20 20 20 20 20 D018 CD5C 00 11 3C 02 21 68 D260 7E DO CD 7A DO 3E 05
CB1C 20 20 20 20 20 20 20 20 D020 C901 12 00 CD 5C 00 06 D268 9B EB 3E 00 12 r>4 EB Jfffl
CB24 20 20 20 20 20 20 20 20 D028 OAED 6B 11 00 00 2B E5 D270 00 00 22 9D EB 22 91? Çft
CB2C 20 20 20 20 20 20 20 20 D030 ED52 El 20 F9 10 F2 11 D27B 22 Al EB S£ 14 32 7E 00
CB34 20 20 20 20 20 20 20 20 D038 00 00 21 7A C9 01 CO 03 D280 CD 90 DO 3E 06 32 A3 EB
C33C 20 20 20 20 20 20 20 20 D040 CD 5C 00 CD 9F 00 FE 53 D288 21 EO 02 22 A4 EB 2 1 82
CB44 20 20 20 20 20 20 20 20 D048 20 F9 C9 21 5C C7 06 06 D290 00 22 A6 EH 3E 03 J2 A8
CB4C 20 20 20 20 20 20 20 20 1)050 OE AO ED A3 OE Al ED A3 D298 EB 3E 00 32 A9 EB 3E 02
IIIIIIIIIIHHf
D2A0
D2A8
D2B0
32 AA EB 21 C2 01 22 AB
EB 21 00 00 22 AD EB JE
00 32 AF EB 21 FF 00 22
50 CÓDIGO D£ MAQUINA

D4E8
D4F0
D4F8
3E OD
2B 22
00 2A BO EB
3E 01 32 B5
EB C9 CD 02 D5 C9 CD 37
Hl
D7 30 00 El 11
D736 06 E5 CD
D740 04 CD 4D
20 00 ED 52 3E
4D 00 El 2B 3E
00 2A AB EB 11
D5 C9 2A C7 F3 ED bB BO D748 20 00 ED 52 22 AB EB C9
D2B8 BO EB 3E 00 06 05 32 B2 D500
D 7 5 O FE CA EB 07 3C 32 AE
DZCO EB 80 32 B3 EB BO 32 B4 D508 EB 19 E5 CD 4A 00 FE 00 I

D758 EB 3A AD EB FE 01 CA 9A
D2C8 EB CO 3B Dl CD BD Dl 3E D510 28 OC FE 01 28 08 FE 07
D760 D7 2A AB EB ED 5B C7 F3
D2D0 AO 32 B7 FC 3E 10 32 B9 DblB 28 04 FE OB 20 05 3E 02
32 AF EB El 3E 11 E5 CD
D768 19 3E FF E5 CD 4D 00 El
D2D8 FC 11 20 C7 06 34 C5 D5 D520
D770 11 20 00 19 3E FF E5 CD
D2E0 IA CD 8D 00 Dl 13 Cl 10 D528 4D 00 El 23 3E 13 CD 4D
D77B 4D 00 El 23 3E 01 E5 CD
D2ES F5 11 01 00 3E 54 06 1E D530 00 3E 00 32 B5 EB C9 2
D7B0 4D 00 El 11 20 00 ED 52
D2F0 C5 D5 F5 2A C? F3 19 CD 0538 C7 F3 ED 5B BO EB 19 3E D7H8 3E 00 CD 4D 00 2A AB EB
4D 00 Fl 3C Dl 13 Cl 10 DS40 FF CD 4D 00 21 FF 00 22
D2FS D790 23 22 AB EB 3E 01 32 AD
D300 EF CD 07 D3 C3 2E D3 11 D54R BO EB C9 3 A AE EB FE 00
D798 EB C9 2A AB EB ED 5B C7
D308 9D EB ED 53 BA EB 11 07 D550 C2 46 D6 3A AD EB FE 01
D7A0 F3 19 3E 04 E5 CD 40 00
D310 00 2A C7 F3 19 06 06 C5 D558 CA D3 D5 2A t'7 F3 ED 5B
D7A8 El 23 3E 06 E5 CD 4D 00
0318 ES ED 5B BA EB IA 13 ED D560 AB EB 19 E5 2B 3E FF E5
D7B0 El 11 20 00 19 3E 07 E5
D320 53 BA EB C6 7E CD 40 00 D56B CD 4D 00 El 11 20 00 19
D7B8 CD 4D 0 0 El 2B 3E 05 CD
D328 El 23 Cl 10 EA C9 3A 9B D570 3E FF CD 4D 00 El 3E 00
0578 E5 CD 4 D 0 0 El 11 20 00 D7C0 4D 00 2A AB EB 2 3 2 2 AB
D330 EB C6 7E 11 15 00 2A C7 D7C8 EB ED 5B C7 F3 19 11 40
D338 F3 19 CD 4D 00 3A 94 EB D580 19 3E 01 E5 CO 4D 00 El
D7D0 00 19 CD 4A 00 FE 34 20
D340 C6 7E 11 1E 00 2A C7 F3 D588 11 20 00 19 CD 4A 00 FE
D590 4B CA 4 0 06 FE 4A CA 40 D7D8 OC 3E 00 32 AE EB 3E 04
DJ48 19 CD 4D 00 CD 7A DO 21 D7E0 06 05 CD EC OB 3E 00 32
D3S0 IA C9 CD 4E DO CD 4B D5 D598 D6 FE 25 CA 40 D6 FE FE
D5A0 CA 40 D5 1E 04 CD 41 01
D7E8 AD EB C9 3E 00 32 AE EB
0358 CD 80 D4 CD OC 09 D7F0 2A AB EB ED 5B C7 F3 19
3360 D3 CD FE D CD BC D5A8 CB 57 20 OE 06 01 CB 5F
D7F8 E5 3E FF CD 4D 00 El 2B
J

3368 AF EB PB 01 CA D2 D5B0 20 02 06 81 78 32 AE EB
D5B8 18 09 CB 5F 20 05 3E 01 D800 3E FF E5 CD 4D 00 El 11
D370 02 CA 26 D8 06 32 3E FF
D5C0 32 AD EB 2A AB EB 11 DE D80B 20 00 19 3E FF E5 CD 4D
3378 3D 20 F D 10 F 9 3 E 07 CD
41 01 CB 67 20 CF C9 C9 D5C8 00 ED 52 20 0T3E 01 32 DB10 00 El 23 3E FF CD 40 00
D3B0
D5D0 AF EB C9 2A C7 F3 ED 5B D818 2A AB EB 11 20 00 19 22
D388 C9 C9 FF FF JA AA EB 3C D5 C9 2A AB
D5D8 AB EB 19 11 21 00 19 E5 D820 AB EB C3 1

D390 Cfl 9F 32 AA EB 06 1C FE
D5E0 CD 4A 00 El FE 24 Z8 56 D8 28 EB ED 5B C7 F3 19 23 3E
D 396 04 38 02 06 20 Cti 78 2A
D5E8 FE 34 28 4E FE OD 28 50 D830 FF E5 CD 4D 00 El 2B 2B
D3A0 C7 F3 11 2A 00 19 E5 F5
D3A8 CD 4D 00 Fl El 23 C6 02 D5F0 FE 11 28 4C 11 20 00 19 D838 3E FF E5 CD 4D 00 El 11
D3B0 CD. 4D 00 Cl 78 2A C7 F3 D5F8 CD 4A 00 FE 48 28 41 FE D840 20 00 19 3E FF E5 CD 4D
D600 4A 28 3D FE FE 28 39 FE D848 00 El 23 23 3E FF E5 CD
D3B8 11 44 00 19 ES F5 CD 40 3E FF CD 4D
D608 25 28 35 2A C7 F3 ED 5B D850 4D 00 El 2 3
D 3 CO OQ Fl El 23 C6 02 £T> 4D
D3C8 00 C9 06 48 3A A3 EB CB 0610 AB EB 19 3E 04 E5 CD 4D D858 00 2A AB EB E5 ED 5B C7
D61B 00 El 23 3E 06 E5 CD 4D D860 F3 19 3E FF CD 4D 00 El
D3D0 57 2B 02 06 4C 2A C7 F3
D620 00 El 11 20 00 19 3E 07 D868 11 20 00 19 22 AB EB ED
D3D8 ED 5B A4 EB 19 78 01 20
D628 E5 CD 4D 00 El 2B 3E 05 D870 5B C7 F3 19 3E 00 Eb CD
D3E0 00 CD 56 00 3A A3 EB 3D 4D 00 El 11 20 00 19 3E
U3E8 32 A3 EB 20 10 3E OA 32 D630 CD 4D 00 2A AB EB 23 22
D638 AB EB 3E 00 32 AD EB C9 01 CD 4D 00 06 FF 3E FF
D3F0 A3 EB 2A A4 EB 11 20 00 3D 20 FD 10 F9 2A AB EB
D3F8 ED 52 17 A4 EB C9 3A A8 D640 3E 02 32 AF EB C9 3A AE
D648 EB FE 01 20 30 3C 32 AE DB90 11 CO 02 ED 52 38 C2 3A
D400 EB 3D JZ A8 EB FE 00 28
0650 EB 2A AB EB 11 20 00 ED D898 9B EB 3D 32 9B EB C2 80
D4 08 01 C9 3E 06 32 AB EB 3A
D658 52 22 AB EB ED 5B C7 F3 D8A0 D2 11 EA 00 3E 72 06 OC
D41D A9 EB FE 00 28 06 21 A6
D660 19 3E OA E5 CD 4D 00 El D8AB C5 D5 F5 2A C7 F3 19 CD
D418 EB 35 18 04 21 A6 EB 34 D8B0 4D 00 Fl 3C Dl 13 Cl 10
D420 2A CD F3 06 06 3A A6 EB D668 11 20 00 19 3E OB E5 CD
D670 4D 00 El 11 20 00 19 3E D8B8 EF 06 1E 3E FF OE FF OD
0428 4F 16 14 1E 01 CD 60 D4
D678 FF CD 4D 00 C9 FE 02 20 D8C0 20 FD 3D 20 F8 10 F4 CD
0430 2A CD F3 LI 04 00 19 06
D680 1D 3C 32 AE EB 2A AB EB D8C8 07 D3 3E 32 32 75 D3 C3
D438 06 3A A6 EB C6 1(T 4F 16
D68B ED 5B C7 F3 19 3E 00 E5 D8D0 5A D2 3A 94 EB 3C CB 97
D440 18 1E SI CD 60 D4 3A A6
D690 CD 4D 00 El 1] 20 00 19 DRD8 32 94 EB 3A 75 D3 3D 32
0448 EB FE fQ2 20 06 3E 00 32
D69B 3E 01 CD 4D 00 C9 FE 03 D8E0 75 03 3E 03 06 05 CD EC
D450 A9 EB C9 3A A6 EB FE E6
D45B 20 05 3E 01 32 A9 EB C9 D6A0 20 1D 3C 32 AE EB 2A AB D8E8 D8 L'3 80 D2 21 9D EB 16
D460 78 D5 ǣ E5 CD 4D 00 El D6A8 EB ED 5B C7 F3 19 3E OA D8F0 0 0 5F 19 E5 CD FE D8 El
D468 Cl 23 79 El, CD 4D 00 El D6B0 E5 CD 4D 00 El 11 20 00 D8F8 10 F9 CD 07 D3 C9 7E 3C
D4 70 Dl 23 7A D5 E5 CD 4D 00 D6B8 19 3E OB CD 4D 00 C9 FE D900 FE OA 20 06 3E 00 7 7 2B
D478 El Dl 2 3 7li CD 4D 0 0 C9 D6C0 04 20 1E 3E 00 32 AE EB D908 18 F4 77 C9 3 A 94 EB FE
D480 3A 94 EB FE 00 28 05 FE D6CB 2A AB EB E5 ED 5B C7 F3 D910 02 30 01 C9 Dl B2 EB 21
D488 03 28 01 C9 3A Bb EB FE D6D0 19 3E FF CD 4D 00 El 11 D91B A9 01 CD 2A D9 21 71 01
D6D8 20 00 19 22 AB EB C3 4B D920 CD 2A D9 21 IA 01 CD 2A
D490 01 28 67 2A C7 F3 ÊD 5B
D6E0 D5 FE 81 20 6B- 3C 32 AE D926 D9 C9 Eb ED 5B A4 EB ED
D498 BO EB 19 3E OD E5 CD 4D D930 52 El 3B 01 C9 OA 3C CB
D4A0 00 El 23 3E FF CD 4D 00 D6EB EB 2A C7 F3 ED 5B AB EB
D6F0 19 11 21 00 19 CD 4A 00 D938 A 7 O.: O.í FE 07 30 01 C9
D4A8 2A BO EB 11 EO 01 ED 52 D940 ED bB C7 F3 19 FE OF 06
D4B0 28 4C 2A C7 F3 ED 5B BO D6F8 FE 24 CA 40 D6 FE 34 20
D700 07 2A AB EB 2B 22 AB EB D94 8 24 20 02 06 FF 78 CO 4D
D4BB EB 19 11 20 00 19 CD 4A
D708 2A AB EB ED 5& C7 F3 19 D950 00 C9 00 00 00 00 00 00
D4C0 00 FE 48 28 39 FE 4C 28
D710 ES 11 20 00 19 3E FF E5 E870 21 21 23 23 21 23 23 23
D4C8 35 FE FF 20 20 2A C7 F3
D718 CD 4D 00 El 23 3E FF CD EB78 21 2 3 2 3 21 23 21 23 23
D4D0 ED 5B BO EB 19 3E FF D5
D720 4D 00 El 3E 05 E5 CD 4D E880 '23 23 21 23 21 23 23 23
04D8 CD 4D 00 Dl 21 20 00 19
D728 00 El 23 3E 07 E CD 4D
1
E888 23 21 23 23 21 23 23 23
D4E0 22 BO EB ED bB C7 Fl 19
!
IIIIIIIIIHIIH llllllllll

Desafie seu microcomputador a


decifrar alguns quebra-cabeças

matemáticos. Você também irá

aprender técnicas de grande utilidade


na resolução de sistemas de equações.

Ao chegar a este ponto de INPUT,'


você já teve com as principais
contato
técnicas de programação em BASIC.
Dado um problema, será bem capaz de
construir um programa para solucioná-lo
(caso haja uma solução, é claro). Entre-
tanto, a não ser que você tenha um hob-
by ou esteja trabalhando em algum pro-
jeto,são raras as suas oportunida-
des de mostrar o que sabe fazer
em seu microcomputador.
Certos quebra-cabeças re-
presentam gostosos desafios para
quem quer praticar programação ou
simplesmente exercitar o raciocínio.
A popularidade desse tipo de diverti-
mento não é novidade. Os egípcios
destacavam-se por sua habilidade em
decifrar enigmas, assim como os gre-
gos eram admirados pelos seus interes-
santes quebra-cabeças lógicos e matemá-
ticos e seus paradoxos inexplicáveis. De
fato, muitos problemas inicialmente tra-
tados como simples recreação transfor-
mam-se em grandes descobertas cien-
tificas.
Encontrar uma solução elegante pa-
ra umdeterminado problema geralmen-
te traz uma satisfação muito grande.
Mas, para os usuários de microcompu-
tadores, a resolução de quebra-cabeças
constitui, antes de tudo, um excelente
exercício de programação —
na verda-
de, bem mais eficiente que a análise e
execução de programas prontos, uma
vez que os estimula a escolher técnicas
e aplicar idéias próprias.

QUEBRA-CABEÇAS NO COMPUTADOR

Existem diversos tipos de quebra-ca-


beça, e nem todos podem ser resolvidos
no computador. Alguns exigem simples-
mente intuição ou um pouco de racio-
cínio lógico. Um exemplo clássico seria
o seguinte: um homem possui um lobo,
R : J " A

IIIIIIIIIIIHI "» PKOG*AMACÃOBAS,C ,03 |H|||||||||||


um carneiro e um
repolho, e quer levá- Estamos diante de um sistema de 50 NEXT K
los para o outro lado do rio em uma ca- equações lineares: ambas devem ser re- 60 FOR J-l TO R
noa. A canoa é muito pequena e ele só solvidas com os mesmo valores de c e 70 PRINT PRINT "VALORES PAR
:

pode transportar um de cada vez. Mas h, que não estão elevados a nenhuma A A LINHA " ;

80 FOR K-l TO C
não deve deixar sozinhos em qualquer potência (3cT2 - 2h = 44, por exem-
das margens do rio nem o lobo e o car-
90 INPUT A(J,K}
plo, não seria uma equação linear). Pa-
95 PRINT A(J,K) ";
neiro, nem o carneiro e o repolho, pois ra se chegar a uma solução desse siste-
100 LET R{J,K)=A(J,K)
algum não sobraria... Como chegar ao ma são necessárias tantas equações 110 NEXT K: NEXT J
outro lado do rio com todos os seus quantas forem as variáveis. Neste caso, IZfl FOR L=l TO R
bens? existem dois valores desconhecidos c — 130 G0SUB 230
Você pode resolver esse problema uti- eh —e duas equações; logo, existe uma 140 GOSUB 280
lizando um computador (se quiser, es- solução. 150 NEXT L
creva um programa), mas é muito mais Uma maneira de resolver o problema 160 CLS
rápido encontrar a sua solução com um seria isolar uma
variável na segunda 170 FOR K=l TO C-l: PRINT AT 1
lápis e um papel. equação — (48 - 4h)/2
c = e — ,4*K-4;AS(K) NEXT K :

180 FOR j"l TO R: FOR K- 1 TO C


Os problemas mais adequados ao uso substituí-la na primeira, obtendo: 3 (48
do computador são aqueles em que, da- - 4h)/2 2h = 44. Como resultado, : PRINT AT 1+J,K*4-4;B(J,K)
190 NEXT K: NEXT J
do um certo número de situações com teremos h = 7, ou seja, uma xícara de
200 PRINT "RESPOSTAS :

os respectivos valores, pergunia-se so- chá custa CzS 7,00. 210 FOR K-l TO C-l: PRINT AT 4
bre o valor de uma situação hipotética. Sistemas com duas equações sãobem +R.K*4-4;À(K,C) NEXT K :

A máquina também é útil quando a fáceis de resolver. Com três, também 220 STOP
questão envolve cálculos aritméticos não são tão difíceis. Mas, a partir daí, 240 LET D=A(L,L)
complexos ou geometria. Nesses casos, você, certamente, irá precisar da ajuda 250 FOR K=] TO C
chega-se mais depressa ao resultado es- do computador. 260 LET A(L.K)=A(L,K]/D
crevendo um programa do que buscan- 270 NEXT K: RETURN
do a solução à mão. 290 FOR J = l TO R
0 VENDEDOR DE SELOS 300 IF J-K THEN NEXT J:
Neste artigo, mostraremos como re-
solver três dos tipos mais comuns de
RE TU RN
Um negociante possui uma caixa de 310 LET F-A(J.L)
quebra-cabeça. Antes de olhar as solu-
320 FOR K-l TO C
ções, tente encontrá-las sozinho. se- Em selos estrangeirosagrupados em seis ti-
330 LET A(J,K)-A(J,K)-F*A(L,K)
guida, examine os programas e veja co- pos de envelope. Cada envelope, classi- 340 NEXT K: NEXT ,) RETURN :

mo eles funcionam. ficado de A a F, tem um preço diferen-


te. Seis crianças, membros de um clube
filatélico, gastaram todo o seu dinheiro
SIMPLIFICANDO 0 PROBLEMA
do seguinte modo: 10 CLS:INPUT"DIGITE NUMERO DE L
INHAS E COLUNAS ";R.C
Se você não está acostumado a resol- A B C D E F Preço 20 DIM A(R,C) ,B(R,C) ,AS{C-1)
ver quebra-cabeças. poderá ter algumas Betinha 3 112 CzS 341 30 FOR K-l TO C-l
40 INPUT"NOMES DAS COLUNAS ";AS
dificuldades em compreender o que é pe- Nanda 0 12 1 CzS 469
(K)
dido em cada um deles, pois a maioria Digo CzS 598
50 NEXT
requer certa prática em extrair as infor- Lu CzS 376 60 FOR J-l TO R
mações essenciais de um texto razoavel- Dudoca CzS 587 70 PR I NT " VALOR ES PARA AS LINHAS
mente confuso. Alcino 0 110 3 CzS 293 " : J
O primeiro tipo de problema, por 80 FOR K-l TO C
exemplo, apresenta um texto de tama- Qual é o preço de cada envelope? 90 INPUT A(J.K)
nho considerável que o torna muito mais Poderíamos resolver esse sistema eli- 100 B[J.K)-A(J.K)
complicado do que na realidade é. Va- minando uma variável por vez, mas, 110 NEXT K,J
mos começar por uma situação bastan- agindo assim, perderíamos muito tem- 120 FOR L=l TO R
te simples, que pode ser resolvida sem po e qualquer erro aritmético inutiliza- 130 GOSUB 230
o auxílio do computador. ria o resultado.
140 GOSUB 280
150 NEXT
Em uma certa manhã de inverno, um Existem, porém, diversas maneiras de
grupo de amigos entra em uma lancho- se resolver um sistema de equações — 160 CLS
170 FOR K-l TO C-1:PRINT S4*K-3
nete e toma três xícaras de café e duas você mesmo seria capaz de inventar um ,AS(K) NEXT :

de chá, pagando uma conta no valor de método diferente. O


que escolhemos pa- 180 FOR J-l TO R FOR K-l TO C:P :

CzS 44,00. No dia seguinte, eles retor- ra nosso programa é bem mais rápido RINT e4*K-5+32*J,B(J.K)
nam ao mesmo lugar, mas tomam o do- e relativamente simples. 190 NEXT K,J
bro de xícaras de chá e um café a me- 200 PRINT"HESPOSTAS:"
nos. Sabendo que desta vez a conta foi 210 FOR K-l TO C-1:PRINT AS(K);
" - ";;PRINT USING" Mtttt.tt";
de Cz$ 48,00, qual é o preço de cada xí-
cara de chá? 10 INPUT "DIGITE NUMERO DE LT (K,C) :NEXT
Se você conseguir remover todas as
NHÃS " ; 220 END
15 LET C-R + l 230 D-A(L.L)
informações necessárias e colocar os da-
20 DIM A(R.C) DIM B(R.C) : 250 FOR K-l TO C
dos principais sob a forma de variáveis, DIM ASÍC-1,20) 260 A(L,K)-A(L,K)/D
o problema consistirá na solução das se- 30 FOR K=] TO C-l 270 NEXT RETURN
:

guintes equações: 3c + 2h = 44e2c + 40 INPUT "NOMES DAS COLUNAS " 280 FOR J-l TO R
4h = 48. .AS (K) 300 IF J-L THEN NEXT RETURN :
: J : :

IIIIIIIIIHI IHIIIIIIIIIII
140 GOSUB 290 coluna. O mesmo será feito com as li-
310 F-A(J.L) Em seguida, o processo
150 NEXT L nhas 3, 4, 5 e 6.
320 FOR K-l TO C
330 A(J.K)-MJ.K)-F*A(L,K) 160 CLS se repetirá com L = 2.

340 NEXT NEXT RETURN : :


170 FOR K-l TO C-l:LOCATF K*b+I Ao os elementos pertencentes
final,
,1:PRTNT ASIK) NF.XT K :
à diagonal da matriz continuarão iguais
180 FOR J=l TO R FOR K=l TO C:L a 1, e os restantes, exceto os que se en-
aos] INPUT "DIGITE O NUME
OCATE K*5,4*J:PRINT B(J,K]
:

contram na última coluna da direita, se-


10 HOME :
190 NEXT K,J rão iguais a 0.
RO DE LINHAS E COLUNAS "itl.C 200 LOCATE 1 4*J PRINT "RESPOST
. :

20 DIM A(B.C) DIM B(R,C) DIM Será possível, então, ler diretamente
: :
AS:-"
A9(C - 1) os valores de A, B, C etc. na coluna não
210 FOR K-l TO C-l:LOCATE K*5,4
30 FOR K ' 1 TO C - 1 *J+4:PRINT INT(A(K,C) *1 00) /JOO nula. Todos os microcomputadores, me-
40 INPUT " ENTRE COM 03 NOMES P NEXT K nos o Spectrum, apresentarão os resul-
ARA ASCOLUNAS ";AS(K> 2 20 END tados com duas casas decimais após a
50 NEXT K 240 D=A(L.L) vírgula. Sem isso, uma resposta que se-
60 FOR J - 1 TO R 250 FOR K=l TO C ria 10 poderia aparecer como 9.999998
70 PRINT PRINT " INTRODUZA VA 260 A(L,K)=A(L,JO/D
:
ou 10.000001.
LORES PARA A LINHA ";J 270 NEXT K RETURN
:

80 FOR K = 1 TO C 290 FOR J=l TO R


90 INPUT A(J,K) 300 IF J = L THEN NEXT J RETURN ; 0 PRESENTE DE NATAL
100 B{J,K) - A(J,K) 310 F-AtJ.L)
110 NEXT K: NEXT J 320 FOR K-l TO C
120 FOR L 1 TO R Utilizando o programa anterior, vo-
330 A(J.K)-A(J,K)-F-A[L.K)
130 GOSUB 240 cê poderá resolver qualquer sistema de
340 NEXT K J RETURN :

equações lineares que possua um núme-


,

140 GOSUB 290


150 NEXT L Aprimeira parte do programa, da li- ro igual de equações e de variáveis. Mui-
160 HOME nha 10 à 110, permite que você introdu- tos problemas, porém, incluem menos
170 FOR K • 1 TO C - 1: VTAB equações e apresentam incógnitas eleva-
za as informações, enquanto a segunda
(

1) HTAB (K * 5) PRINT AS (K) das a algum expoente. Nesse caso, o me-


parte, da linha 120 à 150, chama as sub-
: :

NEXT K lhor caminho para se chegar a uma res-


180 FOR J • 1 TO R: FOR K = 1 rotinas de cálculo. A resposta será for-
necida peia última parte, da linha 160 posta consiste no emprego da tentati-
TO Ct HTAB (K 5): UTAB (4 * J
PRINT B(J,K) à 220. va e erro. Geralmente, o próprio texto
) i

190 NEXT K: NEXT J Os valores são colocados em uma fornece alguma pista para encurtar seu
200 VTAB {4 * J) HTAB (1): PR : matriz A(J,K), uma linha por vez. Nes- trabalho.
INT "RESPOSTAS programa, J se refere à linha da ma- Tente resolver este problema: no Na-
te
210 FOR K - 1 TO C - 1: VTAB (
K corresponde à coluna. A matriz
triz e tal,vovô Alberto, um excêntrico ma-
4 * J + 4) HTAB (K * 5) PRINT: :

A(J,K) é copiada em outra idêntica


— temático, anunciou a seus dois jovens
INT (A(K.C) * 100) / 100: NEX netinhos que cada um deles ganharia
B(JK). Conservamos, desse modo, a
T K tantos pacotes quantos anos tivessem
matriz original, que será impressa com
220 END (contando apenas anos completos). Dis-
240 D = A{L,L) a resposta, na linha 180.
O cálculo, feito linha por linha, é se também que cada pacote conteria
250 FOR K - 1 TO C
260 A L K - A(L.K) / D
( . ) controlado pelo laço entre as linhas 170 um número de envelopes corresponden-
270 NEXT K: RETURN e 210. Primeiro, a rotina entre as linhas te à sua idade e que, em cada envelo-
290 FOR J - 1 TO R 240 e 270 (230 e 270 no TRS-Color) se- pe, eles encontrariam,do mesmo modo.
300 IF J - L THEN NEXT 3: RET leciona o elemento de cada linha que o valor em cruzados equivalente à ida-
URN pertence à diagonal da matriz (A(l,l), de. Por fim, comentou que, no ano se-
310 LET F - A(J,L) A(2,2), e assim por diante). segui- Em guinte, o mesmo presente lhe custaria
320 FOR K - 1 TO C da, divide cada um desses elementos pe- Cz$ 500,00 a mais. Quantos anos têm
330 A(J.K) " AtJ.K) - F * A(L,K Consequentemente, todos seus netos?
lo seu valor.
)
os elementos da diagonal da matriz tor- Definindo a idade dos garotos como
340 NEXT K NEXT J: RETURN
A e B, e o valor gasto no ano em ques-
:

nam-se iguais a 1.
Apróxima rotina executa a maior tão como M, reduzimos o problema a
fffÁ duas equações:
parte do trabalho. Embora tenha ape-
10 CLS:INPUT "DIGITE O NÚMERO D nas seis linhas, é muito difícil entender
E LINHAS E COLUNAS " ;R,C
o seu funcionamento. AT3 + Bt3 = M e
20 DIM A(R.C):DIM B(R.C):DIM AS (A + 1) T 3 + (B + 1)T3 M + 500
Suponl amos que a rotina anterior já
.

CC-1) O
programa se-
tenha feito A(l,1>= 1.
30 FOR K-l TO C-l Temos, portanto, duas equações e
40 INPUT "ENTRE COM OS NOMES PA rá então desviado para a linha 290 (280
no TRS-Color), com L = A linha 300 três incógnitas.Sem recorrer à ajuda do
RA AS COLUNAS " ;AS (K) 1 .

50 NEXT K não deixará que a linha da matriz seja


I computador, levaríamos um bom tem-
60 FOR J=l TO R processada; assim, o laço partirá da li- po experimentando valores de A e B que
70 PRINT PRINT "INTRODUZA VALOR
:
nha 2. A linha 310 tomará o primeiro satisfizessem as duas equações. O com-
ES PARA A LINHA " ;
elemento da linha 2, colocando seu va- putador trabalhará da mesma maneira
BO FOR K=l TO C lor em F. Ainda em 2, a linha 320 irá — só que mais rapidamente e sem risco
90 INPUT A(J.K) selecionar cada coluna para que a linha de cometer erros.
100 B(J,K)=A(J.K) Antes de partir para os cálculos, de-
110 NEXT K,J 330 multiplique F pelo elemento da li-
nha 1 da coluna em questão e subtraia vemos verificar se há no texto alguma
120 FOR L-l TO R
esse resultado do elemento da linha 2 da informação que nos permita delimitar os
130 GOSUB 240
IIIIIIIIIIIHI HOGRAMAÇAO BASIC lllllllllllll
valores de e B. A A
referência aos "jo- ros apresentam essa mesma caracterís- Digite o programa e execute-o. Seja
vens neiinhos" sugere que os garotos tica e, em caso afirmativo, apontar paciente: você precisará esperar um bom
não têm mais de catorze anos nem me- quais são eles. tempo para obter o resultado, pois o
nos de três. Òutro caso muito interessante é o do computador irá verificar todas as com-
Como você poderá constatar, o pro- número 987654321. Ele é divisível por binações possíveis.
grama para resolver
o quebra-cabeça é 17 e inclui todos os dígitos, de 1 a 9. Para solucionar o segundo problema,
bem simples. Aqui, é preciso identificar um outro nú- trataremos o número como se fosse uma
mero que apresente essas mesmas pro- cadeia de caracteres. O programa para
priedades. o Spectrum é um pouco diferente dos
10 FOR A=3 TO 14 Para solucionar ambos os problemas, programas destinados aos demais com-
20 FOR B=A TO 14 devemos tratar o número comouma co- putadores, porque esse micro só mani-
30 LEI M=A"3+B~3 leção de dígitos (e não como um valor pula oito dígitos por vez, mas os princí-
40 LET N= (A+l) "3+ (B+l ) ' numérico). Podemos dividir o número pios básicos são os mesmos.
50 IF ABS (M+500-NK.01 THEN
em unidades, dezenas, centenas etc. ou
PRINT " A= " ;A. "B = " B :
manipulá-lo como uma cadeia de carac-
60 NEXT B
teres, usando RIGHTS, MIDS e LEFTS
70 NEXT A
ou os comandos equivalentes no micro 10 LET M-98765432
da linha Spectrum. 20 LET M=M-2?
Resolveremos o problema do núme- 30 LET MS-STRS M
40 LET F"0
10 FOR A- 3 TO 14 ro de quatro dígitos empregando o pri-
50 FOR 9-2 TO 9
20 FOR B- A TO 14 meiro método. Sendo tal número 60 LET PS=STRS P
30 LET M^A _ 3+B~3 ABCD, chegaríamos a esta equação: 70 LET X=0: FOR K-l TO 8; IF
40 LET N-(A+1) "3+(B*l) '3
50 IF ABSÍM+500-NX.01 THEN PRI
PS=MS(K TO Kl THEN LET X-K
NT "A= " A, "B= "
1000*A + 100*B + 10-C -
D= X" 75 NEXT K
(1000-D + 100*C + 10*B
: ;

f A) 80 IF X=0 THEN LET F-F+l


40 NEXT P: IF F = 0 THEN PRINT
Como sempre, a maior dificuldade MS: STOP
Embora o sistema possa apresentar para encontrar as cinco incógnitas resi- 100 GOTO 20
mais de uma solução, obteremos apenas de na delimitação do intervalo em que
uma, devido à restrição introduzida nas pode estar cada uma delas. A varia en-
linhas 10 e 20. Se o problema não espe- tre I e 9 —se fosse 0, teríamos um nú-
10 M=9B7654321
cificasse, em sua formulação, "jovens mero de três dígitos. B e C, por sua vez,
netinhos", o laço FOR... NEXT seria 20 M-M-17
variam entre 0 e 9. O fator de multipli-
30 MS=STRS(M)
bem mais extenso. cação X não deve ser menor que 2 ou 40 F-0
A função ABS da linha 50 evita que maior que 10/D, pois, nesse caso, a se- 50 FOR P-l TO 9
se cometa erros de arredondamento, gunda metade da equação seria um nú- 60 PS=CHRS(48+P)
checando se realmente + 500 é igual M mero de cinco dígitos, Por essa mesma 70 X-INSTP. (MS, PS)
a N. razão, D não pode ser maior que 4. Ten- 80 IF X-0 THEN F-F+l
O método utilizado funciona para to- do delimitado esses intervalos, podemos 90 NEXT
dos os problemas em que o número de escrever o programa para solucionar o 100 IF F-0 THEN PRINT MS END :

incógnitas é maior que o número de problema. 110 GOTO 20


equações. Outras situações podem exi-
gir mais variáveis ou mais condições
IF...THEN. Dependendo da complexi-
dade do problema, o computador pode- 10 FOR A=l TO 9 10 M = 987654321
20 FOR B=0 TO 9 20 M - M - 17
rá levar alguns minutos ou então até ho-
30 MS - STRS (M)
ras para fornecer uma resposta, mas 30 FOR C=0 TO 9
40 FOR D = l TO 4 40 F 0
com certeza chegará a ela. 50 FOR P - 1 TO 9
50 FOR X=2 TO INT (9.9/D)
60 PS - CHRS {48 + P)
60 LET J=]000*A+100*B+10*C+D
65 FOR Z - 1 TO LEN (MS)
70 LET K=1000*D+100*C+10*B+A
HO TF X*K = J THEN PHINT .!;" = "
70 IF MIDS (MS.Z.l) - PS THEN
90
O terceiro grupo de quebra- cabeças 80 NEXT Z:F = F + 1
que aparece em revistas especializadas 90 NEXT P: IF F = 0 THEN PRIN
em computador é o que envolve exclu- T MS: END
sivamente números. À primeira vista, 100 GOTO 20
parece simples questões aritméticas; Fazendo uma contagem regressiva a
mas, quando se tenta solucioná-las, lo- 10 FOR A-l TO 9 partir de 987654321, o programa con-
go se percebe a necessidade de recorrer 20 FOR B-0 TO 9 verte todo múltiplo de 17 em uma ca-
à máquina. 30 FOR C-0 TO 9
deia MS. As linhas 50 e 60 tratam cada
Seguem-se alguns exemplos. 40 FOR D-l TO 4
50 FOR X=2 TO INT(9.9/D>
um dos dígitos, de 1 a 9, como um ca-
Existe um número formado de qua-
60 J-1000*A+100*B-HO"C+D ractere. A
linha 70 verifica se o dígito
tro dígitos que, quando invertido e mul- está na cadeia MS; se não estiver, um in-
70 K-1000"D+100*C+10*B+A
tiplicado por outro número inteiro, re- dicador F é incrementado. A cadeia MS
80 IF X*K=J THEN PRINT J;"-"
torna ao seu valor original. problema O ;K só será exibida se possuir todos os dígi-
consiste em descobrir se outros núme- 90 NEXT X.D.C.B.A tos de 1 a 9.
A interface MIDI oferece excelentes

MÚSICA, recursos para


-
quem quer fazer música

amadorística ou profissionalmente.
Veja como transformar seu computador

MICROS E MIDI em um sintetizador musical.

Embora seja um atributo relativamen- das páginas 741 e 1009), certamente já INSTRUMENTOS MUSICAIS
te recente dos micros, a capacidade de tem uma idéia do que o seu computa-
executar efeitos sonoros e musicais tem se dor pode (ou não) fazer. Seja através de
tornado cada vez mais comum nos com- recursos sonoros já embutidos na con- O desenvolvimento de novos instru-
figuração básica do micro, seja através mentos musicais nas últimas décadas é
putadores pessoais de última geração.
da adição de interfaces especiais (das marcado por passagens semelhantes às
Muitos usuários com inclinações musi-
quais existe uma grande variedade no que se observam na história das máqui-
cais chegam a escolher o computador em
mercado), as características mais impor- nas de calcular. Tradicionalmente, to-
função de seus recursos sonoros. Os mi-
tantes a observar em um bom sistema de dos os instrumentos eram mecânicos:
cros mais sofisticados possuem gerado-
geração sonora são: compunham-se de cordas, membranas,
res de som de vários canais, embutidos,
tubos etc. Aos poucos, a necessidade de
permitem a programação dos mesmos
obter intensidades sonoras maiores em
e
através de comandos em BASIC. - canais de saída sonora, ou
número de
vozes. Com apenas um canal, a música shows destinados a grandes públicos
Além de compor e executar músicas (início da era do rock), assim como a in-
em um micro, o usuário tem, agora, a gerada é monofònica; o ideal é dispor
de um mínimo de três vozes, para a sin- tensa demanda criada pelas gravações,
opção de conectar sua máquina a instru-
tetização de três instrumentos tocando levou à eletrificação (ampliação eletrô-
mentos musicais eletrõnicos. como sin-
nica) de vários instrumentos musicais,
tetizadores, órgãos e outros. Um padrão simultaneamente;
como guitarras, órgãos e baterias. Final-
de interface, chamado MIDI (Musical mente, começaram a surgir instrumen-
velocidade: se for muito baixa, não
Instntment Digital Interface), criado há -

permite a execução de acordes múltiplos tos puramente eletrõnicos



primeiro
poucos anos por um consórcio de indús-
japonesas e européias, em cadência rápida; analógicos, e depois digitais como o—
trias eletrônicas
sintetizador.
está se firmando rapidamente, e prome-
- controle individual tanto de timbre co- As máquinas de calcular, por sua vez,
te abrir novas e numerosas possibilida-
mo evoluíram do ábaco para as calculado-
des para o uso do computador em mú- de intensidade;
ras mecânicas movidas a manivela ou a
sica. Examinaremos aqui esse periféri-
- controle completo das características motor elétrico, que, posteriormente, fo-
co e suas características. substituídas pelas modernas calcu-
da onda sonora: bordo de ataque, bor- ram
do de fuga. envoltória etc. Esses recur- ladoras eletrônicas. Como estas, os ins-
PRODUÇÃO DE SOM sos permitem sintetizar qualquer tipo de trumentos musicais atuais estão rechea-
instrumento musical existente, ou até dos de chips integrados.
mesmo criar vozes para instrumentos Os sintetizadores digitais são dispo-
A técnica de geração de efeitos sono- Não se limitam
sitivos sofisticadíssimos.
ros e musicais em um micro evoluiu que não existem;
à gama de notas e efeitos especiais ofe-
muitíssimo em relação aos "bipes" emi-
facilidade de programação: de prefe- recidos pelos micros (mesmo os mais
tidos pelas primeiras marcas surgidas no
-

rência, deve ser possível utilizar coman- modernos): dispõem de uma espantosa
mercado. Dos computadores cobertos parafernália de recursos.
por INPUT, o TRS-80 e o Apple são os dos em BASIC;
que oferecem menos recursos para a ge-
Um sintetizador comum, na faixa
- processador independente: permite que média de preço, permite a execução de
ração de sons, exigindo programação
a melodia se inicie no ponto determina- acordes de até oito notas em um tecla-
elaborada em linguagem de máquina pa-
do pelo software principal, sendo exe- do como o de um piano. Quase todas
ra a produção de algo mais complexo. máquinas contam com um conjunto
O TK-2000 e o Spectrum têm comandos cutada independentemente do que a as
UCP considerável de sons, envoltórias, tim-
em BASIC, como o SOUND, que faci- estiver fazendo.
bres e ritmos especiais, possibilitando ao
litam bastante a programação de efei-
das músico escolher instantaneamente entre
tos sonoros, mas ainda em um nível
Apesar de toda a sofisticação in-

mais simples. Já o TRS-Color e o MSX terfaces musicais de última geração, é um piano com eco, um violino ou um
preciso ler sempre em mente que a mú- oboé, com acompanhamento de valsa,
dispõem de recursos bem sofisticados,
um microcomputador bebop ou batuque, em duas ou três vo-
via comando PLAY. O MSX é o primei- sica gerada por
nunca atinge os padrões de desempenho zes, com ou sem percussão.
ro micro nacional com propriedades de
Sons c instrumentos totalmente dife-
sintetizador, pois permite o controle in- da música instrumental.
Devemos lembrar, ainda, que o tecla- rentes ou mesmo bizarros, efeitos de si-
dividual de algumas características da
do de um micro não corresponde ao te- renas, explosões, gargalhadas, periqui-
onda sonora, como a envoltória. Isso é
possível graças a um circuito integrado clado de um instrumento musical, como tos —
ou o que vier à cabeça do execu-
o piano, por exemplo, e é, na verdade, tante —estão entre os recursos dos mo-
especifico para o controle de som.
muito desajeitado para uso mais "sé- delos de maior preço. Por meio de al-
Se você experimentou os programas
rio". É aqui que entram em cena os ins- gumas teclas, eles nos dão acesso a uma
para composição e execução de músicas,
H dados em artigos anteriores (como os trumentos musicais digitais. orquestra completa.
17 PERIFÉRICOS 17 IHIIIIIIIII1
Uma rede Mil» ligando um computador,
um sintetizador e uma máquina de
percussão.

Emgeral, o lipo mais comum de sin-


tetizador utiliza o teclado de piano ou
órgão como dispositivo de execução.
Mas como o sintetizador é, na realida-
de, uma caixa cheia de circuitos eletrò-
nicos, capazes de receber sinais das mais
diversas origens, podemos recorrer a
qualquer tipo de instrumento musical
para gerá-los. Os mais utilizados, atual-
mente, são os de cordas (guitarra, con-
trabaixo etc) e os de percussão (bateria
eletrônica).
Tomemos como exemplo as máqui-
nas de percussão: elas podem funcionar
isoladamente ou embutidas dentro de
A
um sintetizador. qualidade artificial
da percussão eletrônica, evidente nos
primeiros modelos, tornou-se pratica-
mente imperceptível nos sintetizadores
modernos. Muitos deles têm memória
RAM que pennite o armazenamento de
sequências complexas ou não rítmicas,
para execução posterior.
Essa capacidade dos sintetizadores
estápromovendo uma verdadeira revo-
lução na maneira de se fazer música. Até
recentemente, a habilidade manual —
a capacidade de mover os dedos com
desenvoltura e rapidez sobre as cordas
ou leclas ou de fazer soar um acorde
ou batida no momento exato — era in-
dispensável à execução musical. Com o
advento do instrumento musical progra-
mável, isso está mudando.
O instrumento programável age no
sentido de "liberar" o talento musical
de uma dependência da destreza ma-
nual.Mas, com certeza, não o substitui:
a sensibilidade parao ritmo e a capaci- sons de vários inirumentos musicais taneamente, seu "génio musical" será
dade de compor músicas mentalmente através do teclado. Se, por outro lado, enormemente ampliado.
ou de obter um efeito desejado sempre você tiver a capacidade de programar e Mas, antes que você se entusiasme,
serão necessárias. armazenar sequências complexas de me- convém saber que os sintetizadores mu-
I
Osintetizador musical pode gerar lodias, e tocá-las à vontade, até simul- sicais programáveis são muito caros. E
IIIIIIIIIHIUUHHHHnmHIIIIIIIIIIII

MIDI é um padrão industrial da—


mesma forma que uma interface serial
RS-232 ou uma paralela Centronics,
usadas para conectar periféricos a um
computador. Embora dirigida exclusi-
vamente ao mundo da música, a MIDI
desempenha um papel semelhante ao
dessas interfaces, proporcionando um
protocolo padronizado de transferência
de informação entre o computador e um
tipo especial de periférico: o instrumen-
to musical digital. Isso assegura que
qualquer instrumento (que seja compa-
tível com o padrão MIDI) "entenda" o
que o computador está ordenando.
Já se registraram outras tentativas de
desenvolver um padrão de comunicação
entre instrumentos musicais e computa-
dores, mas nenhuma delas obteve uma
grande aceitação. A MIDI, ao contrá-
rio, parece determinada ao sucesso: pe-
lo menos os dois maiores fabricantes
mundiais de sintetizadores e máquinas
de percussão (Roland e Yamaha) já ade-
riram ao padrão MIDI. Além disso, vá-
rios microcomputadores lançados nos

9
9 últimos anos, a começar do MSX, pos-
sibilitam aconexão à MIDI sem maio-

\ res dificuldades. Em consequência,


prevê-se que esse padrão será universal-
mente adotado em pouco tempo.
Cada peça de equipamento compatí-
vel com a MIDI tem três soquetes de cin-

• t 4+ co pinos, do tipo DIN. Eles são rotula-


dos de IN, OUT e THRU (alguns equi-
pamentos MIDI mais antigos podem
e exatamente aqui que entra em cena a mentos musicais modernos utilizando a não ter este último tipo de conector). O
nova interface MIDI, salvando da frus- mesma tecnologia básica, tornou-se fá- soquete IN permite a recepção de sinais
tração o amante da música que não lem cil interconectá-los e transmitir informa- gerados em outro equipamento MIDI.
um alto poder aquisitivo. ções de um para o outro. É exatamente THRU envia uma cópia idêntica dos si-
Com os computadores e os instru- para isso que serve a MIDI. nais de entrada de um MIDI para ou- I
IIIIHIIWM—
iro. possibililando a ligação de vários
equipamentos "em cascata" (um equi-
pamento que não tiver o soquete THRU
é mais limitado, pois só pode ser conec-
cro MSX com um

sintetizador embuti-
do e um teclado de piano. Essa máqui-
na abre uma série de possibilidades in-
teressantes para. o músico, como, a exi-
IIIIIIIHI
Apesar das limitações, funções
ticadas — como seqúenciamento, emu-
lação de estúdios multicanais, compo-
sição e edição de melodias —
são possÍ :
sofis-

tado ao final de uma cadeia). OUT, fi- bição na tela de vídeo das notações mu- bilitadas pelo software.
nalmente, permite enviar sinais gerados sicais de uma composição ou o uso do Mesmo quem não é capaz de tocar
em um equipamento para outro. computador como um seqúenciador de uma só nota em um instrumento musical
O padrão MIDI comporta até dezes- alta capacidade de memória, sem a ne- normal, terá facilidade em compor te-
seis canais simultâneos (paralelos) de in- cessidade de equipamentos extras. mas musicais complexos no computador
formação. Cada canal controla um ins- Modelos diversos de microcomputa- e enviá-los, em seguida, para execução.
trumento separado, mas a informação dores — da linha MSX ou de outras li- A composição pode ser armazenada di-
de vários instrumentos coexiste nos mes- nhas — podem ser utilizados com um gitalmente em fita ou disco, executada
mos condutores elétricos (um artifício equipamento MIDI acrescentando-se novamente, modificada etc. Já existem
técnico denominado mulíiptexação de al- uma interface especial, ligada ao conec- cartuchos de EPROM para micros com-
ta velocidade). Os instrumentos se en- tor externo de expansão. patíveis com o padrão MIDI, com con-
carregam de "sintonizar" a informação É provável que o preço de um com- juntos de músicas prontas, para auto-
a eles encaminhada, da mesma maneira putador completo ainda seja mais bai- acompanhamento ou, simplesmente, pa-
que um aparelho de televisão seleciona xo que o de um sintetizador MIDI com- ra se tocar no computador, usando-o co-
diversos canais. patível. Mas, da mesma torma que mo um sistema de alta- fidelidade.
aconteceu com outros periféricos, ini- Um pacote de software típico para
cialmente muito caros —
como impres- a linha MIDI é o compositor musical,
UTILIZAÇÃO
soras, disquetes e monitores a cores — cujo funcionamento é exatamente igual
o preço dos sintetizadores deverá dimi- ao de um editor de textos, só que traba-
Embora exista desde 1982, so recen- nuir bastante em um futuro próximo. lhando com a notação musical conven-
temente a MIDI recebeu mais atenção Antes mesmo que os preços comecem cional, desenhada sobre a pauta. As
do público. No Brasil, o interesse por es- a cair, os usuários atraídos pela com- suas funções mais comuns são inserção
sa interface surgiu com o advento dos binação microcomputador-instrumento de músicas, apagamento, edição, lista-
primeiros microcomputadores compatí- musical devem ser informados sobre al- gem em vídeo ou impressora e execução
veiscom a linha MSX. Entre suas apli- gumas peculiaridades desse periférico. musical em diversas cadências.
cações mais frequentes, destaca-se o co- Convém ter claro, em primeiro lugar, Umbom software coloca ainda ã dis-
mando de um instrumento musical por que a capacidade de geração sonora pró- posição do usuário uma série de funções
outro. Interconectando um sintetizador pria do micro não é usada quando se de controle do sintetizador, (ais como
e um órgão eletrônico, por exemplo, a trabalha com a interface MIDI: o som o comando independente de várias vo-
MIDI permite que ambos sejam coman- é sempre gerado pelo sintetizador ou ou- zes (um sintetizador polifônico de qua-
dados de um único teclado. tro instrumento digital externo ao com- lidade deve ser capaz de tocar até dezes-
AMIDI também possibilita a sincro- putador. Assim, não há vantagem em seis notas simultaneamente), seleção de
nização de dois instrumentos diferentes comprar um micro mais caro, dotado ritmos, timbres ou seqúéncias, mixagem
— como uma máquina de percussão e dos últimos recursos em matéria de ge- etc. Se entre as características do sinte-

um piano elétrico , assim como a li- ração musical. Mesmo a memória extra, tizador se incluir a capacidade de divi-
gação de um seqúenciador. Esse dispo- disponível nos micros profissionais, não diro teclado, você poderá tocar um ins-
"memoriza" o que
sitivo foi tocado na é tão importante, pois os computadores trumento com a mão esquerda e outro
ordem correta, podendo a
repetir exe- pessoais têm memória mais do que su- com a direita.
cução de forma idêntica, tanto em tem- ficiente para o desempenho da função
po real quanto passo a passo. No pri- de seqúenciador. PADRONIZAÇÃO
meiro caso, o seqúenciador reproduz Vale a pena observar, também, que
exatamente o que o músico tocou; já no a qualidade de som disponível não é li-
segundo, ele executa, etapa por etapa, mitada pelo meio de registro utilizado. É
possível enviar três tipos de infor-
trechos da melodia, permitindo que o Como o som é armazenado de forma di- mação através de uma interface MIDI:
músico acrescente outras notas, de mo- gital (imune a ruídos), tanto faz usar notas, mudanças de programa e mixa-
do a preencher os segmentos de tempo. uma fita cassete ou um disquete a — gem de timbre. Atualmente, existe um
qualidade será sempre comparável à de conjunto padronizado de códigos MIDI
MIDI E COMPUTADORES PESSOAIS
um Compact Disc (CD). Em outras pa- que funciona como qualquer sintetiza-
lavras, obtém-se na saída exatamente o dor compatível. Entretanto, esses códi-
que se colocou na entrada. gos permitem apenas o controle das fun-
Como já mencionamos, o "casamen- ções mais elementares. Funções especiais
to" entre computadores pessoais e a in- são controladas por sequência de códi-
SOFTWARE
terface MIDI veio a público com o lan- gos, que usualmente variam de instru-
çamento da linha MSX. Os fabricantes mento para instrumento. Como resulta-
japoneses da linha MSX tinham um Uma vez que ligamos o computador do, um programa feito para um sinteti-
grande interesse nessa associação, uma a um ou mais equipamentos MIDI, é ne- zador MIDI pode não funcionar corre-
vez que a maioria deles opera também cessário um software especial para acio- tamente com outro. Além disso, para se
com divisões altamente rentáveis de ins- nar o conjunto. A variedade de softwa- programar orquestrações complicadas,
trumentos musicais digitais. A Yamaha re é ainda restrita, e os preços são mais é preciso estar familiarizado com a enor-
introduziu, com um custo muito baixo, altos do que a média. A situação tende- me gama de 'alternativas de controle.
um sintetizador semiprofissional com- rá a mudar à medida que o uso da MI- Provavelmente, também essas dificulda-
pleto; o modelo CX5M, que é um mi- DI se popularizar. des serão atenuadas no futuro.
IHIIIIIIHMHK « miftncos » lllllllllll

COMPUTADORES UNIDADES DE
RECONHECIMENTO
TIPOS DE FALA

QUE OUVEM TIPOS DE SISTEMA


FUNCIONAMENTO E USOS

Como já vimos, os periféricos toem tempo real, ou seja, simultanea- sados por um saftware especial, que
de síntese de voz capacitam o micro
mente à fala. Sistemas com esse grau de analisa o conteúdo de frequência de ca-
desempenho ainda não existem. Os pou- da amostra (análise espectral). Isso re-
a falar. O que talvez você não saiba cos sistemas de reconhecimento da fala sulta em uma matriz (tabela), em que ca-
é que as máquinas também podem contínua desenvolvidos até agora da coluna corresponde a uma amostra,
cionam apenas em computadores imen e cada linha, a uma frequência. A ma-
entender a fala humana. Veja como.
sos e custam muito caro. Além disso triz referente à palavra a ser identifica-
eles são capazes de reconhecer um nú da c comparada com as matrizes-padrão
mero muito restrito de palavras (o vo armazenadas internamente, uma para
No artigo Computadores que Falam cabulário é pequeno). cada palavra do vocabulário. A palavra
(página 446), examinamos o funciona- Já os sistemas de reconhecimento iso- que, na comparação, acusar maior in-
mento e as aplicações dos periféricos de lado, fabricados em uma grande varie- cidência é a palavra mais provável.
síntese vocal, já disponíveis para a maio- dade de modelos, são bem mais simples
ria dos microcomputadores. Como ob- e baratos. Eles podem reconhecer com
INTERFACES PARA MICROS
servamos, eles não são, em termos téc- grande precisão um número restrito de
nicos, muito complexos —
existem mo- palavras ou frases, enunciadas isolada-
delos de preço acessível até para micros mente e com clareza. O tamanho do vo- Existem, no exterior, diversas inter-
domésticos pequenos. cabulário varia entre doze e trezentas faces —em versões destinadas a micro-
Se conferíssemos ao computador a palavras ou frases curtas, dependendo computadores pessoais ou profissionais
habilidade inversa —
ou seja, enten- da sofisticação do sistema. — para reconhecimento automático da
der aquilo que falamos —
, teríamos o O
segundo critério utilizado para a fala. Todos os modelos atualmente dis-
"computador do futuro", que não pre- classificação dos sistemas RAF
diz res- poníveis empregam sistemas de reconhe-
cisaria de vídeo, nem de teclado para peito ã dependência do locutor. cimento de elocuções isoladas, depen-
"conversar" conosco, humanos. Os sistemas independentes do locu- dente do locutor.
Mas isso não é tão fácil. Dotar a má- tor, como diz o nome, são capazes de Para as linhas Apple, TRS-80 e TRS-
quina da capacidade de reconhecer a fa- reconhecer a fala de qualquer pessoa, Color, por exemplo, os sistemas Dragon
la é uma tarefa bem mais complicada do em qualquer situação. Tais sistemas são e VoiceBox permitem o reconhecimen-
que fazê-la gerar a fala. Por essa razão, tão raros quanto os de reconhecimento to de 32 a trezentas palavras ou frases
aínda não há sistemas capazes de um re- da fala continua. Mais comuns são os curtas, com 80% ou mais de precisão.
conhecimento total da fala, nem mesmo sistemas cujo desempenho depende da Compõem-se de uma placa ou caixa de
nos mais sofisticados computadores de pessoa que fala. Nesse caso, para que o expansão, contendo um conversor AD,
grande porte. sistema seja capaz de reconhecer a fala um conjunto de circuitos integrados es-
com um mínimo de precisão, a pessoa pecializados e software —
pane do qual
que vai usá-lo precisa "treinar" o com- residente na memória ROM
da unida-
putador, repetindo cada palavra ou fra- de, parte em disquete.
se do vocabulário um certo número de Para utilizar o sistema, geralmente
Não queremos dizer, com isso, que vezes. O programa analisa estatistica- conecta-se o mesmo a uma porta de en-
não se tenham desenvolvido sistemas mente as repetições e as armazena na trada serial do computador (RS-232C).
com uma certa capacidade de reconhe- memória, para utilizá-las durante o pro- Após carregar o software residente em
cimento da fala. Esses sistemas existem, cesso de reconhecimento. disquete, o sistema pode ser operado
inclusiveem versões para microcompu- com o auxílio de um microfone.
tadores pessoais, desde 1980/81.
Devemos identificar, portanto, o
grau de desempenho de uma unidade de
reconhecimento automático da fala O reconhecimento da fala requer o
(RAF). Dois critérios são utilizados. No emprego de diversos algoritmos e pro- As aplicações do reconhecimento au-
primeiro deles, os sistemas são classifi- cessos. Inicialmente, a fala, captada por tomático da fala são extremamente va-
cados em: sistemas de reconhecimento um microfone, é enviada ao computa- riadas, incluindo, por exemplo, o ensi-
da fala continua e sistemas de reconhe- dor por um conversor ana-
e digitalizada no de línguas, auxílio a pessoas inváli-
cimento de elocuções isoladas. lógico digital. O conversor executa um das, controle de aparelhos domésticos
Um sistema de reconhecimento da fa- processo de amostragem, ou seja, con- pela voz e até programação (existe uma
la contínua deveria ser capaz de "enten- verte as ondas contínuas da fala em uma versão "falada" do BASIC).
der" 90% das palavras emitidas no dis- sequência de números digitais a cada Existem também jogos muito diver-
curso natural —
por exemplo, o pronun- 50/100 milissegundos. tidos para micros, como um jogo de pô-
ciamento de um deputado, uma conver- Os dados, armazenados em um buf- quer, que utilizam voz sintética e reco-
,

sa telefónica etc. E isso deveria ser fei- /er(memória intermediária), são proces-' nhecimento da fala.
IIIIIIIIHHHH
Você sabe converter o sistema de
posições de vídeo do seu micro em um
sistema de coordenadas do tipo X e Y?
Neste artigo, ensinaremos este e
outros truques aos usuários do TRS-80.

Prosseguindo nossos estudos sobre a uma impressão. Em diversas aplicações, nhos e textos que requerem o emprego
organização da tela dos micros compa- porém, é interessante realizar posiciona- de um sistema de coordenadas ortogo-
tíveis com a linha TRS-80, examinare- mentos relativos —
como avançar para nais (semelhante ao existente para a tela
a próxima posição na linha de baixo, re- gráfica, com os comandos SET, RESET
mos como transformar o sistema de po-
cuar uma posição na mesma linha, ir pa- e POINT). Entretanto, não é difícil es-
sições de vídeo, baseado na notação
ra o final da mesma linha e assim por pecificar um conjunto de equações que
PRINT @, em um sistema de coorde-
nadas verdadeiras, X e Y — recurso dis- diante. promova a transformação de um siste-
em
ponível para os usuários das linhas Por meio de algumas expressões ma- ma de referência outro.

MSX, Apple, TK-2000 e Sinclair. temáticas, podemos realizar facilmente Em primeiro lugar, precisamos ado-
Relembrando o que já foi apresenta- o posicionamento relativo, de modo a tar uma convenção referente à origem
do nesta série de artigos, a tela do tratar a tela como um plano bidimensio- do sistema de coordenadas ortogonais.
TRS-80 é organizada em 1024 posições nal. Essas expressões seguem um forma- Se a origem deste corresponder ao can-
sequenciais, numeradas de 0 (canto su- to comum, em que se executa o cálculo to superior esquerdo (X = 0 e Y = 0>, e
perior esquerdo da tela) a 1023 (canto de conversão e, ao mesmo tempo, se im- se X indicar a coluna, e Y, a linha da
põem os limites de variação mínima e tela, estaremos usando a mesma conven-
inferior direito). Anumeração aumen-
ta da esquerda para a direita em uma li- máxima. Por exemplo: se a posição ção estipulada para os gráficos com
nha. O número-índice de cada posição atual do cursor é P (um número inteiro SET. Neste caso, teremos:
na tela é o utilizado na expressão@(ar- entre 0 e 1023), podemos fazer com que
roba) de um PRINT posicionai. eleavance uma posição para a direita 1. Converter (X,Y) para uma posição®:
por meio da expressão: PI - 64*Y + X
Pt=Pt-(PÍ+l<1024)
POSICIONAMENTO RELATIVO 2. Converter uma posição @ para (X,Y):
A notação intrínseca P<Vo é utilizada
A expressão corresponde a um po-
@ para indicar que P é um número intei-
sicionamento absoluto, ou seja, indica ro. Evitamos, assim, alguns erros de ar-
o local exato da tela onde deve começar redondamento nas expressões. A expres- Se quisermos adotar a convenção car-
são acima combina, em uma única fór- tesiana clássica (origem no canto infe-
mula, uma adição e um teste: rior esquerdo), teremos:

PÍ-P»+1:IF PIM023 THEN Pl-1023


1 . Converter (X.Y) para uma posição @:
Ou seja. a posição P% sofre um in-"
cremento de 1 ao mesmo tempo em que
,
Pt = 64M15-Y) + X
é forçada a não exceder 1023. 2. Converter uma posição @ para (X,Y):
Analisando a expressão completa,
vemos que a subexpressão entre pa-
rênteses (P% + 1 < 1024) terá um valor
PROTEJA O SEU PROGRAMA igual a - 1 se for verdadeira, isto é, se
o que você aprendeu sobre a
Utilize
desativação da tecla <BREAK> no
a próxima posição P%
for menor que
1024. Nesse caso, ela será reduzida a
TRS-80 para proteger o seu precioso
programa em BASIC contia a curiosi- P% = P% + 1 causando um incremen-
,
O
teclado dos micros compatíveis
dade dos "piratas" de software. to. Se a subexpressão for falsa, isto é, com a linha TRS-80 apresenta certas
A operação é simples: faça o com- se P%+ 1 for igual a 1024, seu valor se- particularidades que, uma vez conheci-
putador carregar e executar automati- rá igual a 0 e P^o receberá um incremen- das, permitem a programação de alguns
camente o programa. A primeira linha to de 0 (ou seja, não será incrementado). truques muito interessantes.
executável deve conter os comandos Emseguida, listamos as expressões Da mesma forma que o vídeo, o te-
POKE, vistos neste artigo, que desati- mais úteis para posicionamento relati- clado do TRS-80 tem uma área de me-
vam a resposta à tecla < BREAK > Es-
.

vo. Estude-as cuidadosamente para en- mória, na RAM, reservada à armazena-


sa providência impedirá que o progra- gem dos dados da matriz de entrada.
ma seja interrompido e listado por meio tender como funcionam.
do comando LIST.
Cada tecla, quando pressionada, envia
Se o seu TRS-80 tiver o sistema um sinal por meio de dois condutores:
operacional de disquetes (DOS), colo- CONVERSÃO PARA COORDENADAS um horizontal (percorre as fileiras de te-
que o comando BASIC NOME (nome clas) e outro vertical (percorre as colu-
dado ao programa) no arquivo de O endereçamento linear da tela. tal nas). Isso corresponde a um verdadeiro
auto-execução. Mas lembre-se de gra- qual é usado pelo interpretador BASIC endereço da tecla, que tem seu corres-
var NOME usando a opção de proteção pondente em uma unidade da RAM.
do TRS-80, apresenta uma série de in-
contra listagem (SAVE "NOME", P). Para compreender de que maneira o
convenientes para a impressão de dese-
IIIIIIIIIIIHH llllllllll
A NOTAÇÃO li 0 TECLADO DO TRS-E
POSICIONAMENTO RELATIVO BLOCO DE CONTROLE
LIMITES DA TELA POSIÇÃO DO CURSOR
FÓRMULAS DE CONVERSÃO TECLAS AUTO-REPETITIVAS
COORDENADAS ORTOGONAIS A TECLA <BREAK>

[eclado é processado e controlado pelo REPETIÇÃO AUTOMÁTICA DE TECLAS


BASIC, precisamos conhecer uma ou-
tra área de memória RAM, que abran-
ge diversos endereços —
chamados co- O teclado original do TRS-80, assim
letivamente de bloco de controle do como o de seus compatíveis, não è re-
clado. Como veremos em seguida, mui-
te-
petitivo — ou seja, nada acontece se

tos desses endereços são úteis para nos-


mantemos pressionada uma tecla.
Trata-se de uma deficiência, pois seria
sos truques de programação.
conveniente, em muitas aplicações Go-
gos, por exemplo), que algumas teclas
A POSIÇÃO 00 CURSOR fossem auto-repetitivas. O que é edição em tela completa?
Mas existe uma solução para esse Em um banco de dados, a ficha de
O BASIC do TRS-80 tem uma fun- problema: podemos saber se uma tecla entrada de informações é exibida na
está sendo pressionada ou não por in- la com todos os campos. Edição em
ção intrínseca, chamada POS(O), que
termédio do endereço 14591 do bloco de la completa é o recurso que permite
informa a posição corrente do cursor usuário "passear" com o cursor por
dentro de uma linha. O número forne- controle do teclado, que contém essa in-
da a tela, corrigindo e mudando as
cido por essa função varia entre 0 e 63, formação. Basta, portanto, consultar
e não informa a posição bidimensional
uma vez esse endereço —
a cada repeti-
formações contidas nos vários ca
pos, até ficar satisfeito com o resul
na tela (posição @), que corresponde a ção de um laço, por exemplo —
e rJire-
do. Em seguida, por meio de u
cionar a lógica do programa de acordo cia de controle, o conteúdo é armaze
um número de 0 a 1023.
A posição do cursor é armazenada no com a informação obtida. nado na memória.
bloco de controle do teclado, nos bytes
Para verificar a operacionalidade do Conhecendo as funções do vídeo e
16416 e 16417 (é um número de dezes- endereço 14591 em seu micro, digite o do teclado do TRS-80, você não terá
seguinte programa: dificuldade em desenvolver um progra-
seis bits, portanto). Para determinar a
ma òe edição em tela completa. Obser-
posição do cursor, basta usar um par de 10 PRINT PEEKU4591) ; :G0TO 10 ve a seguinte estrutura:
comandos POKE: - Inicialmente, a teia é limpa e os cam-

V = 256*PEEK(16417)+PEEK(16416) Em seguida, digite RUN e experimen- pos são exibidos na tela. Use coman-
te pressionar qualquer tecla. Note que, dos PRINT @ para isso;
Por meio dessa expressão, obtemos enquanto não se pressiona nenhuma te- - emseguida, a sub-rotina de entrada
diretamente o endereço absoluto da me- cla, o programa fica imprimindo zeros de dados é chamada por INKEYS, Co-
mória de vídeo onde está o cursor. Pa- na tela. Um número maior que zero apa- loque nela vários IF, para detectar se
ra converter o valor resultante em uma rece quando se pressiona alguma tecla alguma tecla de controle foi pressiona-
da. Localize o cursor e efetue a opera-
posição PRINT @, basta subtrair o va- ou combinação de teclas.
ção solicitada;
lor 1 5360, que corresponde ao primeiro O próximo programa ilustra com - finalmente, tendo pressionado a tecla

endereço da memória de vídeo: bastante clareza essa aplicação: uma es- que assinala o fim da edição, leia (com
pécie de "minhoquínha" é formada so- PEEK) o conteúdo dos campos e trans-
PEEK
bre a tela, quando se pressionam as qua- fira-o para a memória.
tro teclas com as flechas:
Rodando o próximo programa, vo-
100 DEFINT A-Z:X"64:Y-24
cê terá uma demonstração desse cálcu- 110 T$ - CHRS (9) + CHRS(B) + BLOQUEIO DA TECLA <BREAK >
lo. O programa preenche a tela com nú- CHRS (91) + CHRS (10)
meros inteiros, até chegar à posição 960, 120 CLS
onde é chamada uma rotina de interrup- Podemos desativar a tecla < BREAK >
130 SET(X,Y):IF PEEK(14591)>0
ção. Pressionando-se qualquer tecla, a THEN 160 do TRS-80 Modelo ou Modelo 3 (e dos
1

tela é limpa, e a impressão continua a 140 CS=INKE¥S:IF AS="" THEN 130 microcomputadores compatíveis) se der-

partir do último número exibido. 150 C=ASC(CS) :GOT0 130 mos os seguintes comandos (em modo
160 ON INSTR(TS,AS) GOSUB 200, direto, ou dentro de um programa):
100 DEFINT N:N=0 250, 300, 350
170 GOTO 130 POKE 16396, 175:POKE 16397.201
110 CLS
120 N-N+l PRINT N
: 200 X=X+1:IF X>127 THEN X-127 Para ativar novamente, digite:
130 NP=256*PEEKtl6417)+PEEK( 210 RETURN
16416) - 15360 250 X-X-1:IF X<1 THEN X = l POKE 16396,201
140 IF NPÍ960 THEN 120 260 RETURN
150 PHINT "APERTE <ENTER> P/ 300 Y=Y-1:IF Y<1 THEN Y-l Esse recurso é de grande utilidade
CONTINUAR" 310 RETURN quando desejamos impedir que um pro-
160 IF INKEYS-"" THEN 160 ELSE 400 Y-Y+1:IF Y>47 THEN Y-47 grama seja interrompido —
intencional
110 410 RETURN ou acidentalmente — pelo usuário.
imiimiiiBM— —mi A linguagem LOGO foi

para facilitar o aprendizado da


desenvolvida

programação. Mas, se você pensa que


ela se destina apenas a crianças, ficara

surpreso com a riqueza de recursos.

Os computadores da década de 60 No artigo da página 1288, vimos que, putadores — provavelmente irão utili-

eram extremamente caros. A potencia e desde o aparecimento dos primeiros zar linguagens superavançadas e pode-
a capacidade hoje disponíveis em um computadores, mais de duzentas dife- rão entender ordens dadas em lingua-
simples micro doméstico custavam al- rentes linguagens de programação fo- gem natural ou seminatural. Mas as lin-
guns milhões de dólares nos computa- ram desenvolvidas. Essas linguagens ser- guagens atuais —
mesmo as mais avan-
dores de grande porte de então, pois vem aos mais variados propósitos. Mui- çadas, como o PROLOG —
represen-
mesmo as máquinas maiores e mais so- tas delas são extremamente especializa- tam ainda um meio termo entre a faci-
fisticadas contavam com um máximo de das, encontrando aplicação apenas em lidade de uso e a facilidade de imple-
144 Kbytes de memória RAM. campos de pesquisa muito sofisticados. mentação em um computador.
Assim, por razões de economia, as Outras são tão genéricas e fáceis de usar Além do BASIC, muito poucas lin-

primeiras linguagens de programação quanto o BASIC, e já estão disponíveis guagens de alto nível são utilizadas mais
foram projetadas para ocupar a menor para microcomputadores. intensamente em microcomputadores
quantidade de memória possível. Prio- Se você quiser utilizar uma determi- pessoais: as principais são o LOGO e o
rizava-se a facilidade de sua implemen- nada linguagem de programação no seu PASCAL. Como veremos nos artigos
tação no computador, e não a facilida- modelo de microcomputador, precisará, desta série, essa linguagens são total-
de de uso para o programador. antes de mais nada, achar um progra- mente diferentes quanto a seu histórico
Com o aparecimento dos microcom- ma interpretador ou compilador que e a seu campo de aplicação.
putadores, por volta de 1975, as lingua- possa ser executado nele. Linguagens al-
gens dos antigos computadores torna- ternativas são fornecidas em fitas ou dis-
ORIGENS DO LOGO
ram-se bastante populares entre os usuá- cos, e devem ser carregadas na memó-
rios dos micros, pois essas máquinas, no ria, antes de sua utilização. Algumas ve-
começo, também dispunham de uma zes, o interpretador também ê encontra- Em 1967, um grupo de pesquisadores
do em cartuchos removíveis da ROM do famoso Massachusetts Institute of
memória muito limitada. A maioria das
Technology (MIT), localizado na costa
pessoas aceitava como natural as difi- (como os que existem para os micros
leste dos Estados Unidos, começou a ex-
culdades de aprendizado do BASIC e TRS-Color e MSX), não precisando,
plorar um caminho totalmente novo no
outras linguagens do género. "O que é evidentemente, ser carregado.
desenvolvimento de linguagens para com-
simples para o computador também é Os microcomputadores profissionais,
putadores. Essegrupo, liderado por Sey-
simples para o programador", dizia-se. com sistemas operacionais do tipo MS-
mour Papert, um sul-africano expatria-
DOS, CP/M ou UNIX, são os que dis-
põem de maior variedade de linguagens do, tinha como objetivo criar uma lin-
A ESCOLHA DA LINGUAGEM de programação. Já existe, porém, uma guagem mais adaptada ao modo de fun-
razoável oferta de linguagens alternati- cionamento do intelecto humano do que
Quase todos os micros operam, ori- vas para micros mais baratos —
como ao processador central de um computa-
com um interpretador BA- dor. Desse empenho nasceu o LOGO.
ginalmente, os das linhas Spectrum, TRS-Color, Ap-
Papert tinha trabalhado com o famo-
SIC residente na memória ROM.
E es- ple e MSX— principalmente se pude-
,

so psicólogo e filósofo suíço Jean Pia-


ta é a única linguagem utilizada pela rem ser acoplados a disquetes.
maioria dos proprietários de micro. get. As pesquisas de Piaget sobre o de-

Entretanto, não há motivo para que senvolvimento da cognição evidencia-


se limitem a uma única linguagem. O níveis de comunicação vam que uma criança só é capaz de en-
BASIC é apenas um programa em có- tender um conceito abstraio quando ele

digo de, máquina, que pode tanto resi- Uma linguagem de programação po- é apresentado por meio de exemplos
dir na memória quanto ser carregado de de ser entendida tanto pelo usuário concretos. As condições ideais de apren-
uma fita ou disquete. Nos micros pro- quanto pela máquina, constituindo uma dizado estariam, assim, condicionadas
fissionais, por exemplo, o BASIC é uma espécie de mediação entre as linguagens ao envolvimento e experimentação pes-
linguagem a mais, e precisa ser carrega- de ambos —ou seja, entre a linguagem soais. Essa abordagem influenciou for-

da quando se quer usá-la em programa- natural (o inglês, por exemplo) e a lin- temente a elaboração do LOGO.
ção. Isso significa que é perfeitamente guagem binária, empregada por todos Outra influência importante foi o tra-
possível carregar interpretadores de ou- os computadores existentes. balho de Marvin Minski, pesquisador do
tras linguagens —
ou seja, podemos mu- Quando a linguagem de programação MIT e um dos pais da Inteligência Arti-

dar a linguagem que o computador "en- está mais próxima da binária do que da ficial ciência que procura reprodu-
tende". Esses interpretadores são pro- natural, diz-se que é de nível baixo. O zir aspectos da inteligência humana em

gramas em código de máquina, capazes Assembler é um exemplo de linguagem computadores.


de entender o vocabulário e a sintaxe de desse tipo. Já as linguagens de alto ní- Os computadores não são inteligen-
uma linguagem de programação, e de vel, como O' BASIC, são mais parecidas tes: sua capacidade se limita à obediên-

traduzi-los em instruções executáveis pe- com a natural. As máquinas de quinta cia de instruções dadas com grande de-
la UCP do micro. geração —
a próxima geração de com- talhe e precisão. A resolução de um pro-
IIIIIIIIHMi^^HHHmillllllllll
ESCOLHA E DISPONIBILIDADE A TARTARUGA
DE LINGUAGENS PSEUDO-LOGOS
0 QUE É LOGO UM LOGO PARA
FUNDAMENTOS SEU COMPUTADOR
PSICOPEDAGÔGICOS PROGRAMAÇÃO
IIIIIIIIHHHH
blema intelectual envolve fatores tão lar, que obedece às mesmas instruções computadores, como a Itautec, a Gra-
complexos e variados, que programar de deslocamento usadas para movimen- Hoje, há versões
diente e a Microdigital .

uma máquina para uma operação desse tar a tartaruga-robô. Mas o simpático dessa linguagem para as linhas Apple,
tipo constitui uma tarefa especialmente "animalzinho" não chegou a desapare- MSX, TK-90X e CP-400, entre outras.
desafiadora. Minski e seus colaborado- cer. Ao contrário, tem se observado Existem também diversos "pseudo-LO-
res dedicaram-se a ela, buscando desen- uma tendência a trazê-lo de volta às sa- GO", assim chamados por serem versões
volver uma linguagem de programação las de aula. Opequeno robô é, sem dú- muito reduzidas ou limitadas do LOGO
que facilitasse a simulação da capacida- vida, bem mais adequado ao ensino de original, do qual aproveitam apenas os
de de decisão e de resoiuçâo de proble- crianças pequenas, que não entendem o recursos gráficos. Como o ColorLOGO,
mas. Chegaram ao LISP (LISl Proces- formalismo da tartaruga gráfica. Além do TRS-Color 1, esses pseudo-LOGOS
sing) — linguagem que passaram a uti- disso, é muito mais divertido! não contam com os recursos de proces-
lizar desde o início dos anos 60. samento de listas, funções matemáticas
A estrutura básica de dados do LISP etc. da versão completa.
é a lista, uma coleção de objetos elemen-
OS ELEMENTOS DA LINGUAGEM LOGO foi a primeira linguagem sim-
tares (chamados de átomos). Uma lista bólica "amistosa", ou seja, fácil de
pode fazer parte de outras listas, o que O que tem a ver a movimentação de usar. Como ela se presta a aplicações
uma tartaruga de brinquedo com pro- educacionais, muitos julgam que se des-
torna mais fácil representar e processar
dados simbólicos (não numéricos). En- gramação de computadores e psicologia tina exclusivamente às crianças. Nada
infantil? Papert vê no computador um mais longe da verdade. Os recursos in-
tretanto, o LISP é muito difícil de
aprender. importante veículo para a criatividade trínsecos do LOGO (recursão verdadei-
e a expressão de idéias, e acredita que
O LOGO é essencialmente um diale- ra, processamento de listas etc.)
to do LISP — contém todas as estrutu- se deve ensinar as crianças a dominá-lo,
A
colocam-no no mesmo ranking que o
evitando que sejam dominadas por ele. LISP, o SNOBOL, o PROLOG e outras
ras e comandos que essa linguagem em-
prega para representar e processar da- melhor maneira para que uma criança linguagens empregadas em campos com-
dos simbólicos (palavras, listas etc.). aprendesse a manipular computadores plexos, como Inteligência Artificial.
seria viver em uma "cultura computa-
Além disso, possui poderosos comandos
gráficos, incluídos para facilitar seu uso cional", assim como a melhor maneira
por crianças pequenas. de aprender italiano é viver na Itália. O
LOGO — dando à criança os meios para
usar os poderosos recursos disponíveis
DEMONSTRAÇÕES CONCRETAS no computador —é a sua proposta pa-
ra realizar isso. Como Papert procura
Papert e seus colegas estavam interes- demonstrar em seu livro LOGO, Com-
sados em uma linguagem que permitis- putadores e Educação (Mindstonns.
se iniciar as crianças no mundo da pro- Children, Computers and Power/ul
gramação, Três áreas foram privilegia- Ideas, no original), essa linguagem fun-
das: desenho, música e robótica. Isto re- ciona não só como uma ferramenta para
sultou da constatação de que as crian- a resolução de problemas, mas como um
ças se sentem mais motivadas a usar o verdadeiro sistema de referência —
de-
computador quando a tarefa a realizar nominado micromundo — para a intro-
consiste em desenhar na teia, tocar mú- dução de novas idéias e conhecimentos.
sica ou movimentar pequenos robôs Logo após o aparecimento do primei-
com o auxílio do computador. Este úl- ro interpretador LOGO para computa-
timo interesse levou Papert a criar uma dores de grande porte, surgiram as pri-
"tartaruga" robótica. meiras versões para micros. Por sua ca-
Na época, não se encontravam mo- pacidade gráfica superior, a linha Ap-
nitores gráficos de vídeo a preços aces- ple foi privilegiada com as versões ini-
síveis. Atartaruga, um
pequeno robô ciais mais poderosas da linguagem. Pos-
móvel sobre rodas, supria essa deficiên- teriormente, outros micros — entre os
cia: carregava uma caneta em sua "bar- quais o Spectrum, o MSX, e o TRS-
riga", e, sob o controle de comandos es- Color — ganharam interpretadores LO-
pecíficos do LOGO, podia abaixá-la e GO compatíveis com o padrão MIT.
levantá-la. Assim, era capaz de desenhar Como o campo de aplicação do LO-
figuras no chão, obedecendo às ordens GO é eminentemente educacional, os
da criança, que passava a relacionar os simbolismos da palavra escrita para a
comandos da linguagem com os movi- descrição da forma e funcionamento do
mentos da tartaruga e com conceitos de nosso mundo tem grande importância.
orientação e geometria. Assim, esta foi a primeira linguagem a
Quando surgiram os computadores ser amplamente traduzida para idiomas
pessoais, porém, a tartaruga-robô pas- locais, inclusive o português. A partir de
sou a correr risco de "extinção", pois 1974, especialistas da Unicamp (Universi-
era muito mais simples e barato imitar ade Estadual de Campinas, no Estado
seu movimento na tela por meio de grá- de São Paulo) começaram a produzir o
ficos. Sua descendente direta é a tarta- BRASLOGO, a versão brasileira do
ruga gráfica bidimensional —
um sim- LOGO, que mais tarde foi adotada por
ples cursor, em geral de forma triangu- diversas empresas fabricantes de micro-
:

IIIIIIIIIIIHBB ' ««fiMGf/w 2 llllllll


D uma software-house paulista, a Micro-
Arte. Essa versão, entretanto, não é
compatível com o padrão BRASLOGO.
A primeira providência a ser toma- Os modelos da linha TRS-Color só
da quando se quer programar em LO- dispõem de um interpretador LOGO em
GO é carregar o interpretador da lingua- cartucho ou disquete, com comandos e ff/Á
gem. Cada linha de computador tem mensagens em inglês. Uma versão antiga,
uma versão especial, pois ainda não o ColorLOGO, é apenas um pseudo-LO- Os micros desta linha contam com
existe uma padronização do LOGO. GO gráfico, embora muito poderoso. vários interpretadores LOGO em inglês,
em cartucho e em disquete. Todos apro-
veitam os excelentes recursos gráficos e
ai sonoros do MSX para oferecer coman-
dos especiais, que permitem o uso de
O micro Spectrum dispõe de diversas Esta é a linha que, internacionalmen- sprites, tartarugas múltiplas etc.
versões do LOGO — e de pseudo-LO- te, dispõe do maior número e varieda- No Brasil, há duas versões do LOGO
GO — em inglês. Estas, contudo, só po- de de interpretadores LOGO, lodos eles em português. Uma delas, a da Gradien-
dem ser obtidas no exterior. carregados a partir de disquete. Em in- te, éapresentada em cartucho e seus re-
No Brasil, a Microdigital lançou um glês, existem varias versões bastante efi- cursos são bastante limitados. A outra
LOGO em português para os computa- cazes, como o Terrapín LOGO, o Ap- — o HOTLOGO. da Sharp — , em car-
dores TK-90X e TK-95. Essa versão é pieLOGO etc. que implementam o pa-
,
tucho e em disquete, é poderosíssima e
carregada a partir de Titã cassete e se- drão MIT, além de terem comandos pa- segue o padrão BRASLOGO/ltautec.
i gue aproximadamente o padrão BRAS- ra geração de música, controle de As versões brasileiras aceitam pala-
LOGO {ou LOGO Itautec, desenvolvi- tartaruga-robô e outros recursos. vras acentuadas segundo as regras da
do pela Itautec em conjunto com a Uni- Em português, a versão mais difun- língua portuguesa.
versidade Estadual de Campinas). dida é o MLOGO, desenvolvida por

PROGRAMANDO EM LOGO

Como não existe uma versão padro-


nizada para o LOGO, todos os progra-
mas desta série serão dados em duas ver-
sões bem conhecidas: o padrão MIT, em
inglês (listagens identificadas pelo sím-
bolo do Apple), e o padrão BRASLO-
GO/ltautec, em português (listagens
identificadas pelo símbolo do MSX).
No último artigo apresentaremos
uma tabeia de conversão de comandos
para outras versões menos difundidas.
Nas versões em português, a sintaxe é
sempre a mesma; muda apenas a forma
usada nas palavras-chave.
Quando se carrega o LOGO na me-
mória (o que é desnecessário se a ver-
são for em cartucho, pois, nesse caso,
o programa se auto-executa), surge na
tela uma mensagem inicial de "boas-
vindas", que varia de acordo com o ti-
po de interpretador usado.
O sinal adotado pelo LOGO para avi-
sar que está pronto a aceitar um coman-
do é o ponto de interrogação. Ao lado
desse sinal, aparece o cursor.
Inicialmente, vamos explorar os co-
mandos gráficos do LOGO: colocare-
mos a tartaruga gráfica na tela e dare-
mos comandos para movimentá-la, fa-
zendo diversos desenhos. Para colocar
a tartaruga na tela, digite este coman-
do, e, depois, pressione a tecla <EN-
TER> ou < RETURN >
.

llllllllllllW^^^^MMBimiHMW
PARADIREITA 30 O LOGO possui uma grande varie-
dade de comandos (também chamados
— Com isso, o símbolo da tartaruga Vejamos mais alguns deles,
primitivos).
Ocursor aparece no centro da tela
relacionados à elaboração de gráficos:
sob a fornia de um triângulo ou como apenas se inclina na direção desejada.
uma tartaruga estilizada, conforme a Para que ela avance, digite:
versão do LOGO — já pronto para de-
,
[X
senhar. Por analogia com o robô mecâ-
nico, dizemos que a tartaruga está com es HOME - Leva a tartaruga de volta ao
a "caneta abaixada".
centro da tela, sem apagá-la.
Dispomos de vários comandos de
CLEARSCREEN - Apaga o conteúdo
deslocamento da tartaruga. Ela pode an-
da tela e leva a tartaruga de
dar para a frente ou para trás e virar pa-
volta ao centro (abreviação:
ra a direita ou para a esquerda. O des-
CS).
locamento linear é medido em número
PARAFRENTE 50 PENUP "Desliga" o modo de escrita
-
de passos (sieps) ou pontos gráficos, e
da tartaruga: ao se movimen-
a virada, em graus (ângulo). Por exem-
A linha traçada pela tartaruga forma tar, ela não deixará nenhum
plo, para fazer a tartaruga andar trinta
um ângulo de 30 graus à direita da li- traço (abreviação: PU).
passos adiante, digite:
nha vertical anterior. PENDOWN - "Liga" o modo de escri-
Comandos sucessivos podem ser da- ta da tartaruga (abreviação:

IX dos namesma linha. Experimente: PD).


PENCOLOR - Muda a cor do traço e
FORWARD 30 das letras. É seguido de um
número entre 0 e 6, que indi-
ca o código da cor (abrevia-
FM LEFT 30 BACK 50 ção: PC).

PARAFRENTE 30 Digite o programa que se segue pa-


ra ter um exemplo da utilização dos
Deixe um espaço entre a palavra de comandos aprendidos até o momen-
PARAESQUERDA 30 PAR ATRAS 50 to. Nunca se esqueça de pressionar a
comando e o parâmetro (30, no caso).
Sem esse espaço, o computador enten-
tecla <ENTER> após cada linha de
derá a linha como um comando único, A linha de comando ordena, em su- comando.
ma, que a tartaruga retorne à orienta-
que não é capaz de reconhecer, e mos- SHOWTURTLE
trará uma mensagem de erro do tipo: ção original (isto é, "'olhando" para a LEFT 45
parte superior da tela), por meio de uma FOR WARD 71
virada de 30 graus, e que ande para trás RIGHT 135
H] cinquenta passos. PENUP
FORWARD 50
PENDOWN
I DON T KNOW HOW TO FOHWARD30
'

LEFT 45
BACK 71
Para facilitar a digitação, podemos PENUP
forma abreviada de muitos HOME
recorrer à
PENDOWN
comandos da linguagem LOGO. Veja
abaixo as abreviaturas para os coman-
dos que foram mostrados até agora: O comando CLEARSCREEN se en-
carregará de limpar toda a tela, caso vo-
À medida que a tartaruga se deslo- cê queira realizar outras experiências.
ca, traça uma linha reta na direção de-
sejada, pois, como dissemos, ela já apa-
rece na tela em modo de escrita. SHOWTURTLE
Uma linha de comando pode ser corri- FORUARD
gida com as teclas do cursor, antes de se BACK PARACENTRO - Leva a tartaruga de

digitar <ENTER> ou < RETURN > LEFT volta ao centro da tela, po-
Para alterar a direção em que a tar- RIGHT
rém sem apagá-la (abreviação:
taruga se movimenta, usa-se o coman- PC).
do que indica a direção e o ângulo da rtfi APAGUEDESENHO - Apaga o con-

virada. Experimente: teúdo da tela e leva a tartaru-


TARTARUGA
ga de volta ao centro (abrevia-
PARAFRENTE
PAR ATRAS ção: AD).
PARAESQUERDA USENADA - "Desliga" o modo de es-
PABADIREITA crita da tartaruga: ao se mo-
UIIIIIIIIIHHI^HBHHHMHUHIIIIIIII
vimentar, ela não deixará
nenhum traço (abreviação:
UN).
USELÁPIS - "Liga" o modo de escrita APRENDA NOME
da tartaruga (abreviação:
UL). Na versão em português, o comando
USEBORRACHA - Apaga todos os APRENDA pode aparecer na sua for-
traços por onde passar a tar- ma abreviada, ou seja, AP.
taruga (abreviação: UB). O NOME do procedimento pode ser CONVERSÃO PARA 0 MLOGO
MUDECL - Muda a cor do traço e das
qualquer um e ter qualquer tamanho. Só Um dos interpretadores LOGO mais
letras. Deve ser seguido de um não deve conter espaços em brancos ou usados no Brasil é o desenvolvido pela
número entre 0 e 7, que indi- coincidir com o nome dos primitivos da Mícro-Arte, de São Paulo, para compu-
ca o código da cor. linguagem LOGO. tadores da linha Apple. Como nessa
versão os comandos primitivos do Ap-
Você poderá entender melhor de que
ple LOGO foram traduzidos para o por-
Eis aqui um exemplo para ilustrar o maneira funciona um procedimento por tuguês em desacordo com o padrão
uso dos comandos aprendidos até ago- meio de um exemplo. Vamos definir um BRASLOGO, apresentamos abaixo os
ra. Não se esqueça de pressionar a te- procedimento chamado Z1GZAG. Lo- comandos do MLOGO corresponden-
cla <ENTER> após cada linha de go que digitamos o comando inicial — tes aos utilizados neste artigo. A sin-
comando. TO ZIGZAG, em inglês, ou APREN- taxe permanece a mesma.

TARTARUGA
DA ZIGZAG, em português — tudo o
,

MLOGO
que eslava na tela desaparece, e entra em BRASLOGO
PARAESQUERDA 45 TARTARUGA MOSTRET
PARAFRENTE 71 açào um pequeno editor de textos, que
PARACENTRO CENTRO
PARADIREITA 35 permite a entrada dos comandos que LIMPETELA
APAGUEDESENHO
USENADA constituirão o procedimento. O sinal de PARAFRENTE FRENTE
PARAFRENTE 50 prontidão muda de ? (ponto de interro- PARATRÁS VOLTE
USELÁPIS gação) para > (sinal de maior). PARADIREITA DIREITA
PARAESQUERDA 45 Para finalizar o procedimento, pres- PARAESQUERDA ESQUERDA
PAR ATRAS 71 stona-se a tecla F.ND (para as versões em USELÁPIS COLORIDO
USENADA inglês)ou FIM (versões em português). USENADA SEMCOR
PARACENTRO USEBORRACHA
USELÁPIS O sinal de ? aparece novamente, indi-
COR
cando que voltamos ao modo direto. MUDECL
REPITA REPITA
Em alguns computadores, como o Ap-
APRENDA APRENDA
ple, por exemplo, c necessário pressio-
FIM FIM
MONTE UM PROCEDIMENTO nar as teclas <CTRL> <C>.
e ADEUS ADEUS
Todos os comandos examinados fo-
ram dados em modo direto, ou "ime-
diato", que equivale ao modo direto do
BO o LOGO tem um comando que permite
BASIC — ou seja. o comando é execu- TO ZIGZAG especificar o número de repetições (se-
tado imediatamente pelo interpretador, FORWARD 20 LEFT 150 melhante ao FOR ... NEXT do BASIC).
e logo esquecido. Entretanto, existe um FORWARD 20 RIGHT 150 Utilizando-o, e abreviando os comandos
outro modo em LOGO: o modo progra- FORWARD 20 LEFT 150 gráficos, nosso programa ficará assim:
mado, ou modalidade procedimento. FORWARD 20 RIGHT 150
Nessa modalidade, atribui-se um no- FORWARD 20 LEFT 150
FORWARD 20 RIGHT 150
me a um conjunto de comandos, que
passam, então, a ser conhecidos como
END CD
um procedimento. O nome que for da- TO ZIGZAG
REPEAT (FD 20 LT 150 FD 20 RT
do ao procedimento torna-se parte in-
tegrante do vocabulário do LOGO. Diz-
IM 150]
3

se, por essa razão, que o LOGO perten-


END
APRENDA ZIGZAG
ce à família das linguagens extensíveis. PARAFRENTE 20 PARAESQUERDA 150
Quando se digita o nome de um pro-
cedimento registrado, o interpretador
PARAFRENTE 20 PARADIREITA 150
PARAFRENTE 20 PARAESQUERDA 150
FM
executa todos os comandos contidos no PARAFRENTE 20 PARADIREITA 150 APRENDA ZIGZAG
mesmo, em sequência. Assim, pode-se PARAFRENTE 20 PARAESQUERDA 150 REPITA 3 [PF 20 PE 150 PF 20 PD
dizer que o procedimento também é um
PARAFRENTE 20 PARADIREITA 150 150 J
FIM FIM
programa. Mas, ao contrário de um
programa em linguagem BASIC, dis- ZIGZAG é, agora, um novo coman- A rotina a ser repetida, delimitada
pensa a numeração das linhas. do do LOGO. Se você digitar esse co- pelos sinais |e] (não use parênteses), é
Para iniciar a entrada de um novo mando, a tartaruga executará os coman- precedida pelo comando de repetição e
procedimento, use o comando: dos gráficos do programa anterior e tra- pelo número de vezes que ela deve ser
çará um ziguezague na tela. repetida. O
comando de repetição è mui-
Como você deve ter observado, o to útil para a obtenção de figuras geo-
à programa compõe-se de três repetições
da mesma sequência de comandos, uma
métricas regulares. Podemos traçar um
semicírculo, por exemplo, com o seguin-
TO NOME para cada "perna" do ziguezague. Mas te comando:
IIIIMIimW^^M^MMlMlIHII
a] TO PISTAEXTERNA
LADO EXTERNO LADOEXTERNO
RE PE AT 180 [ FORWARD 1 RIGHT 11 END

REPITA 180 [PARAFRENTE 1


m
AP LADOEXTERNO
PARADIREITA 1] PF 100
REPITA 90 [PF 3 PD 2] Como posso traduzir os comandos de
FIM meu LOGO que estão em inglês?
UMA PISTA DE CORRIDA
Nada mais fácil. Como o LOGO é
uma linguagem extensível, podemos
Agora que temos todos os "ingre- AP PISTAEXTERNA desenvolver vários procedimentos sim-
dientes" para montar um programa LADOEXTERNO LADOEXTERNO ples, que obedecem a um comando em
FIM português e chamam o primitivo equi-
mais complexo, vamos tentar desenhar
valente em inglês. Se você resolver, por
uma pista de corrida na tela. Para isso, Para começar a pista em um ponto exemplo, trabalhar com um BRASLO-
dividiremos o problema em várias par- adequado da tela, definimos o procedi- GO dentro do LOGO original, defina:
tes, ou subiarefas, que depois serão cha- mento chamado INICIO:
madas na ordem correia. TO PARAFRENTE :D
Começando com
pista, definiremos
trace a curva e,
a parte interna da
um procedimento que
em seguida, a reta:
m
TO INICIO
FOR WARD D:
END

TO PAR ATRAS :D
PENUP BACK :D
LEFT 40 FORWARD 110 RIGHT 130 END
BI PENDOWN
END TO PARADIREITA :A
TO LADO INTERNO RIGHT ;A
FORUARD 100 END
REPEAT 1B0 [FORWARD 1 RIGHT 1] f/U
END TO PAR A ESQUERDA :A
AP INICIO LEFT :A
m
AP LADOINTERNO
USE NADA
PE 40 PF 110 PD 130
USELAPIS
END

TO PARACENTRO
FIM HOME
PF 100 END
REPITA 180 PF 1 PD 11
FIM
t
Um outro procedimento, PARTIDA,
moverá a tartaruga para onde a linha de TO REPITA :N :LI3T
A combinação de duas curvas e duas partida e o início da parte interna da pis- RE PE AT :N :LIST
retas nos fornecerá a parte interna da ta devem ser desenhados: END
pista de corrida:
e assim por diante. Em seguida, grave
esse conjunto de procedimentos com
SI SAVE "BRASLOGO, e, quando quiser
programar em português, carregue-o
XJ TO PARTIDA com LOAD "BRASLOGO
TO PISTAINTERNA RIGHT 90 FORWARD 30 LEFT 90
LADOINTERNO LADOINTERNO END
END

AP PARTIDA AP PISTA
PD 90 PF 30 PE 90 INICIO
AP PISTAINTERNA FIM PISTAEXTERNA
LADOINTERNO LADOINTERNO PARTIDA
FIM PISTAINTERNA
Finalmente, para traçar a pista toda FIM
A parte externa da pista requer uma de uma vez, definiremos um procedi-
Simples, não é?
curva maior. Para obtè-la, aumentamos mento chamado PISTA.
Todos os programas em linguagem
o passo da tartaruga: LOGO são elaborados dessa maneira. A
ú divisão do programa principal em uma
série de "tijolos" de construção torna
i TO PISTA
INICIO
bem mais fácil tanto a programação co-
mo a própria execução de testes. No
TO LADOEXTERNO PISTAEXTERNA
PARTIDA próximo artigo, veremos como montar
FORWARD 100
REPEAT 90 FORWARD [ 3 RIGHT 2] PISTAINTERNA programas de maior complexidade usan-
END do essa mesma técnica.
IIIIIIIIIIHHMMHHHHHIIIIIIIIIIII
CONTROLES PELA
CONTROLE MICROELETRONICA
SENSORES E ATUADORES
CONEXÃO AO MICRO
S0 C "AARE

Como um computador pode receber tes microeletrônicos nela contidos rea- uma infinidade do aplicações, bastando
lizam a mesma função de modo muito reprogramá-lo. Os outros três tipos de
informação do mundo exterior,
mais eficiente e sem falhas e avarias. Na sistema, ao contrário, não podem ser
analisá-la e usar os dados para operar indústria, inúmeros tipos de máquinas, mudados, a não ser que se façam modi-
dispositivos de diversos sistemas? como tornos e cortadores computado- ficações no hardware.
rizados e robôs de montagem transfor-
, Diversos tipos de equipamentos e
Explicamos aqui todo o processo. maram o dia-a-dia das fábricas. aparelhos contêm microprocessadores
Existem quatro tipos básicos de sis- embutidos, que funcionam com base em
tema microeletrônico de controle: circui- softwares específicos para cada tarefa de
A mie roe! eiró nica provocou uma ver tos lógicos discretos, circuitos integra- controle. Evidentemente, apenas o mi-
dadeira revolução nos sistemas de con dos especiais, circuitos integrados gené- croprocessador não è suficiente para es-
trolede uma grande variedade de má ricos e microprocessadores. Dentre to- sa aplicação: são necessários chips au-
quinas de uso doméstico e industrial dos, os microprocessadores foram os xiliares adicionais (circuitos integrados),
Dezenas de relés, cronômetros mecãni mais revolucionários, pois, além de am- conectados ao processador, para que ele
cos e motores eléiricos, usados antiga pliar o alcance das aplicações, eles ba- possa exercer alguma função útil. As-
mente para controlar aparelhos domes rateram o custo dos sistemas de contro- sim, lodo proprietário de um computa-
ticos, foram substituídos por uma pe- le, através do conceito de controle por dor pessoal tem em suas mãos o cora-
quena caixa. Os circuitos e componen software. Um microprocessador tem ção de um sistema potencialmente ver-
Illlllll 19 mímicos 19 Illlllll

sátil de comrole. O usuário que quiser


utilizar seu micro para esse fim encon-
trará uma grande variedade de interfa-
ces especiais e kits de montagem. E, se
for um amador curioso, poderá usar sua
criatividade e testar uma série enorme
de aplicações.

Para que um microcomputador pes-


soal comande um sistema sofisticado de
controle, é necessário acrescentar-lhe
uma série de dispositivos.
Uma aplicação típica de controle - regulação alta de umfalso alarme, provocado por
sempre requer uma ou mais entradas e - redução de dados falhas mecânicas ou mau contato nos in-
saídas especiais, operadas de maneira - interfaces homem-máquina terruptores. Ocomputador oferece uma
bem diferente das entradas e saídas mais opção eficiente para a solução desse pro-
comuns em um microcomputador. Um TEMPORIZAÇÃO E SEQÚENCIAMENTO blema. Se, por exemplo, acrescentarmos
mecanismo de controle de temperatura, um segundo circuito a todas as portas
por exemplo, precisa ser ativado quan- Sistemas de temporização e seqiien- internas, e conectarmos ambos os circui-
do a temperatura atinge um determina- ciamenlo fazem parte do nosso cotidia- tos a um microcomputador, o software
do grau. O computador recolhe essa in- no: são usados nos programadores de poderá realizar alguns testes simples, an-
formação por intermédio de um sensor, máquinas de lavar, máquinas de costu- tes de soar o alarme. Isso seria feito se-

que gera um sinal relativo ao fenómeno ra, aquecimento central etc. O compu- gundo uma determinada lógica: se um
físico ou químico que está sendo detec- tador que administra muitos desses sis- ladrão entrar na casa, uma porta inter-
tado e o envia ao computador. Para agir temas é bem mais compacto e confiável na deverá ser aberta logo após a inter-
sobre o mundo exterior no sentido de do que os sislemas eletromecânicos que rupção do circuito externo. O alarme se-
combater esse aumento de temperatura, substitui. Ele possibilita a execução de rá ativado se os dois circuitos forem in-
o computador deverá estar ligado a um sequências complexas de operação e co- terrompidos na ordem correta — ou se-
atuador —
no caso, um condicionador bre uma área muito maior de alternati- ja, do exterior para o interior. Caso os

de ar ou um ventilador. vas de aplicação. Além disso, permite circuitos independentes sejam interrom-
No artigo sobre robôs (página 1284), que a temporização e sequência de ope- pidos isoladamente, ou em ordem incor-
descrevemos operações desse tipo. Os rações sejam alteradas, bastando, para reta, o alarme não é ativado.

kits de braços robóticos, ali menciona- isso, mudar o software. O uso do computador no controle do
dos, são um exemplo de sistemas de con- Uma aplicação bastante simples do sistema antiladrões apresenta outras
trole especializados. micro como o "cérebro" de um sistema vantagens. Por exemplo: dispondo de
Neste artigo, examinamos os aspec- de controle refere-se ao alarme residen- um sistema adequado de telecomunica-
tos gerais do emprego de computadores cial contra ladrões. Este consiste, basi- ções, podemos fazer com que o micro
pessoais no controle de dispositivos ex- camente, em uma série de fios conecta- disque automaticamente um número de
ternos. Nossa discussão será centrada dos a interruptores localizados em vá telefone e avise a polícia.
nos três principais elementos de um sis- rias portas e janelasda casa. Quando to- Em algumas residências, um inter-
tema de controle: sensores, atuadores e das estão fechadas, o circuito se com- ruptor simples é utilizado para ligar e
conectores. Antes, porém, analisaremos pleta e a corrente elétrica pode fluir pe desligar luzes internas, para dar a im-
as possibilidades de controle. lo mesmo. Se o circuito for interrompi- pressão — na ausência dos moradores
Convém explorar mais detalhada- do pela abertura de urna janela ou por- — de que há gente em casa. Mas o feiti-

mente quatro áreas: ta, o alarme soa. ço pode se virar contra o feiticeiro, pois
Umdos problemas com sistemas des- a sequência regular de liga-desliga evi-
I
- temporização e seqúenciamento se tipo é a possibilidade relativamente dencia exatamente o oposto: que não há
19 PÍRIfERICOS 19
Illllllllll

ninguém! Com um micro, é possível ja, a lâmpada ficará mais fraca durante
controlar tanto a iluminação dos apo- o dia, e mais forte â noite. Para isso, o
sentos como o funcionamento dos ele- computador é conectado a uma interfa-
trodomésticos ligando-os segundo um ce, que controla a corrente elétrica for-
padrão complexo, diferente para cada necida ã lâmpada, e a um sensor foielé-
período do dia e variável de um dia pa- tricô, que mede o nível de luz no am
ra outro. Sequências diversas podem ser biente e fornece ao computador essa in-
deflagradas por eventos externos, como formação. Um
sistema de retroalimen
o nascer ou o pôr-do-sol. tação de alça fechada é então incorpo-
Outro candidato ideal para controle rado, na forma de um software adequa-
por micros é a ferrovia-modelo: um do, segundo este esquema:
software adequado pode ser usado pa-
ra verificar cruzamentos, acionar semá-
foros, desviar trilhos etc. Também in-
teressante, no plano doméstico (ou até
profissional), éo uso do micro para con-
trolar um ou mais projetores de slides,
de modo a criar um show mais comple-
'

xo. O micro define a intensidade das


lâmpadas —permitindo a criação de
fade-in e fade-out, mixagens de imagens
de dois projetores etc. —a posição dos
, IGNORE ^^»—
slides numa dada sequência e informa DIFERENÇAS
qual imagem será projetada em cada MENORES QUE 1%
máquina. O micro encarrega-se, ainda,
da sincronização de música e fala, gra-
vadas em uma fila cassete.

CONTROLES DE REGULAÇÃO

O controle de regulação é usado em


toda aplicação em que a diferença en-
tre uma situação ideal e a situação atual
determina a operação a ser efetuada. Es-
sa diferença é avaliada a partir de sen-
sores conectados ao sistema. Umcon-
trolador de aquecimento central, por
Agora, o sistema irá ajustar gradual-
exemplo, tem a função de manter cons- mente a intensidade da luz e mantê-la
tante a temperatura do ambiente. Um constante, no nível-alvo. Outras regras
sensor informa a temperatura do am-
podem ser incorporadas para a promo-
biente ao sistema de controle e este liga
ção de açòes corretoras no caso de mu-
ou desliga o aquecedor conforme a tem-
danças abruptas ou transitórias na ilu-
peratura caia ou suba.
minação externa.
Um microcomputador substitui facil- Quando o programa for executado,
mente sistemas desse tipo, permitindo a luminosidade da lâmpada começará a
operações mais complexas, como con- oscilar, tornando-se mais forte e, em se-
trole simultâneo de aposentos, do tan- guida, mais fraca que o nível pretendi-
que de armazenamento de água quente do (nível-alvo). Esse efeito decorre de Aquisição e redução de dados e in-
etc. Para isso, ele aciona válvulas, bom- um atraso no sistema de controle, cau- terfaces homem-máquina são elementos
bas e elementos de aquecimento confor- sado pela defasagem térmica da lâmpa- importantes de qualquer sistema de con-
me a necessidade. Este sistema é um da — ou seja, ela não é capaz de respon- trole. Em muitas aplicações, o micro re-
exemplo de um servomecanismo — ba- der à velocidade dos comandos do com- cebe informações de fontes diferentes,
seado em controle por alça fechada putador. Quando a corrente elétrica pa- e tem que convertê-las para uma forma
(feedback, ou retroalimentação) — no ra a lâmpada é alterada, seu filamento mais inteligível ou adequada. O softwa-
qual a correção é proporcional ao erro demora a esquentar ou esfriar. Entre- re deve verificar se os níveis permane-
detectado {controle proporcionai). tanto, o computador já determinou uma cem dentro de certos limites, converter
Examinando mais detidamente o outra medida de luminosidade, e, com- unidades de medidas, filtrar os dados e
conceito de alça fechada, entenderemos provando que ainda existe um erro, ou checar inconsisiências lógicas. Esse con-
por que o computador é tão versátil. Su- diferença, aumenta o grau de correção. junto de atividades é chamado redução
ponhamos que você queira regular a in- Eventualmente, a lâmpada "alcança" o de dados.
tensidade de uma lâmpada incandescen- computador e, se a correção efetuada é Um analisador automotivo, para
te, de modo que o nível de luminosida- grande demais, chega a "ultrapassá-lo", "acertar" a ignição de motores, consti-
de do ambiente seja constante. A varia- invertendo o processo. Para evitár essa tui um bom exemplo de aplicação para
ção da intensidade deve refletir as oscilação, algumas regras simples devem as técnicas de redução de dados. Um sis-

danças da luminosidade externa, ou se ser acrescentadas: tema desse tipo exigirá sensores capazes I
Illlllll 19 ntumcos 19 llllllllllll
de monilorar o nível cie dióxido de car- dentes aos cinco sentidos —
tato, olfa- Os atuadores pneumáticos, bem co-

bono na exaustão, o sincronismo da ig- to, visão, audição e paladar —


podem ,
mo os hidráulicos, utilizam a pressão ge-

nição, o ângulo de avanço do distribui- ser ligados a um


microcomputador. Eles rada por fluidos (gases ou líquidos) e

dor etc. Ele poderia ser interativo —


ou não chegam a ler o nível de complexi- compõem-se de um cilindro contendo

seja, o micro daria todas as instruções dade dos sentidos humanos. Em com- um pistão, conectado a um braço de im-
para a ligação dos sensores ao motor, pensação, os micros contam, potencial- pulsão ou de tração. Uma válvula ope-
acusaria eventuais falhas na operação e mente, com "'sentidos" adicionais, co- rada eletricamnte dirige o fluxo de líqui-
até mesmo diagnosticaria o problema do mo a capacidade de detectar campos do ou gás para o pistão. Os atuadores
magnéticos, radiação atómica, eletro- hidráulicos geralmente são mais seguros,
magnética, de ultra-som ou raios X in- , potentes e precisos do que os pneu-
fravermelha ou ultravioleta etc. máticos.
INTERFACES HOMEM MAQUINA O computador precisa de um sensor Motores comuns de corrente direta
especifico para cada tipo de fenómeno (DC) ou alternada (AC) podem ser con-
a ser detectado. Existem, assim, detec- trolados por um micro, embora a pre-
O que chamamos interface homem-
tores de som e ultra-som, temperatura, cisão seja pequena. Quando é necessá-
máquina é exatamente o projeto da in- rio um posicionamento exalo, deve-se
gases, fluxo, umidade, luz, proximida-
teração do sistema com o usuário. Esse
de, movimento, aceleração etc. utilizar um sensor do ângulo de rotação
elemento dos sistema de controle ofere- do eixo, que informa ao computador a
à qual
Seja qual for o tipo de energia
ce enormes possibilidades de desenvol- posição e velocidade. Esses codificado-
vimento. Mesmo ao nível mais simples, o sensor é sensível, geralmente a forma
que consisle na exibição de determina-
.de saída è de natureza elétrica como — res, como são chamados, transformam
uma corrente ou uma voltagem analó- o ângulo de rotação em um número de
da informação, há numerosas alterna-
gica ou digital. Dá-se o nome de trans- bits. Podem ser ópticos ou elétricos —
tivas, como a simulação no vídeo de um
dutor ao sensor que se encarrega de rea- nesse último caso, temos um conjunto
mostrador analógico ou uma barra ilu-
lizar a conversão de um tipo de energia servomotor.
minada, em vez de complexas tabelas de Devido às complicações mencionadas
números ou outros tipos de gráfico com para outro.
Como sabemos, o computador não e ao alto preço de um servomotor, os sis-
os quais o usuário está menos habitua- temas baseados em micros usam com
pode trabalhar diretamente com sinais
do. As opções incluem a representação maior frequência os solenóides ou os
analógicos: é preciso, antes, convertê-los
de um esquema do sistema que está sen-
para sinais digitais, ou números biná- motores de passo. Mais simples já—
do controlado. No caso de uma ferro-
que precisam do computador só para
rios. Isso é feito por uma interface es-
via de brinquedo, por exemplo, é possí-
pecial de conversão, chamada conversor ligá-los e desligá-los, não exigindo con-
vel traçar no vídeo os trilhos e os pon-
anatógico-digital (AD). trole proporcional — esses atuadores
tos de cruzamento, e assinalar em tem- adaptam-se melhor ao mundo digital.
Alguns sensores dispõem de algum ti-
po real o seu "status". O usuário pode Um solenóide é um eletroímã que
comandar todas as funções —
como se- po de circuito de pré-processamento,

mudar sua velocidade etc. embutido — como amplificadores de si- aciona algum tipo de eixo (ou armadu-
lecionar trens, Quando a corrente elétrica passa
— por meio de joysticks ou canetas
nal, condicionadores,
sores AD simples — o que
ou conver-
filtros
ofacilita tra-
ra).
através de uma bobina, o campo mag-
ópticas.
balho de conexão ao computador. Os nético resultante move a armadura. O
O micro também abre novas perspec- detectores de temperatura (termistores), relê é um solenóide, só que destinado a
tivas para o projeto e controle de siste- ligar e desligar correntes elétricas.
por exemplo, não respondem de forma
mas de auxílio para deficientes físicos.
O motor de passo (stepper) utiliza
inteiramente linear à variação da tem-
Esses sistemas permitem, por exemplo, uma armadura circular de solenóides pa-
peratura. Alguns termistores "inteligen-
que um paralítico controle seu ambien- ra girar um eixo, do mesmo modo que
tes", porém, já apresentam o sinal de
te por meio de um computador, ligan-
saída corrigido conforme o nível de tem- um motor elétrico comum. A diferença
do ou desligando elcirodomésticos, al- é que o avanço se faz em pequenos pas-
peratura, dispensando eorreções por
terando o nível da calefação ou a ilumi- sos, e não em movimentos contínuos. A
parte do software de controle.
nação de um aposento etc. utilização do stepper em conjunto com
Já existem diversas interfaces ho- um micro é simples, mas esse atuador
mem-máquina especiais para deficien- ATUADORES apresenta uma desvantagem: sua potên-
tes, como as de entrada e saída basea-
cia é bem inferior à de motores elétri-
das na voz ou aquelas em que se acio- tamanho semelhante.
Até agora, vimos como o computa- cos de
nam as teclas soprando-se em um tubi- dor "sente" o que está aconlecendo no Para entender o funcionamento de
nho. Com isso, uma pessoa deficienie
ambiente. Entretanto, para agir sobre o um motor de passo, tomemos como
pode até mesmo usar um processador de exemplo um modelo simplificado com
mesmo, ele precisa de atuadores, ele-
textos, sem necessidade do teclado. ou quatro
mentos que geram alguma forma de apenas quatro pólos, seja, ele-

energia: luminosa, elétrica, mecânica, troímãs dispostos em ângulos retos ao


SENSORES magnética etc. Na maioria das aplica- redor do rotor. O rotor é uma armadu-
ções, os atuadores são eletromecânicos, ra de ferro, com duas peças polares, e
dividindo-se, basicamente, em cinco gira livremente sobre um eixo. Se um
As formas de controle por meio de
computadores que acabamos de exami- tipos: dos magnetos é acionado, o rotor é
nar são bastante inter-relacionadas, e atraído para ele, e gira um certo núme-
apresentam uma série de elementos em - pneumáticos ro de graus. Caso um microcomputador
comum. Um
dos mais importantes é a - hidráulicos acione em sequência cada um dos mag-
maneira como os computadores obtêm - motores elétricos DC ou AC netos, o rotor girará um número preci-
_ informações do mundo exterior, - solenóides so de vezes —efeito impossível de se ob-

Sensores especializados, correspon- - motores de passo ter com um motor linear. Quanto mais
íaa
19 PlMFtRICOS 19
IUIIIIIIIII
rápida a atuação do micro, mais depres-
sa irá girar o rotor. Os motores de pas-
so têm um grande número de bobinas
{cerca de duzentas, cm média), e, con-
sequentemente conseguem uma rotação
muito mais "macia". O rotor pode ser
posicionado sem necessidade de servo-
mecanismos que indiquem sua posição.

CONEXÃO AO COMPUTADOR

A maioria dos sensores e atuadores


exige ou fornece uma voltagem entre
cinco e dez volts, muitas vezes com uma
corrente de valor elevado. Como o mi-
cro não foi projetado para trabalhar di-
retamente com essas voltagens e corren-
tes, a conexão às portas de entrada e saí-
da exige uma interface.
As interfaces disponíveis oferecem
saídas comutadas de corrente ou volta-
gem de valor elevado, entradas por in-
terruptores, portas binárias de oito a de-
zesseis bits,conversores AD ou DA de
média ou alta velocidade etc.
Muitos micros possuem conversores
AD embutidos {a poria de gravador cas-
sete, por exemplo, ou a entrada de joys-
ticks), mas estes não têm frequências de
amostragem (número de conversões fei-
tas por segundo) tão altas quanto as re-
queridas por muitas aplicações. Por is-
so, conversores extras são necessários.
Um conversor DA, por sua vez, forne-
ce voltagens ou correntes contínuas, a
partir de sinais binários, para acionar
motores DC, lâmpadas, alto-falantes e
assim por diante. micro mais simples, geralmente em uma
Alguns sistemas de controle domés- única placa, específica para as tarefas de
tico,como os destinados a ligar e desli- controle. Essa solução, além de ser ba-
gar eletrodomésticos a distância, utili- Desenvolver software para aplicações rata, é a mais adequada: dificilmente
zam a própria rede de força da casa pa- de controle nãoé mais difícil do que pa- uma aplicação de controle requer todos
ra enviar os sinais binários. ra outros tipos de aplicação, como jo- os recursos disponíveis em um compu-
gos, por exemplo. As interfaces dispo- tador de uso geral.
níveis simplificam bastante esse traba- Os sistemas de desenvolvimento são
lho. Muitas vezes, elas são fornecidas fornecidos com um conjunto de hard-
com uma biblioteca de rotinas em lin- ware e software que permite a adapta-
Existem várias alterativas para a li- guagem de máquina ou BASIC, que po- ção do computador ã tarefa específica
gação do computador a um atuador me- dem ser utilizadas como módulos de um que será realizada. Se os dados a serem
cânico. Muitas delas foram usadas in- sistema mais complexo de controle, es- exibidos são exclusivamente numéricos,
clusive no desenvolvimento de brinque- crito pelo usuário. basta um visor LED ou de cristal líqui-
dos ou kits acionados por computado- Um dos passos mais importantes no do, do tipo existente para calculadoras.
res. No exterior, enconiram-se diversos desenvolvimento do software consiste Caso a aplicação exija apenas algumas
sistemas — como o Meccano, o Lego e na análise e divisão do problema de con- teclas ou botões, não é preciso acrescen-
o Fischer — que são verdadeiros proje- trole em partes menores, de tal forma tar um teclado completo. Entretanto,
tos de engenharia em miniatura, com to- que se possa escrever e testar individual- sistemas desse tipo têm necessidades que
dos os componentes imagináveis. mente cada seção, antes de integrá-la ao um micro comum nem sempre é capaz
Quanto maior a flexibilidade do kit, sistema maior. de atender — como um número grande
melhor, pois conexões mecânicas quase A necessidade de manter o micro- de canais analógicos, ou saída de con-
sempre precisam ser projeladas de acor- computador permanentemente conecta- trole de correntes alias.
do com a tarefa. Um sistema de engre- do ao sistema de controle costuma de- O usuário pode modificar á vontade
nagens, polias e alavancas, conectadas sestimular o usuário a se aventurar nes- o software que acompanha os sistemas
a relés, solenóides e motores, requer, é sa área. Esse inconveniente, porém, po- de desenvolvimento, incorporando-o,
evidente, um minucioso trabalho de pla- de ser superado com a aquisição de um posteriormente, a uma memória
nejamento e construção. sistema de desenvolvimento, que é um EPROM, para uso permanente.
—^ Estrelas, círculos, espirais: como

O.^^
Ç ~JC^ Ç J
| num passe de
figuras
mágica, as mais variadas

surgem no video - por obra

Comande você mesmo o espetáculo.


|/\|\ IXXIxtJxTr^

vimos como fazer desenhos com REPITA 12 [ HEXÁGONO PF 10 PD procedimento. Esse nome deve ser pre-
.lá
LOGO
usando 301 cedido de dois pontos, que indicam ao
os comandos gráficos do
— FIM interpretador que se trata de uma variá-
a tartaruga unia espécie de cursor
vel. Para usar a variável dentro do pro-
triangular que indica a posição aluai na Observe que deslocamos a tartaruga
repelirmos cedimento, simplesmente fazemos refe-
tela. Podemos também "ensinar" a tar- dez passos adiante, antes de
— rência ao seu nome sempre que ela for
taruga a Iracar dcierminadas formas o travado do hexágono isto é, desvia-
através de um comando especial. Se qui- mos sua direção para 30 graus à direita
sermos, por exemplo, 1'a/c-la desenhar da direção anterior.
um hexágono, digitamos:

HO Para fazer desenhos no vídeo, nor-


TO HEXÁGONO malmente o BASIC usa como referen-
REPEAT 6 [FORWARD 50 RIGHT 60] cial as coordenadas de umsistema car-
END tesiano (de eixos ortogonais, X e Y).
com o qual estamos mais familiarizados.
fffi A geometria da tartaruga é diferente:
nela. o ponto de referencia é a própria
AP HEXÁGONO tartaruga, ou seja, todos os deslocamen-
REPITA 6 [PARAFRENTE 50 tos lineares e angulares são realizados a
PARADIREITA 60] partir da última posição em que a tar-
FIM
taruga se encontrava.
Após digitarmos END, o inierpreta- É por isso que usamos 60 graus para
dor indicará que o procedimento HE- desenhar um hexágono, e não 20 graus
1

(que corresponde ao ângulo entre os


XÁGONO foi definido, passando a fa- seus lados ) —
ou seja, temos que virar
zer parle do vocabulário LOGO.
Quando você digitar a palavra HK- a tartaruga 60 graus para produzir um
XAGONO. desenhará
a tartaruga um ângulo de 120 graus entre a última reta
traçada e a próxima.
polígono regular de seis lados (cada la-
Parece confuso? Não se assuste: é
do com cinquenta passos de comprimen-
to), a partir da posição em que estiver.
bem mais fácil aprender geometria de
Depois, cia voltará ao ponto inicial, pois uma forma intuitiva como esta, que nos
permite "experimentar" o referencial da
percorreu seis vezes 60 graus, ou seja,
"comportamento" sem- tartaruga, bastando imaginar que esta-
360 graus. Esse
pre se repete com polígonos regulares,
mos em uma sala vazia, traçando algu-
tendo recebido um nome jocoso dos en- ma figura com nossos passos.
tusiastas do LOGO: Teorema do Tra-
jeto Total da Tartaruga (TTTT).
Um procedimento pode ser utilizado
dentro de outros, como mostra o pro- Embora o procedimento HEXÁGO-
grama abaixo, chamado FLOR, que de- NO tenha sido incorporado ao vocabu-
senha doze hexágonos ao redor de um lário do LOGO.há uma importante di-
centro, formando, assim, as pétalas: ferença entre ele e vários dos comandos
primitivos da linguagem, como aqueles
que fazem a tartaruga avançar, recuar
ú ou virar: o HEXÁGONO traçará uma
TO FLOR figura sempre do mesmo tamanho, ao
REPEAT 12 [HEXÁGONO FD 10 RT passo que " s í-nmíinrfns mencionados
1*1 am parâmetro variável.
Entretanto, é perfeitamente possível
definir procedimentos que tenham pa-
râmetros variáveis. Para isso. precisa-
da r//i"
' '
mos atribuir um nome ao parâmetro ut
-srÀ AP flor entrada e inclui-lo na linha de título do
gonos, hexágoaos etc, desde que espe-
dfiCMIomOn o número de lados e o com-
primento de cada lado:

TO POLÍGONO :NUMEHOLADOS LADO :

REPEAT NUMERO LADOS FOBMARD


: [

:LADO BIGHT 360/ :NUMER0LADOS


END

Mi

Como mostra esse programa, o LO-


GO é capa;? de resolver expressões ma-
temáticas, à semelhança tio BASIC. Sc
digílarmos POLÍGONO 8 20, por exem-
plo, a substituição será feita automati-
camente, e teremos a execução do se-
guinte comando (que traçará um octó-
gono, com vinte unidades de lado):

REPEAT 8 [FORWARD 20 RICHT 45)

REPITA B [PF 20 PD 45]

O mesmo procedimento pode ser uti-


lizado, aliás, no traçado de uma circun-
ferência. Para isso, precisamos aumen-
tar bastante o número dc lados —
por
Í exemplo, POLÍGONO 2 72. Como os
lados são demasiado pequenos, teremos
a impressão de que a figura resultante
ê formada por uma linha continua.
A tartaruga leva longo tempo para
T

3 LINGUAGENS 3

1/XiO utilizada), pudemos inserir, ap


gar e escrever caracteres c linhas, modi
cando o procedimento. Ao terminar
edição, pressionamos •'CtHL> <<*->
TKI.
*- ( -- I1KKAK ou qualquer o
tracombinação de tecias especilica
programa editor, t om isso, voltamos
A medida que vamos incorporando modo direlo do I.OGO.
mais c mais procedimentos ao vocabu- í'ara arma/etiar o conjuulo de pi
lário corrente da linguagem I.OGO, cedimentos já definidos na niemóri
duas providências se (ornam necessárias: usamos o seguinte comando:
modificar uni procedimento já existen-
te (para não ser preciso digitai lodos os
seus comandos de novo, a cada peque-
na alteração que queiramos la/cr), e ar-
ma/e na r todos os procedimentos cm dis-

O comando do MSX lambem pode


ser abreviado por DT. Para fazer rea-
parecer a tartaruga, digitamos:

3]
SHOUTURTLE

r/ti

APAREÇA TA

Poderíamos, portanto, definir um


procedimento específico para tratar cír-
culos, incorporando todo o conhecimen-
to que adquirimos até agora:
co ou fita cassete, para uma futura exe-
Sj cução ou modificação.
O LOGO dispõe de um editor sim-
TO CIRCULO LADO : ples, que c chamado por intermédio do
HIDETURTLE comando EDIT (EDITE, para as ver-
REPEAT 72 [FD LADO RIGHT 5]
:
sões em língua portuguesa). Essa pala-
SHOWTURTLE vra-chave de\e ser seguida do nome do
END
procedimento a ser editado.
O comando fr.MT apaga a tela e lista
rttt o procedimento pedido no vídeo, a partir
AP CIRCULO do topo. Digitando uma serie de teclas es-
DESAPAREÇA TAI peciais (que variam conforme a versão do
LINGUAGENS

- ou seja, não há limite pu-


siva infinita
ra o número de ^cves que um procedi-
mento pode chamar a si mesmo. Outras
linguagens, como o BASIC c o FOR- AP ESPIRAL LADO ANGULO
: :

TRAN, não possuem essa capacidade. PARAFRENTE LADO PARADIREITA


:

A recursão é uma das propriedades :ANGULO


mais interessantes do LOGO, conferin-
ESPIRAL :LAD0+2 ANGULO:

FIM TRADUÇÃO PARA O MLOGO


do-lhe enorme poder computacional.
Os comandos do MLOGO. para c
Veja. por exemplo, de que maneira Observe que o LOGO acrescenta Apple, correspondentes aos comandos
poderíamos reprogramar o procedimen- duas unidades ao LADO, em cada re- |
do BRASLOGO usados neste artigo.
to M OK. utilizando a recursão: petição do procedimento. Com isso, ob-
|

temos uma bonita espiral.


Tente os seguintes valores: BRASLOGO MLOGO
SEMTARTARUGA SEMT
arj ESPIRAL EDITE EDITE
1 45
TO FLOR LADO :
ESPIRAL 1 65
HEXÁGONO FD LADO RT 30
: ESPIRAL 1 72
FLOR LADO
! ESPIRAL 1 91
END
Se desejar que o desenho seja execu-
tado com maioi rapidez, não se esque-
ça de tornar a tartaruga invisível.

AP CIRAHEX LADO -ANGULO


:

SE :LADO>60 ENTÃO [PARE]


HEXÁGONO LADO :

PARADIREITA ANGULO r

GIHAHEX :LADO+3 ANGULO :

FIM
Na versão em BRASLOGO, o comi
Jó P\RK está especificado como sc li
se uma Mais poderoso que o L
lisiu.

GO padrão, o BRASLOGO permiie i

peei ficar, como mostramos a seguir, ur


scqiiència de comandos que será cscc
lada se a condição SE for verdadeira

o procedimento GOtAHEX 1 10 raz


o computador traçai um hexágono com
uma unidade de lado. girar a tartaruga
10 graus, traçar um hexágono com qua-
tro unidades de lado, girar novamente
10 graus e assim por diante. Quando o
lado do hexágono tiver mais de cem uni-
dades, o procedimento será interrompi-
do automaticamente.
Com as informações contidas neste
artigo. VOCÍ já pode explorar á sontade
as fabulosas propriedades da recursão.
obtendo uma grande variedade de efei-
tos a partir de um mesmo programa. O
que aconteceria, por exemplo, se tam-
bém variássemos o :ANGLLO a cada
recursão, no programa GIRAHEX?
No terceiro e último artigo desta sé-
rie de artigos, vamos investigar os recur-
sos do LOGO no processamento de lis-
tas, palavras e equações matemáticas. I
47 PROGRAMAÇÃO DC JOGOS 47

As limitações da memória do micro


costumam frustrar os programadores

que apreciam jogos de aventura.


Veja como fazer para colocar o máximo
de texto em um mínimo de memória.

Todo programador enfrenta o mes- maior número que pode ser armazena-
mo problema ao desenvolver jogos de do em oito bits (1 1 1 1 1 1 1 1 , em binário);

aventura: o texto não cabe no espaço - o código ASCII possui mais códigos
disponível na memória do micro. Quem numéricos do que caracteres para
não pode comprar uma máquina maior representar (e, por isso, é cha-
ou expandir a memória da sua, costu- mado degenerado). Poderia,
ma contornar essa dificuldade reduzin- portanto, ser diminuído,
do o tamanho do jogo ou simplifican- sem muito sacrifício.

do demais o texto. Muitas vezes, o pro- Na realidade, o ASC


por exemplo, 1 1 é uma evolução de sis-
gramador se vê obrigado,
a eliminar as instruções do programa
— temas de códigos ante-
o que é mau para quem vai utilizá-lo. riormente existentes,
Existe uma maneira, porém, de tor- que ocupavam menor es-
nar o programa menos extenso. Os mé- paço de memória, pois
todos normalmente empregados para tinham sete ou seis bits
encurtar um programa, discutidos no ar- (como o código Baudot,
tigo da página 141, não são eficientes no usado em máquinas de te-
que diz respeito a jogos de aventura, lex). A ampliação do espaço

pois a maior parte destes consiste em ocupado para oito bits signifi
textos (listas de objetos, locações, situa- cou uma adaptação ao mundo dos
ções, mensagens, instruções etc). A so- computadores digitais, onde predomi-
lução está, portanto, em reduzir o espa- nam os processadores com número de
ço ocupado pelo texto. bits organizados em potências de 2

Examinaremos aqui várias técnicas, quatro, oito dezesseis. 32 bits etc. Com
de compressão de texto e, em artigo pos- isso, expandiu-se no ASCII o alcance

terior, veremos como usar uma delas em original dos códigos de texto.
um joga de aventuras. Se os códigos dos caracteres fossem
comprimidos em menos de oito bits, o
espaço total para a armazenagem de tex-
COMO UM TEXTO E ARMAZENADO to na memória seria reduzido proporcio-
nalmente. Podemos fazer isso adotan-

O computador normalmente armaze- do em nosso microcomputador um có-


na o texto — ou seja, tudo o que não digo diferente do ASCII e escrevendo
é instrução de programa, ou constante um programa que faça a tradução do
numérica — da mesma maneira em que ASCII para o nosso código particular e
foi entrado, usando o código ASCII (ve- vice-versa. Essa tradução é necessária

ja o artigo da página 361). porque os periféricos de entrada e saí-


Recordando, o código ASCII (Ame- da, assim como as funções de progra-
mação que trabalham com textos, obe- É possível também escrever um tex-
rican Standard Code for Information
decem ao padrão ASCII. Existem diver- to empregando caracteres maiúsculos,
Interchange. Código Padrão America-
sas alternativas para a elaboração de um numerais e sinais de pontuação, que cor-
no para Intercâmbio de Informação) é
programa desse tipo, cada uma com respondem aos códigos ASCII 32 a 90,
um padrão utilizado para representar ou seja. a 59 códigos. Se usarmos seis
caracteres na memória do computador. suas vantagens e desvantagens.
bits (o que permite armazenar um máxi-
Ele comporta 256 códigos ou caracteres
diferentes. Os códigos 0 a 31 são reser-
mo de 64 códigos), conseguiremos uma
redução de 2 em 8, ou de 25%, o que
vados para funções de controle e os có-
é bem razoável para muitas aplicações.
digos 32 a 90, para caracteres alfabéti-
A maneira mais direta e intuitiva de Converter o código ASCII ao nosso
cos, numéricos e de pontuação. Os có-
digos 91 e seguintes estão livres para ou- se comprimir um texto consiste em uti- novo código de seis bits é fácil: basta di-
apenas uma parte do código AS- minuir 32 do código ASCII. O resulta-
tros usos, como caracteres gráficos, si- lizar
CII. De modo geral, qualquer texto po- do será um código com valores de 0 a
nais de acentuação.
Duas características do ASCII são es- de com o emprego de apenas
ser escrito 58, com os caracteres representados exa-

pecialmente relevantes para o problema 128 códigos, que cabem em sete bits. A tamente na mesma ordem. Para a con-
economia de espaço obtida, nesse caso, versão no sentido inverso, basta somar
de compressão de textos:
- um código ASCII ocupa um byte de é da ordem de I em 8, ou, em termos 32 —e teremos o código ASCII, de
percentuais, de 12,5%. novo.
I memória (ou oito bits), pois 255 é o
47 PROGRAMAÇÃO DC JOGOS 47

STOP
700 REM CODIFICAÇÃO
710 XS-"":FOB J-l TO LEN(LS)
720 CS=MID$(L$.J.l)
730 P=INSTR (KS. CS) IF P>0 THEN:

XS-XS+CHHS (P)
740 NEXT J RETURN :

Coloque o comando CLEAR 1000 na


nha 10, para micros das linhas TRS-80
TRS-Color.

10 DIM FS(50)
20 K$= "ABCDEFGHIJKLMNOPQRSTUVW
XYZ ,
:-?'
.

100 HOME
160 PRINT "CODIFICANDO..."
190 LET I=0:NC=0
200 READ LS:IF LS-"*" THEN 230
210 GOSUB 710:I-I+1:F$(I)-X$
215 LET NC=NC+LEN(XS)
220 GOTO 200
230 STOP
700 REM CODIFICAÇÃO
710 LET XS="":FOR J-l TO
LEN(LS)
720 LET CS-MID3(L3.J.l)
725 FOR P=l TO 32
730 IF MID3(KS.P.1)=CS THEN X3
A redução pode ser ainda maior. Un, UM PROGRAMA DE CONVERSÃO - X3 + CHR3 tP)
código de cinco biis permite que se faça 735 NEXT P
a representação de 32 caracteres: todas A conversão do ASCII e para o AS- 740 NEXT J RETURN:

as letras maiúsculas, que são 26, e mais CII, nesse caso, não é tão fácil assim,
seis caracteres destinados à pontuação exigindo um programa específico, como
— por exemplo, o espaço em branco, o o que se segue: 10 DIM f S (50 ,64) ,kS (32)
ponto, a vírgula, os dois pontos, o hí- 20 LET kS = "ABCDEFGHI JKLMNOPQRST
fen e o sinal de interrogação. Se o texto UVWXYZ ..:-?"
contiver números, eles terão que ser es- 180 PRINT "CODIFICANDO. .
.

critospor extenso, o que, na verdade, 10 DIM FS (50) 190 RESTORE LET 1^0 LET nc-0
! :

não representa um problema muito 20 KS=" ABCDEFGHIJKLMNOPQRSTUVW 200 READ L$:IF LS - "*" THEN GOTO
grande. XYZ ,.:-?" 230
100 CLS i 210 GOSUB 710:LET i-i+l:LET
Com um código de cinco bits, con- 180 PRINT "CODIFICANDO..." fS(I)-xS
seguimos uma redução de 5 em 8, ou se- 190 I-0:NC-0 215 LET nc=nc+LEN xS
ja,de 37,5%, o que significaria uma 200 READ L$:IF LS-"*" THEN 230 220 GOTO 200
economia de quase quatro Kbytes em 210 GOSUB 710:I=I+1:F$(I)«X$ 230 STOP
cada dez Kbytes de texto. Uma redução, 215 NC-NC+LEN(XS) 700 REM CODIFICAÇÃO
convenhamos, considerável. 220 GOTO 200 710 LET xS-"":F0R )°1 TO LEN LS
IIIIIIIIIIHHK 47 noGMmãODiiooos » IMMIIHIIIIIII
5080 DATA "COM SANGUE KA PAREDE
DO SANTUÁRIO PROCLAMAVA AOS QU
ATRO"
5090 DATA "VENTOS 0 NOME DO FAC
INORA: 0 CRUEL REI DE AARDVARK.
SOBERANO"
5100 DATA "NORMANDO QUE HABITAV
A UM CASTELO SOMBRIO E CHEIO DE
ARMADILHAS"
5110 DATA "E DE ONDE SO SE OUV
'

EM OS GRITOS DOS PRISIONEIROS T


ORTURADOS.

5120 DATA "VOCE E O GALANTE CO


'

NDE DE NORDHAM, E SUA MISSÃO E'


RECUPERAR"
5130 DATA "O AMULETO SAGRADO U
.

M PLANO DESESPERADO FORMA-SE EM


SUA MENTE:"
40 DATA "A ÚNICA MANEIRA DE E
NTRAR NO CASTELO E' DEIXAR-SE A

720 LET cS-LSÍJ TO j)


725 FOR p=l TO 32
730 IF kS(P TO p)-CS THEN XS-XS
+ CHRS P
735 NEXT P
740 NEXT j RETURN
:

Para testar esie e outros programas


de codificação de textos, podemos co-
locar no fim do programa várias linhas LI CIDADE" PRISIONAR"
DATA, contendo, por exemplo, as ins- 5030 DATA "DO REINO DE DUCHESS, 5150 DATA "PELOS ASSECLAS FEROZ
truções de um jogo de aventura (a últi- NA ESCÓCIA. 0 CONDE, QUE ERA 0 ES DE AARDVARK- PARA COMPLETAR
PROPRIETÁRIO" A AVENTURA"
ma linha deve ter um asterisco): 5160 DATA "VOCE PRECISA SE DESV
5040 DATA "DE TODO AS TERRAS AO
REDOR DA ALDEIA, JUROU DEFENDE ENCI LUAR DE SEUS CAPTORES. PERC
SííHíjEEJ^í R O AMULETO" ORRER OS"
5170 DATA "LABIRINTOS MORTAIS D
5000 DATA "POR MAIS DE DOIS MIL 5050 DATA "COM SUA PRÓPRIA VIDA
O CASTELO. ACHAR 0 AMULETO, E D
ANOS, O AMULETO SAGRADO DE NIT
EPOIS*
PU FOI" 5100 DATA "ESCAPAR .

5010 DATA " ZELOSAMENTE GUARDADO


5190 DATA "SEUS RECURSOS SAO PO
PELOS ALDEÃES DO CONDADO DE NO UCOS: UMA ESPADA, UMA TOCHA, UM
RDHAM .
5070 DATA "AMULETO SAGRADO TINH
A DESAPARECIDO UMA MENSAGEM E PUNHADO"
5020 DATA "A SUA POSSESSÃO ERA !

5200 DATA "DE ALIMENTOS SECOS,


I A CHAVE PARA A SEGURANÇA E A FE S CRI TA"
IIIIIIIIIMHI " PROGRAMACÃODÍJOGOS 47 ||||||||||||||
UM CANTIL D-AOUA, E UM PUNHAL. devemos adicionar as linhas seguintes e Esta tarefa de manipulação de bits
A SUA FRENTE," rodar novamente o programa: pode ser cumprida sem grande dificul-
5210 DATA "UMA SEQUENCIA DE BAN
DIDOS E FERAS DE ARREPIAR OS CA
BELOS. .
.

5220 DATA 'BOA SORTE !"


<(
230 NL=I:T«0
l V/i
dade em linguagem BASIC
dos operadores lógicos AND, OR e
NOT —

por meio

porém, é lenta demais. Na ver-


,

dade, o ideal seria realizá-la através de


5230 DATA 235 PRINT "TOTAL ";NC; "CARACT
uma sub-rolina USR em linguagem de
:

ERES" PRINT"DECODIFICANDO.
: .
.

Se preferir, digite apenas as primei- 240 FOR 1-1 TO NL máquina, mas não vamos fazê-lo aqui,
ras linhas.Só precisaremos deste texto 250 LS = FS (I) tGOSUB 670 para não tornar muito complicada a
completo quando formos testar progra- 260 T-T+1:IF T<10 THEN 290 programação do jogo de aventura.
mas mais complexos, adiante. 270 PRINT INPUT" PRESSIONE <ENTE
; Optamos por um outro método de
R>"iX3 compressão, também baseado em ma-
2B0 T=0 nipulação de biis, mas que pode ser fa-
290 NEXT I cilmente executado em BASIC. Esse mé-

O programa de codificação, que


transforma o código ASCII em um có-
300 STOP
860 REM —
DECODIFICACAO
870 FOR J-l TO LEN (L3)
todo é bem mais eficaz que a restrição
do conjunto de caracteres, pois garante
660 C-ASC(MID3(L3,J,1))
uma redução do texto de cerca de 45%.
digo reduzido de cinco bits, está conti- A programação, aqui, é mais simples,
do no laço das linhas 200 a 220. A linha 920 PRINT MIDSfKS.C.l]
940 NEXT J pois os bits não são manipulados indi-
200 lé uma linha de texto, LS, em DA- vidualmente, mas em grupos de quatro
950 PRINT RETURN :
TA, terminando ao encontrar um as- (meio byte ou nibble, em inglês). Com
terisco. A linha 710, por sua vez, cha-
uma única expressão aritmético-lógica
ma a sub-rotina de codificação, que ve- simples podemos ter acesso ou escrever
rifica se cada caractere CS, extraído de 230 LET nl=I:LET t=0 nus nibbles individuais.
LS, está na lista de codificação armaze- 235 PRINT "TOTAL ":nc; : "CARACT
nada em K$ pela linha 20 do programa ERES" PRINT" DECODIFICANDO. ."
: .

principal. Se estiver, sua posição sequen- 240 FOR 1=1 TO nl UM POUCO DE ESTATÍSTICA
cial P, em KS, c usada como código, e 250 LET LS-fS(i) GOSUB 870 :

um CHRS(P) concatena este caractere 260 LET t-t+l:IF t<10 THEN GOTO
em uma cadeia de saída, X$. Se não es- 290 Como sabemos, cada idioma utiliza
270 PRINT: INPUT "PRESSIONE <ENT determinadas letras com maior frequên-
tiver, então nada é concatenado.
ER>" :xS cia do que A técnica que esco-
outras.
O conteúdo de X$ é armazenado na 260 LET t-0 lhemos fundamenta-se exatamenie na
lista FS, onde cada elemento correspon-
290 NEXT 1 frequência do emprego das letras. Na
de a uma linha do texto em DATA. A 300 STOP língua portuguesa, por exemplo, cator-
armazenagem é necessária para uso pos-
terior. A variável NC da linha 225 ser-
860 REM DECODIFICACAO ze letras —
A, S, E, D, R, O, [, U,N,
ve simplesmente para contar o número
870 FOR j=l TO LEN LS
880 LET c-ASC LS(j TO j)
C, M, T. P e L —
representam cerca de
920 PRINT KS tc TO c)
90% do total de um texto, juntamente
de caracteres convertidos.
940 NEXT } com o espaço em branco.
Como os textos armazenados em FS Usaremos um código baseado apenas
já não se encontram mais em ASCII, 950 PRINT RETURN :

em quatro bils (15 é o maior número de-


não podemos listá-los com um PRINT
normal, pois muitos deles correspondem
A rotina de decodifieação (da linha cimal que se pode representar com qua-
870 à 950) extrai cada caractere do tex- tro bits, ou um nibble). Com isso, ob-
a caracteres ASCII de controle e provo-
to codificado e troca seu código pelo ca- teremos uma compressão de 50% do
cariam a maior desordem na tela.
ractere encontrado na mesma posição, texto, o que é, teoricamente, o máximo
Se quiser ver como ficam os códigos
na chave de codificação KS. que se pode conseguir. E será fácil fa-
numéricos convertidos, acrescente estas
zer o programa, porque caberão sempre
linhas ao programa e rode-o:
MANIPULAÇÃO DE BITS dois caracteres por byte.
Mas o que fazer com as outras letras?
Ainda não ganhamos espaço na me- Mesmo sendo usadas com uma freqúên 1
mória: apesar de termos reduzido o con- cia muito baixa, elas são essenciais pa-
212 GOSUB 620
junto de caracteres usados, eles conti- ra compressão do texto. Precisam, por
800 REM LISTAGEM
820 FOR N-l TO LEN(X3) nuam sendo armazenados em um byte isso, estar presentes.
630 PRINT ASC(MID3<XS,H,1) ) (desperdiçando três bits em cada byte). A solução também é espantosamen-
640 NEXT N: PRINT Para comprimir o texto de fato, pre- te simples: podemos usar essas letras
850 RETURN cisamos utilizar os bits que estão sobran- com seu código ASCII normal, de oito
do, no seguinte esquema: bits. No processo de codificação, toda
vez que o programa encontrar uma le-
1? byte - 5 bits do l? caractere tra não incluída no grupo das mais fre-
212 GOSUB 620 3 bits do 2? caractere quentes, ele atribuirá um código 0 a ela.
600 REM LISTAGEM 2" byte - 2 bits do 2? caractere Dessa maneira, indica-sc ao programa
820 FOR n-l TO LEN xS decodificador que o que vem a seguir é
5 bits do 3? caractere
630 PRINT ASC XS(n TO n] um código ASCII de oito bits.
640 NEXT n PRINT 1 bit do 4? caractere
650 RETURN
:

3" byte - 4 bits do 4!"caractere Uma letra incomum usa, assim, três
4 bits do 5? caractere nibbles (oito do código, mais quatro da
Para decodificar os textos —
ou pa- baliza 0), ou um byte e meio: este é o
ra reconvertê-los ao código ASCII — e assim por diante. preço que se paga por codificar a maio-
IIIIHHIIIW—
ria
cia
das leiras com
"

quatro

muito. Façamos as contas, tomando


bits,
da compressão será menor, mas não
A eficiên-

um
,

——
15 DIM £(60) ,c(60)
" :

Mlllllllllllll
na tela. A rotina de ordenação usa o mé-
todo tipo bolha, que examinamos no ar-
tigo da página 468. A rotina de exibi-

conjunto de cem caracteres: 30 LET nt=0 ção mostra apenas os caracteres com
40 FOR 1=1 TO 60 frequência maior do que 0.
90 têm códigos de 4 bits = 45 bytes 50 LET f(Í)-0:LET c(l)-í Se tudo tiver corrido bem, você ob-
10 têm códigos de 12 bits a 15 bytes 60 NEXT í estes dadosi
."
65 PRINT "ANALISANDO. .

192 A 147 E 129


TOTAL 60 bytes 70 READ L3:IF LS""*" THEN GOTO
85 0 111 S 87 R 84
80 GOSUB 410:GOTO 70 D 66 I 47 U 45
Conseguimos, teoricamente, uma N 43 C 40 M 39
compressão de 40%. Na realidade, ela 85 PRINT "ORDENANDO..."
T 36 P 30 l 29
90 GOSUB 470:GOSUB 560
será um pouco menor, dependendo do 15 H 14 . 12
100 STOP ,

texto. Ainda assim, o resultado é bem V 12 G 11 B 9


400 REM CONTAGEM
melhor do que o obtido por uma com- 410 FOR t-1 TO LEN LS F 8 5 Q 4
- 2
pressão com códigos de seis bits. 420 LET nt-nt+1 : 3 2
Para verificar com que frequência K 2 2 2 J 1
430 LET j-ASC(LS(Í to i -31
)
)

são empregadas as letras presentes em 440 LET f(j)-f <j)+l:NEXT 1 X 1

nosso texto-teste, digite o programa que 450 RETURN CARACTERES


TOTAL 1228
se segue, acrescente as linhas DATA ao 460 REM ORDENAÇÃO
final e rode- o: 470 LET n-60 Note
que. como afirmamos anterior-
480 LET íl-0 mente, um conjunto de apenas catorze
490 LET n=n-l:FOR i=I TO n letras mais o espaço em branco respon-
• L V.'i 500 IF rtc(i))->f Íc(i+D) THEN
dem por 91,6% do texto (1 125 ocorrên-
15 DIM F(60) ,C(60) GOTO 520 cias em 1228 letras). O espaço em bran-
30 NT-0 510 LET x=c(i):LET c(i)=c(i+l)
co é o caractere mais frequente em qual-
40 FOR 1=1 TO 60 : c{i+l)=x LET fl-í
520 NEXT 1 quer texto, por razões obvias.
50 F(I)-0:C(I)-I
60 NEXT I 530 IF £1=0 OR n=2 THEN RETURN Um
segundo conjunto, formado por
65 PRINT "ANALISANDO..." 540 GOTO 480 mais catorze caracteres, responde por
70 READ LS:IF LS="*" THEN GOTO 550 REM IMPRESSÃO 8% do texto. Caberia a um terceiro con-
85 560 PRINT junto abrigar os demais caracteres (a
80 GOSUB 410:GOTO 70 570 PRINT "FREQUÊNCIA SIMPLES maioria dos quais não apareceu nenhu-
85 PRINT "ORDENANDO . . .
" DOS CARACTERES NO TEXTO" PRINT :

ma vez neste texto, mas poderia cons-


90 GOSUB 470:GOSUB 560 580 FOR j-l TO 60 STEP 3 tar esporadicamente de outros).
1D0 STOP 590 FOR i=J TO j+2
Vimos que, se usarmos apenas um
400 REM CONTAGEM 600 IF £(cU))-0 THEN GOTO 640
610 PRINT CHR3(c(i)+31) ;" " conjunto de codificação com os quinze
410 FOR 1=1 TO LEN{LS) i

caracteres mais frequentes, teremos que


420 NT=NT+1 f (cíi))
620 NEXT i: PRINT colocar os restantes no texto sem codi-
430 J=ASC(MID8tLS,I.l))-31
440 F[J)=F(J)+1:NEXT I 630 NEXT j ficar, e cada um deles ocupará três nib-

450 RETURN 640 PRINT PRINT" TOTAL


: ";nt;": bles. Entretanto, podemos estender a
ideia de um conjunto de quatro bits de
.
460 REM ORDENAÇÃO CARACTERES
470 N-60 650 RETURN código para dois ou mais conjuntos adi-
480 FL-0 As linhas 15 a 60 definem e iniàali- cionais. Assim, a codificação de cada
490 N-N-l:FOR 1-1 TO N ;am dois conjuntos: F, que conterá a caractere constante do segundo conjun-
500 IF F(C(I))->F(C<I + D) THEN frequência de cada caractere presente no lo ocupará dois nibbles (um com o 0 e
520 texto, e C, um conjunto-índice que será outro com o código propriamente dito);
510 X-CII) :C(I)-C(I+1) :C(I+1)-X a codificação dos caracteres do terceiro
utilizado pela rotina de ordenação (no
:FL-1
520 NEXT I começo C contém os números inteiros conjunto ocupará três nibbles, e assim
530 IF FL-0 OR N-2 THEN RETURN de a 60, em ordem crescente).
1 va- A por diante. Vamos fazer as contas de no-
540 GOTO 480 riável NT servirá para contar o número vo, para o mesmo conjunto de cem ca-
550 REM IMPRESSÃO total de caracteres no texto. racteres:
560 PRINT O
laço que abrange as linhas 70 e 80
570 PRINT "FREQUÊNCIA SIMPLES lèas linhas de texto original em DATA, 90 têm códigos de 4 bits = 45 bytes
DOS CARACTERES NO TEXTO* PRINT !
parando se encontrar um asterisco. Ca- 9 têm códigos de 8 bits = 9 bytes
560 FOR J-l TO 60 STEP 3 so contrário, chama a rotina 410, que tem código de 12
I bits - 2 bytes
590 FOR I-J TO J+2 tem por objetivo executar a contagem.
600 IF F(C(I)>=0 THEN GOTO 640 Essa rotina simplesmente acha o códi- TOTAL - 56 bytes
610 PBINT CHR5(C(I)+31) i" " (
go ASCII de cada um dos caracteres
F(C(I) )
620 NEXT I: PRINT presentes na linha de texto, diminui o Como
você pode notar, conseguimos
630 NEXT J valor 31 dos mesmos, e incrementa o ele- aumentar nossa eficiência teórica de
640 PRINT :PRINT"TGTAL: ";NT:" mento de F correspondente. compressão para 44% (o que represen-
CARACTERES .
Em seguida, as sub-rotinas 470 e 560 ta uma melhoria de 10% em relação ao
650 RETURN (chamadas na linha 90 do programa) esquema discutido anteriormente).
Coloque um comando CLEAR 3000 encarregam-se, respectivamente, de co- Podemos agora desenvolver um pro-
na linha 15, para os micros pertencen- locar o conjunto C em ordem decrescen- grama de codificação (acrescente as li-
tes às linhas TRS-80 e TRS-Color. te de frequência e mostrar o resultado nhas DATA de teste ao final):
Illllllllimi " PROGRAMAÇÃO DE JOGOS 47 ]H|||||||||||
212 GOSUB 820 do no terceiro conjunto terá dois zeros
215 LET nc-nc+LEN «3 antes de seu código.
220 GOTO 200 A cada dois códigos numéricos gera-
10 DIM F3(5D) ,KS(3) 230 LET nl-I:LET t-0 dos (contados pela variável N), as linhas
20 KS(1>-" AEOSRDIUNCMTPL" 235 PRINT "TOTAL: " ;nc ;
760 e 770 da rotina comprimem os dois
25 K3(2) -",H.VCBF'Q: !-KZJ- "CARACTERES" nibbles em um byte, B. através da ex-
27 K3(3)--XUY;-/*?()S*+" 237 STOP
pressão matemática da linha 770. Veja-
180 PHINT "CODIFICANDO..." 700 REM CODIFICAÇÃO
190 RESTORE:I=0:NC=D:K=1 710 LET n=0 LET x3="":LET
:
mos um exemplo:
200 READ LS:IF L3="*" THEN 230 L3-LS+" *
210 GOSUB 710:I = I+1:FS(U=X3 720 FOR j-1 TO LEN LS decimal binário
212 GOSUB 920 730 LET cS*L$ j TO j) ( 1? nibble 14 00001 1 10

215 NC=NC+LEN(XS) 735 FOR p-l TO LEN kS (k) 2? nibble 7 00000111


220 GOTO 200 740 IF k3(K,p TO p) - cS THEN
230 NL-I:T-0 GOTO 760 Expressão: 14 OR (16*7)
235 PRINT "TOTAL: " NC ; !
750 NEXT p 14 OR 112
"CARACTERES" 760 LET n-n+l:IF n-l THEN LET
237 3TOP b-p
700 REM CODIFICAÇÃO 770 IF n-2 THEN LET n-0 LET b-b:
00001110 OR 01110000
710 N-0:XS-"":YS-":LS-LS+" " OR (16*p) LET xS-x3+CHR3 b
:

720 FOR J=l TO LEN(LS) 775 IF p-0 THEN LET k-k+l:GOTO que é igual a 01 III 110 ou 126.
730 C3-MID3(L3.J.l) 740
740 P-INSTR(KStK) ,CS) 7 76 LET k=l Note que a multiplicação de um nib-
760 N-N+1:IF N-l THEN B-P 780 NEXT j ble por 16 tem o efeito de deslocá-lo da
770 IF N-2 THEN N-0:B-B OR 790 RETURN parte baixa para a parte alta do byte.
(16*P) XS-XS+CHRSW
: Uma operação OR soma o primeiro nib-
775 IF P-0 THEN K-K+1:GOTO 740 As linhas 20 a 27 definem os três con- ble (não deslocado) com o segundo (des-
776 K-l juntos de caracteres a serem usados. O locado); o resultado é um byte com am-
780 NEXT J primeiro conjunto reúne os quinze ca- bos os nibbles em cada metade.
790 RETURN racteres mais frequentes em um texto. Se você quiser acompanhar a geração
Para simplificar, utilizaremos a mesma de códigos comprimidos, acrescente as
Coloque um comando CLEAR 3000 ordem encontrada no texto de teste. linhas que se seguem e rode o progra-
na linha 10. para os micros pertencen- Mas, se quiséssemos obter um conjun- ma novamente.
tes às linhas TRS-80 e TRS-Color. to padrão, que servisse igualmente bem
para qualquer texto na língua portugue-
H] El sa, deveríamos analisar uma amostra
muitas vezes mais extensa antes de de- 212 GOSUB 820
Para que o programa funcione nos finir a ordem dos caracteres. O segun- 800 REM --- LISTAGEM
microcomputadores Apple e TK-2000, do conjunto contém os próximos quin- 820 FOR N=l TO LEN(X3)
substitua a rotina de codificação das li- ze caracteres de maior frequência no tex-
830 PRINT ASC (MID5 (XS.N, 1) )

nhas 710 a 790 por: to e assim por diante.


840 NEXT N: PRINT
B50 RETURN
A seção do programa que abrange as
700 REM CODIFICAÇÃO iinhas 200 a 220 lê o texto contido em
710 N-0:XS-"":LS-LS+" " DATA e chama a rotina de codificação,
720 FOR J=l TO LEN(LS)
início na linha 710. O texto co-
que tem 212 GOSUB 820
730 CS=MID$(L$,J,1) 600 REM LISTAGEM
735 dificado, devolvido a X$, é armazena-
FOR P-l TO LEN (KS (K) 820 FOR n-l TO LEN x3
740 IF MIDS (KS(K) ,P,1) CS do no conjunto FS, para posterior uso
830 PRINT ASC (XS(n TO n)
THEN 760 na decodificação. )

840 NEXT n PRINT


:

750 NEXT P B50 RETURN


760 N-N+1:IF N-l THEN B=P
770 IF N=2 THEN N=0:B-B OR ROTINA DE CODIFICAÇÃO Para obter o texto original de volta,
(16*P) XS-XS+CHRS(B)
: basta que você acrescente a rotina de de-
775 IF P-0 THEN K-K+l:G0TO 740
776 K-l
Por ser um
tanto complexa, a rotina
780 NEXT J de codificação exige uma explicação
790 RETURN mais detalhada. Ela procura, no primei-
ro conjunto de códigos (que está em 237 PRINT "DECODIFICANDO..."
K$(l)), cada um dos caracteres indivi- 240 FOR 1=1 TO NL
duais da linha de texto, extraídos e guar- 250 LS-FS ti) :GOSUB B70
dados em CS. Não encontrando ali de- 260 T-T+l xf T<15 THEN GOTO 290
10 DIM £3(50.64) ,k3(3) terminado caractere, o apontador K é 270 PRINT INPUT "PRESSIONE <EN
:

20 kS(l)-" AEOSRDIUNCMTPL" incrementado e a rotina passa a procu- TER>" ;XS


25 kS(2]-",H.VGBF'Q:!-KZJ" 280 T-0
rá-lo no segundo conjunto, e assim por
27 k$(3)-"XUY;-/*7()SI+" 290 NEXT I
diante. Todas as vezes que passa para
180 PRINT "CODIFICANDO..." 300 STOP
190 RESTORE:i=0:nc=0:k=l outro conjunto de códigos, a rotina co-
860 REM DECODIFICAÇÃO
200 READ LS:IF LS-"*" THEN GOTO loca um código 0 na sequência de saí- 870 N=0:K=1:FOR J-1 TO LEN (L3)
230 da. Assim, um caractere encontrado no 880 C'ASC(MIDS(L3.J.D)
210 GOSUB 710:LET i=i+l:LET segundo conjunto vai ler um 0 seguido B90 C(l)-C AND 15:C(2)-(C AND
fS(i)-XS de seu código, e um caraetere encontra- 240)716
47 PROGRAMAÇÃO Dl JOGOS 47 IHIIIIIIIIIII
pertencem, evidentemente, à nossa lín-
900 FOR L»l TO 2
910 IF C(L)-0 THEN K-K+l:GOTO efeito contrário da multiplicação por 16 gua. Por isso, verificou-se uma frequên-
930 — ou seja, desloca o nibble alto para o cia atípica da letra K.
920 PRINT MIDStKS(K) ,C(L) ,1) nibble baixo. Como precisamos codi-
925 K-l ficar o texto de uma aven-
930 NEXT L tura apenas uma vez, nada
940 NEXT J GRAU DE EFICIÊNCIA
impede que combinemos
950 PRINT RETURN
:
os programas de análise
Obteremos os seguintes resultados de frequências e de codifi-
com nosso texto de teste: depois de co- cação em um só, para
dificado, ele foi reduzido de 1228 para otimizar o processo. Os i

237 PRINT -DECODIFICANDO..." 674 caracteres, ou seja, houve uma re- programas anteriores fo- J
240 FOR i=l TO nl dução de 45%. Pouquíssimos métodos ram escritos com nu- J
250 LET L$-f$(i) :G0SUB 670 de compressão conseguem tão alio grau meros diferentes de li-
260 LET t=t+l:IF t<15 THEN GOTO nhas, de modo a faci-
de eficiência. Na realidade, se contar-
290 litar essa integração.
270 PRINT:INPUT " PRESSIONE <ENT mos o número total de bytes gastos pe-
lo programa e pela tabela de códigos KS, Para proceder ã fusão
ER> ":XS
280 LET t-0 a redução global de espaço vai ser bem dos dois programas,
290 NEXT i menor. Devemos ter em mente, porém, faça as modificações:
300 STOP que a utilização de um algoritmo de
860 REM DECODIFICACAO compressão como este só faz sentido
670 LET n-0:LET k-l: FOR j-l TO quando o lexto a ser comprimido é ex-
LEN r.s
tenso. Assim, o acréscimo de memória 565 K-l
860 LET c«ASC(L3(j TO j) necessário para o programa e as tabelas 615 K$ÍK)-KS(K)+
890 LET c(l)=c AND 15:c<2)=(c
é insignificante se comparado aos ga- CHRStC(I)+31)
AND 240) /16 616 IF LEN<K$(K))-15
900 FOR L=l TO 2 nhos obtidos pela compressão.
THEN K-K+l
910 IF c(L)-0 THEN LET
k=k+l :GOTO 930 LIÇÕES DA CRIPTOGRAFIA e suprima as linhas 20 a 27.
920 PRINT KS<K.c(L) to c(L))i
925 LET k-l
930 NEXT L O compressor de textos desenvolvi-
940 NEXT J do aqui toma emprestado alguns concei-
950 PRINT RETURN :
tos da criptografia, que é a ciência das 565 LET k=l
cifras edos códigos (veja artigos das pá- 615 LET k$(k)-kSCk)+CHR$(c
A sub-rotina responsável pela deco-
dificação funciona de maneiraexatamen- ginas 888 e 1091). Ao tentar decifrar um (i)+31)
código secreto, o criptógrafo analisa, 616 IF LEN{kSCk))-15 THEN LET
te inversa à rotina de codificação, que
k-k+1
acabamos de examinar. antes de mais nada, as frequências dos
A variável C contém o código com- caracteres presentes no texto cifrado. : supnma i linhas 20 a 27.
primido, extraído de cada um dos carac- Estas podem dizer muito sobre a fre-
teres da linha codificada. A partir des- quência das letras usadas no idioma
ta obtêm-se os dois nibbles, que são ar- original.
mazenados respectivamente em CO) e O
uso das letras mais frequentes do
alfabeto no primeiro conjunto de codi- Observe que algumas linhas foram
C(2), na expressão da linha 890, e exa-
ficação assegura a obtenção do máximo acrescentadas à rotina de impressão dos
minados pelo laço das linhas 900 a 930.
de compressão possível. Se esse conjun- resultados da análise de frequência. Elas
Se um dos nibbles é igual a 0, o aponta-
to incluir caracteres que aparecem com se encarregam de construir automatica-
dor K, que inicialmente se encontrava
menor frequência, omitindo outros mais mente os elementos do conjunto KS,
em é incrementado, passando a indi-
1,
car opróximo conjunto de códigos. Fi- utilizados, a compressão perderá muito com a vantagem de criar tantos elemen-
cm eficiência, pois muitos códigos 0 se- tos quantos se façam necessários (se fo-
nalmente, a linha 920 imprime na tela
o caractere decodificado. rão gerados. rem mais de três, é conveniente alterar
a dimensão deste conjunto na linha 10
Tomemos o exemplo anterior para
do programa principal). Por isso. as li-
ver como funciona a decodificação: COMBINANDO ETAPAS
nhas 20 a 27, que contêm a definição fi-
= xa do conteúdo do conjunto KS, devem
byte 011 111 10 = 126
Normalmente, um programa com- ser retiradas.

126 AND pressor baseado nessa técnica deveria ser Tente codificar outros textos com es-
1? nibble 15
independente do lexto que se deseja seprograma, e veja como a taxa de com-
ou: 01111 110 AND 00001111 comprimir — ou seja, teria nos conjun- pressão se mantém quase a mesma. Es-
ou: 00001 110 tos KS uma sequência padronizada de ta éuma característica desejável de qual-
ou: 14 em decimal caracleres mais frequentes, identificados quer sistema de compressão.
pela análise de uma grande amostra da No próximo artigo sobre este tema,
investigaremos outras alternativas utili-
2? nibble (126 AND 240)/ 16 língua portuguesa.
Entretanto, um texto de aventura zadas na compressão de textos, particu-
AND
11110000 apresenta algumas peculiaridades, in- larmente o MêtOth Chinês, por meio do
ou: 01111110
cluindo termos estranhos, como Aard- qual é possível obter 60% de redução em
ou: 01 110000
ou: 112/16 - 7 (00000111) vark, Niptu, Nordham etc, que não uma aventura.
llllllllllimHMBHMMHHIIIIIIi
VARIÁVEIS DO SISTEMA
TIPOS DE VARIÁVEL
COMO MODIFICAR
APONTADORES E CONTADORES
ENDEREÇOS ÚTEIS

Para o programador ambicioso, existe VARIÁVEIS DO SISTEMA


um mapa de valor inestimável: os Endereço Utilização

endereços das variáveis do sistema.


LASTK 23560 i tecla pressionada
Com PEÊK e POKE, você terá acesso REPDEL 23561 Tempo de pressão a na tecla para repetir
23562 repetições 3 tecla
a ele e obterá maravilhas com o micro. REPPER Atra 3 c
RASP 23608 3 do s de alar
~)

PIP 23609 Duração do "dique" de teclado


ERRNR 23610 Último código de erro, menos 1
O BASIC do Spectrum possui um MODE 2361 7 Modo do cursor IK, L, C, E ou G)
grande número dc comandos relativa- NEWPPC 23618 Próxima linha a ser executada
mente poderosos para trabalho com a NSPPC 23620 Próximo comando da linha a ser executada
tela, teclado, memória ctc. Apesar dis- EPPC 23625 Número da linha com o cursor do programa
so, muitas propriedades da máquina e VARS 23627 Endereço do inicio da área de variáveis
de seu sistema operacional ficam Fora do PROG 23635 Endereço do início do programa BASIC
alcance do programador que se restrin- NXTLIN 23637 Endereço da próxima linha a executar
ELINE 23641 Endereço do buffer de entrada em BASIC
ge apenas a esses comandos.
KCUR 23643 Endereço do cursor
Usando a função PEEK para leitura FLAGS2 23658 Indicador de minúsculas/maiúsculas
direta de uma locação absoluta de me- 23659 Número de linhas na zona inferior da tela
DFSZ
mória, e o comando POKF- para modi- SEED 23670 Semente do gerador RAND
ficar seu conteúdo, você poderá redefi- FRAMES 23672 Contador de quadros de TV
nir muitos parâmetros dc funcionamen- COORDX 23677 Coordenada X do último ponto gráfico
to do sistema operacional e do interpre- COORDY 23678 Coordenada Y do último ponto gráfico
tador BASIC no Spectrum. PPOSN 23679 Coluna de impressão na impressora
FREE 23681 Byte livre para o usuário, não afetado por NEW
Mas, se o sistema operacional e o in-
terpretador estão gravados permanente- SPOSN 23688 Número de coluna da última posição PRINT
SPOSLN 23689 Número da linha da última posição PRINT
mente na memória ROM da máquina, Contador de linhas para o scroll
SCRCT 23692
como é possível alterar o seu funciona- RAMTOP 23730 Topo da memória livre para BASIC
mento? Quando o computador é ligado, PRAMT 23732 Topo da memória RAM (física)
o interpretador BASIC especifica uma
área de trabalho na RAM, que vai da
reços de memória: início de um progra- tabela em função do máximo de memó-
locação 23522 á 23732. Uma área adi-
cional — de 23734 à 23791 —
é criada, ma BASIC (PROG), endereço do cur- ria disponível no computador. Para is-
RAM da (KCUR) so, use o número de dezesseis bits arma-
sc o computador for conectado a uma sor na tela etc;

interface universal de entrada/saída. - parâmetros de definição do hardware: zenado no par 23730-23731 que é a va- ,

topo da memória RAM (PRAMT) etc; riável de sistema RAMTOP. Ela indicará
Cada locação nessas áreas armazena
um valor numérico, usado pelo sistema - contadores e acumuladores: contador o topo máximo de memória RAM dis-
de quadros de TV (FRAMES), espaço ponível para um programa em BASIC:
operacional e pelo interpretador durante
a execução de programas. Essas loca- ocupado por cadeias (STRLEN) etc. LET MAX - PEEK(23730)+PEEK(
ções são chamadas variáveis do sistema Algumasvariáveis do sistema ocu- 23731) "256
e recebem um nome simbólico, para fins pam um byte, outras, dois. Quando
de referência. Podem ser: ocupam dois bytes, o número de dezes- Podemos também modificar um va-

-registros intermediários de operações, armazenado segue o es-


seis bits nelas lor por meio de um POKE, fazendo com
taiscomo: código da ultima tecla pres- quema de dupla byte mais significati- que dado comando seja executado de
sionada (I.ASTK), último código dc er- vo/byte menos significativo. maneira diferente. Por exempio: a loca-
ro encontrado (ERRNR) etc; ção 23692 corresponde à variável do
-parâmetros de operação de comandos: sistema SCRCT, que é o contador de
APLICAÇÕES linhas usado pelo sistema para pergun-
duração do bipe (RASP), atraso entre
repetições dc uma tecla (REPPER), cor tar scroll? quando o cursor de texto

da moldura (BORDCR) etc; O acesso a esses endereços permite- chega ao fim da tela. Com um POKE
- indicadores: próxima linha a ser exe- nos, entre outras coisas, copiar determi- 23692,255 a cada número de linha, o
cutada (NEWPPC), coordenada X do nado valor em uma variável do sistema, computador nunca fará essa pergunta.
cursor de alta resolução (COORDX), de modo a informar o programa sobre No quadro acima, listamos algumas
número de linha da posição corrente de algum parâmetro de interesse para o das variáveis de sistema mais importan-
processamento subsequente. Suponha- tes para o Spectrum e compatíveis. Use
PRINT (SPOSLN) etc;
- apontadores, que contêm outros ende- mos que você queira dimensionar uma a sua imaginação!
I 4 LINGUAGENS 1

EXPRESSÕES MATEMÁTICAS
VARIÁVEIS E NÚMEROS
NOMES E S E NTENÇAS

O QUE SÃO LISTAS


COMANDOS PARA LISTAS

Os recursos do LOGO não se esgotam em dessa linguagem. Na realidade, segui- Nada mais longe da verdade. Como
mos o caminho inverso do que è usual o LISP, seu antecessor, o LOGO foi
seus eficientes comandos gráficos.
no aprendizado de outras linguagens, já projetado de modo a simplificar a ma-
Manipular palavras, representar dados, que abordamos em primeiro lugar os co- nipulação de palavras e listas de pala-
efetuar cálculos matemáticos - tudo mandos gráficos. Mas esta é a maneira vras e frases. Essa característica não im-
mais fácil de entrar em contato com o pede, contudo, que complexos progra-
isso o LOGO pode, e muito mais. universo da programação — principal- mas de Inteligência Artificial sejam de-
mente para crianças. Aliás, justamente senvolvidos com a ajuda do LOGO.
por causa da popularidade de seus re- Ao estudar linguagens imperativas,
Neste terceiro e último artigo da sé- cursos gráficos, muita gente pensa que inclusive o BASIC, começamos por ana-
rie sobre programação LOGO, exami- o LOGO é apenas uma "linguagem grá- lisar seus elementos básicos, tais como
naremos as características fundamentais fica", própria para crianças. as formas de representação de dados
2 2

HGUAGCNS 4

gumentos de uma operação força um re-


sultado inteiro. Li]
Os operadores matemáticos são
iguais aos da linguagem BASIC: soma TO CUBO NUMERO
:

( + ), sublração (-), divisão (/), multi- PUI NT NUMERO* NUMERO* NUMERO


: : :

parênteses etc. A ordem de END


plicação (*),
execução das operações também é a
mesma. Usando, por exemplo, o co-
mando PRINT (ESCREVA, na versão
em português), com função idêntica à APRENDA CUBO .-NUMERO
O que é um micromundo LOGO? que tem no BASIC, podemos fazer: ESCREVA NUMERO* NUMERO* NUMERO
; : :

Um micromundo é um conjunto co- FIM


nexo de procedimentos, escritos em O procedimento criado exige um
LOGO, pue estruturam uma determina-
da situação ou ambiente de resolução
LX gumento numérico de entrada, e respon-
ar-

de imprimindo na tela o cubo do mesmo:


de problemas cognitivos.
Esses procedimentos podem ser
combinados em outros procedimentos,
de forma cada vez mais complexa, imi-
tando, assim, o desenvolvimento natu-
ral do conhecimento da criança sobre
m
ESCREVA 2 + 2*3
uma parte do mundo.
Eis aqui outro procedimento, que cal-
Exemplificando: podemos construir
um micromundo em que a tela é a gaio- O resultado da operação será igual a cula a média de dois números:
la de um coelhinho, com lugares para 8, pois, nesta expressão, efetua-se a mul-
ele brincar, dormir, comer etc. Usando tiplicação em primeiro lugar.
o LOGO, a criança e o professor elabo- As expressões matemáticas podem ser
ram vários procedimentos para dese-
colocadas em outros comandos do LO- TO MEDIA :N1 :N2
nhar o ambiente e seus objetos, fazer
o coelhinho se movimentar, levá-lo até
GO, como no desenho de gráficos: PRINT (:N1 + :N2)/2
a área de dormir etc, de maneira pro- END
gressiva e hierárquica. Esse micromun-
do pode ser tão complexo e completo
quanto se queira.
FORWARD (10

(constantes e variáveis), os comandos de


impressão etc. É o que faremos agora
com a linguagem LOGO. PARAFRENTE (10 + 120)/3.14
Como nos artigos anteriores, apre-
sentaremos sempre duas versões dos Os procedimentos também compor-
programas: a primeira, identificada pelo tam expressões matemáticas:
logotipo Apple, corresponde ao padrão
M1T LOGO, em inglês, adotado univer-
salmente com poucas variações; a segun-
da, identificada pelo logotipo do MSX, TO PI
corresponde à versão nacional, chama- PRINT 3.14156*2
da BRASLOGO, desenvolvida pela Uni- END
camp para a Itautec e adotada por ou-
tros fabricantes. Ao final do artigo, da-
mos atradução dos comandos usados
para o MLOGO, versão nacional mui- APRENDA PI
to difundida, destinada ao Apple. ESCREVA 3.14156*2
FIM
MATEMÁTICA EM LOGO Feito isso, sempre que digitarmos o
comando PI2 pelo teclado, obteremos
Como qualquer linguagem de progra- a seguinte resposta:
mação que se preze, o LOGO dispõe de 2.28312
amplos recursos destinados a cálculos
matemáticos com diferentes níveis de Uma expressão pode utilizar variá-
complexidade; não se restringe às qua- veis. Como você deve estar lembrado,
tro operações aritméticas. as variáveis recebem nomes, que podem
O LOGO não faz distinção entre nú- ser de qualquer comprimento, e são
meros inteiros e reais (números que po- identificadas por dois pontos. Assim,
dem ser fracionários, como 1.2, 3.14156 um procedimento destinado a mostrar
etc). Em alguns interpretadores, entre- o cubo de um número qualquer seria es-

.
tanto, a falta do ponto decimal nos ar- crito da seguinte maneira:
Illllll UNGUAGINS llllllll

operação matemática a ser realizada dimento SUBTRACT. Nesse caso. bas-


aparece entre os argumentos da opera- ta usar SUM, com um número negativo.
ção (por exemplo, 2 + 2). Essa notação,
APRENDA MEDIA :N1 :N2 chamada infixa, è a mais usada em lin-
ESCREVA (:N1 + :N2)/2
FIM
guagens imperativas derivadas do FOR-
TRAN. Mas existem dois outros tipos de
TM
Esse procedimento requer a presen- notação: ã sufixa, ou notação polaca in- SOMA 6 7
ça de dois argumentos: versa (RPN), que é usada em linguagens QUOCIENTE 3 1.2
como o FORTH (a mesma operação aci- PRODUTO 3 4
MEDIA 2 4 ma seria escrita 2 2 + ), e a prefixa, que Se um desses comandos não existir no
3 também é aceita pela linguagem LOGO. interpretador LOGO que está usando,
MEDIA 1 2 Nesse tipo de notação, o comando pre-
1.5 deverá fazê-lo APRENDER o novo pro-
cede os argumentos que usa.
cedimento.
Para realizar operações prefixas no
Em alguns interpretadores LOGO. a
LOGO, empregam-se comandos já exis-
Note que é possível utilizar funções
resposta ao segundo comando poderá dentro de funções, como em:
tentes no interpretador. Por exemplo:
ser igual a 1, ou seja, o resultado será
mostrado em forma inteira, pois os ar-
gumentos de entrada estavam expressos
Kl DE
desse modo. Se isso ocorrer, podemos
forçar uma operação com resultados DXVIDE SUM 3 2 SUM 4 5
SLJM 6 7
fracionários, escrevendo:
DIVIDE 3 1.2
MEDIA 1.0 2.0 PRODUCT 3 4 ff/i
Não se esqueça de colocar os dois ar- Em alguns interpretadores LOGO, QUOCIENTE SOMA 3 2 SOMA 4 5
gumentos para o procedimento MEDIA. esses comandos recebem nomes diferen-
Caso contrário, o interpretador reclama- tes,como QUOTIENT em vez de DIVI-
rá, exibindo uma mensagem de erro. DE, ou MULTIPLY em vez de PRO- que corresponde à notação infixa:
Observe que, em todas as expressões DUCT. Pode acontecer, também, que
aritméticas examinadas, o símbolo da o interpretador não contenha o proce- PRINT (3+2)/(4+5)
Ill

Não tente fazer o mesmo, porém, Eis um programa que simula dez lan-

cora os procedimentos CUBOe ME- çamentos de um dado:


DIA, desenvolvidos anteriormente, pois
eles apenas imprimem os respectivos re-
sultados, não tendo meios de "passá- IX wSjj
los" a uma outra função. Experimen-
te, por exemplo, digitar a seguinte ex-
TO DADOS
pressão para ver o que acontece:
P.EPEAT fi (PRINT RANDOM 6] TRADUÇÃO PARA 0 MLOGO
END Os comandos do MLOGO, para o
CUBO MEDIA 3.4 7.88 Apple, correspondentes aos comandos
do BRASLOGO deste artigo, sào.
Para retornar um resultado, o proce-
dimento precisa inclui-lo na lista de va- BR ASLOtjU MLOGO
riáveis na chamada. Uma alternativa
TO DADOS
REPITA 6 [ESCREVA SORTEIEATÉ 6] CDLntVA MOSTRAR
mais simples consiste em usar o coman-
FIM ATRIBUA FACA
do OUTPUT (ou ENVIE, na versão pa-
ra a língua portuguesa): Para inicializar uma sequência alea- COLOOUE
tória, utiliza-se o comando RANDO- PRODUTU PRODUTO
MIZE (REPRODUZA, na versão QUOCIENTE QUOC
3] BRASLOGO).
RAIZQ RQD
TO MEDIA :N1 :N2 INT
INTEIRO
OUTPUT (:N1 + :H2)/2 APROX
END
REPRODUZA RESORTEIE
É possível especificar palavras (cons- SORTEIEATÉ SORTEIE
tantes alfanuméricas) em LOGO, iden- SEN SEN
tificando-as com o serial de aspas. Se COS COS
APRENDA MEDIA NI N2: :
quiser, por exemplo, imprimir no vídeo ARCTAN ATAN
ENVIE (:N1 + :N2)/2 a palavra COMPUTADOR, digite: PALAVRA PALAVRA
FIM SENTENÇA SENTENÇA
PRIMEIRO PRIMEIRO
Agora, você poderá recorrer ao pro- SEMPRIMEIRO SEMPRIMEIRO
cedimento MEDIA como argumento de 5C ULTIMO ULTIMO
SEMÚLTIMO
outro procedimento.
SEMÚLTIMO
PR INT "COMPUTADOR ENVIE SAÍDA

FUNÇÕES MATEMÁTICAS
do do computador, que há um argumen-
to a mais). É importante lembrar que
O LOGO possui várias funções ma- ESCREVA -COMPUTADOR um espaço em branco sempre indica, em
temáticas que facilitam o cálculo de ex- linguagem LOGO, o fim de uma pala-
pressões mais complexas —
algébricas,
Note que não se fecham as aspas, co- vra, e que não podemos colocar mais de
trigonométricas etc.
mo no BASIC. Se você se esquecer de uma palavra após um sinal de aspas.
colocar as aspas antes da palavra, a má- Para imprimir duas palavras usando
quina entenderá que COMPUTADOR é um mesmo comando, precisamos antes
3: o nome de um número ou de procedimen- juntá-las em um único argumento. Exis-
to criado anteriormente; não o encontran- te um comando primitivo que faz isso:
REMAINDER Resto de uma divisão
do, exibirá uma mensagem de erro.
ROUND Arredondamento
Como o comando de impressão acei-
ABS Absoluto
ta apenas um argumento, as formas que
INT Inteiro
se seguem também são incorretas:
SQRT Raiz quadrada
SIN Seno PRINT WORD "BOM "DIA
COS Co-seno
3
ESCREVA PALAVRA "BOM "DIA
RESTO Resto de uma divisão O comando WORD (ou PALAVRA)
INTEIRO Inteiro toma dois argumentos —que são letras
RA l/Q Raiz quadrada
ou palavras precedidas de aspas — e os
SENO Seno reúne em uma só palavra. Esta é passa-
COS Co-seno da para o comando PRINT (ou ESCRE-
Só alguns interpretadores têm o con- VA), que então a coloca na tela.
junto completo dessas funções. No
primeiro caso, o interpretador O LOGO possui diversos comandos
O LOGO conta ainda com um gera- LOGO informará que ainda não conhe- extremamente poderosos para lidar com
ce DIA. No segundo, dirá que não sabe palavras. Para extrair letras de uma pa-
dor de números aleatórios, útil em uma
o que fazer com "DIA (ou, dependen- lavra, utilizam-se estes comandos:
I série de aplicações, inclusive jogos.
PRINT PRIMEIRO SEMPRIMEIRO
"ABCD
PRINT ÚLTIMO SEMÚLTIMO "ABCD
PRINT PALAVRA PRIME IRO "ABCD
ULTIMO "ABCD
Note como os comandos são enca-
deados: PRIMEIRO SEMPRIMEIRO
extrai a segunda letra da palavra ABCD;
ÚLTIMO SEMÚLTIMO extrai a penúl-
tima palavra e assim por diante.
O pequeno procedimento recursivo
mostrado a seguir é capaz de extrair to-
das as letras de uma palavra:

APRENDA LETRAS -PALAVRA


SE PALAVRA
:
" ENT20 [PARE]
ESCREVA PRIMEIRO PALAVRA :

LETRAS SEMPRIMEIRO PALAVRA :

FIM

O procedimento ilustra o conceito de


palavra vazia — ou seja, palavra sem ne-
nhum caractere. A chamada recursiva
deLETRAS, na quarta linha, usa como
argumento o SEMPRIMEIRO da pala-
vra que foi entrada. Esta vai sendo re-
duzida até não ter mais nenhuma letra.
A recursão só se encerra quando o teste
executado pelo SE da segunda linha é
verdadeiro. A palavra vazia é assinala-
da pelo sinal de aspas seguido de um es-
paço em branco.

ATRIBUIÇÃO

LETRAS BUTFIRST : PALAVRA O comando de atribuição — LET,


END em linguagem BASIC — também exis-
teem LOGO. Com ele, podemos arma-
FIRST - Extrai a primeira letra. O procedimento ilustra o conceito de zenar números ou resultados de expres-
LAST Extrai a última letra.
- palavra vazia — ou seja, palavra sem ne- sões em variáveis, e dar-lhes nome.
BUTFIRST Extrai todas as letras,me-
- nhum caractere. A chamada recursiva
nos a primeira. deLETRAS, na quana linha, usa como
BUTLAST - Extrai todas as letras, me- argumento o BUTFIRST da palavra que
nos a última. foi entrada. Esta vai sendo reduzida até
é\
não ter mais nenhuma letra. A
recursão
MAKE "IDADE 15
Como exemplo, tente os comandos: só se encerra quando o teste executado
pelo IF da segunda linha é verdadeiro.
PBINT FIHST "ABCD
PRINT LAST "ABCD
A palavra vazia é assinalada pelas aspas
e um espaço em branco.
PBINT BUTFIRST "ABCD
PBINT BUTLAST "ABCD ATRIBUA "IDADE 15
PRINT FIRST BUTFIRST "ABCD
PRINT LAST BUTLAST "ABCD
PRINT WORD FIRST "ABCD LAST Podemos ainda colocar uma palavra
"ABCD em variável:
PRIMEIRO Extrai a primeira letra.
-

Note como os comandos são enca- ÚLTIMO Extrai- a última letra.


deados: FIRST BUTFIRST extrai a se-
SEMPRIMEIRO - Extrai todas as le- HD
tras, menos a primeira.
gunda leira da palavra ABCD; LAST MAKE "NOME "JOAQUIM
BUTLAST extrai a penúltima palavra etc SEMÚLTIMO - Extrai todas as letras,

O pequeno procedimento recursivo menos a última.


que mostramos a seguir é capaz de ex-
trair todas as letras de uma palavra:
Como exemplo, tente os comandos:

PRINT PRIMEIRO "ABCD ATRIBUA "NOME "JOAQUIM


TO LETRAS : PALAVRA PRINT ULTIMO "ABCD
IF PALAVRA
! - " THEN STOP PRINT SEMPRIMEIRO "ABCD Experimente verificar o conteúdo das
PRINT FIRST :PALAVRA PRINT SEMÚLTIMO "ABCD variáveis NOME e IDADE, com:
incrementando a variável de inicio :N1.
A segunda linha do procedimento veri-
fica o valor dessa variável, parando se
ela já tiver atingido o máximo desejado
PRINT :NOME (:N2>. Caso contrário, imprime na tela
PRINT IDADE :
uma linha contendo o número, seu qua-
drado e sua raiz quadrada. Como o co-
mando' de escrita aceita um só argu-
mento, precisamos usar um "aglutina-
dor" dos diferentes números, colocan-
ESCREVA :NOME do-os em uma única lista, por meio do
ESCREVA IDADE :
comando WORD (ou PALAVRA).
Desenvolver uma nova linguagem
Como você provavelmente deve ter não é difícil - tanto que existem cen-
observado, usamos dois pontos, e não LISTAS tenas delas que nunca passaram do es-
aspas, quando estamos nos referindo a tágio de mera "brincadeira" científica
uma variável já criada. Esta é uma ca- para uma efetiva implementação e dis-
racterísticafundamental do LOGO. Todo o do LOGO se reve-
potencial tribuição no mercado.
Nessa linguagem, ao contrário do BA- la quando examinamos a última de suas Em primeiro lugar, deve-se definir se
estruturas básicas de dados: a lista, um a linguagem será imperativa, funcional,
SIC, é necessário diferenciar explicita- procedimental etc. e que tipo de co-
mente as referências à variável ("NO- conjunto de palavras indicado por meio De-
mandos, funções e instruções terá.
ME) e ao seu conteúdo (:NOME). de colchetes. Por exemplo: pois, é preciso decidir se será uma lin-
Na realidade, todos os elementos do [TIGRE LEÃO GATO 1 guagem interpretada, compilada, ou
LOGO são definidos do mesmo modo, e ambas.
armazenados na mesma estrutura. Tanto é uma lista com três elementos, separa- Finalmente, escreve-se o programa
os comandos (programas) quanto os da- dos por brancos. — geralmente em Assembler, C, ou
dos são palavras. Números também são Podemos dar nome às listas: qualquer outra linguagem otimizada pa-
ra o desenvolvimento de ferramentas
tratados como palavras. Assim, é perfei-
de software - que irá realizar o proces-
tamente possível fazer-se algo como:
so de tradução da nova linguagem em
códigos de máquina destinados ao
computador escolhido.
MAKE "FELINOS [TIGRE LEÃO GATO
KJ MAKE "IMPARES [13 5 7 9)
1
As técnicas para a elaboração do
compilador ou interpretador, comple-
MAKE "COLEGAS [JOAOUIM 15 MÁRIO
PRINT -2.34 + "19. B7 xas e altamente especializadas, são en-
14] sinadas em cursos superiores de análi-
PRINT BUTFIRST 12.345
se de sistemas.
tm
ATRIBUA "FELINOS [TIGRE LEÃO

ESCREVA "2.34 + "19.87


GATO]
ATRIBUA "IMPARES (13 5 7 9]
mi
ESCREVA SEMPRIMEIRO 12.345 ATRIBUA "COLEGAS [JOAQUIM 15 ESCREVA PRIMEIRO FELINOS
MÁRIO 14]
um pequeno programa que Isso fará com que o primeiro elemen-
Eis aqui
que é TIGRE, seja impresso
ilustra essa característica do LOGO. Ele Se usarmos o comando PRINT (ou to da lista,

imprime uma tabela contendo o quadra- ESCREVA) seguido do nome de uma na leia.

do e a raiz quadrada de lodos os núme- lista, obteremos seu conteúdo comple- Uma lista pode ter apenas um ele-
Uma lista pode conter outras listas: mento, ou nenhum. Nesse caso, deno-
ros inteiros, de NI a N2: to.
mina-se lista vazia, e é representada pe-
lo símbolo ]. Para unir duas listas, usa-
|

GE mos o comando primitivo SENTENCE


é, (ou SENTENÇA):
TO TABELA :N1 N2 :
MAKE "CARNÍVOROS [FELINOS LOBO
IF :N1=:N2 THEN STOP RAPOSA]
PRINT WORD :N1 :N1»N1 SQRT(;N1)
TABELA :N1 + 1 :N2
é
END mi PRINT SENTENCE COLEGAS IMPARES

ATRIBUA "CARNÍVOROS [FELINOS


mi LOBO RAPOSA] mi
TO TABELA ;N1 :N2 Todas funções
as para utilizadas ma-
SE :N1=:N2 ENTÃO [PARE]
ESCREVA SENTENÇA COLEGAS
nipulação de palavras aplicam-se tam- IMPARES
ESCREVA PALAVRA NI :N1*N1 :

bém a listas. Por exemplo:


RAIZQÍ ;N1)
TABELA :N1+1 :N2 Procuramos aqui demonstrar a rique-
riu za e a versatilidade do LOGO, Espera-
BTJ mos ter motivado o leitor a continuar
Para fazer o procedimento TABELA
PRINT FIRST FELINOS explorando essa poderosa linguagem.
chamar a si mesmo, usamos a recursão
muniu
)

iiiiiiiiiiiim

FUNCÔi MAIOR MÚLTIPLO


MENOR MÚLTIPLO
RESTO DE UMA DIVISÃO
ARREDONDAMENTO
PODÉIR©: PAR OU ÍMPAR?

O comando DEF FN permite incorporar Existem ainda outros tipos de arre- pregada quando se quer determinar se
dondamento. O mais comum consiste um número é par ou impar.
ao elenco de funções matemáticas
do BASIC um conjunto adicional
de cálculos de grande interesse para
em arredondar os dígitos da parte fra-
cionária de um número usando a "re-
gra do 5": se o dígito a desprezar é
maior ou igual a 5, o que está à sua es-
O SI El
DEF FNPI(N)=-2-INT(N/2)*2
o programador. Utilize-o. querda é arredondado para cima; caso
contrário, este não muda. A função que
executa esse tipo de arredondamento é:
iam
DEF FNPI ÍN) -FNHE {N
No artigo da página 608, vimos co- , 2)
mo definir novas funções e usá-las em Se o resultado da função for 1 o nú-
,

diversos tipos de manipulação de dados. mero é ímpar; se for 0, é par.


Trataremos aqui de certas funções ma- DEF FNAR(N,D)-INT(NM0**D)/10«* O menu deste programa permite tes-
temáticas úteis ao programador. tar as funções apresentadas:
Um extenso grupo de funções mate-
máticas refere-se aos módulos, números
que "cabem" dentro de oulros núme-
ros, ou que restam de uma divisão.
a
DEF FNAR(N.D)=INT(N*10TD)/10TD
iam
25 DEF FNMM(N1.N2)-INT(N1/N2)*N
Há várias aplicações para esses cál-
culos. Tomemos como exemplo uma
questão corriqueira, que envolve a ca-
m
DEF FNAR(N.D)-INT(N*10-D)/10"D
2+N2
30 DEF FNMN(N1,N2)-INT(N1/N2)*N
2
35 DEF FNRE (NI ,N2) -Nl-FNMN (NI .N
legoria mais geral dos múltiplos: qual é
o primeiro múltiplo de 100, menor ou A função tem dois argumentos: N, o 40 DEF FNRD(N)-FIX((FIX(N*10)+S
igual a 345? Não é preciso ser nenhum número a arredondar, e D, o número de GN(N)*5)/10)
génio para chegar à resposta —
300, que decimais desejado. Se quisermos, por 50 DEF FNPI (N) -FNRE (N, 2)
é o arredondamento do número 345 pa- exemplo, arredondar para dois decimais 60 DEF FNAR(N.D) -INT (N"10*D) /10
"D
ra baixo, até a centena mais próxima. o número 23.4567, especificamos PRINT
100 CL5
Mas qual é o primeiro múltiplo de 64, FNAR(23.4567,2). 110 PRINT "DEMONSTRAÇÃO DE FUNC
menor ou igual a 51 1? Eis uma função Também é útil a função de arredon- OES MATEMÁTICAS"
que resolve esse problema: damento que determina o próximo nú- 120 PRINT
mero inteiro a partir de um número fra- 130 PRINT "(1) PRIMEIRO MULTI
cionário. É uma função diferente de PLO MAIOR"
1NT (que obtém a parte inteira de um 140 PRINT "(2) PRIMEIRO MULTI
DEF FNMN(N1,N2)=INT(N1/N2)*N2 número, arredondando em alguns ca- PLO MENOR OU IGUAL"
ou de FIX (que determina apenas 150 PRINT "(3) RESTO DE UMA D
O segundo argumento corresponde sos),
IVISAO"
ao número cujo múltiplo queremos a parte inteira, sem arredondar):
160 PRINT "(4) ARREDONDAMENTO
achar; o primeiro, ao valor máximo des- DE UM NUMERO"
se múltiplo. Nos exemplos dados, pode-
ríamos usar: PR1NT FNMN(345,100) e mia 165 PRINT "(5) ARREDONDAMENTO
PARA 0 MAIOR INTEIRO"
170 PRINT "(6) PAR OU IMPAR"
FNMN(511,64). Como o Apple, o FNRD (f>

TK-2000 e o TRS-Color não admitem mais (N)*5) 180 PRINT '(7) FIM"
que um argumento por função, a linha 190 PRINT
anterior não pode ser executada nessas
máquinas. A solução é utilizar só um ar-
iQUSl 200 INPUT "OPCAO ";OP
210 IF OP-7 THEN STOP
220 IF OP>3 THEN INPUT " ARGUMEN
gumento (veja o artigo da página 608). TO " jN:G0TO 250
Também interessante é a função que 230 INPUT "PRIMEIRO ARGUMENTO
"

determina o primeiro múltiplo de um Outra função importante é a que cal- iMl


número, superior a um certo valor. cula o resto inteiro de uma divisão en- 235 INPUT "SEGUNDO ARGUMENTO "j
Exemplo: o primeiro múltiplo de 100 tre dois números NI e N2. N2
maior que 3 022 é 3 100. 240 IF OP-1 THEN X-FNMM (NI N2 ,

iam iam 250


260
270
IF OP-2 THEN X-FNMN (NI ,N2)
IF OP-3 THEN X-FNRE (NI N2)
IF OP-4 THEN X-FNAR (N)
,

DEF FNMM[N1.N2)-INT(N1/N2>*N2+ DEF FNRE {Hl N2) =N1-FNMN (NI ,N2)


, 275 IF 0P=5 THEN X-FNRD(N)
2B0 IF OP-6 THEN X-FNPI (N)
Os argumentos têm o mesmo signifi- Utilizamos aqui a função FNMN, já 290 PRINT "RESULTADO - ";X
cado que os da função anterior. definida. A função FNRE pode ser em- 300 GOTO 120
Illllllll
JOGOS DE BLEFE 0 USO DA ESTATÍSTICA
ALEATORIEDAOE 0 QUE É ALISAMENTO
COMO CLASSIFICAR EXPONENCIAL
AS POSSIBILIDADES TÉCNICA DE
AS REGRAS DO JOGO SOMA CUMULATIVA

Um computador que possa enfrentar' to para tentar adivinhar a do oponente.


um blefe não é coisa do futuro: já exis- Um jogo como este não é satisfatório do
te aqui e agora. Com os programas em ponto de vista estratégico: com um nú-
BASIC deste artigo, não há escapatória: mero de rodadas grande, certamente se
a máquina será implacável com quem chega a um empate.
ousar desafiá-la em um clássico jogo de Para sorte do computador, entretan-
blefe: Papel, Pedra, Tesoura. to, o homem não age de maneira pura-
mente aleatória, tendendo a exibir com
maior frequência um ou dois tipos de
É UMA PEDRADA
objetos. Quase sempre, porém, os pa-
drões de apresentação são bem mais
Jogos de blefe são todos aqueles em complexos, seguindo ciclos ou mudan-
que ambos os participantes mostram do gradativamente as probabilidades.
suas jogadas ao mesmo tempo, não ha- Além de sua incapacidade natural de
vendo nenhuma informação prévia so- atuar como um gerador perfeito de nú-
bre a probabilidade da jogada de cada meros aleatórios, o jogador humano
um. Umexemplo clássico é Papel, Pe- tem mais um ponto vulnerável: a com-
dra, Tesoura, no qual dois jogadores re- pulsão a responder ao que acontece no
presentam com gestos a forma de uma jogo. Quer esteja ganhando, quer este-
pedra, de uma folha de papel ou de uma ja perdendo, é quase certo que formu-
tesoura. A escolha de cada um é revela- lará "teorias" — apelando, via de re-
da simultaneamente, como em um jogo gra, para a superstição — sobre quais
de par ou impar. Ganha a rodada aquele são as respostas com maior chance de
que mostrar o objeto mais poderoso, de garantir-lhe a vitória.A distração pro-
acordo com as seguintes regras: porcionada pelo jogo também tende a
reduzir a frieza matemática de um jo-
- tesoura corta papel, portanto, tesou- gador, mesmo que ele lute contra isso.
ra ganha; De qualquer forma, não resta dúvi-
- papel embrulha pedra, portanto, pa- da de que um jogador humano, por ser
pel ganha; humano, tentará ampliar seus ganhos ao
- pedra quebra tesoura, portanto, pedra máximo de alguma estratégia. Isso sig-
ganha. nifica que haverá sempre um viés, ou vi-
cio de jogada, que, se cuidadosamente
Se ambos os jogadores escolherem o analisado, poderá dar indícios de como
mesmo objeto, haverá empate. Joga-se será seu próximo lance.
um número predeterminado de rodadas Essa análise poderia ser feita por
- vinte, por exemplo — e conta-se um meio de cálculos estatísticos de diversos
ponto para cada rodada ganha. tipos. Mas o computador é bem mais
Neste artigo, desenvolveremos duas eficiente no que se refere a cálculos —
versões de um programa que joga Pa- e é istoo que lhe permitirá sair vitorio-
pel, Pedra, Tesoura muito bem. Tão so em um jogo de blefe.
bem que você até se sentirá um pouco Se um jogador modifica sua estraté-
abalado quando perceber que o compu- gia gradualmente, a técnica estatística
tador parece adivinhar suas intenções... mais adequada é a do alistamento expo-
nencial. Se, ao contrário, o oponente
muda de tática rapidamente, a melhor
MAIS SOBRE BLEFE técnica é a da soma cumulativa.

Como um programa é capaz de pre-


COMO JOGAR
dizer eventos aparentemente aleatórios?
Uma das "saídas" seria a simples adi-
vinhação —
ou seja, o programa sortea- Para enfrentar o computador em Pa-
ria números ao acaso (digamos, o nú- pel, Pedra, Tesoura, você precisa sim-
mero representaria o papel, o 2, a pe-
1 plesmente pressionar a tecla 1, 2 ou 3,
dra, e o 3, a tesoura), tanto para deter- quando chegar a sua vez,
minar a jogada do computador, quan- É importante nolar o seguinte: em-
IIIIIIIIIHHH llllllllll
bora a máquina tenha uma grande chan- 120 INK 6: PLOT 8,167: DRAW 470 PRINT AT 18,11:* EU WENCI"
239.0: DRAW 0,-159: DRAW -239. 490 INUERSE 0: FOR D=l TO 2:
ce de vencê-lo, ela não frauda o jogo,
DRAW 0 .159 PAUSE 0: NEXT D: FOR N-2 TO 1B
"olhando" sua jogada antes de decidir 0 :

PRINT PAPER 0; INK 7;AT N.2


a dela. Na verdade, o método utilizado 200 FOR T=l TO 3: LET I = U :

210 IF <U2 = 0 AND T=2) OR (U3 = 0


consiste em fazer o computador anali- "! NEXT N: GOTO 200
AND T=3) THEN GOTO 280
sar as escolhas já feitas e decidir antes 500 FOR N=32000 TO 32284: READ
220 IF T=2 THEN LET I=ABS ((D
que você entre uma nova jogada. -U2)-2*(U-VV)-3*((U<>U2) AND ( A: PRINT N A NEXT N , :

UOW) ) }
505 LET N=32069: POKE 23728, N-
ALISAMENTO EXPONENCIAL 230 IF T-3 THEN LET I=ABS < (U 256*INT (N/256): POKE 23729.
~U3)-2*(U-V3)-3*C(UOU3) AND t INT (N/256)
UOV3> ) )
510 RETtJRN
O
alisamento exponencial é a técni- 240 FOR J-l TO LET A<J.T)=A2: 520 DATA 33,6,72,58.129,92.203
ca estatística empregada para regulari- (,J,T)*W+H(I,J) LET C(J.T)=C(J
:
.127.40.5.203.191,33.22.72.221
zar o contorno de uma curva cheia de ,T)*W+3*H(I.J)*H(I,J)+.01 ,42.176.92,17.72.0.254,0,40
530 DATA 8.254.1.40,2.221,25,
altos e baixos. Se você colocar em um 250 LET X(J)>A{J.T)/C<J,T)
NEXT J 221.25.221,229.209,6.3.197.229
gráfico o número de pedras, tesouras e .6,8,197,1.3,0.235,237.176,2 35
papéis que o oponente apresentou em 260 FOR 1=1 TO 3: LET Q(I,T)-1
/3: FOR K-l TO 2: LET Q(I,T)-X ,36,1,3,0
cada unidade de tempo (por exemplo, 540 DATA 237,66.193.16,239.225
(K)*H(I,K): NEXT K NEXT X :

a cada dez jogadas), a curva terá o as- 280 NEXT T: LET U2=U: LET W=V .1.32,0.9.193.16,227,201
pecto de uma serra. Porém, regularizan- IF U=V THEN LET W-U+l-3* 550 DATA 0,0,0,0,0,0.0.0.0.0.0
do o contorno da curva ou seja, tor- — :

INT (U/3) .0.0,30,0.0.97.128.3.129.192.4


nando as subidas e descidas mais "sua- 290 IF UOV THEN LET U3-U ,15,225.10.56,112,21.32.48,30.
ves" —
, o computador detectará algu- LET U3=V: IF P(U3,V3K0 THEN 192.16.11,160,16,7.120,32
560 DATA 3,181,96,1,234.192.0,
ma tendência significativa a longo pra- LET WW-U3: LET U3-V3: LET V3 =
25 5. 12B, 0,0, 0.0. 0.0. 0.0. 0.0.0,
zo, como, por exemplo, um aumento ex- WW
300 LET X=-1E30: FOR T=l TO 3: 0,0.0,0,0,0.0.0.0,0.0,0,0
pressivo na apresentação de tesouras.
IF (T-2 AND U2-D) OR (T=3 AND 570 DATA 0,16.0,0.56.0.0,124,0
As técnicas de alisamento utilizam so- ,0,254,0. 1,223,0,3,111.128,7,
U3-0) THEN GOTO 370
mas ponderadas das jogadas anteriores. 191,192,14.219.224.2 7.109,240.
No caso específico do alisamento expo- 310 IF T = l THEN GOTO 350
5 3,254.248,106.219.112,245,109
nencial, pesos menores são dados para
311 IF T-2 THEN GOTO 320 ,224,122
312 IF T-3 THEN GOTO 340
jogadas mais antigas, e pesos maiores, 5B0 DATA 190.192,61.91.128,30.
320 LET WW-6-U2-VV: LET 0.1 = 0.(1 239,0.15,182.0.7,92.0.2,232,0.
para jogadas mais recentes.
,T): LET Çj2-Q.(2,T): LET Q3=Q(3
Ao executar o programa, ele inicial- 1.240,0,0.224,0.0,0,0
,T) LET Q(U2,T)-Q1: LET Q(W.
590 DATA 0,0,0,0.0,0.0.0.0
:

mente pedirá que você entre um "fator T)=Q2: LET Q(WU,T)=f}3


de esquecimento". Quanto maior o va-
600 DATA 0.0.0.0,0.0.0.0.56,0.
330 GOTO 350
0.104,0,0,208.0.1,160.0.3.64,0
lor (inteiro, positivo) que você fornecer, 340 LET WW-6-U3-V3: LET Cl-Qd
LET Q3=Q{3 ,6, 128. 0,13. 0.0, 26. 0,0, 52. 0,1,
maior o número de jogadas anteriores ,T): LET Q2-QÍ2.T) :

T) LET Q(U3.T)=01: LET Q(V3, 232.0.63,48,0


que o computador deixará de conside- :

610 DATA 100,32,0,196,96.0,201


Assim, ficará mais fácil vencê-lo. T1-Q2: LET Q{WW.T)-Q3
rar.
350 FOR G=l TO 3; LET P = 0 FOR :
,192.0.115,96,0.6,32,0.4.32.0,
1=1 TO 3: LET P=P+P (G I *Q (I ,
) .
6, 64, 0,3. 128,0.0.0,0,0,0,0.0,0
LET X- .0
): NEXT ti IF P>X THEN
3 CLEAR 3 1999: GGSUB 500 P; LET V-G
BORDER 0: PAPER 0: INK 7: 360 NEXT G
cu 370 NEXT T
7 DIM A$ (3 9) LET AS(1)="PE : 400 INK 7: PRINT AT 2,4;"VOCE 5 CLEAR 1000:PMODE 3,1: COLOR 4,
DRA" LF.T AS(2>="PAPEL": LET DISSE " 2 : PCLS
:

ASU)-"TES01IRA" "405 FOR M —


3 TO 16: SOUND .01, 6 GOSUB 1000
10 DIM H(3,2) DTM X(2) DIM : : M: NEXT M 7 C-8*ATN(l)/3
Q<3,3) DIM C(Z,3)
: DIM A(2,3 : 410 LET KS-INKEYS: IF K$-"" 10 DIM H (3, 2) ,X(2) ,Q(3, 3) .CÍ2.3
DIM P 3 3) CLS THEN GOTO 410 ),A(2,3) ,P(3.3) :CLS
) : ( ,

20 FOR I-l TO 3: LET H(I.l)


:

— 412 IF K$<"1" OR KS>"3" THEN 20 FOR 1-1 TO 3:H(I,l)--COS((I-


COS (1-2) *PI*2/3)
t LET HU.2 : GOTO 410 2)*C) :H(I,2)=-SIN({I-2)*C) NEXT :

)=-SIN {(I-2)*PI*2/3) NEXT I : 415 LET U=VAL KS 30 FOR T=l TO 3:FOR J=l TO 2:A(
30 FOR T=l TO 3: FOR J-l TO 2 420 PRINT AT 3.4;AS(U);AT 2.21 J,T)-0:C(J,T)-.Q1:NEXT J.T
: LET ACJ,T)=.01: NEXT J: INK 5:"EU DISSE
;
AT 3,21;A$ ; 40 PRINT-DIGITE O FATOR DE ESQU
NEXT T (V) ECIMENTO. INTERVALO PERMITIDO
'
40 INPUT "DIGITE FATOR DE ESQ 430 POKE 23681. U-l: LET O-USR 0 A 1.
UECTMENTG (0-1). VALOR SUG 32000: POKE 23681, 127+V: LET O 50 PRINT"0=SEM MEMORIA ALEM DE
ER IDO .85 ";W -USR 32000 1 JOGADA" PRINT" 1=ESTRATEGIA FI
:

70 FOR 1=1 TO 3: FOR J-l TO 3 440 LET S=S+P(U,V): PRINT AT XA"


: LET PI1.J1-SGN <I-J-3*INT ( 16.8;"SEU SCORE E ";S;" " 60 PRINT"VALOR SUGERIDO- 85" IN . :

(I-J+1.5) /3) NEXT J: NEXT I


} :
450 INVERSE L: IF U-U THEN PUT W
LET S-0 PRINT AT 18.10;" UM EMPATE ": 70 FOR 1-1 TO 3:FOR J=l TO 3 FO :

R J-l TO 3iP(I,J)-SGN(I-J-3*INT
:

80 LET U»l! LET S=0: LET U2=0 GOTO 4 90


: LET WW = 0: LET U3-0 460 IF (U-3 AND V-2) OR (U-2 (U-J+1.5)/3)) NEXT J.I :

100 LET V-INT (RND*3>+1 AND V = l> OR (U=l AND V=3) THEN 80 S-0 :U2-0 :WW = 0 :U3-0
110 PRINT INK 6; PAPER 2l" 1 PRINT AT 18,12;" VOCE VENCEU 100 V-RND(3)
"PEDRA, 2-PAPEL. 3-TESOURA
" ": GOTO 490 110 COLOR 4:PCLS:LINE{8.20)-<24
T ) 33 1 )

Ill lllllllll
7.171) .PSET.B 710 PUT{X,Y)-(X+40.y+38) , SC. AND 30 FOR T-l TO 3:FOR J-l TO 2:A(
120 DRAWBM34 10S4C4" FOH K = l T
, : : RETURN J.T)-0:C(J.T)=0.01:NEXT J:NEXT
O 3:DRAU NS(K)+E$+AS(K)+"BR4" :N 720 PUT (X Y) , - (X+40 Y+38) , . ST AND , T
EXT : RETURN 35 LOCATE 0,4
140 GOTO 400 800 FOR K-l TO LEN (STR$ (S) 40 PR1NT "FATOR DE ESQUECIMENTO
200 FOR T-l TO 3:I-U 610 BS^MIDSÍSTRStS) ,K.l) IF B$ = :
A SER USADO"
210 IF{U2-0 AND T = 2) OH ÍU3-Q A THEN DRAWBF2R4BE2" :GOTO 83 45 PRINT: PRINT "VALOR ENTRE 0 E
ND T=3) THEN 280 0 1 :"
220 IF T-2 THEN J>- !U=U2) -2* (U- 820 IF BS<"0" OR BS>"9" THEN 83 50 PRINT "0 - MEMORIA DE 1 JOGO
W) -3*({UOU2)AND(U«W) ) 0 APENAS" PRINT "1 - ESTRATÉGIA
:

230 IF T-3 THEN I— {U-U3) -2* ÍU= B25 DRAU NS(VAL{BS)) INVARIÁVEL"
V3) -3* ( [UOU3] AND
(UOV3) ) 830 NEXT RETURN : 60 PRINT "VALOR SUGERIDO - 0.65
240 FOR J-l TO 2:A(J,T)-A(J.T)* 1000 FOR 1-0 TO 9 READ N$U):NE !

W+H(I,J) :C(J.T)-C(J,T)*W+3*H{I. XT 65 PRINTtPHINT "VALOR " ; : INPUT


J)*H(I,J)+.01 1010 DATA NR2D4R2U4BR2 BDEND4BR ,
W
250 X(J)-A(J.T)/C{J,T) :NEXT 2 R2D2L2D2H2BU4BR2 NR2BD2NR2BD2
. ,
67 FOR 1=4 TO 11: LOCATE 0,1
260 FOR 1-1 TO 3:Q(I.T)-1/3:F0H R2U4BR2 D2R2D2U4BR2 NR2D2R2D2L2
, ,
68 PRINT "
K-l TO 2:Q<I.T)=Q(I,T)+X(K)*H( BE4 D4R2U2L2BE2BR2 R2ND4BR2 NR2
, , ,

I.K) NEXT K.I


: D4R2U2NL2U2BR2 NR2D2R2D2U4BR2 ,
69 NEXT I
280 NEXT:U2-U:VV=V:IF U-V THEN 1015 DIM PA(39) ,SC(39) ,ST(39) 70 FOR 1=1 TO 3: FOR J=l TO 3
VV-U+l-3*INT[U/3) 1020 DRAWBMO,22C3M22,OM40.16M2 72 P(I,J)-1
290 IF UOV THEN U3-U:V3-V:IF P 0, 38L4M0. 22- PAINT {20 20) : .
75 IF I-J-3«INT(<I-J+1.5)/3)<0
(U3.V3X0 THEN WW-U3 U3-V3 V3-W : : 10)0 DRAWBM32. 20C2S6H4BH2HBG2F THEN P(I,J)—
U 77 NEXT J:NEXT I
4BFF3BL4H2BHH2BL3F2BF2F3BD3H2BH
300 X— 1E30:FOR T-l TO 3:IF(T-2 3H2- 80 S=0:U2=0:MW=0:U3=0
AND U2-0) OH {T-3 AND U3-0) TH 1040 GET(0,0)-(40.38) ,PA,G 100 V=INT(3*RND(1) +1 )

EN 370 1050 DRAWBM50 30C3URUHUR5S4UNR .


120 LOCATE 3,4:PRINT "VOCE"
310 ON T GOTO 350,320,340 6US8R3URNE8UE7R2G2DG6LD2LD2FDGL 130 LOCATE 20,4:PRINT "EU"
320 WW-6-U2-VV:Ql-Q(l,T) :Q2-QÍ2 GL2ULUEERE2L2DBM-3 -2D2G2L2U2" ,
140 GOTO 400
,T) :Q3-Q {3 T) :Q (U2 ,T) -Ql :Q (VV.T
.
1060 GET(50.0)-(90.38) ,SC,G 200 FOR T=l TO 3:I-U
)-Q2:Q(WW,T)-Q3 1070 DRAWBMl 28 6L 3GLGL2G3DF5R8 ,
210 IF (U2=0 AND T=2) OR [U3=0
E2UEU3H3LU" PAINT {124 16) AND T>3) THEN 270
330 GOTO 350 : ,

220 IF T-2 THEN I— (U-U2) -2* (U-


340 WW-6-U3-V3:Ql-Q(l.T) :Q2-Q(2 1080 DRAWBMl 28 8C2L3GLGNL2DFRU ,

ERER2U":PAINT(122.10) DRAWBMl VV) -3* ( (UOU2) AND (UOUV)


:Q3-Q(3,T) Q U3 T) -Ql Q (V3 230 IF T-3 THEN I— (U-U3) -2" (U«
:
,T) : í , : ,

)-Q2:B<WW,T)-Q3 4, 14L3GLNG3D2RNF2R4NG2EUH" PAIN


V3)-3«{(UOU3) AND (UOV3)
:

)
350 FOR G-l TO 3:P-0:FOR 1-1 TO T{130,18)
240 FOR J-l TO 2 LET A(J.T)-A(J:

3:P-P+P(G,I)*Q(I,T) :NEXT:IF P> 1090 GET{100,0)-{140.38) ,ST.G .T)*W+H{I,J)


X THEN X-P:V-G 1100 E$="BR2BDNR3BD2R3BE3BR" 245 C(J.T)-C(J,T)"W+3*H(I,J)*
360 NEXT G 1102 AS(1)-"NR2D4U2R4U2BF4U2NR2 H(I, JJ+0-01
370 NEXT T U2H4D4BR4U2NU2R5U2NL2BRBL4D2NR2 250 LET X(J)=A(J,T)/C(J.T) :NEXT
400 ECREEN 1,0: DRAWBMl 2 30 "+YS ,
D2R4BR3U4R4D2LDFRBE4" J
+SS 1104 A$(2)-"BD4R4U2L3U2R4BR8L4D 260 FOR 1=1 TO 3:Q(I.T)=I/3:FOR
410 A$-INKEYS:IF AS<"1" OR A$>" 4R4BR4U4BR8L4D2R3D2L3BR7R4U2L3U K=l TO 2
3" THEN 410 2R4BR3ND4R5D4NL2BR3U4R4D2LDFBR5 265 Q{I,T)=QII,T)+X(K)"H(I.K)
420 U-VAL(AS) :DHAW AS(U)+"BM142 R3U2L3U2R4BR2" NEXT K NEXT : I
.30"+IS+SS+AS(V) 1110 A$(3)-'BD4H4U2L3U2R4BR3R3N 270 NEXT T
430 X-44:Y-90:ON U GOSUB 600,61 D4R2BR3NR5D4R5U4BR4ND4F3RFU4BF4 280 U2 = U:W*V
0,620 NR4U2NR2U2R5BR3" 285 IF U=V THEN VV=U+1-3*INT (U/
435 X-170:ON V GOSUB 700,710,72 1120 IS="ND4BR6-:YS-"C4F2ND2RE2 3)
0 BR3D4R4U4LBR6D4R3U4BR6" 290 IF UOV THEN U3=U:V3=V:IF P
440 LINEÍ80, 175) -(240. 190) PHES .
1130 WS-"D4RERERFRFU4BR4ND4BR5N {U3.V3X0 THEN WU=U3 :U3=V3 V3=W :

ET.BF:S-S+P(U,V) DRAWBM80 180B : .


D4F2RF2U4" U
D4R5U2L4U2R4BR8L4D4R4BR4U4R4D4N 1140 S$=-BD4R4U2L3U2R4BR3ND4R4D 300 X=-9999999:F0R T=l TO 3
L4BR4U4R4D2L2DFBR9L4U2NR4U2R4BR 2NLD2BR4U4BR4D4R3EU2HBR9" 305 IF (T=2 AND U2=-0) OR (T=3 A
8BU2S8" :GOSUB 800:DRAWS4" 1150 D$="ND4R4D2NLD2BR7U4R2FD2G ND U3=0) THEN 370
450 IF U-U THEN DRAWBM100 160C ,
BR5U4R4D2LDFBR4U4R4D2LF2BR3NU4E 310 ON T GOTO 350,320.340
3"+DS:GOTO 490 RERFRFU4" 320 yw=6-U2-VV:Ql=Q(l,T) :Q2-
460 IFÍU-3 AND V-2) OR (U2 AND 1200 RETURN QÍ2.T) :Q3=Q(3,T)
V-l) OB (U=l AND V-3) THEN DRAW Nas versões para o MSX, o Apple e 325 Q(U2,T)=Q1:Q(VV,T)=Q2:Q(WW
"BM30, 160C3"+YS+WS :GOTO 490 o TK-2000 não há apresentação de ,T)»Q3
470 DRAW"BM160.160C1"+IS+W$ gráficos. 330 GOTO 350
490 FOR K-l TO 1000 NEXT LINE {1 : : 340 UW=6-U3-V3:Q1=Q(1,T) :Q2=Q(
O, 22) -{245, 169) PRESET.BF
500 GOTO 200
.
VU 2,T) :Q3=Q(3,T)
345 0(U3.T)-Q1:Q(V3,TXÍÍ2:Q(WW
600 PUT(X,Y)-{X+40,Y+38) .PA.PSE 6 GOSUB 1000 ,T) =Q3
T RETURN
! 7 C-8*ATN(l)/3:NU-0:NV-0 350 FOR G=l TO 3:P=0:FOR 1=1 TO
610 PUT(X.Y)- (X+40, Y+38) SC, PSE , 10 DIM H(3,2) ,X(2) .0(3.3) . C ( 2 . 3
T RETURN
! ) ,A(2.3) ,P(3,3) 355 LET P=P+P(G,I)*Q(I,T) ! NEXT
620 PUT(X.Y)-(X+40.Y+38) .ST.PSE 20 FOR 1-1 TO 3 X
T RETURN 25 H(I,l)--COS [ (I-2)*C) :H(I,2) 357 IF P>X THEN X-P:V-G
;

700 PUT (X Y) - (X+40 Y+38) PA, AND


. , ,
— 8IN({I-2)*C) 360 NEXT G
:RETURN 27 NEXT I 370 NEXT T
J
:
;
! :

IIIIIIIIIIHM IIIIIIIIII
400 LOCATE 0,21: PRINT "JOGUE 1 : AND T=3) THEN 270
-PAPEL 2=TES0UBA 3-PEDRA "; 220 IF T = 2 THEN I = - (U-U2) -2* (U«
410 AS-INKEYS:IF AS<"1" OH AS>" VV) -3* <UOU2) AND (UOW)J
(

3" THEN 410 23D IF T=3 THEN I=- (U=U3) -2* {U= Soma cumulativa é a técnica usada
420 U-VAL(AS) V3) -3« ( (UOU3) AND (UOV3) ) para analisar o desempenho do oponen-
425 LOCATE 3,10:PRINT AS (U) 240 FOR J-l TO 2 LET A(J,T)»A(J :
te num período de tempo em que se re-
430 LOCATE 20,10:PBINT A${V) ,T)*W+H(I,J) gistram mudanças bruscas de respostas.
445 S=S+P(U.V) 245 LET C J T) =C J T) *W+3"H {1
[ , ( , .
Os gráficos empregados pelo progra-
447 LOCATE 12.16:PBINT " *H (I J) +0 01
) .

250 LET X J) =A J T) /C { J T) NEXT


.
ma são iguais aos do programa anterioi
" LOCATE 12,16
: ( ( . , :

(apenas nas versões para o TRS-Coloi


450 IF U=U THEN PBINT "EMPATE" J
Spectrum. Nas versões para o MSX,
:

26C FOR 1-1 TO 3 Q {I T) -1/3 FOR e


GOTO 490 : . :

460 IF (U=3 AND V = 2) OB (U=2 AN K=l TO 2 Apple e TK-2000,


parte a comum entre
D y=l) OR <U=1 AND V=3) THEN PB 265 LET 0 (I T) =íí [I T) +X (K) *H í I
, , , os dois programas se refere à apresen-
INT "VOCE GANHOU " NU=NU+1 :GOT
!
: K) : NEXT K NEXT ! I tação dos resultados). Assim, as linhas
O 490 270 NEXT T de programa correspondentes à seção re-
470 PBINT "GANHEI !":NV«NV+1 260 LET U2 = U:W-V lativa à apresentação dos resultados não
490 LOCATE 3,1B:PRINT NUtLOCATE 285 IF U-V THEN VV-U+1 -3*INT (U/ mudam, devendo ser incorporadas ao
20,ia:PRINT NV 3)
novo programa como estão.
500 GOTO 200 290 IF UOV THEN U3=U:V3=V:IF P
Como no programa anterior, o joga-
1000 LET AS(1)="PAPEL ":AS(2)= (U3.V3K0 THEN WW-U3 U3 - I

V3:V3=WW dor deve entrar uma informação que re-


"TESOURA":AS(3)="PEDRA "
300 LET X~9999999:F0R T'l TO 3 gula a tática do computador (um núme-
1010 CLS
1020 PHINT "PAPEL - P E D 305 IF (T-2 AND U2-0) OR (T«3 A ro entre 1 e 9999).
BA-TESOURA"
—-»«----—--—--
ND U3 = 0) THEN 370
310 ON T GOTO 350.320,340
1030 PHINT
= = = = = = = =, = = ».«=== = ===» 320 LET UU = 6-U2-VV:Q1-Q(1.T) :Q2
1040 LOCATE 0.20 -Q (2 T) Q3-Q (3 T)
. .
:
Use as linhas 520 a 610 do programa
1050 PRINT 325 LET Q (U2 T) -Ql Q <VV T) 'Q2 Q
. : . :

anterior e acrescente estas:


o. „..«.-- [WW.T) -03
1200 RETURN 330 GOTO 350
340 LET WU=6-U3-V3:Q1=Q(1,T) :Q2 CLEAR 31999: GOSUB 500:
5
fiíirTFl -QÍ2.T) :Q3-Q(3,T) BORDER 0: PAPER 0: INK 7:
Lmj LWJ 345 LET Q(U3.T}=Q1:Q(V3,T)=Q2:Q CLS
(WW.T) -«3 7 DIM AS(3,9): LET AS(1)-"PE
6 G09UB 1000 LET
350 FOR G- 1 TO 3:P-0:FOR 1-1 TO DBA": LET AS (2) ="PAPEL" r

7 LET C=8«ATN(1)/3:NU=0:NV=0
AS(3)-"TES0URA"
10 DIM H(3, 2) .X(2) ,Q{3, 3) ,C(2, 3 3
355 LET P=P+P(G.I)*Qtl,T) NEXT 10 DIM B(3): DIM U{3): DIM S(
) ,A(2.3) .P(3, 3)
!

I 3) DIM H(3,2)
: DIM X(3) DIM : :

20 FOR 1=1 TO 3
357 IF P>X THEN X=P:V=G Q{3) DIM P(3.3) DIM M(3) :

25 LET H(I,l)=-COS((I-2)-C) :H(I


:

360 NEXT G 15 LET MM=60: DIM A(3.MM):


.2)— 3IN( (1-2) «O DIM Z(MM)
27 NEXT I
30 FOR T=l TO 3-FOR J=l TO 2-AC
370 NEXT T
400 VTAB 2 1 HTAB 1 PRINT" JOGUE
; :
20 FOR 1-1 TO 3: LET H(I,1) —
1=PAPEL 2-TESOUBA 3 = P E DHA " COS (1-2) *PI*2/3) LET H(I,2 :
J,T)=0-C(J,T)=0.01-NEXT J: (

NEXT T 410 GET AS:IF AS<"1" OR AS>"3" >— SIN ((I-2)*PI*2/3) NEXT I :

THEN 410 30 LET M{1)-1: LET M(2)-0:


35 VTAB 4: HTAB 1
420 LET U=VAL (AS) LET M(3)-0
40 PRINT "FATOR DE ESQUECIMENTO
A SER USADO" 425 VTAB 10: HTAB 3 PHINT AS (U) !
40 INPUT "DIGITE RAZÃO DE SEM
45 PRINT PRINT "VALOR ENTRE 0 E
'
430 VTAB 10 HTAB 20:PRINT AS (V)
:
ELHANCA PARA CADA JOGADA (1 A
445 LET S-S+P(U.V) 9999) 1-NOVA ESTRATÉGIA PA
.

50 PRINT "0 = MEMORIA DE 1 JOGO 447 VTAB 16 HTAB 12:PRINT ":


RA CADA JOGADA. 9999=MESMA
APENAS" PRINT "1 - ESTRATEGI
:
" : VTAB 16: HTAB 12 ESTRATÉGIA. " ;W
A INVARIÁVEL" 450 IF U=V THEN PRINT "EMPATE" 70 FOR 1-1 TO 3: FOR J=l TO 3
60 PRINT "VALOR SUGERIDO = 0.85 GOTO 490 :LET P(I.J)=SGN (I-J-3MNT (

460 IF (U=3 AND V=2) OR (U=2 AN (I-J+1.5J/3)) NEXT J: NEXT I :

65 PRINT: PRINT "VALOR


1

:INPUT D V-l) OR {U-l AND V-3)THEN :LET S-0


PRINT "VOCE GANHOU !":NU=NU 80 LET NN = 0: LET U-l: LET S=0
+l:GOTO 490 : LET U2=0: LET WW=0 LET U3=0 :

470 PRINT "GANHEI !":NV-NV-H 100 LET V-INT (RND*3)+1


490 VTAB 18 HTAB 3 PRINT NU : : 110 PRINT INK 6: PAPER 2;" 1

69 NEXT I VTAB 18 HTAB 20:PRINT NV: = PEDRA 2=PAPEL. 3=TESOURA "


,

70 FOR 1=1 TO 3:FOR J=l TO 3 500 GOTO 200 120 INK 6: PLOT 8.167: DRAW
72 LET P(I.J)=1 1000 LET AS(1)="PAPEL ":AS(2)- 239.0: DRAW 0,-159: DRAW -239.
75 IF I-J-3*INT((I-J+1.5)/3)<0 " TESOURA" AS (3) ="PE DBA
"
:
0: DRAW 0,159
THEN P(I,J)=-1 1010 HOME 130 GOTO 400
77 NEXT J:NEXT I 1020 PRINT -"PAPEL PED 200 LET Y--1E30: LET Z=-1E30
60 LET S=Q:U2=0:WW=0:U3=0 RA-TESOURA"
"===================
FOR T=l TO 3: LET I=U IF T=l
THEN GOTO 230
:

100 LET V=INT(3*RND(1) )+l 1030 PRINT


120 VTAB 4 HTAB 3:PRINT "VOCE"
!
210 IF {U2=0 AND T=2) OR (U3=0
130 VTAB 4 HTAB 20:PRINT "EU"
:
AND T-3) THEN GOTO 264
140 GOTO 400 220 IF T-2 THEN LET I=ABS (U (

I 200 FOR T=l TO 3:I=U -U2)-2*(U-VV)-3*((UOU2) AND (

210 IF (U2=0 AND T=2) OR (U3=0 1200 RETURN UOVV) ) )


IIIIIIIIIHHH llllllllll
415 LET U-VAL K5 252 FOR M-M(T) TO 1 STEP -1:B(A
230 IF T-3 THEN LET I-ABS ( (U
420 PRINT AT 3,4:AS(U);AT 2,21 (T.M))-B(A(T,M))+1:N-N+1:N2-N2-
=U3)-2«(U-V3)-3*< (UOU3) AND (

UOU3) ) ; INK 5:"EU DISSE " AT 3,21;AS ; 1


256 FOR J-l TO 3 Q J) -B { J) /N X
)
( :

240 LET MT,M(T))-I (V) :

430 POKE 23681, U-l: LET O-USR J)-Q<J)-(C{J)-0) NEXT :

250 FOR J-l TO 3: LET B(J)-0:


32000: POKE 23681, 127+V: LET O 258 Q-B(l)*LOG(X(l)>+B[2)*LOG(X
NEXT"J: LET N-0: LET N2-MU) (2))+B(3)*LOG(X(3)) IF NN>0 THE
252 FOR M-M(T) TO 1 STEP -1: -USR 32000 :

440 LET S-S+P{U.V): PRINT AT N Q-Q+Z(N2)


LET B(A(T,M))-B(A(T.M))+1: LET
16,8: "SEU PLACAR E * S
"
260 IF Q>Z THEN Z-Q S 1) -O (1 : ( ) :

N-N+l LET N2-N2-1 ; ;

(2) -0(2) :S(3)-Q<3) :SS-T:NN-N2


:

256 FOR J-l TO 3: LET Q(J)-B(J 450 INVERSE 1: IF V-U THEN


PRINT AT 18.10;" UM EMPATE
": 262 NEXT M:IF 0>Y THEN Y-Q:TT-T
)/N: LET X(J)-Q<J)-<-(Q{J)-0) :

GOTO 490 :U(1)-Q(1> :U(2)-Q(2) :U(3)-Q(3Í


NEXT J
+B 2 • 460 IF <U = 3 AND V-2) OR (U-2 264 NEXT T:T=TT:Z(M(1))-Y:Q(1)-
258 LET Q-B(1)*LN (JC 1 ( ) ) ( >

LN (X(2>)*B(3)*LN (X(3)) IF AND V-l) OR (U-l AND V-3) THEN U(l) :Q(2)-U(2) :0(3)-U{3)
270 U2-U:W-V:IF U2>W THEN W-
i

NN>1 AND N2O0 THEN LET O-Q+Z PRINT AT 18,10;" VOCE VENCEU
" GOTO 490 U2+l-3«INT(U2/3)
tmi :

EU VENCI 272 IF UOV THEN U3-U:V3-V:IF P


260 IF Q>2 THEN LET Z=Q: LET 470 PRINT AT 18.10;"
(U3.V3X0 THEN WU-U3 :U3-V3 V3-W :

S (1=Q 11) LET S 2) a Q 2)


(
LET ( ( :

490 INVERSE 0: FOR D-l TO 2: I


-

S(3)-Q<3): LET SS-T: LET NN=N2 274 M(1)-M(1)+1:M(2)-M(2)-(U2>0


PAUSE 0: NEXT D: FOR N=2 TO 18
262 NEXT M IF Q>Y THEN LET Y :
:M(3)-M(3)-(U3>0)
PRINT PAPER 0: INK 7;AT N.2 )
-Q: LET TT-T: LET U 1 -Q 1 ) :
( ( J :

280 IF Q>2-LOG!W) THEN 300


LET U(1)=Q(2): LET U(3)=Q(3) 200NEXT N: GOTO 282 FOR T-l TO 3:FOR M-NN+1 TO
264 NEXT T: LET T-TT: LET Z(M(
500 FOR N=32000 TO 32284: READ M(T) :A(T,M-NN)-A(T.M) NEXT
1))-Y: LET Q(1)-U{1): LET Q{2)
:

LET Q{3)-U(3) A: POKE N.A: NEXT N 284 M (T) - (NN-MT) (M (T) >NN) NEXT :

-U{2) N-
505 LET N-32069: POKE 23728, 286 T-TT:Q(1)-S(1) :Q(2)-S(2) :Q(
:

270 LET U2-U: LET VV=V: IF U2 =


VV THEN LET VV-U2+1- 3*INT (U2
256MNT (N/256): POKE 23729. 3)-S(3)
INT (N/256) 290 FOR M-l TO M(1)-1:Z(M>— 1E3
/3)
272 IF UOV THEN LET U3-U: 510 RETURN 0:NEXT:Z{M(1))-Q
300 X— 1E30
LET V3=V: IF P<U3,V3)<0 THEN
WW-U3: LET U3-V3: LET V3= 310 ON T GOTO 350.320,340
LET
320 UW-6-U2-VV:Ql-Q(l) :Q2-Q(2)
UU
03-0(3) :0{U2)-Q1:Q(VV)=Q2:0{UW)
274 LET M(1)=M(1)+1: LET M(2)= Apague o programa anterior até a li-
-03
M(2)+(U2>0): LET M(3)=M(3)=(U3 nha 435 e digite:
330 GOTO 350
>0)
GOTO CLEAR 1000:PMODE 3.1: COLOR 4. 340 WW-6-U3-V3:Ql«QU) :Q2-Q(2) :

280 IF Q>Z-LN (U) THEN 5


2 PCLS Q3-Q{3) :Q(U3)-Q1:Q(V3)-Q2:Q(UW)
300 :

-Q3
282 FOR T-l TO 3: FOR M-NN+1 6 GOSUB 1000
C-8*ATN(l)/3 350 FOR G-l TO 3:P-0:FOR 1-1 TO
TO M{T): LET A (T ,M-NN) =A (T M> . 7
3:P-P+P(G,I)*Q(I) :NEXT:IF P>X
NEXT M 10 DIM B(3) .U(3) ,S(3) ,H(3,2) ,X{
,Q<3) ,P(3,3) .M(3) THEN X-P:V-G
284 LET M(T) = (NN-M(T) )*(-l« IM ( 3)
360 NEXT
(T) >NN) NEXT T 15 MM-60:DIM A(3,MM) , Z (MM)
400 SCREEN 1,0:DRAW"BM12,30"+YS
) ) !

286 LET T-TT: LET OU)-S(l): 20 FOR 1-1 TO 3:H(I,l)--COS((I-


2)"C) :H(I.2)— SIN((I-2)*C) NEXT +S9
LET Q(2)=S(2): LET Q(3)-S(3)
:

30 M(l)-1 410 AS-INKEYS:IF AS<"1" OR AS>"


290 FOR M-l TO M(l)-1: LET 2 (M 3" THEN 410
)— 1E30: NEXT M: LET Z(M{1)>=Q 40 CLS:INPUT"DIGITE RA2A0 DE SE
MELHANCA PARA CADA JOGADA (1 A 420 U-VAL (AS) :DRAW AS(U)+"BMl42
300 LET X=-1E30 ,30"+IS*SS+AS(V)
310 IF T=l THEN GOTO 350 9999) 1-NOVA ESTRATÉGIA PARA
.

GOTO 320 CADA JOGADA 9999-MESMA ESTR 430 X-44:Y-90:ON U GOSUB 600.61
311 IF T=2 THEN .

ATEGIA. ";W 0,620


312 IF T=3 THEN GOTO 340
70 FOR 1-1 TO 3:FOR J-l TO 3:P< 435 X-170:ON V GOSUB 700.710.72
320 LET WW-6-U2-VV: LET Q1=QÍ1
I J)-SGN(I-J-3*INT( (I-J+1.5J/3)
): LET Q2-Q<2): LET Q3=Q(3): ,

LET 0(U2)=Ol: LET Q{W)=Q2: ) NEXT J,I


:

LET QÍWW) = Q3 80 U-l


3 30 GOTO 350
100 V-RNDÍ3)
340 LET WW = 6-U3-V3: LET Q1 = QU 110 COLOR 4:PCLS:LINE{8.20)-(24 Apague o programa anterior até a li-

) LET Q2-Q12)
i
LET 03=0.(3) : : 7,171) .PSET.B nha 390 e digite:
LET 0<U3)-Q1: LET Q(V3)-Q2: 120 DRAWBM34.10S4C4" FOR K-l T :

LET Q{UU) =Q3 O 3:DRAW NS (K) +ES+AS (K) +"BR4" : 6 GOSUB 1000
350 FOR G-l TO 3: LET P=0 FOR : EXT 7 C-B*ATN(l)/3:NU-0:NV-0
1-1 TO 3: LET P-P+P <G I *Q I .
) ( ) 140 GOTO 400 10 DIM B{3) ,U(3) ,S(3) .H(3,2) ,X(
200 Y--1E30:Z--1E30:FOR T-l TO 3) ,Q<3) .P(3. 3} .M(3)
NEXT I: IF P>X THEN LET X-P:
3:I-U:IF T-l THEN 230 15 MM=60:DIM A { 3 ,MM) Z (MM) ,

LET y-G
210 IFÍU2-0 AND T-2)OR{U3-0 AND 20 FOR 1-1 TO 3
360 NEXT G
400 1NK 7: PRINT AT 2,4;"VOCE T-3) THEN 264 25 H (1,1) —
COS( (I-2)«C) :H(I,2)
DISSE " 220 IF T-2 THEN I— (U-U2) -2* (U- — SXN(U-2>*C)
27 NEXT
405 FOR M--3 TO 16: SOUND .01, VV)-3* (UOU2)AND(UOW)( ) I

230 IF T-3 THEN I-- (U-U3) -2* (U- 30 MlD-1


H: NEXT M 35 LOCATE 0,4
410 LET KS-INKEYS: IF KS-"" V3)-3*({UOU3)AND(UOV3))
240 A(T.M(T))-I 40 PRINT "FATOR DE VEROSSIMILHA
THEN GOTO 410 NCA"
412 IF KS<"1" OR KS>"3" THEN 250 FOR J-l TO 3:B(J)-0:NEXT:N-
0:N2-M(1) 45 PRINT: PRINT "VALOR ENTRE 1 E
I GOTO 410
IIIIIIIIHIIIH lllllllll
9999 :" 345 Q(U3}=Q1;Q<V3)=Q2:Q<WW)-Q3
50 PRINT "1 = NOVA ESTRATÉGIA P 350 FOR G=l TO 3:P=0:FOR 1=1 TO
ARA CADA JOGO": PRINT "9999 - ME 3
SM A ESTRATÉGIA" 355 P-P+P{G,I)*Q{I) NEXT : I
65 PRINT PRINT "VALOR "
: INPUT : : 357 IF P>X THEN X-P:V=G
W 360 NEXT G
67 FOR 1-4 TO 10:LOCATE 0.1
68 PHINT "
HG El
69 NEXT I
70 FOR 1=1 TO 3:FOR J=l TO 3 Apague o programa anterior até a li-

72 Ptl. J) =1 nha 390 e digite:


75 IF I-J-3*INT((I-J + 1.5)/3X0 COMO ENGANAR O COMPUTADOR
THEN P(I,J) — 6 GOSUB 1000 Se você não quiser ser derrotado pe-
77 NEXT J:NEXT I 7 LET C-B»ATN(l)/3:NU-0:NV-0 lo computador, precisará lançar mão de
BO 0*1 10 DIM B(3) ,U(3) ,S{3) .H(3.2) ,X{ uma estratégia que neutralize ao má-
100 V=INT(3*RND(1))+1 3) .0(3) ,P(3.3) ,M(3) ximo o método de análise utilizado no
120 LOCATE 3.4: PRINT "VOCÊ" 15 LET MM=60:DIM A ( 3 MM) . Z (MM) . programa. A melhor alternativa, nesse
130 LOCATE 20,4:PRINT "EU" 20 FOR 1-1 TO 3 caso, é empregar um processo absolu-
140 GOTO 400 25 LET H(I. D—
COS( (I-2)*C) :H(I tamente aleatório em suas jogadas. Pa-
200 Y=-99999:F0R T=l TO 3:I=U .2)— SIN{(I-2)"C) ra isso, rode um pequeno programa de
205 IF T»l THEN 230 2 7 NEXT I sorteio de três números no seu micro,
210 IF (U2-0 AND T=2) OR (U3=0 30 LET M(l)-1 e imprima (ou então copie à mão) uma
AND T-3) THEN 264 35 VTAB 4 HTAB 1 : longa sequência de jogadas. Seguindo-
220 IF T-2 THEN I = - (U=U2) -2* <U = 40 PRINT "FATOR DE VEROSSIMILHA a à risca, o computador não terá nenhu-
VV)-3*{(UOU2) AND (UOW) ) NCA" ma chance de prever suas jogadas. Em
230 IF T=3 THEN I— (U=U3) -2* (U- 45 PRINT: PRINT "VALOR ENTRE 1 E compensação, você também não con-
V3)-3*< (UOU3) AND (UOV3)) 9999 :" seguirá prever as jogadas do com-
240 A(T,M(T))=I 50 PRINT "1 - NOVA ESTRATÉGIA P putador!
250 FOR J-l TO 3:B(J)=0:NEXT J: ARA CADA JOGO":PRINT "9999 = Outra técnica para enganar o com-
N=0:N2=MU) MESMA ESTRATÉGIA" putador consiste em mudar continua-
252 FOR M=M (T) TO 1 STEP -1 65 PRINT PRINT "VALOR ";: INPUT
: mente de estratégia. Os resultados,
254 B(A(T.M))-B(A(T,M))+1:N-N+1 W aqui, dependerão do programa que vo-
:N2=N2-1 67 FOR 1-4 TO 10:VTAB I HTAB 1 : cê estiver usando. Veja como o com-
256 FOR J-l TO 3 Q J) =B J /N X
: ( ( ) :
68 PRINT " putador "enlouquece"...
JJ--0ÍJ) - (0(J)-0) :NEXT J
258 A=B(.l>*LOG(X(ll )+B(2)*LOC<X 69 NEXT I
(2>)+B(3)*LOG(X(3)) 70 FOR 1=1 TO 3: FOR J=l TO 3 265 LET T=TT:Z(M(1) )=Y:QfI)=UCl
259 IF NN>0 THEN Q=Q+Z(N2) 72 LET P(I,J)-1 :Q(2)=U(2) :Q(3)=U(3)
)

260 IF Q>Z THEN Z-Q S {1 =Q (1) :


) :
75 IF I-J-3*INT((I-J+1.5)/3)<0 270 LET U2=U:VV=V:IF U2>VV THEN
(2 -Q2 S 3) -Q3 SS-T NN-N2
)
: ( : :
THEN P(I,J)=-1 VV=U2+l-3*INT|U2/3)
262 NEXT M 77 NEXT J:NEXT I 272 IF UOV THEN U3=U:V3=V:IF P
263 IF 0>Y THEN Y=Q TT=T U (1) =Q : :
80 LET U-l (U3.V3X0 THEN WH=U3:U3=V3:
(1) :U(Z)=Q<2) :U(3)=Q(3) 100 LET -V-INT 3*RND (1 +1 ( ) ) V3=UW
264 NEXT T 120 VTAB 4 HTAB 3 PRINT "VOCE"
: :
274 LET M(1)=MU)+1:LET M(2}=M(
265 T=TT:Z(M(1))=Y:Q(1)=U(1> :
130 VTAB 4 HTAB 20 PRINT "EU"
: :
2)-(U2>0) :M(3)=M(3)-[U3>0)
Q(2)=U(Z) :Q{3)=U(3) 140 GOTO 400 280 IF Q>Z-LOGÍW) THEN 300
270 U2=U:W=V:IF U2>VV THEN 200 LET Y=-99999:FOR T-l TO 3:1 282 FOR T=l TO 3:FOR M=NN+1 TO
VV=U2+l-3*INT(U2/3) -U M(T)
272 IF UOV THEN U3=U:V3*V:IF P 205 IF T=l THEN 230 2B3 LET A(T.M-NN1=A(T,M) NEXT M :

{U3.V3X0 THEN UW=U3 U3=V3 V3=W : :


210 IF (U2-0 AND T-2) OR (U3=0 284 LET M (T) = (NN-MT) * (M £T) >NN) :

B AND T=3! THEN 264 NEXT T


274 M(1}=M(1)+1:LET M(2)=M{2)-{ 220 IF T=2 THEN I=- (U=U2) -2* (U= 286 LET T=TT:Q(l)=Stl) :Q(2)=S(2
U2>0) :M(3)=M(3)-(U3>0) VV)-3M(UOU2> AND (UOW) ) :Q(3)=S(3)
)

280 IF Q>Z-L0G(U) THEN 300 230 IF T-3 THEN I-- (U-U3) -2* {U- 290 FOR M=l TO M(1)-1:LET Z (M)
282 FOR T=l TO 3 FOR M=NN+1 TO
:
V3)-3*<(UOU3) AND (UOV3) } -99999:NEXT M
M(T) 240 LET A(T,M(T))-I 295 LET Z<M[1))=Q
2B3 A (T.M-NN) =A(T,M) NEXT M !
250 FOR J-l TO 3:B(J)-0:NEXT J: 300 LET x=-99999
284 M(T)»<NN-MT)MMCT)>NN) :
N-0:N2«M{1) 310 ON T GOTO 350,320,340
NEXT T 252 FOR M=M(T) TO 1 STEP -1 320 LET UW = 6-U2-UV:Ql=Cí(D :Q2=Q
286 T-TT:QU)-S(1) :Q<2)-S(2) : 254 LET B(A{T.M))-B(A[T,M))+1:N (2) :Q3=Q{3)
Q(3)=S{3) -N+l :N2-N2-1 325 LET Q(U2)=Q1:Q(W)-Q2tQ(WW>
290 FOR M-l TO M (1 )
-1 Z (M): 256 FOR J = l TO 3 0 J) =B J) /N X : ( ( : =Q3
-99999: NEXT M J)=QIJ)-!Q(J)=0) NEXT J s 330 GOTO 350
295 ZfM{l) >-Q 25B LET A=B(l)*LOC<X(l))+B[2)*L 340 LET WW=6-U3-V3:Q1-Q(1) :02"Q
300 X—99999 OG(X(2))+B{3)*LOG(X(3)J (2) :Q3=Q{3)
310 ON T GOTO 350.320.340 259 IF NN>0 THEN Q=Q+2(N2) 345 LET Q(U3)=Q1:Q(V3)=(Í2:Q{UW)
320 WW-6-U2-W:01=QU) :Q2-Q(2) : 260 IF Q>2 THEN Z=Q S (1 =Q (1 :
) ) : •03
Q3=Q(3> 2) =Q2 3 3) =Q3 S3=T NN=N2
( : ( ! : 350 FOR G=l TO 3:P=0:FOR 1=1 TO
325 Q(U2)=Q1:Q(VV)'=Q2:(Í(UW)=03 262 NEXT M 3
330 GOTO 350 263 IF Q>Y THEN Y=Q TT=T U (1) =0 : : 355 LET P»P+P(G,I)*Q(I) :NEXT I
340 WW=6-U3-V3:Q1=Q(1) :Q2=Q(2) : tl) :U(2)=Q{2) :U(3)=Q(3) 357 IF P>X THEN X=P:V=C
03=0(3) 264 NEXT T 360 NEXT G
IIIIIIIIIIIHH

A MATEMÁTICA DA Use seu micro na exploração das formas


mais fascinantes da geometria de
dimensões fracionadas, um instrumento
da matemática que ajuda a explicar as
irregularidades observadas na natureza.

Qual é o comprimento de um peda- sendo que a rota que acompanha todas por meio do exemplo dado, pudemos
ço de corda? A resposta é muito fácil se as irregularidades é bem maior que a do constatar algo importante: a exatidão da
a corda estiver esticada, pois bastará vôo retilíneo do pássaro. medida de uma superfície irregular de-
medi-la com uma fita métrica. Caso Mas qual é essa diferença? Suponha- pende do tamanho do instrumento de
contrário, a tarefa será um pouco mais mos que temos uma trena bem flexível, medida de que dispomos.
trabalhosa, pois teremos que medir um capaz de se ajustar a todos os porme- A ciência tradicional trabalha com
objeto irregular. nores do terreno. Inicialmente, vamos modelos de curvas e superfícies lisas. À
É evidente que, para obter as medi- nos ater aos grandes acidentes, como a medida que as olhamos mais de perto,
das de um objeto irregular, procurare- foz de um rio ou uma baía. Mas, em mais elas adquirem a forma plana —do
mos estendê-lo, de modo a simplificar busca de maior rigor, passaremos a con- mesmo modo que a superfície da terra
o trabalho. Porém, nem todas as coisas siderar cada rocha que se projeta ao é aproximadamente esférica e nós a per-
são suficientemente maleáveis para se mar, tornando a costa irregular, c, de- cebemos como sendo chata.
fazer isso. Como agir então? pois, cada pedra à beira d'água. Por Porém, como ficou claro no exemplo
Tomemos como exemplo uma encos- fim, levaremos em conta até os grãos de da costa rochosa, alguns objetos não se
ta com 5 km de extensão. Essa
rochosa areia: se você os observar em detalhe, mostram planos nem quando examina-
medida equivale ao percurso de uma gai- verá que também são irregulares e me- dos de muito perto. E existem muitos
vota que voa de uma ponta à outra ou recem uma boa inspeção. outros exemplos na natureza de confi-
à distância que você realmente andaria Isso parece um exercício absurdo — gurações que possuem detalhes diferen-
seguindo a linha do mar? Há uma dife- afinal, ninguém precisa de uma medida tes em cada dimensão de sua estrutura.

rença considerável entre os dois trajetos, desse tipo com tamanha precisão. Mas, Porém, apenas recentemente os cientis-
uma cópia do pedaço original com o do-
bro do tamanho. No caso de uma folha
de papel, porém, serão necessárias ou-
tras três folhas para se obter uma com
o formato da original mas com o dobro
da extensão; com uma barra de rapadu-
ra, você irá precisar de mais sete cubos.
Os números 2, 4 e 8 são parte de uma
sequência formada por meio da multi-
plicação do 2 por ele mesmo diversas ve-
zes — 2, 2x2 e 2x2x2, ou 2T1 2T2 e 2T3.
.

A potência à qual está elevado o 2 equi-


vale à dimensão do objeto.
Como vimos, para alcançar o dobro
de seu tamanho, um objeto unidimen-
sional (a corda) tem que ser multiplica-
do por dois; um objeto bidimensional
(a folha) deve ser multiplicado por qua-
tro e assim por diante. Suponhamos
agora que, para duplicar o tamanho de
certo objeto, sejam necessários três
exemplares idênticos. Como esse núme-
ro está entre dois (equivalente a uma di-
mensão) e quatro (correspondente a
duas dimensões), deduzimos que a di-
mensão do objeto está entre I e 2.
À primeira vista, tal situação parece
improvável —
embora correta, em ter-
mos lógicos. Mas o estudo das dimen-
sões fracionadas pode mesmo nos levar
a resultados surpreendentes.
O matemático alemão Von Koch foi
um dos primeiros estudiosos a desenhar
um diagrama representando esse tipo de
ocorrência: trata-se da chamada curva
floco de neve (muito semelhante a um
floco de neve visto ao microscópio). Ca-
da um dos lados dessa curva é formado
por quatro cópias dela mesma, com um
terço do seu tamanho. A dimensão, nes-
se caso, é um pouco acima de 1 ,26. Vá-
rias formas da natureza, como a própria
costa rochosa, podem ser vistas como desse princípio, o que explica a extrema ção de figuras irregulares, tais como
uma figura dessas. regularidade de sua forma. Os exempla- montanhas, mares e uma série de outros
Como todos os modelos matemáti- res naturais não apresentam necessaria- elementos da natureza.
cos, a curva de dimensão fracionada — mente auto-semelhança — é fácil cons- A recursão constitui um excelente
de definição muito precisa —
não é ca- tatar que um pedaço da casca de uma meio para a aplicação do princípio da
paz de descrever com perfeição a gran- árvore, por exemplo, não é uma peque- auto-semelhança que envolve a constru-
de diversidade de objetos naturais, na cópia da casca inteira. Entretanto, ele ção de uma figura através de figuras
limitando-se a uma aproximação. É, po- poderia estar em alguma outra parte da idênticas menores. No caso, uma sub-
rém, muito útil na explicação de diferen- casca, pois todos os pedaços se parecem rotina principal se encarregará de dese-
tes estruturas —
de veias do corpo hu- muito. Esse fenómeno, denominado nhar os vários elementos idênticos em
mano a montanhas, rios ou árvores. auto-semelhança estatística, è muito co- diferentes tamanhos.
mum na natureza. Se você quiser obter uma curva seme-
lhante à curva floco de neve bastará es-
GRÁFICOS
colher uma figura bem simples e repeti-
DIMENSÕES FRACIONADAS E
la várias vezes, em diversas escalas, adi-
Voltemos um pouco ao exemplo da cionando mais e mais detalhes a cada ní-
corda, do papel e da rapadura. Cada um Como tantos modelos matemáticos, vel de tamanho. Experimente, por exem-

desses objetos poderia ser formado por esse tipo de curva pode ser programado plo, tomar uma reta e aplicar a regra que
várias cópias menores idênticas. Estaría- em seu micro para simular a realidade, prescreve: "toda linha reta deve ser
mos então diante de um caso de auto- evidenciando algumas de suas caracte- substituída por um par de retas em ân-
semelhança, onde cada parte do objeto rísticas. No estudo dos fractais. especi- gulo reto".
é uma cópia menor do original. ficamente, a computação gráfica tem si- Se você tentar fazer isso em uma fo-
As figuras criadas por Von Koch do amplamente utilizada, oferecendo a lha de papel, verá que a cada passo mais
constituem uma aplicação muito rígida solução ideal para o problema da gera- detalhes são introduzidos no desenho.
IIIIIIIIIIIHI 06MMAÇÃOS llll
1000 LET 1 = 1/1. 414 1020 AN - AN + PI / 4 GOSUB 10
1010 TF Kmn THEN I.ET 1 = 1*1.41 00
4: LET x-x* 1 *SIN (an)): LET Y-
( 10.30 AN « AN - PI / 2 GOSUB 10
y-{)*COS Ian)) DRAW x-PEEK 236
:

77,y-PEEK 236/8: RKTUBN


1020 LET dn=an+PI/4: GOSUB 1000
L • L * V
1030 let an»an-PI/2: GOSUB 1000
1040 l.ET -jn-an+Pl/4: LET 1-1*1. ff/i
414: HETURN

D
10 PMODE 4,1:PCLS:SCREEN 1.1
10 SCREEN 2
20 MN-=2
30 OATN(l)/4S:PI = 4*ATN(l)
40 L=120:X=70:Y=140:AN=PI/2
20 MN=2 45 LINE- (X.Y) ,4
30 C=ATN(1)/45:PI-4*ATN(1) 50 GOSUB 1000
40 L=120:X-70:Y=140:AN=PI/2 60 GOTO 60
45 LINE-(X.Y) PRESET ,
1000 L=L/1.414
50 GOSUB 1000 1010 IF L<MN THEN L=L*1 .41 4 X=X :

60 GOTO 60 + (L*STN (AN) ) Y = Y + (L*COS (AN) ) LI


: :

1000 L=L/1.414 NE -(X.Y) ,11:RETURN


1010 IF L<MN THEN L=L* 1 414 X-X . :
1020 AN-AN+PI/4 GOSUB 1000 :

+ (L*S1N (AN) ) Y = Y+ (L*COS (AN) ) LI


: :
1030 AN=AN-PI/2:GOSUB 1000
NE- IX. Y) PSET RETURN
, :
1040 AN = AN+PI/4:L = L*1.4M:RETUR
1020 AN-AN+PI/4:GOSUB 1000 N
1030 AN=AN-PI/2:GOSUB 1000
1040 AN=AN*PI/4:L = LML4:RETURN O programa desenhará na tela uma
curva em forma de C. Inicialmente, ele
3] traça uma rela, que logo é substituída
]0 HGR2 por um par de retas em ângulo reto. A
20 MN 2 sub-rotina entre as linhas 1000 e 1040,
30 C. ATN (1) / 45:PI = 4 *
que usa SIN e COS para construir os ân-
ATN Cl) gulos necessários, é chamada na linha
40 L = 120:X = 70:Y - 14Q:AN -
50. Em um processo recursivo, ela cha-
PI / 2 ma a si mesma repetidamente, para
45 HPLOT X.Y TO X.Y
substituir as linhas relas por pares de re-
50 GOSUB 1000
tas perpendiculares.
60 GOTO 60
1000 L = L / 1.414 A variável da linha 20 contém o com-
1010 IF L < MN THEN L - L * 1. primento da linha mais curta a recur-—
414:X - X + {L * SIN (AN)):Y = são será encerrada quando alcançar es-
Y + {L * COS (AN)): HCOLOR- 3 se valor. Tente mudá-lo e observe o efei-
: HPLOT TO X.Y: RETURN to resultante: valores menores aumen-

O programa que apresentamos a seguir MODELOS EXPERIMENTAIS


faz uma demonsiraçào desse processo.
Como todos os gráficos elaborados con-
forme o modelo de dimensão fraciona- A principal diferença entre as fi-
da, nosso desenho poderia se estender guras de dimensão fracionada gera-
infinitamente. Porém, como não temos das no computador e as formas da
uma capacidade gráfica muito grande, natureza está na irregularidade e de-
os detalhes nos passariam despercebi- sordem destas úllimas.
dos, da mesma maneira que as irregu- No próximo artigo sobre fractais,
laridades de um grão de areia. Portan- veremos como acrescentar elementos
to, o programa irá parar assim que al- aleatórios ao processo de construção
cançar um certo nível de recursão. das figuras, aproxímando-as mais
dos modelos naturais. Um dos pro-
gramas, um gerador de figuras, per-
mite que se introduza a semente ge-
10 BORDER 0: BRIGHT 1: PAPER
0: INK 7; CLS
radora do desenho —
ou seja, uma
infinidade de formas poderá ser cria-
20 LET ran=2
30 LET c=PI/180 da simplesmente variando-se a infor-
40 LET 1=120: LET x=70: LET y mação inicial. Assim, a cada nova
-50: LET an=PT/2 execução do programa, você obterá
45 PLOT INVERSE 1; OVER l;x, uma curva diferente. Uma das mui-
tas possibilidades é mostrada na ilus-
tração à direita.
- . A

tam o número de níveis de recursão e, R 200,30000:3=32767


em consequência, o lempo de execução. 20 MN-1
Mas, se introduzirmos valores maiores, 30 C-ATN(1)/45:PI-4*ATN[1)
o programa será acelerado e poderemos 40 FOR 1-0 TO 7:S(I)-SIN(A)
50 C(I)-C0S(A) :A-A+PI/4:NEXT
visualizar melhor o processo de elabo-
60 L-128:X-52:Y-80:T 1 POKE S. — :

ração do gráfico. T+1:S-S-1


Se você acompanhar o desenvolvi- 65 LINE - (X Y) PBESET , ,

mento da figura na tela com atenção, ve- 70 GOSUB 1000


rificará que cada parte da curva se pa- 80 GOTO 80
rece com a própria curva (princípio da 1000 L=L/1.414
auto-semelhança). Apesar disso, não é 1010 IF L<MN THEN L=L*1 414 X-X . :

Existe alguma aplicação prática para os


fácil antever, logo no inicio, a forma +(L*C(I) :Y=Y-{L*(S(I) LINE- (X
) ) :

fractais?
que ,Y) PSET RETURN
, :
ela irá adquirir. Os fractais são uma descoberta re-
1020 I-II+T) AND 7:POKE S,T+1:S
lativamente recente da matemática e
=S-1 :T-1 :GOSUB 1000 S-S+l T=PEE : :

das ciências da computação. Assim, há


K(S)-1
muito a ser investigado acerca de seu
1030 I-(I-2*T)AND7:POKE S,T+1:S
funcionamento e as aplicações práticas
Quando trabalhamos com curvas de -S-l :T--1 rGOSUB 1000 Os frac-
ainda são bastante restritas.
1040 S-S+1:T-PEEK(S)-1:I-(I+T)
dimensão fracionada, poucas linhas de tais oferecem aos artistas e cientistas
AND 7:L-L*1.414:RETUBN a possibilidade de representar as for-
programa são necessárias para produzir
uma bela figura — sobretudo se utilizar- mas irregulares, típicas da natureza, e
mos a recursão. Digite e execute o pró- a] já têm marcado sua presença no mun-
ximo programa para obter uma curva 1.0 S = 90 0 do das artes gráficas, cinema, televi-
20 HGR2 :MN = 1 são etc. Grandes empresas de televi-
em forma de dragão. 30 C - ATN (1) / 45: PI " 4 * são, por exemplo, estão utilizando frac-
No programa anterior, cada reta era ATN (1) tais randômicos para gerar em compu-
substituída por um par de retas perpen- 40 FOR I - 0 TO 7:S(IJ = SIN tador fantásticas paisagens e cenários,
diculares, traçadassempre em uma mes- (A) terrestres ou extraterrestres. A simu-
ma direção. Neste programa, porém, 50 C(I) - COS (A) :A = A + PI / lação fractal apresenta a vantagem de,
pares de retas são colocados alternada- 4: NEXT com pequenas mudanças nos parâme-
= 128:X = 52:Y - B0:T = -
mente de um e de outro lado de cada re- 60 L tros do programa, produzir efeitos to-
ta, até formar a figura final. 1 : POKE S,T+1:S-S-I talmente diferentes na tela.
65 HCOLOB= 3: HPt.OT X.Y TO X,Y Outra aplicação prática interessan-
te dos fractais ó o desenho de cenários
70 GOSUB 1000 complexos em simuladores de võo. A
10 BORDER 0: PAPEEI 0; INK 7: 80 GOTO BO Força Aérea norte-americana já dispõe
CLS CLEAR 30000: LET S=
! 1000 L = L / 1 .4)4 de programas que permitem gerar o ce-
32767: DEF FN A (X) = (X/B-INT ( 1010 IF L < MN THEN L - L * 1 nário de uma batalha aérea entre mon-
X/6) )*9 414:X = X + (L * CilD :Y = Y - tanhas escarpadas, sobre desertos
20 LET MN=1: LET A«0 (L * S(I)): HPLOT TO X.Y: RET1J etc, para treinar o piloto de helicópte-
30 LET C=ATN (D/45: DIM SUO ros ou caças.
) : DIM CUO) 1020 :
(d TNT
40 FOB 1-1 TO B: LET SU)=SIN T + T) / 8)1 : POKE S.T + 1 :S =S-1 :T=1 :GOSUB 1000 S-S + l :T=PEE
:

A S - 1:T = 1: GOSUB 1000:5! - S K(S)-1


50 LET CtI)»COS A: LET A-A+PI 1 :T = PEEK (S> - 1 1030 I-(I-2*T) AND 7 POKE S.T+1 :

/4: NEXT I 1030 I-((I-2*T)-B* :S=S-1:T=-] GOSUB 1000


:

60 LET L-128: LET X=52: LET Y T ( (I - 2 * T) / 8) ) POKE S. 1040 S=S+1 :T=PEEK (S) -1 1= (I+T) :

=80: LET T— 1 : POKE S.T+1: + 1:3 - S - llt - - 1: GOSUB ND 7:L = L»1.4.)4:BETURN


LET S-S-l 000
65 DBAW INVERSE 1; OVEB 1 X- ;
1040 5 - S + l :T = PEEK (tí)
1:1 = (d + T) AND = *
PEEK 23677, Y-PEEK 23678 7) :[. I.
Esse programa difere do anterior
70 GOSUB 1000 .114: RETURN quanto à regra de formação do desenho
80 STOP e, também, quanto à velocidade de exe-
1000 LET L=L/1.414 cução. Em vez de elaborar o ângulo ca-
1010 IF L<MN THEN LET L«L*1.41 da vez que um elemento é traçado, o
LET Y-Y- IL SCBEEN CLEAR 200 50000 !: S-
4: LET X-X+(L*C(I)) : 10 2 : .

programa calcula o seno e o co-seno dos


*S(I)>! DRAU X-PEEK 2367 7, Y-PEE 52767!
ângulos (linhas 40 e 50) e coloca os va-
K 23678: RETUHN 20
30 C=ATNd)/45:PI = 4*ATNCl) lores obtidos em duas matrizes. Recu-
1020 LET I = FN A(I+T): POKE S.T+
1: LET S-S-l: LET T=l: GOSUB 10 40 FOR 1=0 TO 7iS(I)=SIN(A) perar esses valores em uma matriz é bem
00: LET S-S+l: LET T= (PEEK S)-l 50 CtI)=COS(A) :A-A+PT/4:NEXT mais rápido que calculá-los sempre que
1030 LET I-FN AU-2*T): POKE S, 60 L=12B:X-52:Y=80:T=-1:POKE S, uma linha é reconstruída.
T+l: LET S=S-1: LET T=-l GOSUB : T+l S-S-l :
A curva em C e a curva do dragão
1000 65 LINE -tX,Y) .4 não são apenas curiosidades matemáti-
1040 LET S-S+l: LET T= (PEEK S) 70 GOSUB 1000 cas. Além de muito bonitas, elas cons-
1: LET I^FN A(I+T): LET L=L*1.4 BO GOTO BO
tituem um interessante objeto de estu-
14: BETURN 1000 L-L/1.414
do. Procure, por exemplo, alterar al-
1010 IF L<MN THEN L=L*1 414 X=X . :

+ (L"C (I:Y = Y-(L*S(D) :LINE -(X


guns valores dentro dos dois programas.
mm ,Y) ,H:RETUBN
) )
Você obterá, então, um estoque inesgo-
10 PMODE 4:PCLS:SCBEEN 1,1:CLEA 1020 I=(I+T) AND 7:POKE S.T+1:S tável de novas formas.
Illllllllin» '09 PROGRAMAÇÃO BASIC ,09

TELA DE QUARENTA COLUNAS


VPEEK E VPOKE
FORMATO DAS LETRAS
TABELA DE PADRÕES
NOVOS CARACTERES

O MSX difere dos demais micros por (CPU) destinado exclusivamente ao con- ricamente, quarenta caracteres. Se isso
trole da tela. Conhecido como VDP (Vi- não ocorrer em seu micro, digite o co-
possuir um microprocessador e uma deo Display Processar), ele gera imagens mando SCREEN 0.
memória de dezesseis kbyt.es dedicados a partir de dados armazenados nos de- —
A tela quer contenha textos, lista-
só ao controle da tela. Desvende os
zesseis kbytes de uma memória indepen- gens de programas ou símbolos gráficos
dente da RAM (memória de acesso di- —- é simplesmente uma reprodução da
segredos da VRAM e sinta a diferença! re to, onde ficam armazenados o progra- parte daVRAM denominada Tabela de
ma BASIC e as variáveis). Dessa forma, Nomes (TN). Essa área da memória de
a utilização de gráficos multicoloridos vídeo possui 960 bytes de comprimen-
Muitos usuários dos micros MSX en- de alta resolução não compromete a to, correspondentes aos 960 caracteres
frentam dificuldades em utilizar coman- quantidade de memória disponível, co- que podem ser mostrados na tela simul-
dos como BASE, VPEEK e VPOKE. mo acontece com outros micros. taneamente (são 24 linhas com quaren
Para melhor aproveitar esses recursos da ta caracteres cada uma).
linguagem BASIC, temos inicialmente Cada uma dessas posições pode con
que entender como é organizada a me- TELA DE QUARENTA COLUNAS ter um número qualquer entre 0 e 255.
mória de video —
VRAM —um item
, número que é interpretado pelo VDP
desprezado pela maioria dos manuais. Ao ligarmos um microcompuiador como o código ASCII (sigla de Ameri-
O MSX possui um chip independen- da linha MSX, observamos uma tela de can Standard Codefor Information In-
te da unidade central de processamento textos em que cada linha acomoda, teo- terchange) de um caractere.
Illlllllll
20 FOR 1 = 0 TO 95 1) 5TEP 40
30 VPOKE BASE (0) +1 207 ,

40 NEXT

o comando PO- A linha 10 seleciona a tela de textos Visando a uma melhor compreensão
Em qualquer micro,
KE do BASIC nos permite armazenar e apaga os rótulos das teclas de função da Tabela de Padrões, mostraremos um
um número entre 0 e 255 numa posição da parte inferior do vídeo. Um laço pequeno programa que nos facilitará o
FOR.. NEXT entre as linhas 20 e 40 co- acesso a essa região da VRAM.
da RAM. Da mesma forma, o conteú-
do de qualquer endereço da RAM ou da loca várias vezes o caractere de código Ao ser executado, o programa impri-
ROM é obtido com o comando PEEK. 207 na primeira posição de cada linha. me na tela a porção da tabela que cor-
responde a um caractere. São impressos
Como a VRAM não depende da Deve-se ressaltar que, apesar de termos
RAM, necessitamos de comandos que usado a instrução BASE(0) na linha 30, também os endereços (com conteúdos
nos possibilitem ler ou escrever bytes di- ela é perfeitamente dispensável, uma vez em números decimal e binário) e o ca-
retamente na memória de vídeo, ou se- que seu valor è zero. ractere com seu código. Dessa forma, o
leitor entenderá como os números biná-
ja, VPEEK e VPOKE. Experimente es-
rios codificam o formato dos caracteres.
sa nova forma de escrever na te|a:
COMO SE DESENHAM AS LETRAS
10 CLS 10 Z$="00000000"
VPOKE 417,77 20 SCREEN 0 KEY OFF
20 Vimos até agora que, ao se colocar um
:

30 VPOKE 419.83 30 J = 520


número dentro da Tabela de Nomes, o 40 GOSUB100
40 VPOKE 421 88
50 END
,

VDP imediatamente o interpreta como 50 KS=1NKEVS:TF KS="" THEN 50


o código ASCII de uma letra ou de um 60 TF KS=CHRS(31) AND .X2040 TH
Esse programa coloca diretamenle símbolo.Como o processador sabe o for- EN J=J+8
nas posições 417, 419 e 421 os códigos mato década uma das letras do alfabeto? 70 IF KS=CHBS[30) AND J>7 THEN
das letras M, S e X. O VDP transforma O leitor já deve ter notado que as le- J-J-B
o código da Tabela de Nomes no carac- tras que aparecem no vídeo da TV são
tere correspondente, que é imediatamen- compostas por pequenos pontos. Cada
te reproduzido na tela. caractere tem seu perfil —
ou padrão —
Para conferir, digite: desenhado em um quadrado com oito
pontos de lado. Este padrão é codifica-
PRINT VPEEK (417) do em números binários (formados por
PRIMT VPEEK (419) zeros e uns), a fim de que o computa-
PRINT VPEEK (421) dor possa compreendê-lo. Se fizermos
Estes comandos diretos recuperam os com que os "uns" correspondam aos
códigos das letras M, S e X diretamenle pontos acesos e os "zeros", aos apaga-
da Tabela de Nomes. Se você não gosia dos, poderemos codificar todos os per-
muito de códigos, obtenha as letras cor- fis. Como um número binário entre 0 e

respondentes utilizando: 255 tem no máximo oito algarismos, ca-


da caractere será representado através de
PRINT CHRS (VPEEK (417)) uma série de oito números binários me-
PRINT CHRS (VPEEK (419)) nores que ou
255, seja, oito bytes.
PRINT CHRS (VPEEK (421)) Para que o VDP reconheça o formato
Depois de familiarizado com o fun- dos caracteres, uma porção da VRAM é
cionamento desses dois comandos, o separada para armazenar os 2048 bytes
usuário poderá ter acesso às quarenta necessários para representar os 256 sím-
colunas da teia (o que não é possível por bolos existentes (256*8 = 2048). Esta
intermédio do comando PRINT). Mui- parte da memória de vídeo é chamada
tos leitores já devem ter observado que de Tabela de Padrões e começa no en-
o texto começa a ser escrito a partir da dereço 2048 da VRAM.
segunda coluna, reduzindo, portanto, o
espaço total em uma coluna.
Para ilustrar isso, note que

LOCATE 0. 10:PRINT " * "


Para que o usuário não confunda os
endereços da RAM e da VRAM, o BA-
imprime um asterisco na segunda colu- SIC do MSX oferece a instrução BASE,
na, deixando um espaço vazio à esquer- que evita a memorização dos endereços
da, enquanto os comandos e permite modificar a posição das tabe-
las. Assim, para a tela de textos de qua-
LOCATE 36.10:PRINT
renta colunas, o endereço inicial da Ta-
bela de Nomes está em BASE (0) e o da
Tabela de Padrões em BASE (2).
LOCATE 39,11:PRINT
Confira:
imprimem asteriscos na mesma coluna.
PRINT BASEÍ0)
Use o seguinte programa para ocupar
a primeira coluna da tela:

I 10 SCREEN 0:KE¥ OFF PRINT BASE (2)


Illllllll
A variável J controla a porção da Ta- os caracteres gráficos laqueies que não
bela de Padrões mostrada na tela, defi- são leiras ou sinais dc pontuação) sur-
nindo o caractere que tem seu padrão gem iruncados no vídeo. A razão disso
exibido. Seu valor inicial, determinado c a incapacidade do MSX de imprimir
J/8 na linha 30, faz com que a primeira le- mais que 256 pontos horizontais. Essa
BCIl! i

130 LOCATI 1.6:PRTNT "Endereco" tra impressa seja o 'A' —


cujo código limitação fica mais evidente quando pre-
;TABU4) ;"Conteljdo";lAB{27) "Co ;
é 65 (65*8 = 520). A linha 40 chama a cisamos de uma resolução de 320 pon-
nteúdo" sub-rotina que imprime a porção da ta- tos na horizontal para representar qua-
140 PB INT PRINT TAB (3)
: "VRAM"
;
; bela que nos interessa. As linhas 50 e 80 renta caracteres, cada um com oito pon-
AB (.14) : "Decimal " ;TAR (27) "Binár; permitem avançar ou retroceder dentro tos de largura. Assim, quando estamos
da Tabela de Padrões usando as teclas em SCREEN 0, somente são mostrados
150 PRINT
160 FOR I=J TO J+7
de controle do cursor. os seis pontos —
ou bits —
mais à es-
170 PRINT TAB 2 BASE 2) +1 TAB
í ) ; ( ;
A sub-rotina que cuida da impressão querda do padrão, suficientes para de-
15) ;VPEEK<BASE{2)+I) ;TAB(27) ;RI dos dados na tela vai da linha 100 à 190. finir as leiras mas não os caracteres grá-
GHTS [ZS+BINS (VPEEK(BASE(2)+I) )
As linhas 100 e 1 10 imprimem o carac- ficos, que muitas vezes utilizam até oi-
8) tere emquestão; a linha 120 imprime seu to pontos.
código e as linhas 130 a 150 encarregam-
se do cabeçalho.
O laço FOR.. NEXT, da linha 160 à UM NOVO CONJUNTO DE CARACTERES
A linha 10 cria uma variável auxiliar 180, imprime O conteúdo dos oito bytes
que permite a conversão decimal/biná- que determinam o padrão do caractere O formato das letras é definido na
rio.A linha 20 seleciona a tela de qua- e seus endereços na VRAM. VRAM, e nada nos impede de modificá-
renta colunas e apaga o rodapé com as Depois de uma ligeira exploração da lo, já que dispomos do comando VPOKE
teclas de função. Tabela de Padrões, o leitor notará que para executar tal tarefa. Confira: #

10 FOR I-65*B TO 91-8-1


20 READ A:VPOKE BASE (2) +1 ,A
30 NEXT
40 FOR 1=97*8 TO 123*8-1
50 READ A:VPOKE BASE{2)+I,A
60 NEXT
70 FOR I=48*B TO 58*8-1
80 READ A:VPOKE BASE{2)+I.A
90 NEXT
100 END
1000 DATA 120,72,72,200.248,200
.200,
1010 DATA 112,80.80,248,200,200
0
DATA 120,72,64,192,192,200
,248 0
1030 DATA 112,72.72,200,200.200
240 0
,

1040 DATA 120,64.64.240,192.192


248 0
,

1050 DATA 120,64,64.240,192.192


192 0
,

1060 DATA 120,64,64.216,200,200


248
,

1070 DATA 72,72,72,2 .200.200.


200,0
1080 DATA 16,16 16,48,46,48,48,

1090 DATA 48 16 16.24.152,152.1


,

20,0
1100 DATA 7 2,72 80,224.208.200,
200.0
1110 DATA 64.64 64,192.192.192,
248, 0
1120 DATA 68,108,84,196,196,196
,196,0
1130 DATA 72,104.104,216.216.21
6, 200 ,

1140 DATA 120,72.72,200,200,200


,248,0
1150 DATA 120,72,72,248,192,192
.192,0
1160 DATA 120,72.72.200,200.216
.748,4
1170 DATA 112,72,72,248,208.200
IIIIIIIIHM^B PtOGtAMACÃO
,200,0
1160 DATA 112 ,80 64 ,120 24, 152
248.0
. .
1550 DATA
246, 0
1560 DATA
16,16. 120,24,152,

144. 144 248. 24,24


BASIC

,
— I1HIII
1740 DATA 40.84.84.84,B4,B4,132

1190 DATA 248, 32 32 32, 96,96. 96


, .
.24.0 1750 DATA 68,68.100,84.76.68.13
• 0 157 0 DATA 240 128 128 248 .24,24
, ,

1200 DATA 72.72,72, 200 200, 200 ,


.248,0 1760 DATA 24,36.68,68,68,72,48.
248,0 1580 DATA 112 64, 64, 248, 200, 200
1210 DATA 200,200,200.200,200,8 ,248,0 DATA 120,36,36,36,120,32,1
0,32,0 1590 DATA 224 32 32.48.48,46,48 92, 0
1220 DATA 196.196,212,212,212,4 , 0 1780 DATA 24,36,68,68,116,72.52
0,40.0 1600 DATA 112 80,80,248,152,152 .0
1230 DATA 80,80.80.32,208.200.2 .248.0 1790 DATA 120.36,36,36,120,40,1
00,0 1610 DATA 240 144, 144 248 24 24 , . , 96,0
124 0 DATA 136,136.136,80,48,48. ,248,0 1B00 DATA 24,36.64,56.4,136.112
48,0
1250 DATA 120,72,16,224,192.200 O conjunto de leiras futuristas per- .1
f! 1 0 DATA 124.16,16.16,16,32,19
.248.0 manece à disposição do usuário até que 2,0
1260 DATA 0,0.112,16.240,208,24 o micro seja desligado ou receba um co- 1820 DATA 72,72,72,72.72,72,52,
8.0 mando SCREEN. 0
12 70 DATA 128,128.128.240.200,2 O programa é composto de três laços L838 DATA 76,72.72.72,72.80.32,
0
00. 248,0 FOR...NEXT e um grande número de
1280 DATA 0.0.112,64,192,192,24 1840 DATA 68.84.84,84,84.84.40.
linhas cada uma com oito bytes
DATA,
8,0 0
que definem o padrão dos símbolos. B DATA 68,36.40.16,40,72,132
1290 DATA 16,16,112,80,208,208, —
O primeiro laço que vai da linha
3.

.0
F> (j

248,0
13 00 DATA 0.0.112.80,240.192,24 10 a 30 —
modifica os padrões das le- 186 0 DATA 68,36,36,36.24,16,224
8,0 tras maiúsculas (códigos ASCII de 65 a D
1310 DATA 48 BO .64 ,64 240 192 90). O segundo laço —
linhas 40 a 60

1870 DATA 60,68,8.124,32.68.248



, . . ,

92,0 cuida das minúsculas (códigos 97 a >0


1320 DATA 0,240,144.224,64,248, 122) e o terceiro —
linhas 70 a 90 dos — 188 0 DATA 0,0,56,72,136,136,116
200, 248 números (48 a 57). Não incluímos carac-
1330 DATA 64 64 .64 248. 200 200 DATA 32,64,64,120,68.66,24
teres acentuados para não estender mui-
. . ,

200,0 to as linhas DATA. Entretanto, se o lei-


1340 DATA 16,0,16,16,4 1900 DATA 0,0,24,36,64.64.188.0
tor compreender bem o funcionamento 1910 DATA 4,4,28,36,68.68,168.0
1350 DATA 16,0.16.16,2
.120 do programa, não terá dificuldade em 1920 DATA 0,0.56.68,72.48.220.0
1360 DATA 0 64 72 ,80 ,224 208. 20
. . ,
criá-los, completando assim o conjunto. 1930 DATA 8.20,32,32,32.252,32,
0,0 O programa que explora a Tabela de
1370 DATA 32,32,32.96,96,96,112 Padrões poderá ser aplicado para que se DATA 0.0,60.68.68,184.8,11
,0 conheça mais detalhadamente os carac-
1380 DATA 0,0,128. 208 168 168 , . ,
teres recém-criados.
1950 DATA 32,32,40,52,36,100.16
68,0 Em contraste com o traço de van- 4,0
1390 DATA 0.0,64,112.200,200,20 1960 DATA 16,0,16,16,16.48,204.
guarda desses símbolos artificiais, cria-
0,0 0
mos um segundo conjunto, dessa vez em 1970 DATA 8.0,24,40,72.140.8.11
1400 DATA 0,0,112, 200 200 200 , . ,

letras de forma. As próximas linhas de- 2


12,0
1410 DATA 0,0,120.72,200,248,19 verão ser acrescentadas ao programa an- 1980 DATA 16,32,36.40,48,40.196
2,192 terior, formando um maior, que será • D
1420 DATA 0,0.240.144,144,248,2 completado no final do artigo. 1990 DATA 16.40,40,40.40,16,236
4,24 , 0
1430 DATA 0,0, BO. 104. 192. 192. 19 ;ooo DATA 0,0,40.84.84.84.132.0
2.0 DATA 0,0.88.100,68.68,132,
1440 DATA 0,0,112,64,56.136.248
. 0 120,36.36,56,36,68,24 DATA 0,0.28.36,92.68.184.0
1450 DATA 32.32,112,32,32.96,11 DATA 0.0.56.36,36.252.32.3
2,0 1640 DATA 24 36 .64 ,64 64,68, 56,
. .

1460 DATA 0,0.72,72.200,200,248 o DATA 0.0,56,68,68,188,4.4


,0 1650 DATA 120,36,36,36,36,68.24 DATA 0.0,32.60,36.68,132.0
14 70 DATA 0,0,200.200,200,80,32 8.0 DATA 0,32,48.40.36,68,152,
.0 1660 DATA 24,36,32,56.64,68,56,
1480 DATA 0,0,136.168.166,168,8 0 DATA 36,16,124,16,16,48.20
0,0 167 0 DATA 60,72,16,16,60,144.96
1490 DATA 0 0 ,80 80 32 208, 200
, , , , ,
DATA 0 0.66 ,68,68. 68 188 ,0
, .

24.36,64,68.68.60,136 !(><)() DATA 0,0.76,72,72,80.160,0


0,0,72,72.46,46,48.0 2100 DATA 0 0, 196. 84.84 84, 40
, , ,

0 . 0 ,120 8, 112 ,96, 120


. ,
68, 72, 72. 72, 120. 72, ]3 2110 DATA 0,0.68,40,16.40,196.0
2120 DATA 0 0 36, 36. 36 252 ,8,11
, , ,

1520 DATA 120,72,72,216,232,200 1,8,16,224,0


,248,0 1,8 136 144.
, ,
i 0,0,124,4,56,64.252,0
1530 DATA 32,96.32,48,48,48,48, i 24, 36. 76,84 .100 , 72 , 46
1720 DATA 68,72.80,96,80.72,132
120 72 ,8 248. 192 .200
, , . .0 l 8.24,8,16,16,32,112.0
1730 DATA 32,64,64.64.64,68.248 l 56 ,6B , 36, 8 .48 1 00 88,
,
miiiiiiiHH iiiiiiiiii

siste na atribuição de novos valores pa 240 READ A VPOKE 6)44+1.


:

ra as instruções BASE(0) e BASE{2). 250 NEXT


As linhas seguintes devem ser adicio 260 FOR 1=48*8 TO 57*8-1
nadas aos dois programas anteriores 270 READ A:VPOKE 6144+1,
2190 DATA 60 32 64 120
, . , . 4 . 4 . 120 280 NEXT
O formando, assim, um terceiro, É neces-
300 J=0:G0SUB 360
2200 DATA 12,16,32.120,68.68,56 sário apagar as linhas 5 a 100 com DE-
310 FOR J=8192 TO 16300 STEP 10
LETE 5-100. Além disso, o programa 24
precisa ser gravado antes de ser testado, 320 BASE (0) =J
a fim de permitir correçôes posteriores, 330 CS03UB 360
no caso de ter ocorrido qualquer erro de 340 NEXT J
2230 DATA 24,36.68.68.56,8.112, 350 GOTO 420
O 360 FOR 1=0 TO 959
10 SCREEN 3:SCREEN 0 KEY OFF 365 IF I>439 AND K560 THEN VPO
O programa utilizado é o mesmo,
20 FOR 1=0 TO 2047
:

KE BASE(0)+I.32:NEXT
com alterações apenas nas linhas DA- 30 A-VPEEK(BASE(2)+I) 370 VPOKE BASE(0)+I,194+J/1024
TA. O RESTORE
comando 1620 faz 40 VPOKE 4096+1, 380 NEXT : A5= " Esta Tela Se Inic
com que o comando READ inicie a lei- 50 VPOKE 6144 + 1 A , ia Ero"+STRS J) (

tura a partir da linha DATA 1620. 60 NEXT 390 FOR 1-1 TO LEN (AS)
100 FOR 1=65*8 TO 91*B-1 400 VPOKE BASE(0)+486+I.ASC(MID
110 READ A-UPOKE 4096+T.A S (AS.I.l)
MODIFICANDO 0 VAL0R-BASE 120 NEXT 410 NEXT RETURN
:

130 FOR 1=97*8 TO 123*8-1 420 BASE(0)=0:BASE[2)=2048


A VRAM tem 16384 bytes de com- 140 READ AiVPORE 4096+1 , 430 KS=INKEY3-IF KS = "" THEN 430
primento, dos quais utilizamos apenas 150 NEXT 440 IF KS-CHR$(31) AND BASE(0)>
3008 quando estamos no 160 FOR 1=48*8 TO 58*8-1 8192 THEN BASE (0) =BASE (0 -1024
)
modo 170 READ A; VPOKE 4096+1. GOTO 430
SCREEN 0 (2048 para a Tabela de Pa- 180 NEXT 450 IF K$=CHRS(31> AND BASE[0)=
drões e 960 para a de nomes). Esse es-
200 FOR 1=65*8 TO 91*8-1 B192 THEN BASE (0) -0 :GOTO 430
paço ocioso pode ser aproveitado para 210 READ A:VPOKE 6144+1 . 460 IF KS-CHR$(30) AND BASE<0)>
armazenar conjuntos de caracteres e có- 220 NEXT 0 AND BASE (0) <150Q0 THEN BASE(0
pias da tela. O segredo do processo con- 230 FOR 1=97*8 TO 123*8-1 )-BASE(0)+1024:GOTO 430
IIIIIIIIIIHIHMHHMHMpHJIiyillllU
470 IF KS-CHBSOO) AND BASE (0) iniciada em 6144. Essas tinhas se pare- tui BASE(O) c BASE(2) aos seus valo-
0 THEN BASE (0) -8192 GOTO 430 : cem muito com as primeiras do progra- res iniciais antes de encerrar.
480 IF K$=CHR9(29) AND BASE(2)> ma responsável pela mudança do con- Este programa poderia ser mais ilus-
2048 THEN BASE [2 -BASE (2) -2048
) :
junto de caracteres. trativo se preenchêssemos cada leia se-
GOTO 43C As telas secundárias são obtidas pe- cundária com um texto, de modo que
490 IF KS-CHRS128) AND BASEÍ2K las linhas 300 a 420. A variável J deter- parecessem páginas de um livro. Trata-
6144 THEN BASE 2 -BASE (2) +2048
{
mina o endereço inicial da tela produzi- se, entretanto, dc uma tarefa difícil cm
GOTO 4 30
razão da enurme quantidade de linhas
500 IF KS^HOS [27) THEN BA.1E (0) da pela sub-rotina da linha 360. Assim,
•0:BASEÍ2)=2048:END a primeira tela começando em 0 é cria- necessárias.

510 GOTO 430 da pela linha 300.


A sub-rotina iniciada a partir da li-
nha 360 preenche as diferentes telas com ALGUMAS LIMITAÇÕES
O objelivo desse programa é mostrar
como usar toda a área da VRAM mes- vários caracteres gráficos usando o co-
mo em SCREEN 0. Ao ser executado, mando VPOKE na linha 370. Como o Interrompido o programa, ainda é
código do caractere depende da variá- possível obter uma mudança automáti-
o programa gasta um longo período len-
do as linhas DATA do final da listagem. vel J, ele resultará diferente a cada no- ca do conjunto de caracteres digitando:
A seguir observamos que o vídeo é va tela. Além disso, na linha 380 surge
BASE (2) =4096
preenchido sucessivas vezes com carac- uma mensagem que identifica a tela
teres diversos. Uma mensagem aparece através de seu endereço inicial. O laço OU
no centro de cada tela, mas é apagada das linhas 390 a 410, usando o coman-
do VPOKE, imprime a mensagem. Es- BASE (2) -6144
antes que possa ser lida. Isso acontece
porque o programa está criando, na par- ta se destaca por meio de um espaço cla- Para recuperar o conjunto original,
te ociosa da VRAM, "telas secundá- ro criado pela linha 365. digite o seguinte:
rias" que, de certa forma, coexistem A sub-rotina da linha 360 é chama-
-2048
da pela primeira vez na linha 300, para BASE (2)
com as demais telas. Elas podem ser re-
cuperadas logo após a parada do pro- criar a tela original. A posição da tela OU
grama através das teclas do cursor. pode ser mudada através da repetição da
SCREEN D
O programa também já tem prontas linha 320 para diferentes valores da va-
três copias da Tabela de Padrões, cada riável J. Nessa linha, a variável BASE(0) Ao fazer isto, o usuário notará algo
qual com um tipo de caractere, o que e, portanto, o endereço inicial da Tabe- estranho no cursor: normalmente quan-
nos permite mudar o aspecto das letras la de Nomes, assume o valor J. Para ca- do o sobrepomos a um caractere na te-
da nova tela, a sub-rotina 360 é chama- la, Por exem-
esse caractere se inverte.
recorrendo às teclas do cursor.
da outra vez pela linha 330. Depois de fundo escuro, tor-
plo: se era claro sobre
Para interromper o programa, use a
produzidas iodas as telas secundárias, o na-se escuro, sobre fundo claro. Quan-
tecla < ESC > Se o programa for inter-
.

rompido dessa maneira, ou porque programa prossegue na linha 420, onde do mudamos a posição da Tabela dc Pa-
ocorreu alguma mensagem de erro, e ele os valores de BASE(O) e de BASE(2) são drões, entretanto, o cursor permanece
estiverem uma tela diferente da origi- restituídos ao normal. como um espaço em branco, que apaga
nal, o cursor de texto não retornará à A porção do programa que abrange o caractere subjacente e desaparece na
teia e o programa parecerá estar blo- as linhas430 a 510 torna possível a exi- porção vazia da tela.
queado. Para fazer o micro voltar ao bição instantânea de cada uma das te- A inversão do caractere sob o cursor
normal, digite às cegas (nada aparecerá las criadas, escritas com qualquer dos é realizada na Tabela de Padrões, pelo

no vídeo) o comando abaixo: SCREEN 0 três conjuntos de caracteres. Esta mu- sistema operacional do MSX. Isto se dá
dança é obtida peia atribuição de um no- através das posições 2040 a 2047 da
SCREEN 0
vo valor a uma variável BASE. As linhas VRAM. Quando mudamos a BASE<2>,
e pressione a tecla <ENTER>. 440 e 450 permitem "avançar" dentro o processo não é mais visível.
da VRAM através da tecla "seta para Comandos como PR1NT, TAB e
baixo". Novas telas vão sendo mostra- LOCATE só funcionam quando a BA-
COMO FUNCIONA das instantaneamente, à medida que se SE(0) tem valor 0, ou seja, só imprimem
altera o valor de BASE(0). Por outro la- na Tabela de Nomes em sua posição ori-
Na linha 10, selecionamos o modo de do, as linhas 460 e 470 possibilitam "re- ginal. Portanto, apenas por intermédio

textos e apagamos o rodapé da tela. O troceder" dentro da VRAM. São neces- de VPOKE é possível imprimir nas le-
laço FOR...NEXT entre as linhas 20 e sárias duas linhas para cada movimen- ias secundárias; todas as mensagens de

60 cria duas cópias da Tabela de Pa- to, devido ao grande intervalo entre a erro são impressas na Tabela de Nomes
drões, que começa normalmente em tela original (endereço inicial 0) e as se- original, mesmo que uma tela secundá-
2048. As outras duas cópias terão ende- cundárias. Este espaço é ocupado pelas ria esteja sendo mostrada no vídeo.
Tabelas de Padrões. Além de tudo isso, existem algumas
reços iniciais 4096 e 6144, respectiva-
mente. Os laços seguintes obtêm nas li- Com as linhas 480 e 490 podemos limitações nos valores da instrução BA-
nhas DATA os padrões que serão mo- mudar instantaneamente o conjunto de SE. O
endereço inicial de uma tabela dc
dificados. As cópias da tabela original caracteres, alterando o valor deBA- nomes —
BASE(0) no caso de SCREEN
sào necessárias, porque apenas as letras SE(2), endereço inicial da Tabela de Pa- 0 — deverá ser múltiplo de 1024. Da
e os números são redefinidos, excluindo- drões. Para isso. o programa detecta as mesma forma, o endereço inicial de uma
se, portanto, os demais símbolos. teclas "seta para a direita" e "seta pa- tabela de padrões —
BASEÍ2) em
As linhas 100 a 180 criam as letras fu- ra a esquerda". SCREEN 0 —
terá que ser múltiplo de
turistas na tabela que começa em 4096, A linha 500 possibilita terminar o 2048. Voltaremos a este assunto opor-
enquanto as linhas 200 a 280 produzem programa sem maiores problemas atra- tunamente, quando explicarmos os re-
as letras de fórma, utilizando a tabela vés da tecla <ESC>. Essa linha resti- gistros do chip de vídeo-VDP.
31 APLICAÇÕES 31

O MÉTODO TRADICIONAL
COMO USAR PAPEL E CANETA
TIRE AS MEDIDAS
DESENHOS E ESCALA
O GIRO DAS PEÇAS

Deixe para o micro o trabalho "pesado"' cansativa. Normalmente, optamos por Apresentamos aqui. entretanto, uma
arrastar a mobília de um lado para ou- terceira alternativa ainda mais fácil e
do planejamento de um ambiente.
tro, atéencontrarmos a melhor posição moderna, uliiizando seu microcomputa-
Com este projeto computadorizado, para as diferentes peças. O desânimo dor pessoal. O vídeo gráfico pode subs-
aparece quando constatamos que nem tituiro trabalho do papel e da caneta,
você pode distribuir seus móveis com
tudo se encaixa nos espaços disponíveis. com a grande vantagem de permitir fá-
o simples toque de algumas teclas. Um método mais simples consiste em ceis correções. Além disso, os detalhes
fazer um planejamento prévio, dese- da mobília podem ser armazenados na
nhando cada móvel, com precisão, pa- memória do computador, eliminando a
Conseguir uma melhor disposição ra em seguida adequá-los ao ambiente necessidade de redesenhar uma peça ca-
dos móveis num ambiente nem sempre (obviamente é mais simples movimentar da vez que quisermos movê-la.
é algo fácil, e certamente é uma tarefa um retângulo que arrastar um sofá). O projeto computadorizado é seme-
lhante ao projeto feito em papel. A pri-
meira etapa consiste em se medir, de for-
ma precisa, o local onde a mobília será
colocada, já que em alguns ambientes
poucos cemímelros representam uma di-
ferença significativa.
De posse de todos os dados, incluin-
do posições de porias e janelas, deve-se
desenhar o ambiente (evidentemente em
escala reduzida). O próximo passo é me-
dir os móveis envolvidos no projeto e re-
produzi-los na mesma escala usada pa-
ra o desenho anterior. Dessa forma, se-
rá fácil manipular as peças e saber com
" " " "

31 APUCAÇÕIS 31

exatidào, por exemplo, qual a melhor A segunda parte deste programa tra- 330 RETURN
posição para o piano na sala ou se a ge- rá uma explicação mais detalhada de ca- 340 DRAWBM213.70;D4F1R2E1U4H1L
ladeira caberá em um determinado can- da opção, além de conter a outra meta- 2G1BU1BR8BD3R3BR5U3R4D3NL4D3BR6
to da cozinha. de da listagem do programa. Mas aten- UBU2U2R2U2L4D2" RETURN
:

Apresentamos aqui apenas metade ção: é necessário digitar as duas partes 350 CLS
360 PRINT "COMPRIMENTO MÁXIMO DO
do programa, que é composto de sete para que o programa rode com seguran-
CÔMODO (M)
opções. O
restante virá no próximo ça; portanto, grave a primeira antes de
370 INPUT LE
artigo. digitar a segunda. 380 IF LEMOO OR LEO THEN 350

Opção
As sete

I -
opções oferecidas no
principal são as seguintes:

Reproduz
o ambiente:
menu

to-
u
10 PCLEAR 8 CLEAR 2000 :
390 SC=100/LE
400 PMODE 4,1: COLOR 0 1 PCLS SC
REEN 1.0
410 XM-0:YM-LE
, : :

mando por base sua maior medida, dc- 20 DEF FNA(XM) -1 9*SC*XM . 420 GOSUB 240
senha-o em escala que caiba na tela do 30 DIM 0SÍ9) ,S(10) 430 XX-FNA (XM) YY-FNA (YM) IF PP
: :

micro. As dimensões devem ser indica- 40 OS (0) -"DD100 ;DC5Q DE100 ;DB50 ; OINT(XX,YY)-l THEN PSETIXX.YY.O
das em metros, junto com suas respec- ;BD8 BC 4 DD40 DC 34 DE40 ;DB34
; ; ; ;
;
) ELSE PSETÍXX.YY.l)
tivas posições (Cima, Baixo, Esquerda, 50 OS(1)="DD50;DC60;DE50;DB60;B 440 IS-INKEYS:IF IS-"" THEN 430
Direita). Na representação das paredes,
DIO BC10 :DD10 ;DC10 ;DE10 DB10 ;BD
;
; 450 OX-XM:OY-YM
20 jDDIO DC1Q ;DE10 DB10 BC20 ;DC1
; ; ; 460 IF IS-" " THEN COLOR 0:GOTO
consideraremos duas distâncias e duas 0;DD10;DB10;DE10;BE10;DE10;DC10 530
direções, permitindo, assim, o desenho ;DD10;DB10rBE20;BC15:DD50;" 470 IF IS-"B" THEN COLOR 1 :GOTO
na diagonal. Na opção 1, especifica- 60 OS (2) ="DD100 DC60 DE100 ;DB60 : ; 530
mos também a posição das portas e 480 IF IS-"C" THEN 400
janelas. 70 O$(3)="DD30;DC30;DE30;DB30;D 490 IF IS-"F" THEN FOR K-l TO 4
Opção 2 - Possibilita a movimentação C20;DD30;
80 OS (4) -"DD60 ;DC60 ;DE60 DB60
;

das peças da mobília já definidas no ;

programa. São móveis de cozinha tal- — 90 CLS


vez o ambiente mais difícil de ser pla-
100 PRINT @96.TAB(6)"1: PLANEJA
H AMBIENTE"
nejado —
e incluem armário, fogão,
110 PRINT TAB16) DESENHAR LA
máquina de lavar louça, pia e geladei- YOUT"
ra, todos com medidas
padronizadas. 120 PRINT TAB (6) DESENHAR MO
Qualquer alteração desejada deverá ser BILIA"
feita através da opção 3, O mesmo de- 130 PRINT TAB (6) GRAVAR PROJ
senho de uma peça poderá ser colocado ETO"
em diferentes lugares. Dessa forma, é 140 PRINT TAB (6) CARREGAR PR
possível, por exemplo, dispor quatro ca-
OJETO"
150 PRINT TAB (6) IMPRIMIR PR
deiras iguais ao redor de uma mesa, po-
OJETO"
sicionando a mesma definição da peça SAÍDA"
160 PRINT TAB (6)
nos lugares escolhidos. Tudo que temos 170 PRINT 8422 "FACA A OPCAO' ,

a fazer é selecionar o móvel acionando INPUT N


algumas teclas. 180 IF N<1 OR N>7 TBEN 90
Opção 3 - Permite redefinir as peças já 190 IF N=2 AND F1=0 THEN CLS PR :

contidas no programa e incluir, no má- INT"VOCE DEVE PRIMEIRO SELECION


ximo, outras cinco, desde que não te AR OPCAO l":SOUND 1,20: GOTO 9
nham mais que dez lados —
o que é su 0
200 IF N-l THEN Fl-1
fidente para desenhar qualquer móvel
210 ON N GOTO 350,1120.930,1700
As novas peças serão desenhadas auto ,1750.1790,230
maticamente, tomando como base a es- 220 GOTO 90
cala da reprodução do ambiente. 230 CLS PCLS END: :

Opção 4 - Permite salvar nosso projeto 240 RF"0:COLOR 0


(opção um) e seu conteúdo (opções 2 e 250 LINE(200.0)-(255,191) .PSET.
3) em disco ou fita. B
Opção 5 - Carrega um projeio e seu 260 DRAW"BM206.10;S4;A0;NR4D6R4Í
conteúdo de uma fita ou disco. BR2U6D3R4D3U6BR2D6R4U6NL4BR2D6[Íj
4U6NL4BR2NR4D3fi4D3NL4BR2NR4U3NRk
Opção 6 - Cuida da impressão. Como 2U3R4BR4BD2DBD2D"
apenas o Spectrum é capaz de imprimir 270 IF RF-1 THEN RETURN
a cópia do projeto diretamente, esta op- 280 DRAU"BM203,30;D6R2NU3R2U6BR
ção ficará incompleta para os demais 6R4D6L4U6BR10D6R4U3L4R3U3L3BR10
micros. Ela pode ser usada para chamar NR4D3R4D3NL4BR2U6R4D3L4BR6U3NR4
uma rotina que despeje o conteúdo da D6R4"
tela na impressora ou um outro progra- 290 DRAW"BM218.43;D6U3NR2U3R4BF
ma em BASIC que faça a mesma tare- 6NR4D6R4"
fa. Em um próximo artigo, aprendere-
300 RETURN
310 RF-1: COLOR 0,1: LINE (201,1)-
mos como criar essa rotina e obter có-
(254, 190) ,PRESET,BF:GOSUB 250
pias impressas de nossos projetos. 320 DRAWBM208 30 ND6R4D3L4BR10 , ;

Opção 7 - E incumbida de terminar e BU3D6R3E1U4H1L3BR10;ND6R4D3L4R1


I sair do programa. F3BR6U6R4L4D3R2"
3} APLICAÇÕES 31

:PC0PY K TO K+4 NEXT GOTO 90


; : 670 IF XM<0 OR XM>LE OP YM<0 OR 800 CLS: INPUT"DIRECAO C/B/E/D";
500 IF IS-"W" THEN 710 Y>LE THEN SOUND 1 2 XM-OX YM=0
, : : D3(l)
510 IF I$-"0" THEN 800 Y:GOTO 430 610 INPUT"DISTANCIA" ;D(1)
520 GOTO 430 680 Xl-FNA(OX) :Yl-FNA(OY) :X2-FN 820 DS (2) -"" COLOR 1:G0T0 600
:

530 CLS A{XM) :Y2-FNA{YM) 830 CLS


540 FOR A=l TO 2 690 LINE(X1,Y1)-(X2,Y2) PSET , 840 INPUT"DEFINIR ITEM NUMERO
550 PRINT" DIREÇÃO" A " C/B/E/D
;
;
700 GOTO 430 [0-9) "iH
" :INPUT DS(A)
: 710 CLS: INPUT" DIREÇÃO C/B/E/D"; 850 IF N<0 OH N>9 THEN 830
560 IP D5ÍA)-"" THfCN (MMI DS 860 OS (N) -""
570 rniNT "DISTANCIA" ,h;: INPUT 720 INPUT "DISTANCIA- ;D 870 PRINT"USE <ESPACO> PARA LIN
D{A) 730 Xl-FNA(OX) :Y1-FNA(0Y) HA":PRINT"USE 'B PARA LINHA VA
-

580 IF INSTR{l."CB£D".DS(A))-0 740 POKE 178,2 ZIA":FOR D=l TO 1000:NEXT


THEN 550 750 IF DS-"E" THEN XM-XM-D:X2-F 880 PMODE 4.1:COLOR 0,1:PCLS:SC
590 NEXT NA(XM) LINE (XI, YD - (X2 Yl+3) PS
: , , REEN 1,0
600 SCREEN 1.0: FOR A-l TO 2 ET.BF 890 X=75:Y=145
610 IF DStA)""" THEN 670 760 IF DS="D" THEN XH-XM+D:X2=F 900 DRAU"BH75 150 R100NG3NH3 BM
. ; ;

620 IF DS(A)-"E" THEN XM-XM-DIA NAfXM) :LINE(Xl.Yl)-(X2.Yl+3) PS , 70. 145;U100NF3NG3"


) ET BF
, 910 IF PPOINT(X.Y)«0 THEN PSET(
630 IF DS!A)- THEN XM-XM+D(A 770 IF DS-"C" THEN YM=YM-D Y2-F : X,Y,1) ELSE PSET (X,Y.0)
) NA(YM) LINE (XI Yl - (Xl + 3 Yl) .PS
: ,
)
, 920 IS=INKEYS:IF I$= H " THEN 910
640 IF DS [A) THEN YM=YM"D(A ET.BF 930 0X=X:CY»Y
) 780 IF DS="B" THEN YM-YM+D:Y2=F 940 IF IS-"C" THEN 830
650 IF DS(A>- THEN YM-YM+D (A NA(YM) :LINE(X1,Y1)-(X1+3,Y2) PS , 950 IF IS-"F" THEN 90
) ET BF
, 960 IF IS = " " THEN COLOR 0
660 NEXT A 790 SCREEN 1,0: GOTO 430 970 IF ISO" " THENCOLOR 1
31 ARUCAÇÔíS 31

980 IF IS-" " THEN OS(N)-OS(N)* 1015 3060 GOSUB 6010: RETURN
-D- ELSE OS<N)=OS(N)+"B" 1035 DRAW DX-X.DY-Y: LET X=PEEK 4000 GOSUB 6200
23677: LET Y=PF.EK 73678: LET X 4015 IF Z=83 THEN SAVE ESSCREE
990 CLS: INPUT "DIREÇÃO C/B/E/D"
;D9 S-STRS (X/SC) LET YS=STRS (Y/S : NS :RETURN
1000 IF INSTR (1
,
"CBED" ,D$) -0 TH C) 4020 SAVE ES DATA 0()
EN 990 1037 IF LEN XS<3 THEN LET XS=F 4030 SAVE ES DATA S()
1010 INPUT"DISTANCIA (CM)";D St TO 3-LEN X$)+XS 4040 SAVE ES DATA OS O
1020 IF D<-0 OR D>200 THEN 1010 1038 IF LEN YS<3 THEN LET YS-F 4050 RETURN
1030 SCBEEN 1,0 S C TO 3-LEN YS) +YS 5000 GOSUB 6200
1040 IF DS-"E" THEN X-X-D/2 1039 LET XS"XS( TO 3): LET YS=Y 5010 IF 2=83 THEN LOAD ESSCREE
1050 IF DS-"D" THEN X-X+D/2 St TO 3): PRINT TNK 7;AT 10.24 NS :RETURN
1060 IF DS-"C" THEN Y'Y-D/2 ;"DX-";XS:AT 11.24; "DY»" YS ;
5020 LOAD ES DATA 0{)
1070 IF DS="B" THEN Y-Y+D/2 1040 GOTO 1016 5030 LOAD ES DATA S{)
1080 IF X<75 OH X>175 OR Y<45 O 2000 IF NF-0 THEN RE TU RN 5040 LOAD ES DATA OS O
R Y>145 THEN SOUND 1 3 X-OX Y-0 , : : 2005 FOR N=l TO 10: LET QS="["+ 5050 RETURN
Y:GOTO 910 STRS N+"]"+OS(N): PRINT INVERS 6000 COPY RETURN :

1090 LINEfOX.OY)-(X.Y) PSET . E 1;AT N*2.24+4-[.EN QS;tJS: NEXT 60L0 OVER F: INK 7: PLOT OX.OY:
UOO OS <N) =0$ (N) +DS+STRS [D) + " " ; N FOR N=l TO (S(OB)*2) STEP 2: D
1110 GOTO 910 2010 LET R=0: GOSUB 6060: LET C RAW 0<OB.N)*CY-0(OB.N+1)»CX,0(0
1120 FOR K=l TO 4:PCOPY K+4 TO U-2 B,N)*CX+0(OB,N+l)*CY: NEXT N
K:NEXT:CLS 2020 PRINT INVERSE 1 AT CU, 29; ;
6014 OVER 0: INK 4: RETURN
1130 PMODE 4,1:SCREEN 1.0 CHRS 144: FOR N=l TO 10: NEXT N 6020 LET R=R+(2* <Z=65) )-{2«{Z-7
1140 GOSUB 310 : PRINT INVERSE 1 AT CU, 29;"
"
;
2)]: IF H>360 THEN LET R=0
1150 X-126:Y-96:RT-0 2030 LET KS-TNKEYS LET CU=CU-2 :
6030 IF EKO THEN LET R-360-R
6060 LET A=R«(PI/180) l.ET CY = S
1160 IF X<3 THEN X=3 * (KS="7")*{CU>2) )+2*
t ( (KS="6 ) ( (
:

1170 IF Y<3 THEN Y-3 ")* (CU<20) )


CCOS A: LET CX-SC*SIN A: RETUR
1180 GET(X-3. Y-3) - (X+3.Y+3) ,S,G 2040 IF KSO"S" THEN GOTO 2020 N
1190 DRAW"CO:BM"+STRS{X)+" "+ST
,

2050 LFT OB-CU/2: LET OX = 85 LE :


6080 INPUT " ENTRE MAX T MA DIMENS
RS (Y) +"NU3ND3NL3NR3" T OY-85 AO ? " MAX ;

1200 IS-INKEYSrIF IS-"" THEN 12 2057 LET F-1 GOSUB 6010 :


6090 LET 8C-3 75/MAX
00 2060 GOSUB 7000: PRINT AT 5,24: hl 00 RETURN
FLASH l;"OBJ=";OS(OB) FLASH 0 ; 6200 PRINT INVERSE 1 AT 10.23; ;

;AT 7,22; INVERSE L " 5-8 JMOVE"


;
I "[TJTEIA" ;AT 11 .23; "[DJDADOS-
;AT 8 22 " C CO LOCA" AT 9,22;"[
,
;
l | ; LET KS="TD": GOSUB 7040: INPUT
5 POKE 23658, H 1HORARIO" AT )!). 22 " A IANTHORA
; : |
"ENTRE NOME DO ARQUIVO"; ES: RET
10 BORDER 0: PAPER 0: INK 4: " AT 11.2Z;"lS].SAtDA"
;
URN
CLS 2O70 LET KS = "Sh78CAHS" C.OSUB 7 : 7000 FOR N=0 TO 21: PRINT PAPE
LET R = ()t LET R 4 AT N.22;" *! NEXT
12 GOSUB 8000 040: IF 2>B3 THEN s

20 GOSUB 7000: PRINT INVERSE F-l: GOSUB 6010: GOTO 0060 N: PRINT AT 0,25;"HENU": RETURN
1 ATj2.23:"[1]AMB";AT 3.23;"[ 20BQ LET F-l: GOSUB 6010: LET O
2]PLAN";AT 4 23 " [ 3 ]MOB" ;AT 5,
;
X=OX+2* (Z'56) « [OX< L75) -2« <Z =
(
)
t

,23;"[4]GRAV";AT 6 2 3 " [ 5 1CAR .


;
53)*(OX>D): LET OY-OY + 2* tZ-55 (

R" AT 7.23;"(6]IMPR";AT 8.23;


;
) * (OY<175) -2* (Z-541 * tOY>0)
)
(
5 SCREEN 2,0:COLOR 1,15,15
* SAÍDA"
[ 7 ] 2085 IF Z-72 OR Z-65 THEN GOSU 10 KEY OFF iGOTO 2000
30 LET K3="1234567" GOSUB :
B 6020 20 DEF FNA(XM)-1.9*SC*XM
7040: GOSUB 7000: IF Z=55 2090 GOSUB 6010 30 DIM 0St9) ,S(10)
THEN STOP 2100 IF Z-67 THEN LET F=0 GOS :
40 OStO)="DD100;DC50;DE100;DB50
BD8 BC8 DD40 DC34 DE40 DB34
;

40 GOSUB .1000* (Z-49) +1000 :


UB 6010: GOSUB 7000: GOTO 2000 ; ; ; ; ; ;

GOTO 20 2110 GOTO 2070 50 OS(1)="OD50;DC60;DE50;DB60;B


1000 LET NF=1: GOSUB 6080 3000 PRINT AT 2 24 " PHO JETO" ,
;
D10;BC10;DD10;DC10;DE10;DB10;BD
10OS PLOT 0,0: LET X=0: LET Y=0 3012 INPUT " ENTRE FIGURA A DEFI 20;DD10;DC10;DE10;DB10;BC20;DC1
1010 PRINT PAPES 2; TNK 6 AT 2 ;
NIR ";OB: IF OB< OR OB>10 THEN .1
0;DD10;DB10:DE10;BE10;DE10;DC10
;DD10 ;DB10 BE 20 BC15 DD50
;

1,22; "MAXI«0=" ;KAX GOTO 3012 ; ; ;

1015 PRINT INVERSE AT 2,22;" 1 ; 3013 INPUT "DIGITE NUMERO DÊ La 60 OSÍ2)="DD100;DC60;DE100;DB60


[J JANELA" AT 3 22 " P PORTA"
) ; .
;
[ 1 ; DOS (1-15) ? "iStOB): IF S(OB)<
T 4 22 " B BRANCO" AT 5.22;"[
,
;
( ] ; ] 1 OR S(OB)>15 THEN GOTO 3013 70 OS 3) «"DD 30 DC30 DE30 DB30
( ; ; ; ;

DESENHA" AT 6 72 " S ]SAIDA" AT


: ,
:
I ; 3014 INPUT "CÓDIGO DE DUAS LETR C20 ;DD30 ;

80 OS (4 = "DD60 DC60 DE60 ;DB60


;
)
7,22i"" AS ?":OS(OB) ; ;

1016 LET KS = ".1PBS ": GOSUB 7040 3016 LET R=0: GOSUB 6060: LET O 85 CLS
; INK 3*<Z-74)+2M7>80)+7*(Z-32 X=80 LET OY=80
:
90 SCREEN 0
)
3017 FOR S = l TO S(OB)*2 STEP 2 100 LOCATE 8,5:PRINT"1: PLANEJA
1020 IF Z = 83 THEN INK 4: RETUR 3020 FOR N=l TO 2: GOSUB 7010: R AMBIENTE"
N LET D=D/125: LET O {OB S) =0 (OB , , 110 LOCATE 8,6:PR1NT"2: DESENHA
1075 GOSUB 7010: LET DX=X+D* (D ( ) + ( (D* (-1* (DS»"E")+<DS-"D") ) ) ) R LAYOUT"
5= "D") *SC) -D* (DS="E" *SC) LET
(
)
: LET 0<OB.S+l)=OtOB,S+l)+(lD*(- 120 LOCATE 8,7: PRINT" 3: DESENHA
DY=Y+D* (DS-"C" "SC) -D" (DS="B
(
)
{ 1MDS = "B") + (DS = "C"))>) R MOBÍLIA"
")*SO GOSUB 7010 : 3030 NEXT N 130 LOCATE B,8:PRINT"4: GRAVAR
1030 LET DX=DX+D* (DS="D") *SC) ( 3040 NEXT S PROJETO"
DM(DS = "E")*SC) LET DY=DY+D* ( : ( 3050 LET F=l: GOSUB 6010: INPUT 140 LOCATE 8,9:PRINT"5: CARREGA
DS="C") *SC) -D* ÍD3="B") *SC) ( "ESTA CORRETO (S/N) ?";SS: IF R PROJETO"
1032 IF DXM75 OR DX<0 OR DY>1/ SS="N" THEN GOSUB 6010: FOR N= 150 LOCATE 8,10:PRINT"6: IMPRIM
5 OR DY<0 THEN PRINT FLAKH l; 1 TO S(OB)*2+l: LET O(OB,N)=0: IR PROJETO"
AT 7.23; "ERRO" PAUSE 100: GOTO : NEXT N GOTO 3012 :
160 LOCATE 8,11:PRINT"7: TERMIN
, ) (
,

31 APLICAÇÕES 31

925 A-USR3 (0)


930 OX-X:OY-Y
00 940 IF I8""C" THEN 8J0
520 GOTO 430 950 IF I$="F" THEN 90
530 SCREEN 0 960 IF IS = " " THEN CL=1
540 FOR A=l TO 2 970 IF ISO" " THEN CL-15
550 PR I NT "Di r eção" ;A; " C/B/D/E" 980 IF I5 = " " THEN OS (N) -OS (N) *
INPUT DS(A)
; : "D" ELSE OS (N) "OS (N) + "B*'
560 IF DS(A)="" THEN 600 990 SCREEN0 INPUT "Dl reção
: C/B
570 PRINT-Diatancia" ;A; * (metro /D/E" DS
;

s} " INPUT D (A) ; : 1000 IF INSTR (1 "CBDE" DS) =0 TH


,
.

580 IF INSTR (1 "CBDE" DS !A) ) -0 ,


, EN 990
THEN550 1010 INPUT"Distancia (cna)";D
590 NEXT 1020 IF D<=0 OR D>200 THEN 1010
600 SCREEN 2 ; A=USR2 ! 0) : A=USR1 (0 1030 SCREEN2:A-USR2(0) :A'USR4(0
> )

605 FOR A-l TO 2 1040 IF D$="E" THEN X-X-D/2


610 IF DS(A)="" THEN 670 1050 IF DS-"D" THEN X=X+D/2
14:INPUT"SUA ESCOL 620 IF DS(A)-"E" THEN XM-XM-D(A 1060 IF DS="C" THEN Y-Y-D/2
) 1070 IF DS""B" THEN Y-Y+D/2
180 IF N<1 OR N>7 THEN 170 630 IF DS(A)="D" THEN XM=XM+D(A 1080 IF X<75 OR X>175 OR Y<45 0
190 IF N=2 AND F1=0 THEN LOCATE ) R Y>145 THEN BEEP:X-OX:Y"OY: GOT
5,ia-PRTNT"<e8colha primeiro a 640 IF DS<À)-"C" THEN YM-YM-D (A O 910
opção 1>" :GOT0 170 1090 LINE(OX,OY)-(X.Y) CL ,

200 IF N-l THEN Fl-l 650 IF DS(A)-"B*' THEN YM"YM+D (A 1100 O$(N)=0S(N)+DS+MIDS(STRS(D
i"
210 ON N GOTO 350,1120,830,1700 ) ) .2)+"

,1750,1790,230 660 NEXT A 1110 GOTO 910


220 GOTO 90 670 IF XM<0 OR XM>LE OR YM<0 OR 1120 SCREEN 2
230 CLS END
: YM>LE THEN BEEP XM=OX YM-OY GO : : : 1130 A=USR2 (0) :A-USR1 (0)
240 RF=0 TO 430 1140 GOSUB 310
250 LINE{200,0)-(255.191) ,1.B 680 Xl=FNA(OX) :Y1=FNA(0Y) :X2=FN 1150 X=128:Y=96:RT-0
260 DRAW" BM2 0 6 10 S4 AO NR4D6R4
. : ; ; A(XM) Y2=FNA (YM) : 1160 IF X<3 THEN X-3
BR2U6D3B4D3U6BR2D6R4U6NL4BR2D6R 690 LINE(X1,Y1)-(X2,Y2) .CL 1170 IF Y<3 THEN Y»3
4U6NL4BR2NR4D3R4D3NL4BR2NR4U3NR 695 A'USR(0) 1190 PUTSPRITE0 (X Y ,1,0
, , )

2U3R4BR4BD2DBD2D" 700 GOTO 430 1200 IS=INKEYS:IF1S="" THEN 120


270 IF RF=1 THEN RETURN 710 SCREEN 0:INPUT"Direção C/
280 DRAU"BM203 30 D6R2NU3R2U6BR
, ; B/D/E" DS ;

6R4D6L4U6BR10D6R4U3L4R3U3L3BR10 720 INPUT"Distância ";D


NR4D3R4D3NL4BR2U6R4D3L4BR6U3NR4 730 Xl-FNA(OX) :Yl=FNA(OY)
D6R4" 735 SCREEN 2 A=USR2 (0) A=USR1 (0) : :

290 DRAW"BM21B,43;D6U3NR2U3R4BR 750 IF DS-"E" THEN XM=XM-D:X2-F


6NR4D6R4" NA(XM) -LINE(X1,Y1+1)-(X2,Y1+1)
300 RETURN 1 LINE (XI Yl) - (X2 Y2) ,1
; , ,

310 RF-1:LINE(201,1)-{254.190) 760 IF D$-"D" THEN XM=XM+D:X2=F


15,BF:G0SUB 250 NA(XM) :LINE(XI,Y1 + 1)-(X2.YH-1) ,

320 DRAW"BM208,30;ND6R4D3L4BR10 1:LINE(X[,Y1)-(X2.Y2) ,1


BU3D6R3E1U4H1L3BR10;ND6R4D3L4R1 770 IF D3="C" THEN YM=YM-D:Y2=F
F3BB6U6R4L4D3R2" NA (YM) LINE (X.l + 1 Yl) - (XI + 1 Y2)
: . , ,

330 RETURN 1:LINE(XI,Y1)-!X2,Y2) ,1


340 DRAW"BM213,70;D4F1R2E1U4H1L 780 IF DS="B" THEN YM- YM+D Y2-F :

2G1BU1BR8BD3R3BR5U3R4D3NL4D3BR8 NA YM) :LINE(X1-H.Y1)-(X1+L,Y2)


( ,

UBU2U2R2U2L4D2" RETURN : 1:LINE(X1.Y1)-(X2,Y2) ,1


350 CLS 790 A=USR(0) :GOTO 430
360 PRINT*COMPRIMENTO MÁXIMO DO 800 CLS:INPUT"Direçáo C/B/D/E
AMBIENTE" - :DS(11

370 INPUT"(em metros)";LE 810 INPUT"Dist ^ncM " D ( 1 :

380 IF LE<3 OR L£>100 THEN 350 820 D5 ( 2 =" " GOTO 600 )
:

390 SC-100/LE 830 CLS


400 SCREEN 2 840 INPUT-DEF1NTR A PEÇA NUMERO
410 XM-0:YM-LE (0-9) " :N
420 GOSUB 240:A=USR(0) 850 IF N<0 OR N><> THEN B30
430 XX=FNA (XM) YY=FNA (YM) IF PO
: : B60 0$(N)=""
INT(XX,YY)01 THEN PSET (X». YY) , 870 SCREEN 2:RF = l:GOSUB 2511
1 880 DRAU"BM218.43;NR4D3R4D3NL4B
440 IS=TNKEYS:IF IS-"" THEN 430 R2U6R4D1L4BR6U3NR4!i( -H4 BM21 0 56 :
: .

450 OX=XM:OY»YM ;D6R4U3L4H3U3L3BR 5D6U3NB2U3M8 J

455 DS(1)--":DS<2)-"- R10NR4D6R4"


460 IF IS-" " THEN CL = l:GOTO530 890 X=/5:Y=145
470 IF IS-"B" THEN CL=15:GOTO 5 900 DRAW" BM7 5 1 50 H 0 0NG3NH 3 PM , : 1 ;

30 70 145 ;U) 0ONF3NG3"


,

480 IF I$--C" THEN 400 910 IF POTNT(X.Y)<>] THEN PSET


490 IF IS="F" THEN A*USR(0):GOT X Y) ,1 ,

090 920 IS=INKEY$:JF 1$="" THEN 920


IIIIIIIIUHH llllllll
Neste artigo, você verá como
aplicar o que aprendeu sobre dimensões
fracionadas na simulação de imagens
da natureza, como uma montanha
ou um floco de neve.

No artigo da página 1356. vimos co- 50 GOSUB 1000 1130 YC = VC + .68 * S:XC - XC
mo obter imagens fascinantes por meio 60 GOTO 60 + 1.19 * S:S - S * 3lC - C + li
de programas recursivos muito simples. 1000 S=S/3:IF S<1 THEN S=S*3:RE RETURN
Essas imagens, também denominadas fi-
TURN
1010 IF C-2 THEN COLOR 4 ELSE I
guras fractais, são geradas matematica-
F C=l THEN COLOR 2 ELSE COLOR C
mente na fronteira entre o que chama- 1020 DRAWBIT + STRS (INT (XC+S2*S* 10 SCREEN 2
mos de regular e irregular. SIN (-AN) ) +" "+STRS (INT (YC-S2*S
)
.
20 AN=2*ATN{1)/3:S2=2/SQR[3)
Com a técnica fractal podemos con- •COS(-AN) :F0R K-0 TO 8*ATN[1)
) ) 30 XC=127:YC=95:S=135:C=4
seguir formas muito mais próximas das -AN STEP 2* AN 50 GOSUB 1000
observadas na natureza que com os mo- 1030 LINE - (XC+2*S-SIN(K) YC-2* ,
60 GOTO 60
delos construídos a partir da ciência tra- S*COS[K)) ,PSET 1000 S-S/3:IF S<1 THEN S=S*3:RL
dicional. Mostraremos aqui como fazer 1040 LINE - (XC+S2*S*SIN(K+AN) ,Y TURN
C-S2*S*COS (K+AN) PSET 1010 1F C=2 THEN COLOR 8 ELSE I
simulações desse (ipo no seu micro. ) ,

1050 NEXT:PAINT(XC,YC) F C=l THEN COLOR ) 1 ELSE COLOR


O primeiro programa desenha uma C
1060 C-C-l: GOSUB 1000
das formas mais simétricas da natureza: 1070 YC=YC-1.36*S:G0SUB 1000 1020 DRAW "BM"+STRS ( INT (XC+S2*S
a forma hexagonal de um floco de neve. 1080 YC-YC+.68*S:XC=XC+1-19*S;G SIN ( -AN) ) ) +" "+STRS ( INT ( YC-S2*
,

OSUB 1000 S*COS (-AN) ) ) FOR K=0 TO 8*ATN


:

1090 YC=YC+1.36*S:GOSUB 1000 )-AN STEP 2*AN


1100 YC=YC+ .68*S: XC-XC-1 19*S:G .
1030 LINE-(XC+2-S*SIN(K) YC-2*S .

10 BORDER 0: PAPEH 0: INK 5: OSUB 1000 *COS<K)


BRIGHT 1: CLS 1110 YC=YC-.68"S:XC=XC-1.19*S:G 1040 LINE- (XC+S2*S*SIN (K+AN) YC .

20 LET Mi- 2* ATN (l)/3: LET S2 OSUB 1000 -S2*S*COS (K+AN)


-2/SQ.R (3) 1120 YC-YC-1 36"S :GOSUB 1000
.
1050 NEXT:PATNT(XC,YC)
30 LET XC=127: LET YC=9Q : LET 1130 YC-YC+ 68*5 :XC-XC+1 19*S:S
. .
1060 C=C-l:GOSUB 1000
S=120: LET C=2 =S*3:C=C+1:RETURN 1070 YC=YC-1 36*S :GOSUB 1000
.

50 GOSUB 1000 1080 YC=YC+-68*S:XC=XC+1.19"S:G


60 STOP
1000 LET S-S/3: IF 5<1 THEN LE
T S=S*3: RETURN
HE] OSUB 1000
1090 YC=YC+1 36*S-GOSUB 1000
.

1100 YC = YC+ .6B*S XC=XC-1 19*S :G


10 HGR2 : .

1020 PLOT INVERSE 1; OVER 1 IN ;


ATN 3:S2 - OSUB 1000
20 AN - 2 * (1) / 2
T <XC+S2"S*SIN (-AN) (YC-S2*S*
) 1110 YC=YC- .68*S :XC=XC-1 19*S:G
,

/ SQR (3)
.

COS (-AN) FOR K=0 TO 8*ATN (1


)
- OSUB 1000
30 XC - 127:YC - 95 = 135:C
:

: S
)-AN STEP 2*AN 4 1120 YC=YC-1 36*S :GOSUB 1000
.

1030 DRAW XC+2*S*SIN (K) -PEEK 2 1130 YC=YC+ -68*S :XC=XC+1 19*S:
50 GOSUB 1000 .

3677.YC-2*S*COS (K)-PEEK 23678 60 GOTO 60 *S*3:C=C+1:RETURN


1040 DRAW XC+S2*S*SIN (K+AN)-PE S=S/3:IFS<1 THEN
1000 S
EK 23677. YC"S2*S*COS K + AN - P E )
Esse programa é baseado na curva
K 23678
(
=3*3: RETURN
floco de neve, originalmente desenhada
1020 HPLOT INT (XC S2 * S *
1050 NEXT K - AN)). INT (YC - S2 * por Von Koch. A figura criada se asse-
SIN
{
1060 LET C-OL: GOSUB 1000 COS - AN)): FOR K 0 TO melha a um cristal de gelo em um floco
S * (
1070 LET YOYC-l 36*S GOSUB 10
. :

8 * ATN (1) - AN STEP 2 * AN de neve ou a uma ilha com litoral mui-


00
1080 LET YC=YC+.68*S: LET XC = XC
1030 HPLOT TO XC + 2 * S * S to recortado. A
linha 20 especifica um
IN (K) YC - 2 * S *
. COS (K) triângulo equilátero (seus ângulos me-
+1 19*S: GOSUB 1000
.
1040 HPLOT TO XC + S2 * S *
1090 LET ÍC-fC+1 36*3: GOSUB 10 dem 60 graus e os lados são iguais) com
.
SIN (K + AN) YC - S2 * S * COS
,
um fator de escala definido em S2. li- A
00 (K + AN)
1100 LET YC=YC+.68*S: LET XOXC 1050 NEXT
nha 30 define as primeiras coordenadas
-1.19*3: GOSUB 1000
1060 C = C - 1: GOSUB 1000 X e Y do centro, um fator de escala ini-
1110 LET YC=YC-.68*S: LET XC=XC cial e a cor do primeiro desenho (exceto
1070 YC - YC - 1.36 * S: GOSUB
-1.19*8: gosub lono no Apple). A linha 50 chama a sub-ro-
1000
1120 LET YC=YC-1 36«S . : GOSUB 10 1080 YC = YC * .68 * S XC = XC : tina que desenha a estrela de seis pon-
00 + 1.19 * S GOSUB 1000
: tas que compõe a figura.
1130 LET YC=YC+.6B*S: LET XC=XC
1090 YC = YC + 1.36 * S: GOSUB
+1.19*3: LET S=S*3: LET OC+1
1000
RETURN 1100 YC « YC + .68 * S:XC - XC SIMETRIA E ASSIMETRIA
- 1.19 * S GOSUB 1000
:

1110 YC = YC - .68 * S:XC = XC


- 1.19 * S: GOSUB 1000 Apesar da irregularidade do desenho,
10 PMODE 3,1: PCLS SCREEN 1.0
a simetria está presente na forma da es-
i

20 AN = 2*ATN(l)/3:S2-2/SQ.R(3) 1120 YC - YC - 1.36 * S: GOSUB


,

I 30 XC«127:YC-95:S»135:C-4 1000 trela.Como ocorre com frequência na


) : : ' : )

IIIIIIIIIHMHM"> nOCRAMAÇÃOBASIC „0 jg|ÉMÍÍllllllllll

15 PRINT AT 6,2; INVERSE 1;'


GERADOR DE MONTANHA FRACTAL "
20 DIM C1200.2.2): LET F-l
LET G-2: LET C(l,l,2)>25: LET
eu.i.D-o
22 INPUT "DIGITE RESOLUÇÃO '

DA MONTANHA [16-100] ? 'iS


23 IF S<16 OR S>10O THEN
GOTO 22
24 INPUT "DIGITE GRAU DE 'BUO
OS IDADE U-51? _ iRG
'

25 IF RG<1 OR BG>5 THEN GOTO


24
26 DEF FN B (X) -BG- ( (RND*X) * {2
*RG) )
2 7 PAPER lr CLS
30 LET L-2WS: LET H-L7 (SQB

40 FOR K-l TO S+l: LET C(K,1,


1)-C(1.1.1)+L*K-FN R(l): LET
C(K.1,2)-C(K-1.1,2)-FN RU):
NEXT K
50 FOB J-l TO Sr FOR K-l TO S
-J*l
60 LET C(K.G,1)-FN R(1)+(C(K.
F,1)+C{K+1.F, 1) 11
70 LET C(K.G.2)=FN R[1)+H+(C(
K,F.2)+CtK+J ,F,2))/2
80 PLOT C(K.F.l) ,C[K,F,2)
DBAU C(K+1,F.1)-PEEK 23677, C[
K+1.F,2)-PEEK 23678
90 DRAU C(K,G.1)-PEEK 23677.C
(K,G 2) -PEEK 23678: DRAU C(K.
.
0) +L*K-FNR(0) :C(K.0,1)-C(K-1.0,
F.D-PEEK 23677, 0 K F 2) -PEEK ( , . 1) -FNR(O) NEXT :

23678 50 FOB J-l TO S:FOR K=0 TO S-J 10 SCREEN 2


100 NEXT K; LET F-3-F: LET G-3 60 C{K,C,0)-FNB(0)+(C<K.F.O)+C( 20 DIM C(200. 1.1) :F-0:G-1:C(0.0
-F: NEXT J K+1.F.0H/2 ,1)»150:C(0,0,0)-10
110 FOB Y-40 TO 0 STEP -.75 70 C(K,G,1)«FNB(0>-H+(C(K,F.1)+ 30 S-80 L-230/S H-L/SQB 3) DEFF
: : ( :

120 PLOT 0,y C(K+l,F.l))/2 NR(X)=3-BND(1)"6


130 FOR n-1 TO 100 80 LINE [C{K,F,0) .C(K.F.l) )-{C( 40 FOB K-l TO S:C(K,0.0)-C(0,0.
140 LET a=RND"10 K + l.F.O) ,C(K+1,F,D) ,PSET 0) +L«K-FNR(0) :C<K.0.1)-C(K-1,0.
150 LET b«5-RND«10 90 LINE -(C(K.G.O) .CIK.G.D) ,PS 1) -FNB (0) NEXT
:

160 IF a+PEEK 23677>255 THEN ET:LINE-(C(K,F.O) ,C(K.F,1)) PSE


,
50 FOR J-l TO S:FOR K-0 TO S-J
LET n-100: DRAU 255-PEEK 23677 60 C(K,G,0)-FNR(0)+(C(K.F,0)+C(
,b: GOTO 190 K+l,F.0))/2
170 IF (PEEK 23678) +b<0 THEN 70 C(K,G,1)-FNR(0)-H+ÍC(K,F.1)+
GOTO 150 C(K+l,F,l))/2
180 DBAU a.b 80 LINE(C(K,F.O) ,C(K,F.l) -<C(K )

190 NEXT n + 1 ,F,0) ,C(K+1 .F.l)


200 NEXT y 10 HGR2 90 LINE-(C<K,G,0) ,C(K,G,1)> :LIN
210 FOR n=l)SB "a" TO USH "a" + 7 20 DIM C(200.1,1):F - 0:0 - 1: E-(C{K,F.O) ,C(K,F,1))
: BEAD a: POKE d, a: NEXT m C(0,0.1) - 150:C(0,0,0) - 10 100 NEXT:F-1-F:G-1-F:NEXT
220 DATA 16,56.84.16,56.84.146 30 S - B0:L - 230 / S:H - L / 110 GOTO 110
,16 SQR (3): DEF FN H£X) - 3 - RN
230 FOR n-1 TO 80 D (1) * 6 A íinha 30 define o faror de escala
MO PRINT AT 17 + INT CRNDM), 40 FOB K - 1 TO S:C(K,0.0) - C dos triângulos e especifica o comprimen-
BND-31; BRIGHT li PAPER 4; (0,0,0) + L * K - FN R(0):C(K,
to e a altura de um lado. A linha 40
INVERSE 1;CHRS 144: 0,1) - C(K - 1 ,0,1) - FN B(0J
NEXT preenche duas matrizes com as coorde-
250 NEXT n
50 FOR J - 1 TO S: FOR K - 0 T nadas iniciais de cada triângulo. Obser-
260 PBINT II: INVERSE 1;AT 0,4 —
BUGOS IDADE"" RG O S - J ve que há um fator aleatório portan-
i" RE5-";S;" ;

60 C(K.G.O) - FN RIO) + <C(K,F to, os valores irão variar em um peque-


270 GOTO 270 ,0) + C(K + 1,F,0)1 / 2 no intervalo a cada execução do progra-

D
10 PMODE 4 1 PCLS SCP.EEN 1,1
, : :
70 C(K.G.l) -

80
FN R (0) - H + (C
<K,F,1) + C(K + l.F. 1) ) / 2
HPLOT C(K.F.O) ,C(K,F,1) TO
C(K + l.F.O) ,C(K + 1,F,1)
ma. A linha 50 inicializa dois laços: um
para desenhar os triângulos horizontal-
mente na tela, e outro para colocá-los
mais acima.
20 DIM C(200.1.1) :F-0:G-1:C(0.0 90 HPLOT TO C(K.G.O) .CtK.G.l)
,1)-150:C(0, 0,01-10 : HPLOT TO C(K.F.O) ,C(K,F,1) O vértice de cada triângulo é especi-
30 S-80 L-230/S H*"L/SQ.R (3) :DEFF
: 100 NEXT :F-1-F:G-1-F: ficado nas linhas 60 (coordenada X) e
70 (coordenada Y). A tinha 80 move o
:

NB(X)-3-BND(0)*6 NEXT
I 40 FOR K-l TO S:C(K,0,0)-C{0.0. 110 GOTO 110 cursor para o canto esquerdo do triân-
IIIIIIIIIIIHBI OGSAMAÇÃOB IHHIIIIIIIII
guio e desenha sua base. No programa 165 PRINT A3 590 FOR E-) TO JM
para o Speetrum, os PEEK sublraidos 170 IF F-0 OR AS="N" TtiEN 595 IF P-l THEN LET E=JM
das coordenadas asseguram que os pon- GOSUB 230 NEXT RETURN
E:
tos não caiam fora da leia, o que pro- ião FOR K-2 TO cy+i 600 LET TX=X(P) LET TY=Y(P) :

vocaria uma interrupção do programa 190 LET P-K-l 610 LET BX-X(P-l): LET BY-Y(P-
200 LET X(P)=T(K): LET Y(P)=U(
ao se tentar executar o DRAW. Na li-
K) 620 LET DX=TX-BX: LET DY=TY-BY
nha 90, o DRAW é diredonado para o 210 NEXT K 630 FOR F=2 TO GN+1
vértice do triângulo e depois para o can-
220 RETURN 640 LET X(P)=DX»V(F)-DY*W(F)+
to esquerdo (o início). A linha 100 com- 230 INPUT "No DE VÉRTICES ";VT
pleta o primeiro laço. Este desenha uma 240 FOR L-2 TO VT+1 650 LET Y(P)=DY*V(F)+DX*W(F)^
fileira de triângulos e, após redefinir al- 250 INPUT "VÉRTICE ";(L-1);"=" B¥
gumas variáveis, de maneira a deslocar •
X, Y 660 LET p'P*.l
a fileira um pouco mais para cima, re- 260 LET T(L)-X*B5: LET U(L)=y» 6/0 NEXT F
começa a construção da montanha. Na B5 6ff0 LET X(P)-TX: LET Y(P)»TY
versão para o Spectrum, o programa
270 IF L-2 THEN PLOT INT (127 f.'j0 LET J(CL)*E: LET Ct. = CL + l :

+T ( L) TNT (85+U (L)


) ,
GOSUB 500: LET CL*CL-1 LET E-
completa a figura desenhando "'árvo-
)
:

275 IF L<>2 THEN DRAW 1Z7+T(L J(CL)


res" na base da montanha. )-PEEK 23677. 85 + tl ( L) -PEEK 700 NEXT E
23678 710 LET N-N-l
2f)0 NEXT L 720 RETURN
290 PRINT "CURVA FECHADA (S/N)

Modificando os valores de algumas 300 LET AS=INKEY$: IF ASO"N*


variáveis, você poderá obter muitas ima- AND AS<>"S" THEN GOTO 300 10 DIM X(50) Y (50) ,XT (50) YTI10 . ,

gens diferentes. Mas, lembre-se, essa va- 305 PRINT AS ) ,XG(20) ,YG(20) .J(S0)
riação atinge apenas o tamanho, a po- 310 TF AS="N" THEN LET CV=VT- 20 PMODE 4.1:COLOR 0,1:PCLS:CLS
sição e outros detalhes, mas não a for-
PAUSE 0 RETURN :
30 GOSUB 140
370 LET CV-VT+1: LET T(CV+1)=T 40 GOSUB 350
ma geralda figura. (2) : LET U(CV41)=>U(2) 50 INPUT"NO.DE NÍVEIS DE RECURS
O próximo programa permite que vo- 330 DRAW 127+T(CV)-PEEK 23677. AO - " NR NR= INT (NR IF NR<1 THE
; : ) :

cê introduza uma forma inicial, cons- H5+U(CV)-PEEK 23678 N 50


truindo, a partir dela, uma figura frac- 340 RETURN 60 F-l ;N-0 PCLS: SCREEN 1,0 :

(al. Ogrande número dc sub-rotinas re- 350 CLS IF F*0 THEN : GOTO 70 LINE "(12 7+X (P) ,96-Y(P) PRE ) .

cursivas pode ser um problema no Ap- 380 SET


ple — esse micro só admite que uma 360 PRINT "MESMO GERADOR (S/N) BO GOSUB 500: IF P>0 THEN 80
sub-rotina seja chamada por ela mesma 90 AS=INKEYS:IF AS = "" THEN 90
24 vezes. Por isso deve-se ter cuidado ao
37o'lET AS=INKEYS: TF ASO"S" 100 CLS:PRINT"S PARA SAIR, QUAL
AND AS<> M N M THEN GOTO 370 QUER OUTRA TECLA PARA CONTI
escolher o nível de recursão. 375 PRINT A$ NUAR"
380 IF F=0 OR AS="N" THEN 110 AS-TNKEYS IF AS = "" THEN 110 :

GOSUB 4 00 120 IF ASO"S" THEN 20


390 RETURN 130 CLS:END
10 POKE 23658.8: LET F=0: LET 400 INPUT "No DE VÉRTICES DO G 140 IF F=0 THEN 170
AS-"": LET CL-1 ERADOR NAO INCLUINDO AS FXTR 150 PRINT"MESMA FORMA INICIAL
20 DIM XU00): DIM Y(IQO): EMTDADES (0.0) E (1,0) ";GN S/N) ?"
DIH T(30) DIM U(30)
: DIM V( : 420 PLOT INVERSE 1: OVER L;B5 160 AS = INKEYS:IF ASO"S" AND AS
60) DIM W{60)
: DIM J (100)
:
<>"N" THEN 160 ELSE PRINT AT AS
25 BORDE R D: PAPER 7: INK 0: 170 IF F-0 OR AS-"N" GOSUB 230
CLS 180 FOR K-l TO CV
30 GOSUB L40 190 P-K-l
40 GOSUB 350 450 IF ABS INT |X))>1 OR ABS t 200 X(P)-XTfK) Y (P)=YT[K) :

50 INPUT "No DE NÍVEIS DE REC 11 NT (Y))M THEN GOTO 440 210 NEXT
URSAO " NR IF ABS (INT (NR)
; : 460 LET V(M)=X: LET U (M) -Y 220 RETURN
<1 THEN COTO 50 LET X=X*85+85: LET Y-85+Y*8S: 230 INPUT"N0.DE VÉRTICES NA FOR
60 LET F-l: LET N-0 CLS : DRAW X-PEEK 23677, Y-PEEK 23678 ME INICIAL " VT VT-INT (VT) IF V ; : :

70 PLOT INVERSE 1; OVER 1; 4 70 NEXT M T<1 THEN 230


INT (127+X(P)) ,INT (85+YIP)) 480 DRAW 175- PEEK 23677.85- 240 FOR L-l TO VT
30 GOSUB 500; IF P>-2 THEN PEEK 7367R: PAUSE 0 250 PRINT" VÉRTICE " L INPUT" - ; ; ;

! GOTO 80 490 RETURN ";X.Y:IF ABS (X) >1 OR ARS(YI>1


90 LET A$=INKEYS: IF AS""" 500 IF NR=N THEN GOSUB 520 THEN 250 j^, .,

THEN GOTO 90 <JH^H 505 IF NRON THEN GOSUB 570 260 XT(L)=X*95:YT(L)~Y*95
100 PR I NT |1;"S PARA SAIR GUA , 510 RETURN 270 IF L-=l THEN LINE -(127+XTf.L
LQUER OUTRA P/ CONTINUAR" 520 FOR W=l TO GN+l ) 96- YT L PRESET ELSE LINE -(
( ) ) .

110 LET AS- INKEYS IF AS*"" - ^Bm.E^*=P-1 'ji jâ^H 127+XT(L) ,96-YT{L) ,PSET )

THEN GOTO 110 540 IF WSS X(P)>127 OR ABS Y!P 280 NEXT
170 IF ASO-S" THEN GOTO 25 )>fl5 THEN GOTO 560 290 PRINT-CURVA FECHADA (S/N)?";
130 CLS STOP
i 550 DRAW 127+X (P) -PEEK 23677, 300 AS=INKEYS:IF AS<>"N" AND AS
140 IF F-0 TH EH GOTO 170 35+YÍPIPEEK 23678 <>"S" THEN 300 ELSE PRINT AS
150 PR INT "MESMA FORMA INICIAL 560 NEXT U- RETURN 310 IF AS="N" THENCV-VT:GOSUB 7
(S/N) 7 '; 5/0 LET N--N + 1 -Jtt^tBm L 30 : RETURN
160 LET AS=INKEYS : IF ASO"S" 580 IF N=l THEN LET JM-CV-I 320 CV=VT-U tXT(CV) =XT(1) lYT (CV)
AND AâO-N" THEN GOTO 160 5B5 IF NOl THEN LET JM=GN + 1
IIIIIIIIIIIIIH
330 LINE -
í 1 2 7 + XT (CV) 96- YT (CV) , 80 GOSUB 500: IF P > 0 THEN 80 457 HGR2 : BCOLOR= 3: HPLOT 80
,PSET:GOSUB 730 90 GET AS
340 RETURN 100 TEXT HOME PRINT "<S> P
: :
458 FOR M = 1 TO GN
350 PCLS:IF F=0 THEN 380 ARA SAIR E QUALQUER OUTRA PARA 460 X = XG(M) * 95 + 80:Y = 96
360 PPINT"MESMO GERADOR {S/N) ? CON-TINUAR" - YG (M) * 95: HPLOT TO X ,

110 GET AS 4 70 NEXT


120 IF AS < > "S" THEN 30 480 HPLOT TO 175,96: GOSUB 73
370 AS-INKEY3:IF ASO"S" AND AS
<>"N- THEN 370 ELSE PRINT AS 130 HOME END :
0
3B0 IF F = 0 OR A5="N" GOSUB 400 140 IF F = 0 THEN 170 490 RETURN
390 RETURN 150 TEXT HOME PRINT "MESMA
: :
500 IF NR - N THEN GOSUB 520
400 'pRINT"N0 DE VÉRTICES NO GER
.
FORMA INICIAL? (S/N)"; 505 IF NR < > N THEN GOSUB 5
ADOR" 160 GET AS: IF AS < > "S" AND 70
410 INPUT"NAO INCLUINDO AS EXTR AS < > "N" THEN 160 510 RETURN
EK IDADES (0,0) E (1,0) - ";GN 165 PRINT AS 520 FOR L = 1 TO GN + 1
:GN=INT(GN) :IF GN<1 THEN 410 170 IF F - O OR AS = "N" THEN
GOSUB 2 30
530 P-P-l
420 DRAU"BM80,96" 640 IF ABS (X(P)) > 127 OR A
430 FOR M=l TO GN
440 PRINT "VÉRTICE ";M;"DO GERA
180 FOR K = 1 TO CV
EVe* "V ~ 1 a <¥ YT(K)
V
™ BS (Y(P)) > 95 THEN 560
550 HPLOT TO 127 + X(P),96 -
DOR " :INPUT "- " X
; ; ,
200X(P) = XT(K):Y(P) = Y(P)
450 IF ABS{X)>1 OR ABS(Y)>I THE 210 NEXT 560 NEXT RETURN
:

N 440 220 RETURN 570 N * H + 1


460 XG (M)=X:YG(M)-Y: X"X"95+80 :
230 INPUT "QTOS. VÉRTICES NA F 5B0 IF N - 1 THEN JM = CV - 1
-96-Y*95:LINE-(X,Y) PSET ,
ORMA INICIAL " VT VT = INT (VT ; :
585 IF N < > 1 THEN JM = GN +
4 70 NEXT ) IF VT < 1 THEN 230
:

480 LINE - (175, 96) , PSET: GOSUB 73 240 FOR L = 1 TO VT 590 FOR J = 1 TO JM
0 250 PRINT "VÉRTICE "jL:: INPUT 600 TX = X(P) :TY - Y(P)
490 RETURN
" - " :X,Y: IF ABS (X) > 1 OR 610 BX - X(P - 1):BY - Y(P - 1)
500 IF NR=N GOSUB 520 ELSE GOSU ABS Y) > 1 THEN 250
<

B 570 260 XT(L) = X ' 95:YT(L) = Y * 620 DX TX - BX DY TY - BY


:

510 RETURN 95 630 FOR E - 1 TO GN


520 FOR L=l TO GN+1 640 X(P) = DX * XG{E) - DY * YG
530 P-P-l (E) + BX
540 IF ABS(X(P) )>127 OR ABS(Y(P 650 Y{P) = DY * XG(E) + DX * YG
))>95 THEN 560 280 GET AS: IF AS < > "N" AND (E) + BY
550 LINE- (127 + X (P) 96-Y (P) PSE , ) ,
AS < > "S" THEN 280 660 P - P + 1
T 285 PRINT AS: FOR T - 1 TO 300 670 NEXT E
560 NEXT: RETURN : NEXT HGR2 :
680 X(P) - TX:Y(P) - TY
570 N-N+l 290 FOR L - 1 TO VT 690 J(CL) J:CL = CL + 1 GOSU ;

580 IF N'l THEN JM-CV-1 ELSE JM 300 IF L = 1 THEN HCOLOR= 3: B 500:CL - CL - 1:J = J (CL)
-GN+1 HPLOT 127 + XT(L),96 - YT(L) 700 NEXT J
590 FOR J-l TO JM 302 IF L < > 1 THEN HCOLOR- 710 N - N - 1
600 TX=X(P) :TY=Y{P) 3: HPLOT TO 127 + XT(L),96 - Y 730 FOR T = 1 TO 1000: NEXT
610 BX=X(P-1) :BY-Y(P-1) T(L) 740 RETURN
620 DX=TX-BX:DY=TY-BY 307 NEXT
630 FOR E=l TO GN 310 IF AS - "N" THEN CV - VT
640 X(P) -DX"XC(E) -DY*YG(E) +BX GOSUB 7 30: RETURN
650 Y(P)-DY*XG[E)+DX*YG(E)+BY 320 CV - VT + 1 :XT (CV) - XT (1) : 5 CLS
660 P=P+^J\ * YT(CV) = YT(1) 10 DIM X<50) ,Y(50) ,XT(10) ,YT(1(>
670 NEXT 330 HPLOT TO 127 + XT(CV) ,96 ) ,XG(20) ,YG(20) ,J(50)
630 X(P)»TX:Y(P)-TY - YT(CV) GOSUB 730 : 20 SCREEN 0
690 J (CL) = J CL=CL+1 GOSUB 500:C
: : 34 0 RETURN 30 GOSUB 1.40
L-Cl-1 iJ«J (CL) 350 IF F = 0 THEN 380 40 GOSUB 350
700 NEXT J 360 TEXT HOME PRINT "MESMO
: : 50 SCREEN 0: INPUT "QUANTOS NÍVE
710 N=N-1 GERADOR? (S/N) " IS DE RECURSAO " NR T NR= INT (NR)
;

720 RETURN 370 GET AS: IF AS < > "S" AND IF NR<1 THEN 50
730 AS=INKEYS: SCREEN 1.0:K=10Q0 AS < > "N" THEN 370 60 F=l N=0 SCREEN 2
: :

740 K-K-1:IF K>0 AND INKEYS""" 375 PRINT AS 70 LINE-(127+X(P) ,96-Y(P)) ,4


THEN 740 380 IF F = 0 OR AS - "N" THEN 80 GOSUB 500 :IF P>0 THEN BO
750 RETURN GOSUB 400 90 AS=INKEYS:IF AS="" THEN 90
390 RETURN 100 SCREEN 0:PRINT"<S> PARA SAI
400 TEXT HOME INPUT "QUANT
: : R E QUALQUER OUTRA PARA CONTINU
OS VÉRTICES NO GERADOR NAO INCL AR"
5 HOME UIN-DO AS EXTREMIDADES (0,0) E 110 AS=TNKE¥S-IF AS="" THEN IH
10 DIM X (50) ,Y (50) .XT(IO) . YT(1 GN I Mg^*M|Jfl 120 IF AS<>"S" THEN 20
130 CLS: END
0) ,XG(20) .YC(20) . J(50) 410 GN = INT (GN) IF GN ^ 1 T :

30 GOSUB 140 HEN 400 140 IF F=0 THEN 170


40 GOSUB 350 430 FOR M = 1 TO GN 150 SCREEN 0 PRINT"MEKMA FORMA
:

50 TEXT HOME
: INPUT "QUANTO
: 440 PRINT "VÉRTICE ";M;" DO GE INICIAL? (S/N) "
S NÍVEIS DE RECURSAO " NR NR - : : RADOR" INPUT " - " XG (M) YG <M
: : ; . 160 AS=INKEYS:IF AS<>"5" AND AS
INT (NR) IF NR < 1 THEN 50
: ) <>"N" THEN L60 ELSE PR TNT AS
60 F - N - 0
: HGR2 : 450 IF ABS IXG(M)) > 1 OR AB 170 IF F=0 OR A3="N" THEN GOSUB
,70 HCOLOR= 3: HPLOT 127 + X(P) S (YG (M) ) > 1 THEN 440 230
I .96 - YIP) 455 NEXT 180 FOR K-l TO CV
; L U "

IIIIIIIIIIIHH llllllll
730 AS=INKEY5:K=1000
740 K=K-J:IF K>0 AND f NKEYS="
THEN 740
750 RETURN

Quando você executa o programa, a


linha 230 pede o número de vértices do
desenho inicial que irá gerar a figura
fractat. Convém traçar essa figura pre-
viamente em uma folha de papel. Mar-
que dois pomos representando o inicio
e o fim da linha e una-os por meio de
pequenas relas. Conte o numero de can-
tos c forneça es.se dado ao computador.
Não exagere no número de relas:
lembre-se que você terá que especifi-
car as coordenadas de cada vértice (li-
nha 250), Estas devem ter valores com-
preendidos entre -lei.
O laço entre as linhas 240 c 280 (240
e 305 nas versões para o MSX
e o Ap-
ple) permite que você introduza as
coordenadas e desenhe a forma inicial,
determinando inclusive se sua figura se-
rá fechada ou aberta (linha 290).
Em seguida (linhas 400 a 490), o com-
putador solicita ao usuário a definição
da figura que substituirá cada linha re-
la do desenho inicial —
essa figura é ge-
190 P = K-1 410 GN= INT (GN) IF GN<1 THEN 400
:
ralmente chamada de gerador. Como
200 X[P)=XT(K) :Y<P)=YT(K) 4 30 FOR M=l TO GN você fez para a forma inicial, desenhe
210 NEXT 440 PR INT" VÉRTICE ";M;" DO GERA
d figura e passe a informação para o
220 BETUBN DOR"; INPUT" - " XG (Ml YG (MJ ; .

230 INPUT "QTOS. VÉRTICES NA FO 450 IF ABS(X)>1 OR ABS(Y)>1 THE computador.


RKA INICIAL" ;VT :VT=INT (VT! TF V : N 440 Finalmente, você deverá especificar
T<1 THEN 230 455 NEXT o número de níveis de recursão. Quan-
240 FOR L»l TO VT 457 SCREEN 2 PSET (80 96) ,11
: , do esse valor é digitado, a linha 80 cha-
250 PR TNT "VÉRTICE ":Li:INPUT" 458 FOR M=l TO GN ma a sub-rotina que verifica se O pro-
- ":X,Y:IF ABS(X)>1 0R ABS (Y) >1 460 X=XG (M) "95+8 0 :Y= 96- YG (M) "95 grama está rodando pela primeira vez.
"
THEN 250 LINE- (X.Y) , Em caso afirmativo, o programa ê des-
260 XT(L)=X*95:YT(L)=Y*95 4 70 NEXT viado para a rotina principal {linha 570
265 NEXT 4B0 LINE- (1 75.96) 11 GOSUB 730 à 720), que desenha a figura (racial. Se
. :

270 PRINT"C1IRVA FECHADA (S/N) ? 490 RETURN


o programa já estava sendo rodado, o
500 IF NR=N THEN GOSUB 520 ELSE
2B0 AS=TNKEYS IFAS<>"N" AND AS<
'
GOSUB 5 70 computador dá ao usuário a chance de
>-S" THEN 280 ELSE PHTNT AS FOR :
510 RETURN redefinir o gerador.
T-l TO 300: NEXT 520 FOR L=l TO CN+1
290 SCREEN 2 FOR L=J TO VT
:
530 P = P-1
300 tF L-l THEN LINE - J 27+XT TESTE
t ( 540 IF ABS (X P) >1 27 OR ABS(Y(P
{ )

).96-YTÍL) ) ,4 ELSE LINE -U27+X ))>95 THEN 560


T(L) 96 - YT L )
. II ( ) , 550 LINE- (127+X (P) 96-Y (P) 11 . ) ,

305 NEXT 560 NEXT RETURN :


Para experimentar o programa, digiie
310 IF A$="N" THEN CV-VT:GOSUB 570 N=N+1 o valor 3 para o número de vértices da
7 30 RETUfttí
r 580 IF N«] THEN JM=CV-1 ELSE JM forma inicial. Em seguida, introduza as
320 CV-VT+1 :XT(CV) -XT 1 :YT(CV) ( )
=GN+1 coordenadas 0.5 c -0.2 para o vértice 1;
=YT{1) 590 FOR J=l TO JM 0 e 0.4 para o vértice 2; 0.5 e -0.2 para
330 LINE -Í127+XT{CV) ,96-YT(CV) 600 TX=X(P) :TY=Y(P) o vértice 3. Ao responder N à pergunta
610 BX=X(P-1) :BY=Y(P-1) "CURVA FECHADA?", aparecerá na
).11 :G0SUB 730
620 DX=TX-BX:DY=TY-BY um
340 RETURN
630 FOR E-l TO GN
tela triângulo sem base. Como foi
350 IF F=0 THEN 380 feito para a forma inicial, entre 3 para
360 SCREEN 0 PR INT"MESMO GERADO 640 X(P) =DX*XC (E) -DY*YG (E) + BX
:

650 X (P) =DY*XG (E) +T)X*YG (E) +BY o número de vértices do gerador e defi-
H? (3/N) " na as coordenadas: 0.2 e 0 para o vérti-
370 AS=INKEYS:IF AS<>"S" AND AS 660 P=P+1 ce 1; 0.4 e 0.8 para o vértice 2; 0.6 e 0
<>"N" THEN 370 ELSE PRINT AS 670 NEXT
380 IF F=0 OR AS="N" THEN GOSUB 680 X (P) =TX: Y (P) =TY para o vértice 3. Esses dados definem a
400 690 J(CL)=J:CL=CL + l:GOStJB 500:C imagem de um triângulo sem base sobre
390 RETURN L=CL-1 J»J(Ct)
:
uma linha. Por fim, introduza o valor
400 INPUT"QUANTOS VÉRTICES NO G 700 NEXT J 5 para o nível de recursão (3 para o Ap-
ERADOR NAO INCLUINDO AS EXTREMI 710 N-N-l ple) e observe a geração da figura
DADES (0,0) E (1.0)";GN 720 RE TU RN fractal.
IIIIIIIIIIIHH llllllllll
A manipulação dos bits individuais de um
byte de memória por meio de comandos
do BASIC parece uma tarefa impossível.
Mas não é: aprenda os truques de
programação necessários para isso.

O byte é a unidade básica de memória bólicas dentro de um programa em BA- Para desligar:
usada em microcomputadores. Os diver- SIC; POKE nos dá acesso direto às
sos comandos da linguagem BASIC tra- locações absolutas da memória RAM. BS=CHRS CASC(BS) AND NOT 2TBI)
tam o byte como a unidade mínima de in- CHR$(1), por exemplo, define um
formação: os caracteres individuais de byte com o bit menos significativo igua-
uma cadeia alfanumérica, por exemplo, lado a I, e todos os outros igualados a
podem ser isolados e processados indivi- 0: 0000001 em binário. CHRS(2) gera
dualmentecom comandos do tipo MID$, um byte com os dois bits menos signifi- Para ligar:
LEFT$, KM, HIV LEFTSS, CHRS, ASC cativos igualados a I: 0000001 1.
B$=CHRS(ASC(BS) OR 2"BÍ)
etc Cada caractere ocupa um byte. Os va- CHRS<3> define o byte 00000010 e as-
lores numéricos, por sua vez, em geral sim por diante. Com o auxílio de uma
ocupam dois ou mais bytes, dependen- tabela de correspondência entre núme- BS-CHRS {ASC (BS) AND NOT 2~BÍ)
do de sua precisão (sobre a armazenagem ros decimais de 0 a 255 e os binários
de números, veja o artigo da página 894). equivalentes, pode-se produzir qualquer Observe que, com exceção dos mi-
Usando os comandos VARPTR, PEEK padrão de bits ligados e desligados. cros da linha Sinclair, que não têm va-
e POKE, temos acesso individual aos Para converter o padrão de bits em riáveis inteiras, usamos a notação B%
bytes onde variáveis, vídeo, teclado etc. um número decimal, devemos conside- para indicar que esse valor deve ser in-
estão armazenados. rar cada bit como o índice de uma po- teiro. Isso ajuda a evitar erros de cál-
tência de 2 e somar o resultado. Supo- culo, caso B seja um bil real de preci-
nhamos um byte com os bits 0, 3 e 4 são simples.
Para tornar o bit B de um byte igual
a I usamos o operador lógico OR. Su-
,

Existe, porém, uma unidade de infor- 00001101 ponhamos que você queira igualar a 1
mação menor que o byte. Essa unidade o bit número 7 (o mais significativo) de
è o bit (binary digit, ou dígito binário, um byte igual a 0000101 1. Teremos, en-
O número decimal correspondente é:
em que corresponde aos dígitos
inglês), tão, a operação, em decimal:
0 e que todo computador digital usa
I
2* + 23 + 2 o m 16 + 8 + 1 = 25 7
como base de representação numérica. 25 OR 2 = 25 OR 128
Cada byte tem oito bits, numerados de Eis algumas expressões úteis para li-
0 (o bit menos significativo) a 7 (o bit gar ou desligar só o bit B de um byte ar- o que, em binário, dá:
mais significativo). mazenado em um caractere BS:
Muitas vezes, surge a necessidade de
manipular diretamente os bits da memó-
ria. Para isso, convém utilizar uma ro-
lina em linguagem de máquina, que tem Para ligar:
eomandos específicos para o acesso e a Note que OR tem o efeito de operar
manipulação de bits individuais e é mais BS c CHRS(CODE{BS) OR 2**B) individualmente sobre cada par de bits
.

rápida que qualquer rotina em lingua- na mesma posição, nos operandos, de


Para desligar:
gem de alto nível. acordo com o seguinte esquema:
Entretanto, poucos sabem que é per- BS=CHR$(CODE(BS) AND NOT 2«*B)
feitamente possível realizar manipula- 0 OR 0 - 0

ções dtretas de bits com os comandos já


1 OR 0 = 1
0 OR 1 - 1
existentes no BASIC. Não é tão rápido
nem tão direto quanto em linguagem de Para ligar:
máquina, mas funciona bem. Para colocar 0 em um bil qualquer
Neste artigo, você aprenderá vários BS-CHRS(ASC(BS) OR 2**B) do byte BS, usamos a operação AND
truques que permitem a manipulação de NOT. De fato:
bits em quase todos os microcomputa- Para desligar:
dores. Os comandos do BASIC mais re- 0 AND NOT 0-0 AND 1=0
levantes para esse fim são o CHRS, o BS-CHRS(ASCtBS) AND NOT 2**B) 1 AND NOT 0-1 AND 1-1
ASC (ou CODE, no ZX-81) e os opera- 0 AND NOT 1-0 AND 0-0
1 AND NOT 1-1 AND 0-0
dores lógicos AND, NOT e OR.
Com as funções CHRS e POKE, po- pois a operação NOT
transforma um bit
demos criar bytes com uma determina- 0 em I e vice-versa, equivalendo, por-
Para ligar:
da configuração de bits. CHRS é tanto, a uma inversão do bit.
I utilizada no trabalho com variáveis sim- BS-CHRS (ASC (BS) OR 2TBI) Se você quisesse transformar o biná-
IIIIIIIIIHHH lllllllll
BITS E BYTES LEITURA DE UM BIT
MUDANDO UM BIT OPERADORES AND, OR e NOT
EM STRINGS
BITS BITS INDICADORES
EM NÚMEROS
E PROGRAMA DE DEMONSTRAÇÃO
COMBINAÇÃO DE BITS APLICAÇÕES

rio
bit
10001011
7 a 0, teria:
em 00001011, igualando o
MSJ El
Rt - ASC(BS) AND 2'Bt
COMBINAÇÃO DE BITS
que e a mesma coisa que:
É possível ligar uma combinação de Rt - It AND I~Bt
bits em uma variável literal ou inteira.
Para isso, usa-se uma expressão de so- operação AND isola apenas o va-
A
lor do bit mascarado pelo byte igual a
00001011 ma dos expoentes de 2 correspondentes
a cada bit a ser ligado, combinados por 2 B Por exemplo: qual é o valor do bit
.

Pode ser que, em vez de trabalhar operações OR. Para ligar os bits 3 e 5 número 6 do byte 0100101 1?
com bytes armazenados em caracteres li- do byte em TS, faça:
terais, você queira manipular os bits in-
dividuais de um número inteiro — que,
na maioria dos micros, é armazenado 01000000
em dois bytes contíguos, em um lotai de
dezesseis bits. Nesse caso, use as expres- TS - CHRSt<2**3) OR (2**5) que equivale a 89 64, cujo resul-AND
sões apresentadas a seguir. Mas lembre- tado é 64 em decimal.
sede que alguns computadores, como
o ZX-81, podem armazenar de forma
diferente um número inteiro.
QD
TS - CHRS{(Zt3) OR (2T5))
Como o número resultante dessa ope-
ração é maior do que 0, o resultado é
verdadeiro. Se fosse igual a 0, leríamos
então um resultado falso.
Para transformar o resultado R em
valor fazemos:
1 ,

Rt - ABS[Rt>(2 1 Bí - II)
Para ligar:

[t - I» OR 27Bt TS - CHR5((2-3) OR (2"5) Em nosso exemplo, isso daria:


ABS [64>63) = 1

Se R°7o fosse 0, teríamos:


It AND NOT 21Bt ABS (0>63) - 0
Da mesma forma que podemos ligar
ou desligar bits individuais em lingua- Eis aqui um programa para testar to-
gem BASIC, é bastante fácil examinar dos os bits de um byte de entrada:
o valor desses bits, através de uma ex-
Para ligar: pressão simples:

It - It OR 2"Bt
Para desligar:
110 PRINT "ENTRE UM NUMERO EN-
TRE 0 E 255)
II - It AND NOT 2"Bt 120 INPUT N
R - CODE (BS) AND 2**B
Essas expressões funcionam com um 130 LET NS-CHRSCN)
conjunto de dezesseis bits ou — seja, se
140
150
FOR 1-0 TO 7
PRINT "BIT "íli" - "j
quisermos ligar o bit 13 do byte \°ltt, fa-
160 LET C-ASCÍNS) AND 2**1
remos a operação: 170 IF C THEN PRINT "SIM"
R - ASC {BS> AND 2**B 180 IF NOT C THEN PRINT "NAO"
190 NEXT I

It
A
- It OS 9192*
expressão AND NOT desliga o
QQ
Rt - ASC IBS) AND 2TB*
B-ésimo bit de I^o. O programa para o ZX-81 é o mes-
Os micros ZX-81 e Spectrum não po- OU mo do Spectrum, com esta alteração:
dem utilizar essas expressões, já que não
têm variáveis inteiras. Todos os outros. Rt - II AND 2TBI 160 LET C=CODE(N3) AND 2**1
IIIIIIIIIIIHH lllllllll
DD 50 INPUT "NUMERO DE BITS NA CAD
EIA ";N
60 IF N>255 THEN 50
70 MS^STRINGSIINTtN/SJ+l.O)
110 PHINT "ENTRE UM NUMERO EN-
TRE 0 E 255)
Para ligar, desligar e testar um bit
120 INPUT Nt
130 NS=CHRS INI) qualquer do conjunto total de N, preci-
140 FOR 11=0 TO 7 saremos de algumas funções poderosas:
150 PRINT "BIT ";It;" - FNLS. FNDS e FNTS.
160 Ci'ASC(NSl AND 2 711 Essas funções são bastante comple-
170 IF C* THEN PRINT "SIM" xas, mas muito rápidas. Procure anali-
160 IF NOT Cl THEN PRINT "NAO" sá-las passo a passo para entender
Qual é a vantagem de empregar ca-
o que
190 NEXT H elas executam:
deias alfanuméricas, em vez de conjun-
tos numéricos, para armazenar grupos
de bits?
Como vimos no artigo Armazena-
gem tíe Programas Ipágina 1001), aca-
deia alfanumérica é armazenada na me-
O programa para o MSX e o Apple 20 DEF FNLS(B)-mS(TO INTÍb/8)) mória do microcomputador na forma de
é igual ao anterior, com a modificação: +CHRS(ASC(niS(INTÍb/8)+l)) OR 2 uma sequência contígua de bytes, ca-
**{b-INT<b/8)*S))+pS(INT(b/8)+2 da qual ocupado por um caractere O
TO) primeiro byte da seqúéocia sempre in-
160 Cl-ASC(NS) AND 2"IÍ 30 DEF FND$(b)-ioS(TO INT(b/8)) dica número de caracteres da variá-
+CHR5(ASC(n)$(INT(B/8)+l)) AND Esse número é "lido"
vel literal \string).
NOT 2**(b-INT(b/8)*8))+mS(INT por intermédio da função LEN, não ha-
b/B)+2 TO) vendo, no BASIC (como ocorre em ou
40 DEF FNT(b)-ABS((A5C(m$(INT tras liguagensl, um byte encarregado
Alé agora, vimos como manipular os (b/8)+l)) AND 2**{b-INT(b/8)* de indicar ao interpretador onde termi-
bits de um único byte ou conjunto de 8) )<>0)
dois bytes. Como uma cadeia alfanumé- A vantagem de empregar cadeias al-
rica contém até 255 caracteres, podemos
manipular um conjunto muito maior de
bits (um máximo de 8 x 255, ou 2040
bits). Esse conjunto é chamado de ca-
DD
20 DEF FNLS (B) =LEFT3 (MS INT (B/8
fanuméricas decorre rustamente desse
sistema de armazenagem usado pelo
interpretador BASIC.
A disposição sequencial dos bytes
,
na memória facilita enormemente a
deia de mapeamento de bits (bit- ) ) +CHR3 (ASC (MID3 (MS INT (B/8) +1
.
programação de rotinas de acesso aos
mapsrring), e tem muitas aplicações em 1)) OR 2T (B-INTÍB/8) *8) ) +MID$ (M bits individuais de uma longa cadeia.
jogos, bancos de dados e outros progra- S.INT(B/8)+2) Um string de por exemplo,
trinta bytes,
mas de carátcr profissional. 30 DEF FNDS (B) «LEFTS (MS INT (B/8
) +CHRS (ASC (MIDS (MS
,
equivale a uma cadeia ininterrupta de
Por exemplo, é possível armazenar ) INT (B/8) +1
.
240 bits, que podem ser lidos ou mo-
em uma cadeia desse tipo condições D) AND NOT 2T{B-INT(B/8)*8))+M dificados um a um. ou em grupos que
IDS (MS. INT (B/8) +2) se sobreponham aos limites entre
sim/não ou verdadeiro/falso. Se um bit 40 DEF FNT (B) "ABS (ASC (MIDS (MS
(
em determinada posição dessa cadeia es- bytes. Isso é muito mais difícil de ser
INT(B/8)+l)) AND 2 T (B-INT (B/8) feito quando a variável contém elemen-
tiver ligado, temos uma condição sim, aiioo) tos separados, como é o caso dos con-
ou verdadeira; se estiver desligado, uma
juntos numéricos.
condição não. ou falsa. Por fim, acrescentamos o restante do
Ocomprimento da cadeia depende- programa de demonstração das funções
rá do número de condições tflag bits ou de manipulação e consulta de bits:
bits indicadores) que queremos incluir. No desenvolvimento de jogos, por
Se o número de condições for N, o nú- exemplo, a possibilidade de manipular
mero de bytes da cadeia será: iDDWj bits amplia bastante as alternativas do
programador. Entre outras coisas, vo-
L = INT (N/B) +1
200 PRINT " PROGRAMA DE DEM0NSTR cê poderá modificar os gráficos impres-
Para inicializar um mapa MS, zera- ACAO DE MAPAS DE BITS" sos no video alterando diretamente as
mos todos os bits: 210 INPUT "(DIGA (D) ESLIGA (T) locuções de memória.
ESTA (F)IM ";OP$ Os recursos dc programação aqui
230 IF OPS-"F" THEN STOP
examinados também serão úteis quan-
240 INPUT "NUMERO DO BIT {0 A "
do for necessário comprimir texto, em
|M| ") " ;B
260 IF B>N THEN GOTO 240 função de limilaçòes da memória. Na sé-
45 CLS 270 IF 0PS-"L" THEN M$-FNLS (B) rie de artigos sobre o assunto, que ini-
50 INPUT "NUMERO DE BITS NA CAD 280 IF OPS-*D" THEN MS "FNDS (B) ciamos na página 1332, apresentamos
EIA *;n 290 IF OPS-"T" THEN PRINT "BIT diversos algoritmos interessantes para a
60 IF n>255 THEN GOTO 50 ";B," • " FNT (B)
; redução do espaço ocupado por um tex-
70 FOR 1-1
TO INT(n/8)+l 310 GOTO 210
80 LET mS-mS+CHRS<0) to em até 50%. A maioria desses algo-
90 NEXT i ritmos procura colocar dois ou mais có-
digos de caracteres em um único byte.

DD^i Você não


trar aplicações
em encon-
terá dificuldade
para os truques explica-
Como exercício, tente implementar o su-
percompressor baseado na estatística dc
pares dc letras em um texto (veja os ar-
dos neste artigo. tigos mencionados).
IHIIIIIIIIIHUHMp"^ ,
iiiiiiiii
PROCESSADORES
DE TEXTOS

mm
<Pa\iXtdiU/

£<y vígréutr V'''


«V PROCESSADOR !
.UMfctOCeSSADOR-'
*M/NHA%mPOR
UM PROCESSADOR /afcL*

Processamento de textos é uma solução Em geral, cometemos erros ou, mais


corriqueiramente, mudamos de ideia so-
quase mágica, que a
bre o que desejamos transmitir. Como
tecnologia deu a muitos dos problemas se sabe, a correção e modificação de tex-
tos já escritos toma tempo, e o resulta-
que têm atribulado os escritores,
do final acaba todo rabiscado. Pior, se
desde a invenção da escrita. houver muitas alterações, é preciso re-
bater ou reescrever todo o documento, O processamento de textos por com-
e novos erros podem aparecer. Quem já putador apresenta a vantagem imedia-
É quase impossível produzir um tex- experimentou escrever conhece bem es- ta de facilitar a execução de alterações,
to perfeito logo na primeira tentativa. se torturante processo. cornando desnecessária a cansativa ta- I
illllllllHHHHHHHHHHIIIIIIIIIIII
refade "passar a limpo" o trabalho fei- queiramos fazer uma modificação em
to, Isso resulta em tremenda economia certo parágrafo. Não nos lembramos
de tempo, o que é de utilidade mesmo onde ele está: sabemos apenas que con- Os processadores de texto mais po-
para aqueles que não escrevem por ne- tém as palavras espiral inflacionária. A tentes dispõem de uma série de recursos
cessidade ou profissão. função de busca nos ajudará a descobri- adicionais, que permitem executar o que
Já publicamos em INPUT, no arti- las rapidamente. chamamos de formatação do texto. A
go da página 576, um programa que co- A função de substituição è mais po- formatação tem por objetivo produzir
loca à disposição do usuário os recur- derosa ainda. Ela efetua a busca de uma um texto final arranjado segundo certo
sos básicos de edição de texto. Se você sequência determinada de caracteres por padrão estético, independente da manei-
tem interesse em adquirir um processa- todo o texto, substituindo-a sempre que
dor mais potente, convém conhecer mais a encontrar por uma segunda sequên-
detalhadamente suas possibilidades. cia. Isso é útil quando grafamos incor-
retamente uma palavra qualquer em vá-
rios pontos do texto, ou quando
queremos trocar uma expressão
empregada com frequência por
n texto significa simples-
outra de significado mais pre-
mente digitá-lo no teclado de um com-
putador e armazená-lo na memória.
ciso.Com a função de subs-
tituição, podemos também
Portanto, usando um software adequa-
recorrer a abreviaturas c
do, você poderá fazer modificações e
códigos na digitação d<
correçôes com rapidez e eficiência, e em
seguida proceder à impressão. Se o tex-
um texto. Por exemplo,
se vamos escrever diver-
to for armazenado em fita ou disquete,
sas vezes programa
será possível carregá-lo novamente,
amistoso para o usuá-
sempre que necessário, para outras mo-
rio no texto, bastará
dificações.
Como vimos no artigo já menciona- digitar um asterisco,
ou qualquer outro
do, com um programa elementar de pro-
símbolo, em cada
cessamento de texto, o usuário efetua as
alterações "passeando" um cursor (ge-
um dos pontos em
que a frase deve apa-
ralmente um pequeno retângulo ilumi-
recer, usando poste-
nado) sobre a tela, até a parte a ser mo-
riormente a funçãode
dificada. Escreve então sobre o texto
substituição.
que ali se encontra. Este é apagado da
memória e substituído pelo novo texto HABILIDADES ESPECIAIS
— sem rabiscos e sem complicações.
Inserir letras, palavras ou frases no
meio de um parágrafo também é uma Com o processador de
operação simples. Para realizá-la, recor- texto, não é preciso ser um
re-se à função de inserção dos proces- datílógrafo habilidoso para
sadores de texto. Por meio dela, podem- conseguir bons resultados.
se introduzir alguns espaços em bran- Mesmo que você só consiga da-
co e depois escrever sobre eles. O pro- tilografar com dois dedos, observa-
cesso mais comum, porém, é simples- rá um aumento considerável na sua ve-
mente escrever o que se quer inserir, dei- locidade de trabalho, pois poderá avan-
xando por conta do programa rearran- çar "a todo vapor", sem se preocupar
jar automaticamente o restante do tex- com erros ou efeitos estéticos.
to, para dar lugar ao novo. Se sua ortografia deixa a desejar,
Estes são apenas dois dos numerosos procure utilizar um processador de tex-
recursos disponíveis em um processador to dotado de corretor ortográfico (spell-
de texto. A potência e sofisticação des- checker, em inglês). Ele percorre o seu
se software ficam evidentes quando se texto "olhando" cada palavra, e com-
consideram os diversos "truques eletrô- parando-a com um dicionário interno
nicos" de que é capaz para auxiliar padrão (armazenado em disco). Pala-
quem está escrevendo. vras não reconhecidas —
por terem er-
As funções de inserção e modificação ro ortográfico, ou, simplesmente, por
de textos são chamadas recursos de edi- não constarem do dicionário —
são as-
ção. Entre estes incluem-se também a sinaladas. Neste ponto, dependendo do
busca e a substituição de caracteres no programa, você tem três opções: deixar
texto. A função de busca permite a lo- a palavra indicada como está, corrigi-
calização automática de uma sequência la manualmente, ou permitir que o pro-
específica de caracteres — uma palavra, grama a substitua pela versão correta
ou mesmo uma frase — em uma oarle (muitos programas mostram uma lista
ou em todo o texto. Suponhamos que, das palavras que poderiam substituir a
I tendo digitado um texto muito longo. versão assinalada no texto).
uiHiimmiwi—iiiiiiim
ra como foi digitado. Os recursos de for- linha, conforme as regras do idioma. Nessa situação, o segundo tipo de
matação usualmente permitem especifi- Quanto à formatação, existem três ti- processador de texto transporta a pala-
car o espaçamento entre linhas, o nume pos de processadores de texto. Todos vra inteira para a linha de baixo (méto-
ro de linhas por página, o número de to- eles seencarregam das mudanças de li- do denominado word-wrap, em inglês).
ques por linha, o tamanho da folha nha, permitindo ao usuário datilografar A leitura no vídeo torna-se bem mais fá-
de vai ser impresso o texto, a numera- o texto de um parágrafo continuamen- cil, mas a margem esquerda do texto fi-
ção das páginas, cabeçalho etc. A fun- te. Em geral, a tecla < ENTER > pre- ca irregular, o que no Brasil recebe o no-
ção mais importante da formatação, po cisa ser pressionada apenas ao final de me de margem americana.
rém (e a mais difícil de se realizar ma- um parágrafo. O terceiro tipo de processador ajus-
nualmente), é a justificação das margens No primeiro tipo de processador de ta a margem esquerda na tela, de modo
— ou seja, a definição do alinhamento texto, quando uma palavra que está sen- a proporcionar um alinhamento. Como
lateral das palavras. A seção de forma- do datilografada não cabe na linha, o já mencionamos, alguns sistemas che-
tação dos processadores de texto reali- cursor passa para a linha seguinte do ví- gam a hifenar automaticamente as pa-
za essa tarefa automaticamente. Muitos deo, sem se preocupar em dividi-la se- lavras que se dividem ao final da linha,
deles chegam à sofisticação de separar gundo as regras gramaticais. O
texto fi- o que melhora consideravelmente a apa-
as sílabas das palavras, ao final de uma ca difícil de ser lido na tela. rência do texto. Esse processador é de-
nominado W
YSWYG (do inglês What
You See What You Gel). Com ele, o
usuário tem oportunidade de acompa-
nhar na tela — à medida que vai escre-
vendo — a produção do texto final.
O tamanho do texto, evidentemente,
não é limitado ao tamanho da tela. A
maioria dos processadores de texto per-
mite "rolar" um texto para cima ou pa-
ra baixo, ou, ainda, para a esquerda ou
para a direita, de modo que a tela fun-
cione como uma "janela" que mostra
parte do texto. Nos micros pessoais, a
janela tem, em geral, vinte linhas por
quarenta colunas.

Os processadores de texto oferecem


diversas opções de realce de seções do
texto, como negrito, texto inverso (ca-
racteres brancos sobre fundo ne-
gro, na impressão), letras de ta-
manhos ou formatos diferentes
(itálico, dupla largura etc). Es-
ses realces podem aparecer na te-
la e na impressora, ou apenas na
impressora. Nesse caso, caracte-
res especiais de demarcação as-
sinalam, na tela, o lugar onde se
inicia e termina uma função de
realce.

COMANDOS OE CONTROLE

Os programas maissimples de
processamento são os editores de
texto, com as funções básicas de in-
serção e modificação. Um
editor se
transforma em um processador de pa-
lavras com o acréscimo de diversas ou-
tras funções, que podem ser utilizadas
pelo usuário no momento em que neces-
sitar. A
maneira de ativar essas funções
varia de programa para programa, e é
um elemento importante na ergonomia
(facilidade de uso) do processador.
As diretivas de controle dos recursos I
do programa são entradas pelo teclado,
num processo tão fácil quanto o da en-
trada de texto. Os comandos funcionais
consistem normalmente de teclas espe-
ciais,ou sequências de teclas. Entre as
mais comuns, incluem-se as de retroces-
so, as de controle dos cursores, <EN-
TER> etc. Bons comandos de edição
são essenciais para facilitar o uso
do programa. Em alguns casos,
as sequências de comando são
muito complicadas e difíceis

torna o programa pou-


co conveniente para o
usuário ocasional.
Além desses, o
programa possui
comandos de
controle de for-
matação cujo
efeito só se ob-
serva, em geral,
no momento da
impressão. Nos
programas
WYSWYG, eles
são "embutidos"
no texto, sob a
forma de caracteres
invisíveis de contro-
le O video responde
a esses comandos
de maneira bem se-
melhante ao que uma
impressora responderia;
isso possibilita que o usuá-
tenha uma visão
rio prévia
de como o documento ficará
quando pronto.
Nos demais programas, os co-
mandos de formatação são co-
locados explicitamente no texto,
precedidos por sinais especiais.
Por exemplo, um comando como:

ntroduzido no meio de um texto, indi-


processador que, naquele local,
a margem esquerda deve ser modifica-
da para vinte colunas.

Outro recurso de programas


mais sofisticados de processa-
mento de texto é a mala direta
— a impressão de cartas múlti-
plas, endereçadas de forma per-
sonalizada a várias pessoas (ve-
o artigo da página 17).
Uma das maneiras mais simples de
fazer isso consiste em escrever uma car-
ta padronizada, com o auxilio do pro-
IHHIIIIIIIIIII
cessador de texto, e depois armazená-la o TRS^SO, o TRS-Color II e o MSX — de, ele assegura uma taxa de erros baixa.
em fita ou disco, são mais adequados quanto a esse aspec- O emprego de memória virtual e en-
Para enviar essa carta a diferentes to. Há, porém, uma grande variação de cadeamento de arquivos (seções separa-
destinatários, bastará carregar o texto qualidade entre os diferentes modelos. das de um texto, que podem ser reuni-
da mesma na memória e, utilizando as Deve-se levar em conta, por exemplo, das em qualquer ordem) é necessário
funções de edição, inserir nome, ende- que só os micros da linha MSX incluem quando o texto é limitado apenas pela
reço e outros dados nos pontos apro- a acentuação original da língua portu- capacidade da memória auxiliar. Po-
priados, imprimindo-a a seguir. guesa, por terem adotado o padrão rém, quando os textos são muito gran-
Uma alternativa mais elaborada é o BRASCI1 (ASCII brasileiro). des, essa solução dificulta o trabalho e
uso de um outro arquivo de textos —
de- Outro elemento importante na esco- impede a utilização de funções globais
nominado máscara —
contendo, por lha do hardware para processamento de de edição (busca, substituição etc.)
exemplo, o nome e o endereço de todas texto é o vídeo. Nos computadores do-
as pessoas para as quais se quer man- mésticos mais comuns, este em geral se
dar uma carta. No texto da carta, por limita a 32 ou 40 colunas (excepcional-
sua vez, íntroduzem-se caracteres espe- mente 64, como nos micros TRS-80).
ciais, que assinalam onde devem entrar Esse formato possibilita, entre outras Em
artigos anteriores (páginas 521 e
os dados da máscara. Ao se fazer a im- coisas, o uso de televisores como saída 648), examinamos os diversos tipos de
pressão, o programa produzirá uma car- de vídeo. Mas é restritivo para um tra- impressora, suas características e as van-
ta para cada destinatário, automatica- tagens que cada modelo oferece em re-
balho mais intenso com processadores
mente, colocando os dados nos pontos lação ao processamento de texto. Por is-
de texto, principalmente os do tipo
so, retomaremos aqui apenas os aspec-
certos do texto. WYSWYG, que imprimem uma folha
Um sistema de produção de cartas de sessenta a setenta toques. tos mais importantes.
múltiplas tem variadas aplicações tanto Em alguns micros, como o MSX e o A impressora desempenha um papel
domésticas (o envio de cartões de Natal Apple, é possível ampliar o formato de fundamental na qualidade do texto im-
personalizados, por exemplo), quanto vídeo com software ou hardware de ex- presso (o produto final). Para trabalhos
profissionais (propaganda de umprodu- pansão. Nesse caso, porém, não se re- que não requerem uma apresentação
to ou serviço, cartas circulares, corres- comenda utilizar aparelhos de TV, pois perfeita, ou para a obtenção de cópias
pondências para orçamentos e assim por a imagem perde a nitidez. Para quem de "rascunho", uma impressora matri-
diante). cial é perfeitamente adequada. Algumas
pretende trabalhar por muito tempo
com um processador, a nitidez de texto delas podem produzir impressões em
ESCOLHA DO HARDWARE e a estabilidade no vídeo são fundamen- qualidade caria (dupla densidade de im-
tais —
e essas qualidades só são obtidas
pressão), com uma aparência bastante
semelhante à de um texto datilografa-
Teoricamente, qualquer microcom- com monitores
profissionais (veja o ar-
do. Se queremos conseguir o máximo de
putador pode ser usado para processa- tigo da página 851).
qualidade, porém, devemos usar uma
mento de texto, desde que haja um pro- impressora do tipo margarida.
grama adequado para ele (na série de ar- Seja qual for o seu objetivo, não se
tigos iniciada na página 576, apresenta- esqueça de verificar se a impressora é
mos um programa completo de proces- O tamanho da memória disponível compatível com o software de proces-
samento de texto para a maioria das li- também deve ser considerado na selecão samento, sobretudo quanto à capacida-
nhas cobertas por INPUT). É óbvio, po- de um bom hardware para processamen- de para realce de texto, mudança de fon-
rém, que não tem sentido fazer proces- to de texto. A memória RAM não che- tes, acentuação etc.
samento de texto se não se conta com ga a ser um impedimento, dependendo
uma impressora. Além disso, convém do software escolhido. Alguns proces-
lembrar que, na prática, existem algu- sadores só operam com o texto inteira- QUEM PRECISA DE UM PROCESSADOR?
mas limitações impostas pelo hardware. mente contido na memória. Se ele for
Para começar, há a questão do tecla- demasiado grande, é preciso dividi-lo O processamento de textos por com-
do. A maioria dos micros compatíveis em seções menores, que são gravadas em putador oferece enormes vantagens pa-
com o ZX-81, por exemplo, possui um fita ou vídeo, o que costuma ser bastan- ra escritores, jornalistas, professores,
teclado inadequado para datilografia rá- te cansativo. Uma maior capacidade da cientistas ou quaisquer outros profissio-
pida de textos, não dispondo de letras RAM ajuda muilo, portanto. nais cujas funções incluam a elaboração
minúsculas, nem de sinais de acentua- Os processadores mais avançados tra- de documentos, relatórios e cartas. Se
ção. Portanto, ao processar textos com balham à base de paginação, ou memó- você está em uma dessas categorias e
essas máquinas, não se pode esperar um ria virtual —
isto é, gravam e lêem es- ainda não tem um processador, franca-
resultado de bom nível. sas seções do texto em disco, periodica- mente, não sabemos como pôde passar
A linha Spectrum original (TK-90X, mente. São, contudo, bem mais exigen- sem ele, até agora!
no Brasil) também tem um teclado so- tesem termos de hardware. Se você é estudante, provavelmente
frível, embora ofereça a alternativa de A
memória auxiliar é outro item im- seu grau de utilização não é tão inten-
usar letras minúsculas e algum tipo de portante. Para quem utiliza pouco o so, mas o computador ajuda muito na
acentuação. O modelo TK-95 e os tecla- processador e lida apenas com textos pe- execução de trabalhos escolares.
dos semi profissionais acessórios, que quenos (cartas, digamos), um gravador De qualquer modo, mesmo que você
podem ser comprados para o Spectrum, cassete é perfeitamente aceitável para ar- não se enquadre em nenhum dos casos
melhoram bastante a situação. mazenamento de textos. Para uso mais mencionados, um computador é bem
Os computadores que possuem tecla- intenso, entretanto, é praticamente in- vantajoso em relação a uma máquina de
do semelhante ao de uma máquina de dispensável o acionador de disquetes. escrever, embora o preço não seja mui-
escrever —como o Apple, o TK-2000, Além de maior capacidade e velocida- to diferente (se a máquina for elétrica). I
IIIIUUI 32 ***** 32

Desenhe os móveis que irão compor o

DESENHO ambiente a ser planejado. Depois que


todas as peças se encaixarem em seus
respectivos lugares, restará salvar

o projeto em fita ou disco.

Este é o segundo e último artigo sobre utilizaremos o mesmo processo da op-


o projeto arquitetõnico computadoriza- ção 1 (desenho do ambiente), com a di-
do. Aqui eslão os complementos das lis- ferença de que agora o objelo não apa-
tagens para cada um dos micros, acres- recerá na tela até que sejam fornecidas
cidas de instruções detalhadas referen- todas as suas dimensões. Indagados so-
tes às três primeiras opções do menu. As bre o número de lados da peça (1 a 15)
outras quatro serão idênticas para as três e sobre seu código, daremos um nome
versões. de dois dígitos à mobília, de modo a po-
dermos identificá-la mais tarde.
A opção 4 grava tanto a tela como
os dados correspondentes às peças da
As opções são as seguintes: mobília. Usaremos depois a opção 5 pa-
- opção 1, desenha o ambiente; ra carregar na memória um projeto gra-
• opção 2. posiciona a mobília; vado anteriormente. A opção 6 de —
- opção 3. cria mobília própria; impressão —
funcionará somente com
• opção 4, grava o projeto; a impressora conectada.
- opção 5, carrega;
7010 INPUT "DIGITE DIREÇÃO (C.
- opção 6, imprime;
B.E.D) ?";D3
- opção 7, sai do programa. 7020 INPUT "DIGITE DISTANCIA ?"
A primeira informação que devemos ;D: RETURN
fornecer ao programa é a maior medi- 7040 LET 2-CODE INKEYS FOR K=l :

da (em metros) do ambiente considera- TO t.EN KS: IF CODE (KS(K))-Z T


do. Digite os dados e tecle < ENTER >
HEN LET K=LEN KS GOTO 7060 -

7050 NEXT K: GOTO 7040


Depois disso, aparecerá um segundo me-
7060 NEXT K: RETURN
nu contendo as seguintes opções: 8000 DIM SUO): LET NF = 0: LET F
<ESPAÇO> desenha uma linha;
S-"000": LET MAX-5: LET R-0: LE
< J> desenha uma janela; T SC=175/MAX: GOSUB 6060
<P> desenha uma porta; 8010 DIM 0(10,30): DIM 03(10,2)
<B> movimenta sem desenhar; 8020 FOR N=l TO 5: FOR K=l TO 8
<S> volta aomenu principal. : READ 0{N,K>: NEXT K: NEXT N
Ao selecionarmos qualquer opção, à 8030 FOR N=l TO 10: READ 0$ <N)
excecão da < S > , seremos perguntados NEXT N
sobre a direção e o comprimento da re- 8032 FOR N=UBR "A" TO USR "A"+7
: READ A: POKE N.A: NEXT N
la a ser feita. As questões serão repeti-
8035 FOR N=l TO ]0: READ S (N)
-

das, de forma a permitir que tracemos NEXT N


linhas na diagonal, por exemplo, dizen- 8040 RETURN
do o quanto para cima ou para a direi- 8090 DATA .5, 0,0,-. 5. -.5,0.0. .5
ta queremos a reta. Se desejarmos traçá- 8100 DATA .75, 0.0, -.«.,-.75.0,0,
la simplesmente na horizontal ou na ver- . 5
tical, bastará que forneçamos valores SUO DATA .5. 0,0, -.75. -.5, 0.0, ,

nulos. Repetiremos o processo até con- 75


cluir o desenho do ambiente e, em se-
8120 DATA .5. 0,0, -.5. -.5. 0,0. .5
8130 DATA .5, 0,0, -.5, -.5, 0.0, .5
guida, teclaremos <S> para retornar
8150 DATA -AR"."F0","LL"."PI"."
ao menu principal. Com um pouco de GE". "XX". "XX", "XX". "XX", "XX"
prática, desenvolveremos nossos proje- 8160 DATA 16,32,64.255,64,32.16
tos em questão de minutos. .0
Na opção 2, usaremos as teclas 6 e 8170 DATA 4.4,4,4,4,0.0,0,0.0
7 para selecionar o móvel a ser posicio-
nado. Teclando < S > a peça aparece-
,

rá no centro da tela. Poderemos movi-


mentá-la para cima, para baixo, para a Ao rodarmos o programa, veremos
direita e para a esquerda acionando as um menu com as seguintes opções:
teclas 5, 6, 7 e 8. Para girar o móvel no - opção 1, desenha o ambiente;
sentido horário, pressionaremos a tecla - opção 2, posiciona a mobília;
H; no sentido inverso, A. - opção 3, cria novas peças;
• Na criação da mobília, na opção 3, - opção 4, grava o projeto;
M APLICAÇÕES 32

COMPLETE O DESENHO
DO AMBIENTE
CRIE NOVAS PEÇAS PA RA GIRE SEUS MÓVEIS
SUA MOBÍLIA APAGUE E REDESENHE
GRAVE O PROJETO PROGRAMA TERMINADO
32 APUCAÇÕCS 32 llllllll
miiiin
- opção 5, carrega; camente, teremos que fornecer ao mi- últimas, já que as iniciais são automati-
- opção imprime;
6, cro duas informações, ou seja, o quan- camente definidas (mas podem ser alte-
- opção7, sai do programa. to ela deverá se deslocar para cima ou radas) no programa: O-pia, 1-fogão,
Se escolhermos a opção 1seremos
, para baixo e o quanto deverá ir para a 2-mesa, 3-geladeira e 4-armário. Para
perguntados sobre a maior medida do direita ou a esquerda. A repetição das apagar um móvel, posicione o cursor no
ambiente. Com essa informação, o mi- questões nos permite, portanto, montar vértice que o gerou, tecle D e selecione
cro colocará o desenho em escala, de coordenadas bidirecionais para a nossa o número desse móvel. Deveremos nos
modo que ele caiba na tela. reta e traçá-la na diagonal. certificar de que o cursor esteja exata-
Tecle a barra.de espaço para iniciar Para obter retas horizontais ou ver- mente no vértice que o gerou; caso con-
o desenho do ambiente. Há outras op- ticais (unidirecionais), bastará teclar trário, a peça não será totalmente eli-
ções dentro da opção 1, a saber: < ENTER > quando a pergunta for re-
,
minada.
<ESPAÇO> para desenhar; petida. Tecle <C>
para apagar a tela Se quisermos girar um móvel para
<B> para mover sem desenhar; e <F> para voltar ao menu principal. adequá-lo a um canto qualquer do am-
<W> para desenhar janelas; A opção 2 mantém na tela o desenho biente, basta acionar a tecla R seguido
<0> para desenhar portas; do ambiente executado na primeira op- do ângulo de giro do móvel —
expresso
<C> para limpar a tela; ção e acrescenta um cursor em forma de em graus. Todos os objetos serão dese-
<F> para voltar ao menu inicial. cruz que será movimentado ponto a nhados com essa angulação até que se
Ao escolher uma das opções (à exce- ponto através das teclas das setas. Para tecle novamente R; só que desta vez se-
ção da < C > e da < F > ), o usuário se- movê-lo mais rapidamente, tecle guido de 0. A opção < F> possibilita
rá indagado sobre a direção e o compri- < SHIFT > + seta, até alcançar a posi- retornar ao meu principal.
mento da reta desejada. Essas pergun- ção desejada — aquela em que o móvel A opção 3 permite definir novas pe-
tas serão feitas várias vezes, a fim de será colocado. Em
seguida, acione a te- ças ou modificar as cinco já existentes.
oferecer dados ao computador. cla P. Feito isso, escolha a peça a ser po- As medidas, fornecidas em centímetros,
Suponhamos que queremos traçar sicionada. As peças são numeradas de não deverão ultrapassar os 200 cm. O
uma reta inclinada, por exemplo. Basi- 0 a 9; caberá ao usuário criar as cinco primeiro passo consiste em escolher um

Hm 'J

i
número de 0 a 9 para armazenagem da 1370 COLOR 0:G0SUB 340
peça que, em seguida, será desenhada 1380 I9-INKEY$:IF IS<"0" OR I$>
pelo mesmo processo utilizado na opção "9" THEN 1380 1690 X-Xl Y"Y1 RETURN
: :

I (desenho do ambiente). Tecle <C> 1390 COLOR 1:G0SUB 340 1700 CLS:LINE INPUT"NOME DO ARQ
para recomeçar o desenho e < F > para 1400 N-VAL(IS) UIVO:-.FS
1410 COLOR 0,1:AS-OS(N) :GOSUB 1 1710 SG-PEEK(188)»256
retornar ao menu inicial.
540 1720 CLS:PRINT-SALVANDO:";FS
A opção 4 armazena nosso projeto 1420 GOTO 1160 1730 CSAUEM FS SG SG+6143 35252
. , ,

(que deve receber um nome aqui) em fi- 1430 SOUND 200, 1 1740 GOTO 90
ta ou disco. A opção 5 carrega na me- 1440 COLOR 0:GOSUB 340 1750 CLS:LINE INPUT "NOME DO AR
mória do micro um projeto previamen- 1450 IS-INKEYS--IF IS<"0" OR IS> QUIUO:";FS
te gravado em fita ou disco. "9" THEN 1450 1760 PRINT"ACIONE O GRAVADOR E
A opção de impressão está incomple- 1460 COLOR 1:G0SUB 340 ESPERE"
ta, pois necessita de uma rotina que des- 1470 N-VAL(IS) 17 70 CLOADM F3
peje o conteúdo da tela na impressora. 1480 COLOR 1.1:AS-0S(N) :GOSUB 1 1780 GOTO 90
540 1790 REM ***********•*•«•*****
Retomaremos este assunto em um pró-
1490 GOTO 1160 1791 REM * *
ximo artigo, que nos habilitará a elabo- 1500 CLS:PRINT'ANGULO DE ROTACA 1792 REM ROTINA PARA *
rar tal rotina. 1793 REM * DESPEJAR A TELA
O (0-360) ':INPUT RT *
1510 IF RT<0 OR RT>360 THEN 150 1794 REM * NA IMPRESSORA *
J210 0X-X:0Y-Y 0 1795 REM * *
1220 IF IS-CHR$(8) AND X>0 THEN 1520 RT-(RT/180)*3.141 1796 REM *******•«•*«****«««•**
X-X-l 1530 SCREEN 1,0: GOTO 1160 1797 GOTO 90
1230 IF IS-CHBS (9) AND X<185 TH 1540 IF A$-"" THEN RETURN
EN X-X+l 1550 P=1:X1-X:Y1=Y
1240 IF IS-CHBS £94) AND Y>0 THE 1560 BS-MIDS(AS,P,1)
N Y-Y-l 1570 DS-MIDS(A$,P+1,1)
1250 IF IS-CHRS(IO) AND Y<185 T 1580 D-VAL(MIDS(A$.P+2.INSTR(P, Ao rodarmos o programa, veremos
HEN Y-Y+l AS.";")-(P+2))) na tela um menu com sete opções:
1260 IF IS-CHRSI21) AND X>7 THE 1590 P-INSTRÍP.AS,";")-»-! - opção I, desenha o ambiente;
N X-X-8 1600 D-D/100:D2-FNA(D) :OX-X:OY-
1270 IF IS-CHRS193) AND X<177 T Y
- opção 2, posiciona a mobília;
HEN X-X+8 1610 IF D$-"D" THEN XA-D2"COS (R - opção 3, cria novas peças;
1280 IF IS-CHRS<95) AND Y>7 THE T) :YA— D2*SIN(RT) - opção 4, grava o projeto;
N Y-Y-8 1620 IF D$-"E" THEN XA— D2"COS (
- opção 5, carrega;
1290 IF IS-CHRSÍ91) AND Y<177 T RT) :YA-D2*SIN(RT) - opção 6, imprime;
HEN Y-Y+8 1630 IF DS-"B" THEN XA-D2*SIN(R - opção 7, sai do programa.
1300 PUT(OX-3.0Y-3)-(OX+3,OY+3) T) :YA-D2*C0S(RT) Devemos primeiro escolher entre as
.S.PSET —
1640 IF DS-"C" THEN XA D2*SIN( opções 1 , 3 ou 5 Ao decidirmos pela 1
RT) :YA— D2*COS(RT)
.

1310 IF IS="P" THEN 1360


seremos perguntados sobre a maior me-
1320 IF I$=-D- THEN 1430 1650 XA-INT<XA+.5) YA-INT (YA+
: .
dida (em metros) do ambiente, informa-
1330 IF IS-"R" THEN 1500 )
1340 IF IS= - F" THEN FOR K-l TO 1660 X-X+XA.Y-Y+YA ção que permitirá ao micro colocar o de-
4:PC0PY K TO K+4 NEXT GOTO 90
: : 1670 IF BS-"D" THEN LINE(OX.OY) senho em uma escala que o faça caber
1350 GOTO 1160 -(X,Y) ,PSET na tela. Tecle a barra de espaço para ini-
1360 SOUND 190.1 1680 IF P<LEN<A$) THEN 1560 ciar o desenho do ambiente.
Há outras opções dentro da opção I O primeiro passo consiste em escolher 1530 A=USR2 (0) :A*USR1 (0) :GOTO 1

< ESPAÇO > para desenhar; um número de 0 a 9 para armazenagem 160


<B> para mover sem desenhar; da peça que, em seguida, será desenha- 1540 IF AS-"" THEN HETURN
1550 P-1:X1-X:Y1-Y
<W> para desenhar janelas; da pelo mesmo processo utilizado na op-
1560 BS=MIDS(AS.P.l)
<0> para desenhar portas; ção 1 (desenho do ambiente). Tecle
1570 DS-MTDS(A3.P+1.1)
<C> para limpar a tela; <C> para recomeçar o desenho, e 1580 D-VAL(MIDS(AS,P+2.INSTR(P.
<F> para voltar ao menu inicial. <F> para retornar ao menu inicial. AS.";")-<P+2)>>
Ao escolher uma das opções (à exce- A opção 4 armazena nosso projeto 1590 P-INSTR(P,A$.";")+1
ção da < C > e da < F > ), o usuário se- (que aqui deve receber um nome) em fi- 1600 D-D/100:D2-FNA(D> :OX«X:OY-
rá perguntado sobre a direção e o com- ta. A opção 5 carrega na memória do Y
primento da reta desejada. Essas per- micro um projeto gravado em fita. Es- 1610 IF DS-"D" THEN XA-D2*COS (R
guntas serão feitas várias vezes a fim de tas duas opções podem ser alteradas pa- T):YA— D2*SIN(RT)
oferecer dados ao computador. ra trabalhar com disco, bastando fazer 1620 IF D3-"E" THEN XA--D2*COS(
Suponhamos que queremos traçar as seguintes modificações: Troque o RT) :YA=D2"SIN(RT)
"CAS:" que vem logo após os coman-
1630 IF DS-"B" THEN XA-D2*SIN(R
uma reta inclinada,por exemplo. Basi-
T) :YA-D2*COS(RT)
camente, teremos que fornecer ao mi- dos BSAVE e BLOAD por "A:" (linhas
1640 IF D$-"C" THEN XA— D2*SIN<
cro duas informações, ou seja, o quan- 1720 e 1770), respectivamente. RT):YA— D2*COS(RT)
to ela deverá se deslocar para cima ou A opção de impressão está incomple- 1650 XA-INTÍXA+.5) YA-INT YA+ : ( .

para baixo e o quanto deverá ir para a ta, pois necessita de uma rolina que des- )

direita ou a esquerda. A repetição das peje o conteúdo da tela na impressora. 1660 X-X+XA:Y-Y+YA
questões permite, portanto, montar Retomaremos esse assunto em um pró- 1670 IFBS--D" THENLINE(OX.OY)-<
coordenadas bidirecionais para nossa re- ximo artigo, que nos habilitará a elabo- X Y) CL , ,

na diagonal. rar tal rotina.


1675 COLOR 1
ta e traçá-la
1680 IF P<LEN(A$> THEN 1560
Para desenhar retas horizontais ou 1210 0X-X:OY-Y 1690 X-X1:Y«Y1:RETURN
verticais (unidirecionais), basta teclar 1220 IF IS-CHRSI29) AND X>0 THE 1700 LOCATE 5, 18: LINE INPUT"NOM
< ENTER > quando a pergunta for re- N X-X-l E DO PROJETO " : FS
:

petida. Tecle <C> para apagar a tela 1230 IF I$-CHRS(28)AND X<185THE 1710 LOCATE 5,20:PRINT"GRAVANDO
e <F> para voltar ao menu principal. N X=X+1 "+FS+" ..."
Aopção 2 só poderá ser iniciada de- 1240 IF IS=CHBS(30> AND Y>0 THE 1720 BSAVE "CAS:" + FS,i.HD100,».HE
pois da opção 1. Ela mantém na tela o N Y-Y-l 900
1250 IF IS-CHB3(31)AND Y<1B5THE 1730 GOTO 90
desenho do ambiente executado na pri-
meira opção e acrescenta um cursor em
N Y-Y+l 1750 LOCATE 5.20:LINE INPUT"NOM
1260 IF IS=CHRS(74) AND X>7 THE E DO PROJETO: " ;F3
forma de seta que será movimentado n x-x-e 1760 LOCATE 5,22: PRINT"CABREGAN
ponto a ponto através das teclas das se- 1270 IF IS=CHRS[75)AND X<177THE DO "+FS+".--"
tas. Para movê-lo mais rapidamente, N X-X+8 1770 BLOAD "CAS:"+F$
usamos as teclas I-cima, M-baixo, K- 12B0 IF IS-CHR${73) AND Y>7 THE 1780 Fl-l:GOTO 90
direita e J-esquerda, até que o cursor al- N Y-Y-8 1790 REM ********************
cance a posição desejada —
aquela em 1290 IF IS"CHBS{77)AND Y<177THE 1791 REM • *
*
que a peça será colocada. Então acio- N Y-Y+8 1792 REM * rotina para
namos a tecla P. Feito isso, determina- 1310 IF IS="P" THEN CL=l:GOTO 1 1793 REM • despejar a tela
360 1794 REM * na impressora *
mos a peça a ser posicionada. As peças "
1320 IF IS""D" THEN CL= 15 GOTOl : 1795 REM *
são numeradas de 0 a 9; caberá ao usuá- 1796 REM ********************
430
rio criar as cinco últimas peças, já que 1330 IF IS-"R" THEN A=USfi(0):GO 1797 GOTO 90
as iniciais são automaticamente defini- TO 1500 2000 CLEAR ZDO.S.HAO0O
das (mas podem ser al(eradas) no pro- 1340 IF IS="F" THEN A=USfl(0}:GO 2010 DEFUSR-S.HA000
grama: 0-pia, l-fogào, 2-mesa, 3-gela- TO 90 2015 DEFUSR1-S.HA0OD
deira e 4-armário. Para apagar um mó- 1350 GOTO 1160 2020 DEFUSR2-IHA01A
vel, posicione o cursor no vértice que o 1360 BEEP 2025 DEFUSR3-Í.HA026
1370 GOSUB 340 2030 DEFUSR4=S-HA033
gerou, tecle D e selecione o número cor- 2040 FOR R-0 TO 63 READ A
13B0 I$=INKEY$:IF tS<"0" OR IS> :

respondente a esse móvel. Deveremos "9" THEN 1380 2050 POKE (&.HA000+R) ,A:NEXT
nos certificar de que o cursor esteja exa- 1390 COLOR 0:GOSUB 340 2060 DATA S.H21,D0,00,S.H11.00.Í.H
tamente no vértice que o gerou; caso 1400 COLOR 1:N-VAL(IS) Dl 01 00 24. mCD,l.H59 00 LHC9
, , , , .

contrário, a peça não será totalmente 1410 AS-OS(N) :GOSUB 1540 2070 DATA S.H21 00 &.HD1 S.H1 1 00 , , , , ,

eliminada. 1420 GOTO 1160 00,01.00,24, R.HCD, S.H5C 00 8.HC9 . .

Se quisermos girar um móvel para 1430 BEEP 2080 DATA 1.H21 00 LH20 62 00 01 , . , , .

fazè-lo caber em algum canto do am- 1440 GOSUB 340 Q0,24,K.HCD,S.H56,00.LHC9


T

biente, basta acionar R seguido do ângu- 1450 IS"INKEYS:IF IS<"0" OR IS> 2090 DATA Í.H21.00.00.Í.HU.S.HFF.
"9" THEN 1450 HHB8 .01,00,24, LHCD. kH59 00 S-HC9
lo de giro do móvel, expresso em graus.
. ,

1460 COLOR 0:GOSUB 340 2100 DATA S.H21.1HFF,S.HB8,S.H11.0


Todos os objetos serão desenhados com 0,00,01.00,24,S.HCD,SH5C.0O,kHC9
1470 N-VAL(IS)
essa angulação, até que se tecle nova- 2110 POKEUHA01E) .31
1480 AS-OS(N) :GOSUB 1540
mente R, seguido de 0. A opção <F> 1490 GOTO 1160 2120 SPS="" F0RI=1T08:READAS :

permite retornar ao menu principal. 1500 SCREEN0:PRTNT"ANGULO DE RO 2130 SPS=SPS + CHRS (VAL ("S.H"+AS) )

A opção 3 possibilita definir novas TACÃO (0-360) ";: INPUT RT 2140 NEXT:SPRITES(0)-SPS
peças ou modificar as cinco já existen- 1510 IF RT<0 OR RT>360 THEN 150 2150 GOTO 20
tes. As medidas, fornecidas em centíme- 0 2160 DATA E0 CO .AO .90 08, 00 ,00,
, .

tros, não deverão ultrapassar os 200 cm. 1520 RT=(RT/180)*3.141:SCREEN 2 00


GRAMACAOB IIHIIIIIIII!

PERSPECTIVA
PONTO DE FUGA E
PONTO DE VISTA

EM PERSPECTIVA DIMINUIÇÃO DE TAMANHO


TÉCNICA DE SOMBREAMENTO

Traga seu desenho para a magia do perspectiva foram formulados. Essas re- ga, situados em uma mesma linha, no
gras são as mesmas usadas pelos artis- horizonte imaginário do desenho.
mundo tridimensional. Isso é possível
tas contemporâneos e aplicadas aos de- Esses princípios, quando aplicados a
graças aos recursos de seu micro senhos feitos no computador. figuras reais, podem se tornar um pou-
aliados aos princípios da perspectiva Para o desenvolvimento dessa técni- co mais complicados; em desenhos sim-
ca, foram necessários vários séculos, o ples, entretanto, proporcionam a sensa-
e das técnicas de sombreamento. que não significa que suas noções bási- ção de profundidade exigida. O leitor já
cas sejam de difícil compreensão. Na deve ter visto, na televisão ou no cine-
A maioria das pessoas sabe da impor- realidade, a idéia fundamental é a se- ma, asironaves voando para o espaço a
tância do uso da perspectiva em qual- guinte: todas as linhas horizontais per- partir do imenso hangar da nave-màe.
quer figura, e, por isso, costuma incluí- manecem nessa posição, enquanto as Nesse caso, a sensação de profundida-
la até nos mais simples esboços. Sur- verticais se inclinam "para dentro" da de é dada pelo chão e pelo teto quadri-
preendentemente, a idéia de perspecti- figura, convergindo para o denomina- culados do hangar, que parecem se pro-
va não é tão clara como parece; assim, do ponlo de fuga. (Esse assunto já foi jetar em direção
ao espaço.
os artistas mais antigos não tinham a abordado no artigo Programação de
menor idéia sobre o que fazer para dar gráficos em 3-D, página 693.)
profundidade às suas telas. Apenas a Apenas as linhas paralelas, perpen- FEIXES DE RETA EM PERSPECTIVA
partir do Renascimento, quando os pin- diculares à figura, se dirigem para o
tores começaram a dar um tom realista ponto de fuga principal. As demais Os de retas perpendiculares são
feixes
as representações, é que os princípios de afluem para seus próprios pontos de fu- muito usados para se obter a visão de
V

IIIIIIIIIHIH "^aHHHHHIIIIIIIIIII
um objeto em perspectiva. O primeiro
programa, mostrado a seguir, desenha
duas superfícies quadriculadas o te- —
to e o chão do hangar tendo o usuá- —
rio do micro como observador, olhan-
do para o infinito.

10 BORDER D- PAPER 0: INK 7


20 CLS INPUT "PROXIMIDADE D
:

0 CHAO *;V
40 FOR K=-126 TO 127 STEP 6
50 LET Y=174: LET X=K+V*K: IF
ABS (X)>127+(X<1) THEN LET X
(X)*127-(X<1)
= SGN LET Y = 100 :

+(X-K)«74/(V*K>
60 PLOT 127-K.1O0: DRAW 127-X
-PEEK 23677. Y-PEEK 2367B
70 PLOT 127-K.74: DRAW X27-X-
PEEK 23677. 174-Y-PEEK 23678
Um cenário quadriculado cm perspectiva é um bom recurso
para conferir profundidade a seu desenho.
80 NEXT K
90 LET F-V(l/6): LET Y-F
100 LET Y=Y*F: IF Y>77 THEN 11 + (X - K) * 80 / (V * K> abaixo da metade do vídeo. Se, por ou-
GOTO 140 60 HPLOT 127 - K.lll TO 127 - tro lado, digitarmos o valor 10, o cená-
110 PLOT 0,97+Y: DRAW 25b 0 . X.Y modificações profundas,
rio apresentará
120 PLOT 0,77-Y: DRAW 255,0 70 HPLOT 127 - K.BO TO 127 - X
130 GOTO 100 ,191 - Y
com o observador em uma posição bem
140 IF INKEYS=" " THEN GOTO 80 NEXT mais próxima do chão.
140 90 F V " (1 / 61 li • V Inicialmente, o programa desenha as
150 GOTO 20 100 Y = Y * F: IF Y > 83 THEN t retas frontais voliadas para o horizon-
40 te,entre as linhas 40 e 80, e as retas que
110 HPLOT 0,108 + Y TO 255,106 vão de lado a lado da tela, entre as li-
+ Y nhas 90 e 130. A variável K dá a coor-
120 HPLOT 0.84 - TO 255.84 -
Y denada X do início de cada linha, que
é, então, multiplicada por V para che-
gar à coordenada X da sua extremida-
0 ';V de final. A condição IF...THEN, na li-
30 PCLS:SCREEN 1.1 nha 50, apenas evita que o desenho ul-
40 FOR K— 126 TO 127 STEP 6 trapasse os limites da tela. Em alguns
50 Y«191 X»K+V*K I F ABS(X)>127-
i :
computadores, isto é dispensável, ape-
(X<1) THEN X"SGN (X)"127+(X<1) :Y
sar de acelerar a execução do programa.
=111+ (X-K) *B0/ (U-K)
60 tXN£(127-K,lll] (127-X, Y), PS As linhas restantes serão traçadas pe-
ET la próxima parte do programa. A dis-
30 SCREEN 2
70 LINE(127-K,80)
PSET
- (127 -X.191 -Y)
40 FOR K —
126 TO 127 STEP 6
tância entre elas torna-se cada vez me-
nor à medida que "se afastam" da te-
.
50 Y=191:X=K+V*KíIF ABS(X)>127-
80 NEXT <X<1) THEN X=SGN<X>*127+(X<1> :Y la, um efeilo controlado por sucessivas
90 F-VT (1/6) :Y-F -I11+(X-K)*B0/(V*K) multiplicações da coordenada Y por
100 Y-Y*F:IF Y>83 THEN 140 60 LINE(127-K,1U)-(127-X.Y) VT1/6. O valor 1/6 foi escolhido para
110 LINE (0,108+Y) -(255, 108+Y) ,P 70 LINEU27-K, 80)- (127-X, 191-Y) dar um resultado mais realista; isto, po-
SET 80 NEXT
120 LINE(0,B4-Y)- (255,84-Y) ,PSE rém, não impede que o usuário experi-
90 F=V (1/6) :Y = F mente outros valores.
100 Y'Y«F:IF Y>83 THEN 140
110 LINE (0, 108+Y) - (255 1.08+Y) ,

120 LINE(0,84-Y}-(255,84-Y) A DIMINUIÇÃO DE TAMANHO


130 GOTO 100
140 IF INKEYS=" " THEN 140 ELSE
Os princípios da perspectiva aplicam-
[EEl .20
se aos objetos bem como aos feixes de
Alterando o valor obtèm-se
inicial, retas. Vistos a distância, todos os ele-
10 TEXT efeitos diferentes, como a sensação de mentos de um desenho parecem meno-
20 HOME : INPUT "PROXIMIDADE D estar flutuando entre as duas superfícies. res e mais próximos uns dos outros. Is-
0 CHAO - ;
Atribuindo um valor baixo para V (2, so se verifica, por exemplo, quando ob-
30 HGR2
40 FOR K i
126 TO 127 STEP por exemplo), as linhas inferiores se in- servamos os topos e as bases de uma sé-
clinarão para os pontos de fuga situa- rie de árvores iguais enfileiradas colo'

50 Y • 191 X :
' dos em um horizonte acima da metade cadas sobre duas retas que convergem
BS (XJ > 127 -
do vídeo. Inversamente, as linhas supe- para um mesmo ponto de fuga.
I SGN (X) * i: riores convergirão para um horizonte Obtém-se esse efeito porque o cére-
IIIIIIIIIHHH lllllllll

A medida que nos afastamos dos objetos. eles parecem menores São necessários princípios e lécnicas especiais para
e mais próximos entre si, como mostra a figura acima. se obler um bom sombreamento cm esferas.

bro humano relaciona o tamanho de um "2+(T*PH)'2) 40 INPUT "LARGURA DA ESTRADA" RW ;

objeto conhecido com a distância em 20 PRINT 1 '

50 INPUT "ALTURA DOS POSTES"; PH


que ele se encontra. Ao vermos dois ob- 30 INPUT "DISTANCIA ENTRE POS 60 INPUT"ALTURA DO OBSERVADOR";
jeios idênticos na forma, mas um com TES ";P RH
40 INPUT "LARGURA DA ESTRADA 70 SCREEN 1
a metade do tamanho do outro, dedu- ,

";RW 80 SF-1:SF=800/FNS{0)
ziremos que o menor está duas vezes
50 INPUT "ALTURA DOS POSTES "
90 VP=8007PH*RH*100:X=1140:FOR
mais longe que o primeiro. Portanto, ao iPH T-l TO 15
desenharmos alguns objetos em tama- 60 INPUT "ALTURA DO OBSERVADO 100 X-X-4:IF FNSITXFNYT(X)-FNY
nho decrescente no vídeo de um micro, R " RH ; B{X) THEN 100
teremos a impressão de que eles estarão 70 CLS 110 LINE(X/5,191-FNYB{X)/5)-(X/
"entrando na tela". BO LET 8F-1: LET SF-160/FN S( 5. 191-FNYT(X)/5) PSET.XJ* (FNYT ,

Analisando a distância entre os ob- 0) X)-FNYB(X) /10:YJ-FNYT<X)-XJ )

jetos de uma figura, concluiremos que 90 LET VP-]60/PH*RH+100: LET 120 LINE((X-XJ)/5.191-FNYT(X)/5
ela se comporta do mesmo modo. Os X-228: FOR T=l TO 15 )
- {X-XJ) /5,191-YJ/S) ,PSET:LINE
(

objetos parecem mais próximos entre si


100 LET X-X-l: IF FN S{TKFN Y - (X+XJ) /5. 191-YJ/5) PSET: LINE-
( .

(X)-FN B(X) THEN GOTO 100 (tX+XJ) 75 191 -FNYT (X) /5) PSET
,
à medida que se afastam do observador.
.

110 PLOT X.FN B{X>: DRAW X- 130 LINE(255-X/5,191-FNYB(X)/5>


Existe uma relação matemática entre PEEK 23677, FN Y (X) -PEEK 23678: - (255-X75, 191-FNYT[X)/5) PSET ,

a distância e o tamanho, isto é, o tama- LET XJMFN Y(X)-FN B (X) /10 ) : 140 LINE(255-(X+XJ)/5,191-FNYT(
nho apresenta uma variação inversa- LET YJ-FN Y(X)-XJ X)/5)-(255-{X+XJ)/5,191-YJ/5) ,P
mente proporcional á distância. Assim, 120 PLOT X-XJ.FN Y(X): DRAU X- SET LINE - (255- (X-XJ) /5 191-YJ/
:
,

se aumentarmos a distância entre o obje- XJ-PEEK 23677. YJ-PEEK 23678: 5) PSET: LINE- (255- (X-XJ) 75. 191-
,

to e o observador, o tamanho do objeto DRAW X+XJ-PEEK 23677 YJ-PEEK , YJ/5) PSET LINE- [255- (X-XJ) 75,1
, :

diminuirá. E por essa razão que no pri- 23678: DRAW X+XJ-PEEK 23677, FN 91-FNYT(X)/5) ,PSET
meiro programa a separação entre as li- Y(X)-PEEK 23678 150 NEXT
130 PLOT 255-X.FN B(X>: DRAW 160 IF INKEYS=" " THEN 160 ELSE
nhas horizontais está elevada a 1/6. O 255-X-PEEK 23677, FN Y(X)-PEEK RUN
número 6 foi escolhido apenas para se 23678
garantir um espaçamento mais condi- 140 PLOT 255-X-XJ.FN Y (X)
zente com a realidade; se o substituir- DRAW 255-X-XJ-PEEK 23677, YJ-
mos por qualquer outro, veremos que o PEEK 23678: DBAW 255-X+XJ-PEEK
desenho nào perderá sua profundidade. 23677 YJ-PEEK 23678: DRAW 255-
,
10 TEXT : HOME
20 DEF FN YT(X) - ((900 - VP)
O próximo programa mostra como X+XJ-PEEK 23677, FN Y (X) -PEEK
/ 500) * (X - 640) + VP: DEF
desenhar uma vista em perspectiva de 2367B
150 NEXT T FN YB(X) - ((100 - VP) / 500) •
uma estrada delimitada por postes: (X - 640) + VP: DEF FN S (T) -
160 GOTO 160
SF / SQR ( (RW / 2) ' 2 + [T •
PH) " 2)
El 30 INPUT "DISTANCIA ENTRE OS P
OSTES "iP
10 BORDER 0: PAPER 0: INK 7: 10 PMODE 4,1:PCLS:CLS 40 INPUT "LARGURA DA ESTRADA "
CLS 20 DEFFNYT{X)M(900-VP)/500)»(X ;RW
15 DEF FN Y(X)-{ (174-VP) /100) -640)+VP:DEFFNYB(X)-( (100-VPJ/5 50 INPUT "ALTURA DOS POSTES ";
•<X-128)+VP 00) * CX-640) í-UP DEFFNS (T) =SF/SQH
:
PH
16 DEF FN B(X)»({20-VP)/100)« ( (RU/2) T2+(T"PH) 12) 60 INPUT "ALTURA DO OBSERVADOR
(X-128) +VP 30 INPUT"DISTANCIA ENTRE OS POS " ; RH
17 DEF FN S(T)-SF/SQR (FW/2) ( TES" ; 70 HCOLOR» .1: HGR3
80 SF - l.SF - 800 / FN 3(0) lho dessas duas funções como sendo o
90 VP - 800 / PH HH + 100:X - de traçar duas retas que afluem para um
1140- FOR T = 1 TO 15 determinado ponto de fuga, entre as
100 X - X - 4: IF FN S(T) < F quais serão colocados os postes.
N YT(X) - FN YB(X) THEN 100
510 HPLOT X / 5,191 - FN YB(X Na parte principal do programa, a li-
/ 5 TO X / 5.191 -
nha 80 calcula o fator de escala, SF, que
) FN YT(X)
/ 5:XJ - ( FN YT(X) - FN YB<X) constrói um poste tomando por base a
) / 10:YJ - FN YT(X) - XJ altura do anteriormente desenhado. A
120 HPLOT (X - XJ) / 5,191 - variável VP define o valor da coordena-
FN YT!X) / 5 TO (X - XJ) / 5,19 da Y do ponto de fuga, que, por sua vez,
1 - YJ / 5: HPLOT TO (X + XJ) depende da altura do observador e da
/ 5,191 - YJ / 5: HPLOT TO (X altura dos postes. Acoordenada X está
+ XJ) / 5,191 - FN YT(X) / 5 sempre no centro da tela.
130 HPLOT 255 - X / 5,191 - F Quinze postes são desenhados em ca-
N YB(X) / 5 TO 255 - X / 5,191
- FN YT(X) / 5 da lado da estrada pelo laço entre as li-
140 HPLOT 255 - (X + XJ) / 5.1 nhas 90 e 1 50. Os da margem direita são
91 - FN YT(X) / 5 TO 255 - (X os primeiros a serem erguidos.
+ XJ) / 5,191 - YJ / 5: HPLOT Inicialmente, a linha 100, começan-
TO 255 - (X - XJ) / 5,191 - YJ do a partir da extremidade direita da te-
/ 5: HPLOT TO 255 - (X - XJ) / la, decresce o valor da posição X, até
5,191 - FN YT(X) / 5 que a altura do poste, calculada por
150 NEXT
FNS(T), se encaixe exatamente entre as
160 GET AS: RUN
linhas criadas por FNYT e FNYB. Fei-
to isso, a primeira parte da linha 1 10 de-
senha o poste, enquanto a porção res-
tante manipula as variáveis XJ e YJ, que
10 SCREEN 0 são fatores de escala para a construção
20 DEFFNYT(X)-((900-VP)/500)MX da parte superior (suporte dos fios). A
-640) +VP DEFFNYB (X) -
; ( (100-VP) /5
linha 120 é responsável por essa última
00)MX-640)+VP:DEFFNS<T)-SF/30jR
tarefa.
((RU/2) "2+(T*PH) -Z)
30 INPUT-DIST ANCIÃ ENTRE OS POS
TES ";P
40 INPUT" LARGURA DA ESTRADA " R ;

50 INPUT "ALTURA DOS POSTES * ; PH Além da perspectiva, existem outras


60 INPUT-ALTURA DO OBSERVADOR técnicas capazes de dar tridimensiona-
;RH lidade aos gráficos. A
mais comum de-
70 SCREEN 2
las é o sombreamento. Infelizmente, a
80 SF-l:SF-800/FNS(0)
falta de variação de tons das cores cons-
90 VP=B0O/PH*RH+100:X-114Q:FOR
titui um grande problema quando ten-
T=l TO 15
100 X=X-4:IF FNS (T) <FNYT{X) -FNY tamos aplicar essa técnica aos compu- cluir um fundo estrelado e a desenhar
B(X) THEN 100 tadores domésticos. Com
isso, torna-se um anel ao redor de algumas delas.
110 LINE (X/5,191-FNYB(X)/5)-(X extremamente difícil criar o sombrea-
/5, 191-FNYT(X) /5) :XJ- (FNYT(X)-F mento necessário para um desenho em
NYB (X) ) /] 0 YJ-FNYT (X) -XJ
:
três dimensões.
120 LINE (<X~XJ)/5,191-FNYT<X)/ Já os computadores maiores, ofere-
5>-( (X-X,l)/5,191-YJ/5) LINE- ( (X 10 BRIGHT 0: BORDE R 0: PAPER
cendo uma rica gama de tonalidades, fa-
:

+XJ) /5 191 -Y J/5) LINE- ( (X+XJ) /5


, :
0: INX 7: CL8
,191-FNYT(X)/5) zem dessa tarefa algo bem mais fácil. 20 FOR 1-1 TO 100: PLOT RND*
130 LINE {255-X/5,191-FNYB(X)/5 255,RND*175: NEXT I
) - (255-X/5 191-FNYT (X) /5) 25 LET F-0: FOR T-l TO 3
,
PLANETAS PONTILHADOS 30 LET CL-RND*5+2
140 LINE (255-(X+XJ)/5,191-FNYT
(X)/5)- (255- (X+XJJ/5, 191-YJ/5) 40 LET XC-RND*195+30: LET YC-
i

LINE- (255-(X-XJ)/5. 191-YJ/5) :LI É possível acrescentar sombras a uma RND*115+30


50 LET S-RND*30
NE- (255-ÍX-XJ) /5, 191-FNYT (X) /5) figura qualquer colorindo apenas alguns
150 NEXT 60 FOR K— S TO S
pontos em sua região mais escura e a 70 IF INT (K)-0 AND F-0 THEN
160 TF INKEY5-" " THEN 160 ELSE maioria deles nas partes mais claras.
RUN PLOT INVERSE 1; OVER 1;XC-L*
Portanto, o número de pontos acesos 2.YC: DRAW INK CL:LM.0: LET
Este programa permite ao usuário de- em uma certa área do objeto é que irá F-l
finir exatamente o cenário da estrada determinar a claridade. 80 LET X-SQR (S"S-K«X)
antes de desenhá-lo em perspectiva. Com a variação gradual da densida- 90 LET X2-2*X
Para facilitar os cálculos, ele oferece de nas diferentes regiões, poderemos 100 FOR L--X TO X
110 PLOT INK CL; INVERSE LlSC
três funções: FNS(T) calcula a altura de criar o efeito de sombreamento. O pró-
+L.YC+K: IF RND*X2-X<L THEN
cada poste; FNYT(X) e FNYB(X) dão ximo programa utiliza essa técnica pa-
PLOT INK CL;XC+L,XC+K
as coordenadas Y da extremidade infe- ra desenhar um grupo de esferas. Elas 120 NEXT L
rior e superior dos postes para qualquer separecem tanto com planetas girando 130 NEXT K
I posição X. Podemos imaginar o traba- no espaço que o programa chega a con- 140 NEXT T
IIIIIIIIIIIHBI

10 COLOR 15.1,l:SCREfcN 2
20 FOR K-l TO 100:PSET(INT(RND(
1) *256) , INT {RND ( 1 )
"192) ) : NEXT
25 FOR T-l TO 8
30 XC=INT(RND(-TIME)*195)+30:YC
-INT (RND (-TIME) «131) +30
40 CL-INT(RND(1) *3) :CL*CL- (CL-3
)

50 S-INT(RND(l)*25)+5
60 FOR K=-S TO S
70 IF K-] AND INT(RND{1)*4)-1 T
HEN CIRCLE (XC, YC) ,8*1.5,9,0, ..2
5
BO X-SQR (S*S-K*K)
90 X2-2*X
100 FOR L--X TO X STEP 2
110 IF INT(RNDU)«X2)-X<L THEN
COLOR CL ELSE COLOR 3
120 PS ET (XC-L YC-K) ,

130 NEXT L.K


140 NEXT T
150 GOTO 150
Ocenário de estrelas é feito pela li-
nha que acende aleatoriamente 100
20,
pontos na leia. Oito esferas serão dese-
nhadas (nos micros da linha Spectrum
apenas três) pelo laço entre as linhas 25
e 140. A linha 30 escolhe uma posição
casual para o centro de cada esfera, e
as linhas seguintes determinam cor e
tamanho.
O procedimento geral para a criação
de cada esfera consiste em preenchê-la,
de baixo para cima, com retas horizon-
tais. Esse trabalho é controlado por
meio da variável K, que tem — S como
150 PAUSE 0 20 FOR K - 1 TO 100: HPLOT IN valor inicial (a coordenada Y da parte
T (279 » Et ND (1) + 1). INT (19 mais baixa da esfera) e +S como valor
1 * RND (1) + 1) NEXT K :
final (a coordenada Y da parle mais al-
25 FOR T-l TO 8 ta da esfera).
30 XC - INT ( RND (1) * 195 +
10 PMODE 3,1:PCLS3:SCREEN 1,0 30):YC - INT ( RND (1) » 131 +
A linha 80 define a coordenada X do
20 FOR K-l TO 100:PSET(RND(256) 30) início de cada reta afravés da equação
-l.RND(192)-l,2) NEXT :
40 CL - INT ( RND (0) * 3 + 1) para construção do circulo. X2 é o com-
25 FOR T-l TO 8 :CL - CL - (CL - 3) primento de cada reta.
30 XC-RND(195)+30:YC-RND(131)+3 50 S - INT ( RND (1) 25 As linhas 100 e 130 determinam a cor
0
das linhas. A variável L pode ser consi-
40 CL-RND(3) :CL-CL- (CL-3) 60 FOR K - - S TO S
50 S-RND(25)+5 derada como a luminosidade de cada re-
70 IF K - AND INT ( RND (1)
1
gião; seu valor varia segundo a distân-
60 FOR K--S TO S •4 + 1) =1 THEN GOSttB 160
70 IF K-l AND RND(4)-1 THEN CIR cia entre o ponto e a borda do círculo.
80 X - SOB (S * S - K • K)
CLE(XC.YC) S«1.5.RND(4) ,0
,
90 X2 - 2 * X Um número aleatório (dependendo do
BO X-SQR(S"S-K*K) 100 FOR L - - X TO X STEP 2 comprimento da reta) é escolhido pela
90 X2-2*X 110 IF INT ( RND (0) * X2 + 1 linha 1 10; caso seja menor que a clari-
100 FOR L—X TO X STEP 2 ) - X < L THEN HCOLOR= CL: GOT dade da região, define-se o ponto a ser
110 IF RND(X2)-X<L THEN COLOR C O 120 plotado como sendo de cor preta. Se. ao
L ELSE COLOR 3 115 HCOLOR- 3 contrário, o número for maior, o pon-
120 PSET(XC+L,YC-K) 1?0 HPLOT XC + .YC -
130 NEXT L.K to será definido como sendo da cor es-
130 NEXT L.K colhida na linha 40.
140 NEXT T !40 NEXT T
150 GOTO 150 150 GOTO 150 Por fim, a linha 135 desenha um anel
160 FOR A • 0 TO 6.28 STEP ao redor de dois ou três planetas.
Experimente adaptar estas rotinas pa-
ra sombrear outros sólidos, como cilin- .

10 HCOLOR- 3: HGR2 dros ou superfícies planas.


IIIIIIIIHIHH lllllllll
Aprenda a montar telas para

entrada de dados formatados nos


computadores Apple e TK-2000.
A padronização tornará seu trabalho
mais profissional e confiável.

Se você já se deu ao trabalho de es- tra G (lembre-se de "geral", já que Examinemos essas variáveis. Inicial-
crever um programa, certamente enfren- aqui são aceitos números e letras), se- mente, P contém o comprimento do da-
tou dificuldades na padronização da en- guida do número máximo de caracte- do a ser digitado. Para data e hora, es-
trada dos dados. Quantas vezes não foi res a serem digitados. Para a entrada de se valor é fixo;para outros tipos de da-
preciso verificar o número máximo de um nome de até trinta caracteres, use: do, é lido de P$.
caracteres de uma cadeia string, para P$ = "G,30". PFindica o ponto em que se poderá
que não excedesse o tamanho do seu ar- Definido o parâmetro, chama-se a deixar a rotina. Assim, para entradas al-
quivo, ou manipular uma data para dar- sub-rotina por meio do comando GO- fanuméricas, seu conteúdo é 1 —
ou se-
ihe um formato adequado? SUB 600. Se for conveniente, você po- ja, pelo menos um caractere tem que ser
A rotina que publicamos aqui resol- derá renumerá-la e colocá-la em qual- digitado, não se aceitando entradas va-
ve esses e outros problemas, padroni- quer parte do seu programa. Nesse ca- zias. Nos demais casos, PF é igual a P,
zando o formato de entrada de dados e, so, não esqueça de mudar o número
se forçando o uso de todos os campos do
ainda, melhorando sua apresentação. da linha pedida pelo GOSUB. formato de entrada. Isso impede que
Ela fornece formatos definidos para a Depois de digitada, a informação é uma data seja digitada pela metade ou
entrada de dados numéricos, alfanumé- armazenada na variável WS. Para usar que se omita a parte decimai de um nú-
ricos, data e hora. Além disso, para que seu conteúdo, é necessário transferi-lo mero (mesmo que seja 0).
você tenha uma preocupação a menos, para outra variável cujo valor não seja Duas outras variáveis, PI e P2, mar-
encarrega-se de verificar a validade das alterado pela sub-rotina. Uma linha de cam a posição onde se usam caracteres
datas e horas. programa que utiliza a rotina de entra- Fixos no formato. Assim, para datas, o
da de dados fica assim: caractere "/" é utilizado duas vezes. A
posição é contada a partir de 0.
COMO USAR A ROTINA Finalmente, as variáveis alfanuméri-
cas iniciadas por W servem para mon-
A utilização da rotina de formatação tar a linha de formatação, que ficará ar-
é simples. Digite o programa e execute- mazenada em WD$.
o, para ter uma amostra do que ela faz.
Quanto à localização do formato pa- Depois que o conteúdo dessas variá-
ra a entrada de dados na tela, a rotina execução converge
Antes de chamar a rotina, você precisa- veis foi definido, a
rá apenas entrar um parâmetro que de-
também é simples. Seu ponto inicial se- para a linha 618. Aí terá início a entra-
rá aquele em que você tiver deixado o da de dados propriamente dita. O for-
finirá o formato e o tipo de dado que
cursor antes de chamar a rotina. Para mato é colocado na posição lida pela li-
a máquina aceitará.
marcar esse ponto, coloque um ponto nha 600 e as variáveis WS, WIS e PX
O parâmetro será fornecido pela va-
e vírgula no fim da mensagem. Se essa
riável PS, já que o BASIC não
permite são limpas, passando a conter a posição
posição não lhe convier, posicione o cur- do caractere dentro do stríng que está
a passagem direta de parâmetros para
as sub-rotinas. Assim, se você quiser dar
sor com HTAB e VTAB sendo trabalhado.
entrada a uma data, a variável PS deve-
Como está, a rotina não trabalha A linha 626 indica o caractere corres-
rá conter a letra C (faça PS= "C" e use
bem se o formato ficar dividido em duas pondente à posição atual do cursor,
linhas, pois só o posicionamento hori-
"calendário" como mnemónico); para usando operações lógicas. Para isso, o
zontal é monitorado. Mais à frente, ve- computador atribui valor I às relações
a entrada de hora, PS conterá o valor
H (P$ = "H"). Como esses dois forma- remos como modificar essa situação. verdadeiras, e 0, às falsas. Assim, todas
tos são fixos, basta uma só letra. as comparações são condensadas em
Para a entrada de números e de va- uma única linha, evitando-se o uso de
riáveis alfanuméricas, mais informações várias instruções IF.
serão necessárias. Na entrada de núme- A
rotina começa na linha 600, onde O caractere indicado é colocado em
ros, a variável PS deverá conter a letra a variável PH
passa a conter o valor da sua posição e, em seguida, o cursor é re-
D seguida de dois valores, que indicam atual posição horizontal do cursor. A posicionado. Espera-se então a entrada
o número de algarismos (incluindo o posição de memória 36 armazena valo- de um caractere pelo teclado (linha 628).
ponto decimal) e o número de casas de- res de 0 a 39. Somamos I ao valor em A rotina só particulariza dois tipos de
cimais. O primeiro valor deve ter sem- questão, tornando-o equivalente ao usa- caractere: o carriage return (ou seja,
pre dois dígitos (até 9, coloque 0 antes do por HTAB. A
variável PP passa en- <CR>, cujo código é 13) e o back-
do algarismo significativo); o segundo, tão a conter o valor ASCII da letra que space (ou *-, de código 8). Os demais são
apenas um digito (use uma vírgula para caracteriza o parâmetro. Com
base nes- tratados em grupo.
separá-lo do anterior). Se você quiser, sa variável, o programa será desviado Ao se digitar < CR > o caractere se-
,

por exemplo, dar entrada a um número adequadamente na linha 604. As linhas rá reconhecido pelo seu código, que es-
de nove dígitos, dois dos quais decimais, indicadas em 604 atribuem os valores tá armazenado na variável PA. Note que
_use: PS = "D09,2". Para a entrada de necessários às variáveis que controlam ele só terá efeito se a posição do carac-
I variáveis alfanuméricas, utiliza-se a le- o funcionamento da sub-rotina. tere atual (PX) for maior ou igual ao
IIIIIIIIIHHH lllllllll
UMA ROTINA PARA ARMAZENAGEM
ENTRADA DE DADOS DA INFORMAÇÃO
DEFINIÇÃO POSICIONAMENTO DO CURSOR
DO PARÂMETRO COMO FUNCIONA
TIPOS DE DADOS APERFEIÇOAMENTOS

ponto de saída definido (PF). Assim, se transferir a declaração da variável WW$ 612 P - VAL RIGHTS (PS. 2)1 (

estivermos entrando uma data, não po- da linha 601 para o início do programa, 614 PF = 1:P1 tf9:P2 - PI: WDS
deremos deixar a rotina antes de digitar visto que só é necessário defini-la uma = LEFTS (WWS,P):UCS * "": GOTO
o último caractere. vez, e não sempre que a rotina for utili- 61B
O back-space (linha 632) só terá efei- zada. Talvez você não precise usar to- 616 P = 5:PF = P:P1 * 2 P2 - PI :

:WDS = "HH:MM":WCS = " :

to se estiver além do primeiro caractere dos os tipos de entrada. Nesse caso, é


618 HTAB PH: PRINT WDS;
(PX >0). Nesse caso, a rotina é desvia- possível retirar as partes dispensáveis da
620 WS - "" :WIS - ""
da para a linha 644 e o valor 1 é sub- rotina, pois elas são independentes. 622 PX - LEN (WS)
traído de PH —
ou seja, a tabulação ho- Com isso, economiza-se um pouco de 624 IF PX - P THEN 650
rizontal retrocede uma posição. Se PX memória. 626 WA = 95 * (PP = 2 OR PP - 5
está apagando o primeiro caractere Também é interessante fazer com que ) + 68 * (PP - 1 AND PX < 2) +
(PX = 1), volta-se para a linha 620, e o a tabulação vertical seja controlada, de 77 * ((PP - 1 AND PX > 2 AND PX
processo recomeça. Na linha seguinte, modo que se possam entrar valores com < 5) OR (PP = 6 AND PX > 2)) +
PX é decrementado de 1, pois estamos mais de 39 caracteres. 65 * (PP = 1 AND PX > 5) + 72
* (PP - 6 AND PX < 2)
retornando a uma posição anterior. Ve-
628 liTAB TH: PRINT CHRS (WA) :
rifica-se então se o cursor não caiu so-
: HTAI) PH: CET WIS
bre um dos caracteres fixos do formato
(cujas posições são representadas por PI
H1E] 630 PA -
ANI) PX >
ASC (WIS): IF PA = 13
PF THEN 650
e P2). Em caso afirmativo, recua-se o 10 HOME 6J2 IF PA - B AND PX > 0 THEN
cursor mais uma posição. Na linha 648, 20 PRINT TAB 8) "DEMONSTRAÇÃO < 644
o conteúdo de WS (onde a entrada está DK ENTRADA"; TAE 55) "DE DADOS ( 634 IF PP - 5 THEN 638
sendo montada) é atualizado e retoma- 636 IF PA < 48 OR PA > 57 THEN
se o ciclo. 30 UTAB 6: PBÍNT "SENHA DF! ACE 628
Não sendo <CR>
ou *-, o caracte- SSO: ";:PS "G.05": COSUB 600: 638 IF PA < 32 OR PA > 127 THE
IF WS < > "SENHA" THEN END N 628
re digitado é interpretado como uma en-
40 VTAB 8: PRINT "DATA DE HOJE 640 HTAB PH: PHINT CHRS (PA)
trada de dado. As linhas 634 a 638 che- : ";:PS = "C" GOSUB 600:DTS - : :WS WS * WIS:PX PX + 1 PB * :

cam se ela é válida. Para valores de PP WS PH + 1 IF PX PI OR PX • P2


:

iguais a 1 2 e 6 (3 e 4 não são usados),


,
50 UTAB 10: PBINT "HORA: " PS ; : THEN PX - PX + 1:PH - PH + 1:WS
apenas números são admitidos. Para = "H": GOSUB 600:HRS - WS - WS + WCS
PP igual a 5 (entradas alfanuméricas) 60 VTAB 12: PRINT "DIGITE UM V f>42 COTO 624
"
admitem-se letras maiúsculas e núme- ALOR "i VTAB 13: HTAB 6 : PS = 644 PH = PH - 1: IF PX = 1 THEN
ros. Se o caractere não for válido, a exe- D10, 3": GOSUB 600:VA = VAL (WS 620
) 646 PX = PX - 1 IF PX - PI OR :
cução é devolvida á linha 628. Caso con-
70 PRINT PRINT DTS
: : PRINT HR PX » P2 THEN PH - PH - 1 PX = P :

trário, a linha 640 se encarrega de


S: PHINT VA X - 1
colocá-lo na tela e adicioná-lo á variá- 80 END 64B WS - LEFTS (WS.PX): GOTO 6
vel WS, incrementando, em seguida, PH 596 REM ******************* 26
e PX. Verifica-se então se o cursor foi 59? ttEM *** SUB ENTRADA *** 650 NORMAL FOR X = 1 TO P -:

para uma posição de caractere fixo, que 598 REM ******************* LEN (WS)
deve ser saltado. 599 REM 652 PRINT CHRS (32):: NEXT
Após todos esses passos, retornamos 600 PH - PEEK (36) + 1:PP = A 654 ON PP GOTO 656,666,0.0,666
à linha 624, que encerra a entrada quan SC (PS) - 66 ,660
601 WWS - " 656 D = VAL ( LEFTS (W$.2)):M
do o último caractere do dado é digita-
" HEM 5 D :
- VAL MIDS (WS.4.2)):A = VA
(
do, desviando a execução para a linha
EFINA ESTA VARIÁVEL NO INICIO D L RIGHTS (WS. 2)
(
650. Esta linha e a 652 voltam a impres- 658 V = (M = 4) + (M = 6) + (M
0 SEU PROGRAMA * (

são de tela para o modo NORMAL


e 602 INVERSE = + [M = 11) ) * (D > 30) +
9)
apagam a parte não utilizada do forma- 604 ON PP GOTO 606,608,0.0,612 (M - 2) * (< INT (A / 4) = A /
to. Nesse ponto, a rotina de entrada de ,616 4) (D > 29) + ( INT (A / 4) <
*
dados está terminada. Segue-se a checa- 606 P = S:PF = P:P1 = 2:P2 » 5: (A / 4) ) * {D > 28) ) + ( (A
>
gem da validade de datas e horas por WDS - "DD/MM/AA" :WCS - G0T V: < 1) + (M < 1) + (M > 12) + (D
meio de operações lógicas. O 618 < 1) + (D > 31) ) GOTO 664 :

608 P = VAL MIDS <PS,2,Z)):D


( 660 H - VAL ( LEFTS (WS.2)Í:M
- VAL RIGHTS (PS. D): IF D
(
= VAL ( RIGHTS (WS, 2) )
= 0 THEN 614 662 V = (H > 24) + (M > 59)
APERFEIÇOAMENTOS
610 PF = P:P1 = P - D - 1:P2 664 IF V THEN PRINT CHRS (7)
P1:WCS = "."'WDS = LEFTS (WWS ::PH - PH - LEN (US): INVERSE
Podemos agora fazer algumas modi- PI) + WCS + LEFTS [WWS. D) GOT : : GOTO 618
ficações na rotina — por exemplo, 666 PRINT : BETURN
" !

33 APLICAÇÕES 33

UM EDITOR Transforme o microcomputador


uma partitura com composições
musicais de sua própria autoria
em

e, ainda, em uma orquestra que

MUSICAL (1) execute as melodias recém-criadas.

Existem duas maneiras de fazer o mi- dança do andamento da oitava e. no ca- LET num=ct"2+l: LET tn^num
crocomputador tocar música. A primei- so do MSX, do timbre da nota. 1005 IF lS="l" THEN LET ct = 0
ra consiste em introduzir a melodia co- As notas sào selecionadas por meio 101Q PRINT "Toque aa notas nas
dificada em números dentro de um pro- de seus nomes (A, B, C, D. .) ou do te- .
teclas de"'"<C> - mal3 baixa
grama. A segunda, em utilizar um edi- clado, que é usado como se fosse um ate"'"<M> - mais alta Dua
tor musical que cuide de toda a codifi- piano. Se o usuário preferir, poderá
«indo cia <I>
cação, deixando ao usuário apenas a ta- combinar os dois sistemas, introduzin-
refa de digitar as notas. do nota por nota em certos trechos e 1060 PRINT AT 17 0 "Duração
,
:

Já vimos em iNPUT como progra- executando outros no teclado. nota-"


mar o micro para executar melodias. O 1070 FOR i-1 TO 100: NEXT l
processo é simples, mas requer um bom 1075 LET 0$-""
conhecimento dos comandos musicais 1080 LET NS-INKEY$: IF NS-"
do BASIC. Como estes nem
sempre rêm 10 BORDER 0: PAPER 0: INK 7: EN GOTO 1075
muita relação com música, o "composi- CLS
tor" é obrigado a consultar constante- 40 LET maxnoteu-1500 : LET ct-
mente tabelas ou manuais, para verificar 0: LET tempo». 1: POKE 23609.
os valores adequados para a tonalidade,
128: POKE 23658.0: DIM m(35)
95 FOR i=l TO 35: READ m(i)
duração e volume, entre ouiros parâme- NEXT l
tros de cada nota. A notação macromu- 100 DIM t tmaxnotea+1 ) GOTO :

sical do MSX e do TRS-Color facilita 110


esse processo, mas não elimina o traba- 105 CLS PRINT "Aguarde. Muai
:

lho com o restante do programa. ca sendo apagada .

A
execução de música através dc pro- 110 FOR 1 = 1 TO maxnoT.es: LET t
gramas apresenta outras desvantagens, (i)=0: NEXT i
como a dificuldade de editar a melodia 190 CLS
200 PRINT INVER5E 1 AT 0,6;" ;

e a impossibilidade de ouvir as notas an-


MENU PRINCIPAL " INVERSE 0;" ;

tes que o programa esteja completo. 'TAB 5;"[1] Tocar pelo teclado
Além disso, para cada peça temos que "'TAB 5["[2] Entrar notas""
escrever um novo programa. TAB 5i"[3] Tocar de novo"
Um editor musical cuida de todos os 210 PRINT TAB 5;"[4) Editar m
'

detalhes da codificação, deixando o usica""TAB 5 " 5 Apagar muai ; [ J

usuário livre para tratar da melodia pro- ca"' 'TAB 5;"(6J Salvar musica"
priamente dita. Não é preciso conheci- 'TAB 5|"[7] Carregar musica"
270 PRINT ''TAB 5;"0pcao [S] p
mentos de programação para usá-lo.
Como os programas são bem longos, 300 LET AS-INKEY3 TF AS-"" :

foram divididos em três partes. Digite THEN COTO 300


agora a primeira parte e grave-a, para 310 LET A-CODE (AS)
mais tarde completar a listagem. 320 1F <A<49 OR A>55) AND AO
113 AND A<>81 THEN GOTO 19(1
A-49 THEN GOSUB 1000
'

COMO DIGITAR AS NOTAS 340 IF A-50 THEN GOSUB 2000


350 IF A=51 THEN GOSUB 3000
360 IF A=52 THEN GOSUB 4000
Uma vez que tenhamos o programa 365 IF A=53 THEN GOTO 105
completo na memória do computador, 366 IF A-54 THEN GOSUB 5000
poderemos selecionar as notas de várias 367 IF A-55 THEN GOSUB 6000
maneiras. O processo será explicado 370 IF A-115 OR A=83 THEN
pormenorizadamente para cada uma das STOP
máquinas no último artigo desta série. 380 GOTO 190
Seja qual for o método escolhido, o 1000 CLS
usuário sempre terá a chance de alterar 1001 LET len-1: LET IS="Semn
a melodia —
mudando, inserindo ou
apagando notas —
até obter o resulta-
do desejado. Se quiser conferir o traba-
lho, poderá executar a música mes- — 1003 IF Í$0*C" AND
mo incompleta —
a qualquer instante. N GOTO 3002
O
editor musical permite ainda a mu- 1004 LET num-1 IF í! :
D " r +
:

1» APUCAÇÕtS 33 llllllll
EXECUÇÃO DE MELODIAS Mo IMU Mj 1

ATRAVÉS DE UM PROGRAMA ALTERAÇÃO DA MELODIA


VANTAGENS DO CONFERÊNCIA
EDITOR MUSICAL COMPOSIÇÃO DE PECAS
COMO DIGITAR SELECAO DE NOTAS

1085 IF NS-OS THEN GOTO 1080 1099 IF N<>32 AND N<>13 THEN G ndex=16 OR index-2!) OR index=21
1090 LET N-CODE (NS) OTO 1109 THEN GOTO 1080
1091 IF N = 33 THEN LET len=l 1100 IF lS="l" THEN LET ct-INT 1116 IF index=2 THEN LET t (num
ET IS = "Seniicolcheia" [num/2) EETURN
:
)=len: LET t (nutn+1 =-4 GOTO 11 )
:

1092 IF N = 64 THEN LET len=2 1102 LET ct-ct+INT ( (num-tn) /2) 27


ET IS="Colcheia" : RETUBN 111B IF indexOO THEN GOTO 108
1093 IF N-35 THEN LET len-4 1109 IF N<60 THEN LET lndex-N- 0
ET IS="Serainima" 1120 SOUND len/lO.mdndex)
1094 IF N = 36 TKEN LET len = 8 1110 IF N>90 THEN LET mdex-N- 1125 LET t(nLi)n)=lenr LET t (nlJ^>^
ET IS-"Mmima" 87 l -m ( 1 ndex)
)

1096 IF N=37 THEN LET len=li 1112 IF N>-60 AND N<-90 THEN G 1126 PRINT AT 15,0;INT (num/2)
LET IS="Semibreve" OTO 108 1;" notas na memoria"
1097 PRINT AT 17,16;" ";1S: 1115 IF index=S OR index=9 OB 1 1127 LET num=num+2
1130 LET OS=N5
1140 GOTO 1080

10 CLEAR 5000-MX=250
20 RlS-"whqeatu" R2S= " 1 2345678" :

30 R3S-"abcdef oCDFGAp"
40 NY$-"Q2W3ER5T6Y7UI9O0PZSXDCF
VBHNJM,L.Ç/[<"+CHR$ [30) +CHB3 31 (

)tCHRS(29)+CHRS(2B)+" "+CHBS<18
)+CHR$U27)+CHR$(13)+CHR$(ll)
50 DIM NS (MX) ,CS [12)
60 FOR I-1.T07:READ LES1I),L25(I
) NEXT
:

70 FOR I"1T012 READ CS I :NEXT


: ( )

80 DATA SEMI BREVE 1 MT NI MA. 2 SE . , ,

MÍNIMA. 4 .COLCHETA, 8. SEMI COLCHE1


A, 16. FUSA, 32 . SEMIFIISA. 64
90 DATA c.C. d ,D,e,f ,F,g,G.a, A,b
100 FOR 1-1 TO MX-NS (I) ="*•**"
NEXT
110NN=Q: OC3-"4":TE-120:LES="w
' rLE-1
120 CLSrCOLOR 15.2:KEY OFF:LOCA
TE 4.1:PRINT"COMPOSIT0R MUSICAL
MENU PRINCIPAL"
130 LOCATE 6,3:PRTNT"1:RECUPERA
MUSICA DA FITA"
140 LOCATE 6,4:PRINT"2:SALVA MU
SICA NA FITA"
150 LOCATE 6,5:PRINT"3:TOQUE NO
TECLADO"
160 LOCATE 6 ,6: PRINT"4 COLOQUE :

UMA TABELA DE NOTAS"


170 LOCATE 6, 7 PR INT." 5 MUDE O T
: :

EMPO DE EXECUÇÃO"
180 LOCATE 6,8:PRINT"6:LISTA/ED
ITA NOTAS"
190 LOCATE 6,9:PBINT"7:TOCA A M
USICA DA MEMORIA"
200 LOCATE 6,10: PBINT"8 MUDANÇA !

GERAL DE OTTAVA"
210 LOCATE 6. 11 PR1NT"9 :SAI DO
:

PROGRAMA
220 LOCATE 5,19: PRINT" ENTBE COM
O NUMERO DA OPCAO"
230 AS-INKEYS :IF AS<"1" OB AS>
"9" THEN230
33 mlcACOÍS 33

240 OP-VAL(AS) 640 GOTO 750


250 ON OP GOSUB 2080,2210,500,8
10.300,1510,1760,1910,270
260 GOTO 120
270 CLS:PBINT"VOCÊ TEM CEBTEZM
d
10 CLEAR 5000
S/N)?" 20 MX-250:RlS--«hqeB- :R2S-"1234
280 A3-INKEY$:IF A$<>"S* AND A$ 5":R3$-"abcdefgCDFGAp" :NYS-"Q2W MELHORE A QUALIOADE DO SOM
<>"N" THEN 280 3ER5T6Y7UI9O0PÍAZSXDCVGBHNMK L .

290 IF AS-"S" THEN CLSrCOLOR 15 "+CHR3!103)+-/-->CHR3(10)*CHR3( O programa apresentado neste ar-


,4:END ELSE 120 8)+CHHS(9)+" "+CHR$[2D+CHR5(93 tigo é bastante satisfatório para a
300 CLS:C0LOB 15,4: PRINT"MUDANÇ )+CHHS(13)+CHBS(12) composição e execução musical a ní-
A DO TEMPO DE EXECUÇÃO" 30 DIM NSIMXÍ ,C3{12) vel amador. Os músicos profissionais,
310 PBINT PB I NT "TEMPO ATUAL "
:
:
;
40 FOR 1-1 TO 5 BEAD LES I! L2S ( ) .
entretanto, logo notarão suas limita-
E (I) NEXT
: ções entre elas. a falta de recur
-

320 PRINT* ENTRE NOVO VALOR DE T SO FOR 1-1 TO 12 HEAD C$(I):NEX


:
sos para a modulação do timbre (o
EMPO" INPUT 3T
; : T que diferencia os vários instrumen-
330 IF ST-0 THEN BETUBN 60 DATA SEMIBREVE.1,MINIMA,2.SE
tos entre si quanto à sonoridadel e
340 IF ST<32 OB ST>255 THEN 320 MINIMA,4,C0LCHEIA,8,SEMIC0LCHEI
a impossibilidade de se obter efeitos
350 TE-ST: BETUBN A, 16
OI c.C.d,D,e,£.F.9,G,a,A,b polifõnicos. Mas a culpa não é do
360 LOCATE 6,7: PRTNT"NOTA 70 DATA
TAVA DUBAÇRO" 80 FOR 1-1 TO MX:NS(I)-"**"**:N programa.
370 U-9 EXT Mesmo o MSX, o microcomputador
380 FOR L-NN-5TONN 90 NN-0:OCS-"3":TE-8:LES-"w ":L mais sofisticado em termos de progra-
390 IF LO THEN 490 E-l mação de efeitos sonoros, não é capaz
400 LOCATE 1,U: PRINT TAB(20)i" 100 CLS PRINTêâ " COMPÓSITOS MUS
:
,

de verdadeiro sinteti
substituir um
ICAL": PRINT 640, "MENU PRINCIPAL dor musical. Este permite a simulação
410 LOCATE J.,U:PRINT USING"I*#
de um grande número de instrumentos
"iLi 110 PRlNTe96,"l:RECUPERA MUSICA
420 AS=NS(L) DA FITA" de sopro, corda ou percussão, através
430 BS=LEFTS(AS.l) :IF BS>="a" A 120 PRINT"2:SALVA MUSICA ATUAL da manipulação das formas de onda.
ND BS<-"0* THEN C3=CHRS(ASC(BS) NA FITA" Acoplando-o a seu microcomputador,
-32)+" "ELSE CS-BS+"!"
"
130 PRINT" 3 TOQUE NO TECLADO"
: por meio de uma interface MIDI Iveja
440 IF BS="P" THEN C«-"- 140 PRINT"4:C0L0QUE UMA TABELA o artigo da página 1 306), você poderá
";C$;" " ;MID
450 PB TNT " DE NOTAS" conseguir a qualidade máxima em ma-
SÍA3.2.1) i" 'I 150 PRINT"5:MUDE O TEMPO DE DUR téria de som.
460 PBINT LES<INSTB(RJS.MIDS(AS ACAO"
,3.1) ) ) 160 PRINT" 6 LISTA/ EDI TA NOTAS"
IF MID$(A5. 4,1)-". "THEN PRI
!

470 IF MIDS(AS.4.D-"-" THEN PR )70 PRlNT"7:TOCA A MUSICA DA ME 390


INT" ." ELSE PRINT MOBIA" NT". "ELSE PRINT
480 U-U+l 180 PHINT"8:MUDA A OITAVA GERAL 400 IF RTO0THEN RETUHN
490 NEXTL: BETUBN 410 NEXT L RETURN :

CLS PRINTS7 "MUDE OPCAO TEM


,

500 CLS:COLOR 15 4 15 C-VAL {OCS , , :


190 PRINT"9:SAI DO PROGRAMA" 420 ;

):IF C>6 THEN C-6 :OCS-"6" 200 PRINTê452. "ENTRE O NUMERO D PO"
A OPCAO" 430 PRINT PR INT "TEMPO ATUAL E"
510 LOCATE 13,1: PH TNT "MODO ORG&
:

210 A3-INKEYS:IF AS<"1" OR AS>" TE


O" 440 PRINTB1 28 " ENTRE NOVO VALOR ,

;" 9" THEN 210


520 LOCATE 16,4: PBINT DE TEMPO" INPUT ST
220 OP-VAL(AS) i :

230 ON OP GOSUB 1900,2020,480,7 450 IF ST-0 THEN RETURN


530 LOCATE 1 3 PRINT"OITAVA MAX
,

IF ST<0ORST>255 THEN 440


:

60,420,1360,1560,1720,250 460
IMA-"tC:TAB(46) "DUBACAO " ;LES(
:
[

Z40 GOTO 100 470 TE-ST RETURN


INSTR (BIS, LEFT3 (LES. 1)
:
)
480 CLS:POKE282,255:C-VAL(OCS)
) ;

540 TF MIDSUES. 2. !>'"" THEN P 250 CLS:PRINT" VOCE TEM CERTE2A


<S/N)?":POKE 2B2.255 IF C>3 THEN C-3:OCS-"3"
BINT" " ELSE PRINT
.

260 AS-INKEYS:IF A$0"S" AND AS 490 PRINT67 "MODO ORGAO" ,

550 LOCATE 0,19:PRINT"


<>"N" THEN 260 500 PP,INTe64,"OITAvA:";C;TAB(10
270 IF AS-"S" THEN CLS END ELSE : ) "DURAÇÃO " LES INSTB (R IS LEFT
; :
i ! ,

100 SILES, 1) ) )

280 PRINT6132,"NOTA OITAVA D >10 IF MID$(LES.2,1)-"." THEN P


URACAO" R 1!NT" " ELSE PRINT .

290 RT-0 520 PRINTe448,"C/B-OITAVA


300 FOR L-160 TO 320 STEP 32: PR ESO/DR=DUHACAO ENTER-MENU
INT€L NEXTL PBINTêl60
: : ,
" ;
CLEAR-APAGAH"
310 FOB L-NN-5TO NN 530 GOSUB 280
580 GOSUB 360 540 IF NN-MX THEN PBINTS416 "MA
,

590 IF NN-MX THEN LOCATE 1,18:P 320 IF L<1 THEN 410


330 PRINTUSING"!»! ";Li XIMO NUMERO DE NOTAS COLOCADO!"
B TNT "MAX IMO NUMEBO DE NOTAS COL :FORD-lTO10Q0:NEXT:RETUBN
OCADO!"; FOR S-ITO300C) NEXT RET : 340 AS-N$(L) ;

550 IS=INKEYS:IF IS-"" THEN 550


:
:

URN 350 BS-LEFT3(AS,1) :IF BS>-"a"AN


D BS<-"0" THEN CS-CHRStASC(BS)- 560 P-INSTR(NYS.IS) :IF P=0 THEN
600 IS-TNKEYS:IF 13 = "" THEN 600 550
610 P-INSTRfNYS.IS) :IF P=0 THEN 32)+" "ELSE CS-BS+"i"
360 IF BS-"P" THEN CS-""
" 570 IF P>36 THEN 600
600 580 OCS-MIDS(STR5(C+INT((P-l)/l
620 IF P>36 THEN 650 370 PRINT CS;" ";MIDS(AS,2.
1);" 2) ) , 2) :I$-CS(P-12*INT{ (P-D/12)
630 0C$=MI03(STRSCC+INT((P-1)/1
2) ) .2) :IS=CSÍP-12*INT( (P-D/12)
)

590 GOTO 700


" " " 1

IIIIIIIIHH lllllllll
READ E DATA
àAIS ©PEIRÂCOi MENUS E OPÇÕES
RECUPERAÇÃO DE PALAVRAS

ahha OUSO DE
A INSTRUÇÃO CLEAR
MACROS

Apresentamos neste artigo algumas da com duas cadeias de formatos dife-


50 IF M<1 OR M>12 THEN GOTO 40 na linha 60 do programa.
rentes,
funções e rotinas relativamente
60 PRINT "ESTE MES TEM "; Em computadores que não aceitam
simples, que podem facilitar bastante 70 PRINT MIDSfCS. (M-l)«2 + l,2) ;
funções com mais de um argumento,
"DIAS.
as tarefas que envolvem a manipulação pode-se empregar uma sub-rotina, mais
80 GOTO 4 0
longa, mas igualmente útil:
! caracteres. Conheça-as.
Os números de dias referentes a ca-
da mês são colocados na cadeia de ca-
racteres CS. A função da linha 70 extrai
A maneira mais adequada de armaze- o número de dias do mês M (especifica-
nar conjumos de dados numéricos ou al- do no programa de teste, pela entrada 20 LET MS=" JANFEVMARABRMAIJUNJU
fanuméricos dentro de um programa em da linha 40) usando a expressão: LAGOSETOUTNOVDEZ"
BASIC consiste em colocá-los em linhas 30 LET CS--31293130313031313031
3031"
DATA, e lê-los com comandos READ. posição inicial em MS = (M - 1)*2+ 40 INPUT "ENTRE O NUMERO DO MES
Porém, quando o número de dados número de dígitos = 2 " :M
épequeno, não compensa introduzi-los 50 IF M<1 OR M>12 THEN GOTO 98
em linhas DATA e acrescentar ao pro- Note que, se M
= 1, a posição inicial 55 LET I-M
grama comandos destinados a lê-los e em MS é I. Esta é uma fórmula geral, 60 LET L-3
carregá-los em variáveis indexadas. É que pode ser usada para extrair subca- 65 LET XS-MS
muito mais conveniente colocar os da- deias decomprimento fixo, concatena- 70 GOSUB 100
dos dentro de uma única variável siring, das em uma única cadeia. 75 PRINT S$I" TEM "
|

de tal forma que possamos recuperá-los Nos computadores que têm funções 80 LET X$=C$
85 GOSUB 100
ou consultá-los por meio de uma sub- programáveis do tipo string, essa fórmu-
90 PRINT SS;" DIAS."
rotina ou função. la pode ser colocada dentro de uma fun-
95 GOTO 40
Esta é também a melhor solução pa- ção, e usada repetidas vezes, como nes- 98 PRINT: PRINT "DATA INVALIDA"
ra os usuários de computadores que não te programa: 99 GOTO 40
dispõem dos comandos READ e DA- 100 LET S$-MIDS(XS. <I-1)»L+1,L)
TA, como os micros pessoais ZX-81. 110 RETURN

TRINTA DIAS TEM SETEMBRO... 10 DEF FNTSU.L.SS)-MIDS(S$, (I-


1) *L+1,L)
20 LET MS~" JANFEVMARABRMAIJUNJU
O programa que se segue exemplifi- LAGOS ETOUTNOVDE Z Para rodar o programa nos micros
cabem o procedimento sugerido. Ele in- 30 LET CS-"31293130313031313031 Spectrum e ZX-81, substitua a linha 100
forma quantos dias tem um determina- 3031" do programa:
do mês do ano: 40 INPUT "ENTRE 0 NUMERO DO MES
";M
50 IF M<1 OR M>12 THEN GOTO 80
60 PRINT FNTS (M 3 MS) " - " FNT
, ,
[
i

S(M, 2, CS) ;" DIAS."


20 LET CS«"3129313O313031313031 70 GOTO 40
3031" 80 PRINT: PRINT "DATA INVALIDA":
40 PRINT "ENTRE 0 NUMERO DO MES GOTO 40
Outra aplicação bastante interessan-
45 INPUT M te dos conceitos aqui discutidos consis-
50 IF M<1 OR M>12 THEN GOTO 40 te na programação rápida de menus com
60 PRINT "ESTE MES TEM entradas por extenso. As várias opções,
Para executar o programa no Spec-
70 PRINT CS(<M-1)*2+1 TO (M"l)" colocadas em uma única variável string,
trum, substitua a linha 10:
2+2) DIAS. são depois recuperadas pelo método já
80 GOTO 4 0
descrito:

20 CS-"312931303130313130313031
Na função FNTS, definida na linha
10, o primeiro argumento é o índice; o
segundo, o tamanho fixo das subcadeias
DHBliM
10 LET FL3-"INSEREEDITARAPAGARL
e o terceiro,o nome da cadeia com os ISTAR"
40 INPUT "ENTRE O NUMERO DO MES dados. Note que a mesma função é usa- 20 PRINT "ENTRE UM COMANDO "iF : I
; "

IIIIIIIIIHHM
LS;" "i
30 INPUT OPS
40 FOR 1=1 TO 4
sível. Suponhamos que, na programa-
ção de um jogo de aventura, você peça
ao jogador que entre a lista dos objetos
DD
50 LET DS-«ID$(FLS, (I-l)*6+l,6) que ele quer levar em uma incursão a um Para rodar nesses computadores, acres-
60 IF DS-OP3 THEN GOTO 80 castelo mal -assombrado. Nesse caso, os cente a seguinte linha:
65 NEXT I comprimentos das palavras contidas na
70 PRINT -CÓDIGO INVALIDO" 10 CLEAR 1000
cadeia de entrada podem ser bastante di-
75 GOTO 20
80 PRINT "COMANDO ESCOLHIDO ->
ferentes entre si, o que exigiria a elabo- A
linha 100 inicializa a cadeia de saí-

";DS ração de um programa um pouco mais da, AS. A


linha ! 10 começa um laço de
90 GOTO 20 "inteligente". repetição, testando se a cadeia de entra-
Se determinarmos, por exemplo, que da, CSS, é vazia —
ou seja, se todas as
o caractere de separação entre palavras palavras nela contidas já foram extraí-
é o espaço em branco, a seguinte rotina das. Em
caso afirmativo, a sub-rotina
realizará o trabalho: retorna o controle ao programa que a
Substitua a seguinte linha do progra- chamou. A linha 120 verifica se o pri-
ma para micros da linha Sinclair: meiro dos caracteres que restaram em
CSS é um espaço em branco. Se for, ele
é "podado" de CSS, e o programa re-
80 REM SUBROTINA torna para a linha 100, para executar um
100 LET AS-"" novo teste. Se o primeiro caractere não
Para os micros que dispõem da ins-
110 IF CS$(1)-"" THEN RETURN for um espaço em branco, a linha 130
trução INSTR, que localiza subcadeias,
120 IF CSSUJO" " THEN GOTO 13 retira-o de CSS, levando-o para AS. Fi-
e de funções programáveis, podemos fa-
D nalmente, se um novo espaço em bran-
zer um programa mais compacto: 125 LET CSS-CSS (2 TO) co for encontrado (fim de subcadeia),
127 GOTO 100

El
5
HM
DEF FNC(0$,CS.N)-INT<(INSTR(0
130
135
140
LET A5-AS+CSSÍ1Í
LET CSS-CS$(2 TO)
IF CS$<1)="" OR CSS(l)-"
THEN RETURN
"
ou se CSS tiver se esgotado, a linha 140
retorna o controle ao seu programa
principal.

S.LEFTSCCS+STRINGStN," "),M))-1 150 GOTO 130


)/N)+l SUBSTITUIÇÃO DE SUBCADEIAS
"
10 0S-"CR CH PD DB AT
20 PRINT "ENTRE O CÓDIGO DA TRA
NSACAO "
30 PRINT * (CÓDIGOS VALIDOS: ";0
Si El GE GD M a
Uma das funções mais úteis de
programa de processamento de
um
textos è
que permite substituir todas as ocor-
3;-)- B0 REM SUBROTINA
100 AS-""
rências de uma determinada palavra, ou
40 LINE INPUT "CÓDIGO " ;C$
sequência de caracteres, em um docu-
:

50 I-FNC(0$,CS,3) 110 IF MIDS(CS$,1.1)="" THEN RE


60 IF 1-0 THEN PRINT CODIG TURN mento. Essa função possibilita, entre
O INVALIDO" :GOTO 30 120 IF MIDStCSS.1.1)-" " THEN C outras coisas, o uso de macros para a
70 PRINT "CÓDIGO " ;1 SS-MIDS(CS3,2) :GOTO 100 redaçào rápida de textos muito repetiti-
80 GOTO 20 130 AS=AS+MID$(CS$.1.1) :CSS=MID vos. Digamos que você esteja escreven-
5(CSS.2) do um artigo sobre processamento de
A função FNC$ retorna o numero da 140 IF MIDS(CSÇ,1,1)-"" OR MIDS imagens, e que essa expressão ("proces-
(CSS, 1,1)-" " THEN RETURN samento de imagens") será citada algu-
opção (posição sequencial na cadeia). 150 GOTO 130
Seus argumentos de entrada são: mas dezenas de vezes, por extenso, ao
A cadeia de entrada é CSS. A cada longo do texto. Para poupar tempo e es-
OS: cadeia que contém as opções; chamada da rotina, AS retorna uma forço, sempre que for preciso digítá-la,
C$: subcadeia procurada em OS; subcadeia contida entre dois espaços em você poderá colocar um símbolo qual-
N: tamanho fixo das subcadeias. branco, em CSS; extraindo-a, reduz o quer em seu lugar —
por exemplo, dois
tamanho de CSS. caracteres que dificilmente aparecerão
É necessário espaços
colocar em Eis um programa que testa o funcio- juntos em outras partes do texto: *P, $%
branco para separar os comandos arma- namento dessa rotina: etc. Depois, bastará acionar a função de

zenados em OS. Se isso não for feito, busca e substituição, e o programa tro-
a função INSTR pode encontrar subca- cará o símbolo convencionado pela ex-
deias superpostas, que não correspon- pressão por extenso, sempre que o en-
dem às opções possíveis. contrar.
20 PRINT "ENTRE TRES COISAS QUE Programar essa operação em BASIC
CARREGARA (SEPARADAS POR ESPA não chega a ser difícil, mas envolve al-
:"
RECUPERAÇÃO DE PALAVRAS COS) gumas complicações, pois a sequência
30 INPUT CSS que irá substituir o símbolo no texto po-
A recuperação de palavras, códigos 40 LET N-0 de ter um número de caracteres menor,
50 PRINT"VOCE CARREGARA
!

ou números de uma lista, efetuada de igual ou maior. Além disso, a maioria


55 GOSUB 100
acordo com o método que acabamos de dos microcomputadores não aceita va-
60 IF AS-"" THEN GOTO 80
explicar, requer que todos eles tenham riáveis string, com mais de 255 caracte-
70 LET N-N+1:PRINT N.AS
o mesmo comprimento, de modo a per- 75 GOTO 60 res. Assim, durante o processo de subs-
mitir a aplicação de uma fórmula. 80 PRINT "E MAIS NADA..." tituição, é necessário fazer com que o
I Isso nem sempre é desejável ou pos- 90 STOP programa verifique esse número, para
IIIIIIIIIHHH llllllll!
não ocorrer nenhum erro. Apresenta- nha 160 efetua a substituição, concate- quanto às funções de tratamento de va-
mos, a seguir, uma sub-rotina de busca nando a primeira seção de AS, até a riáveis literais. No primeiro grupo, cha-
e substituição, que você poderá adicio- ocorrência de BS, mais CS e a parte res- mado Microsoft (nome da software
nar a seus programas: tante de AS. N é então atualizado e house norte- americana responsável pe-
ocorre nova busca por B$ (retorno à li- lo desenvolvimento do BASIC padrão
nha 110). para os micros MSX, TK-2000, Apple
II, TRS-80 e TRS-Color, entre outros),
encontramos funções familiares como
100 LET N-l LEFTS, RIGHTS, MIDS, INSTR etc.
110 1F LEN AS -LEN BS +LEN CS > Nos micros com função INSTR (ins- No segundo grupo, denominado Sin-
255 THEN RETUBN tring), o laço das linhas 120 a 140 pode clair (destinado às máquinas compatí-
120 FOB I-N TO LEN AS
130 IF ASU TO I+LEN BS-D-BS T
ser substituído por uma só linha: veis com as linhas ZX-81 e Spectrum),
a cadeia de caracteres é tratada como
HEN GOTO 160 120 I-INSTR(I,AS,BS> :IF 1-0 THE
140 NEXT I um conjunto dimensionado, e a partí-
N RETURN cula TOse encarrega da referência às
150 RETURN
160 LET AS-ASÍTO 1-1 +CS+AS I+L
) ( subcadeias de um string.
Esta listagem testa a sub-rotina de
EN BS TO) Os interpretadores do tipo Microsoft
substituição. Ela é auto-explícativa:
170 LET N-I+LEN CS também diferem dos do tipo Sinclair
180 GOTO 110 quanto ao gerenciamento do espaço dis-
SSíiQBlilM ponível na memória RAM para variá-
veis literais e numéricas. Ambos, porém,

20 PRINT " ENTRE UMA FRASE


armazenam uma variável literal de for-

100 N-l 25 INPUT AS ma semelhante (veja o artigo da página


110 IF LEN(AS)-L£N(BS)+LEN{CS>> 30 PRINT " PALAVRA PARA SUBSTITU 1101): uma cadeia pode ter entre 0 e 255
255 THEN RETURN IR - :
caracteres, armazenados em um conjun-
120 FOR I-N TO LEN (AS) 35 INPUT BS to contíguo de bytes. O primeiro byte de
130 IF MIDS(AS,I.LEN(BS))-B$ TH 40 PRINT "POR um usado para armazenar o seu
string é
EN GOTO 160 45 INPUT CS comprimento, ou seja, o número de ca-
140 NEXT I RETURN : 50 GOSUB 100 racteres que possui. Essa informação é
160 AS-LEFTS(AS.I-1)+CS+MIDS(AS 60 PRINT AS usada, por exemplo, pela função LEN,
.I+LEN(BS)) 70 GOTO 20
disponível nos dois tipos de interpreta-
170 N-I+LEN<CS)
1B0 GOTO 110

Os argumentos de entrada da sub-


rotina são:
QQPara rodar o programa no TRS-80 e
dor, que informa o comprimento da ca-
deia. Se uma variável string for conca-
tenada através de uma expressão como
LET AS = AS + BS, o interpretador ma-
AS - cadeia que terá substituições; no TRS-Color, adicione esta linha: nipula A$ e BS de modo a transferi-los
BS - subcadeia em AS a substituir; para uma área livre da memória RAM,
CS • subcadeia que substituirá BS. 10 CLEAB 1000 colocá-los um após o outro, eliminar o
Suponhamos que a célebre frase de byte de comprimento do segundo string
Gertrude Stein: Se você quiser substituir todas as (B$) e atualizar o valor armazenado no
ocorrências de uma subcadeia, em um byte de comprimento do primeiro string
UMA ROSA E" UMA ROSA E' UMA texto composto de várias linhas (arma- (AS).
ROSA zenadas em DATA, por exemplo), uti- Como se pode concluir, as operações
lize o próximo programa. Não se esque- de concatenação são lentas, devendo ser
deverá ser transformada em outra (não ça de colocar uma última linha DATA evitadas quando possível. Além disso,
menos poética):
"*" para assinalar o fim do texto: exigem uma
área livre de memória para
a execução da cópia —
os originais dos
UMA PEDRA
UMA PEDRA
E* UMA PEDRA E'
SUBIU EDTO dois strings AS e BS continuam no mes-
mo lugar, mas "desativados" pelo in-
terpretador. Periodicamente, uma fun-
10 INPUT "PALAVRA PARA SUBSTITU
Neste exemplo, então: IB ção chamada "coleta de lixo" (garbage
20 INPUT "POR "j colleclion, em inglês) recupera essas
AS = UMA ROSA E' UMA ROSA E' 30 READ AS áreas para uso pelo programa.
UMA ROSA 40 IF AS"""" THEN GOTO 70 Quanto à reserva de espaço para
BS = ROSA 50 GOSUB 70:PRINT AS strings, na RAM, os interpretadores tam-
CS = PEDRA 60 GOTO 30 bém apresentam diferenças. Os do tipo
70 STOP
Sinclair operam automaticamente ou
A rotina funciona da seguinte manei- por meio de uma declaração D1M, que
ra: a linha 100 inicializa N em 1. Essa A INSTRUÇÃO CLEAR deve ser usada para dimensionar strings.
variável aponta o caractere de AS a par- Os do tipo Microsoft nem sempre pre-
tirdo qual B$ será procurado. Na linha A programação de variáveis string cisam de uma declaração explícita para
110, checamos se o comprimento total apresenta algumas diferenças conforme dimensionar o tamanho da área de
da cadeia substituída não excede 255. O o tipo de interpretador BASIC usado. strings. Nos micros das linhas TRS-80
laço que vai da linha 120 à 140 verifica Como vimos no artigo anterior des- e TRS-Color, a instrução CLEAR ser-
se B$ está presente em AS, a partir do ta série (página 1214), os interpretado- ve a esse propósito. No Apple e no
caractere N até o fim. Se estiver, a li- res se dividem em dois grandes grupos MSX, ela não é necessária.
Illlllll

Compartilhe informações profissionais

TROCA e de lazer com outras pessoas

através de seu micro. Basta ligá-lo por

um dos vários serviços

DE MENSAGENS
telefone a
computadorizados de "quadro de avisos"

dos proprietários de modems tomará tronco telefónico. Para baratear os cus-


No artigo Sua ligação com o mundo
contato com eles brevemente. tos operacionais, a maioria dos CBBS
(página 561), examinamos como o dis-
positivo especial chamado modem po- atende simultaneamente a um número
de conectar um micro a outros compu-
limitado de usuários —
normalmente
tadores, utilizando a linha telefónica.
CARREGAR E DESCARREGAR entre 1 e 5. À primeira vista, isso pare-
Através dele, uma grande variedade de ce pouco, porém, como veremos adian-
Os CBBS não são utilizados somen- te, é uma impressão falsa já que o tem-
bancos de dados computadorizados fi-

cará à disposição do usuário: cotações te como sistemas de mensagens. Na rea- po útil de conexão de cada usuário é ex-
lidade, sua rápida expansão se deve, tremamente curto: o suficiente para co-
das Bolsas, noticiários, referências bi-
bliográficas sobre assuntos técnicos etc. principalmente, ao fato de a maioria de- piar (download) as notícias ou progra-
Existem hoje, em todo o mundo, mais les dispor de um serviço especial que mas de interesse para seu disco.
de um milhão de pessoas que se benefi- possibilita a transmissão de software de O quadro de avisos central nada mais
ciam de redes de computadores. um computador para outro. No jargão éque a memória do micro que o gerên-
dos seus aficionados, uploading signi- cia.Hoje, a maioria dos CBBS dispõe
O acesso a esses sistemas, entretan-
to, não é algo exatamente barato, prin- fica o ato de enviar um software para de discos rígidos de maior capacidade,
cipalmente quando é necessário pagar li- armazenamento no CBBS, enquanto mas pode-se operá-los só com dois acio-
downloading quer dizer retirar uma có- nadores de disquetes como memória au-
gações internacionais (DDI). Além dis-
pia das informações disponíveis. É im- xiliar. Nesse caso, entretanto, a veloci-
so, muitos usuários se ressentem da fal-
ta de um contato mais pessoal entre portante ressaltar aqui que o micro que dade e a capacidade do sistema são sig-
manda e o que recebe a listagem do pro- nificativamente diminuídas.
quem fornece e quem recebe a informa-
ção —o que talvez explique, por exem- grama não precisam ser compatíveis en- Muitos dos CBBS recentemente sur-
tre si. Essa é, portanto, uma oportuni- gidos no Brasil constituem iniciativa de
plo, o sucesso e a popularidade do ra-
voluntários. Seguindo a tradição dos en-
dioamadorismo. Contudo, já existe um dade rara de transportar certos tipos de
software por meios incomuns. tusiastas da microinformática, eles são
equivalente desse hobby dentro do cam-
Oprincípio dessa ideia consiste em gratuitos (embora existam alguns, como
po das redes informatizadas de dados.
Trata-se da versão "doméstica" dos converter os programas em textos AS- o Sampa CBBS, em São Paulo, que se
grandes sistemas telemáticos (como CII (padronizados para todos os micros, tornaram tão grandes que foi necessá-
CompuServe e Cirandào) denominada que abordamos, menos o ZX-81) para rio fixar uma pequena taxa). Um
dos sé-
realizar a transmissão via modem. rios problemas desse sistema é impedir
Quadro de avisos computadorizado (do
inglês, bulletin board). Outro requisito para o trabalho de que pessoas não autorizadas tenham
copiar os programas disponíveis no acesso a ele. Usualmente, isso é feito
Um Compuierized Bulletin Board
atribuindo-se uma senha a cada mem-
Service (ou CBBS, como é mais conhe- CBBS é ter uma unidade de discos e um
ou compilador da lingua- bro. Contudo, essa é uma questão difí-
cido entre os aficionados) é, em sua for- interpretador
gem original do programa. Com eles, cil de ser solucionada, tanto que nem
ma mais simples, o equivalente eletrõ-
nico do quadro de avisos de um clube, poderemos carregar arquivos em forma- mesmo o Pentágono norte-americano
onde todos podem afixar notícias, reca- to ASCII. Os sistemas operacionais das vem obtendo sucesso no sentido de evi-
dos etc. Para ter acesso a um sistema linhas TRS-80, TRS-Color e MSX
ofe- tar que pessoas não autorizadas pene-

desse tipo, o usuário precisa —


além de recem essa facilidade sem requerer o em- trem em seus monstruosos "mainfra-
um telefone e de um micro —dos se- prego de programas conversores espe- mes". Na verdade, muitos CBBS rece-
guintes elementos: um modem, um soft- ciais. Em outros micros, o próprio soft- bem de braços abertos todos os intrusos.
ware específico para intercomunicação ware de transmissão pode incluir uma
e o número do telefone de um CBBS. pequena rotina que transforma texto em
O custo do acesso propriamente dito (ler programas e vice-versa. Além disso, al-
e/ou escrever no quadro de avisos), ge- guns CBBS são específicos para uma li-
ralmente muito baixo, varia segundo a nha de micros (os da linha Apple e IBM Evidentemente, a distância física entre

finalidade do serviço (comercial ou não) PC são os mais comuns), e permitem a o usuário e o CBBS não representa ne-

e inclui a despesa normal com a ligação transferência direta de programas entre nhum obstáculo, já que um computador
telefónica. dois computadores compatíveis, sem o pode perfeitamente se comunicar com
Embora os CBBS existam há algum arquivo ASCII intermediário. outro, em qualquer parte do mundo, des-
tempo (sobretudo nos EUA, onde fo- de que ambos tenham modems compa-
tíveis.Utilizando o equipamento corre-
ram criados), em nosso país eles ainda
COMO FUNCIONA UM CBBS to, você poderá se beneficiar de mais de
são uma novidade. Apenas as cidades
maiores, como São Paulo e Rio de Ja- 1.500 serviços de troca de mensagens es-
neiro, dispõem desse serviço. Tudo in- O quadro de avisos geralmente é palhados pelos EUA, Canadá e Europa.
dica, entretanto, que os CBBS se multi- "hospedado" por um microcomputador Em razão de não existirem padrões co-
ligado, porum ou mais modems, a um muns de comunicação entre europeus e
I plicarão rapidamente e que a maioria
IIIIIIMIMWM—— miiii
QUADRO DE AVISOS
0 QUE E 0 MELHOR MODEM
CARREGANDO E ACESSO ATRAVÉS DE MENUS
DESCARREGANDO INFORMAÇÕES EXPLORANDO A REDE
PADRÕES TÉCNICOS TERMINOLOGIA
VELOCIDADE DE TRANSMISSÃO ESPECIALIZADA

norte-americanos, o usuário que desejar por um país-membro. Indiretamente, is- (seu nome
deriva da fábrica dos modems
contatar CBBS dessas regiões deverá dis- so acaba facilitando a comunicação en- mais populares e baratos do país). O
pa-
por de modems diferences. tre todos os proprietários de computado- drão Bell também é muito usado.
O padrão adotado na Europa é o res. Cada país, porém, pode ter simulta-
CCITT, sigla de uma agência da ONU neamente outras convenções internas, de-
denominada Comité Consuhatif Interna- terminadas e aprovadas por órgãos esta- VELOCIDADES DE TRANSMISSÃO
tional Téléphonique et Télégraphique. tais, como o Contei (Conselho de Tele-
Essa agência estabelece convenções inter- comunicações), no Brasil. As agências de normatização, nacio-
nacionais para telecomunicações que po- Nos EUA, o chamado padrão Hayes nais e internacionais, deixam aos fabri-
dem também ser seguidas internamente é o mais comum para CBBS privados cantes de modems a criação de muitas
IHHHIIIIIIIIIII
outras convenções. Os modems são clas- cessidade de se reduzir os custos do ser- Classificamos o software de comuni-
sificados em função de diversos parâme- viço, até porque os Computerized Bul- cações em: burros e inteligentes. O in-
tros operacionais e de desempenho co- letin Board Service não dispõem dos re- teligente —essencial para quem deseja

mo, por exemplo, a velocidade de trans- cursos de hardware das grandes empre- operar um CBBS —
permite descarre-
missão. Agrande maioria dos CBBS — sas de telecomunicações. O fato de se- gar o programa (além de texto de men-
os mais baratos —
opera com modems rem empregados modems mais baratos sagens) e armazená-lo automaticamen-
implica o uso de uma taxa menor de te no disco. Já o software burro possi-
de 300 bauds, isto é, eles recebem e
transmitem dados à velocidade de 300 transmissão a fim de evitar erros causa- bilita apenas a comunicação simples,

bits por segundo. (O nome da unidade dos por interferências elétricas, normal- sem qualquer forma de armazenamen-
mente filtradas por equipamentos sofis- to ou listagem. Certos softwares inteli-
de medida baud é uma homenagem ao
engenheiro francês Baudot, considera- ticados. Com um modem barato ope- gentes oferecem recursos extremamen-
do o inventor de um código para telex.) rando a altas taxas, qualquer pulso na te úteis, entre eles o reconhecimento au-
Isso equivale, aproximadamente, a um rede poderia ser interpretado como um tomático — através do programa — do
bit enviado a cada 3.3 milissegundos. Já bit. Em velocidades pequenas, o pulso protocolo seguido pelo computador hos-
os sistemas mais avançados de telecomu- que define um bit é mais longo e, por- pedeiro e a armazenagem e discagem au-
nicações digitais seguem o padrão tanto, mais fácil de identificar. tomática de vários números de CBBS.
1200/75 baud: o computador central De qualquer modo, o ruído será sem- A
função básica do programa é a de
transmite dados à velocidade de 1200 pre um problema difícil de se resolver. permitir que o micro transmita e receba
Com a entrada em serviço das redes di- sinais (caracteres) pelo modem conecta-
bauds e o usuário os envia a apenas 75
bauds. Sistemas como o Cirandão, da gitais de comunicações baseadas em fi- do ao sistema, mantendo o sincronismo
Embratel, eo Videotexto utilizam essa bras ópticas, espera-se que os sinais se- entre o teclado, o vídeo e a memória. O
convenção (seu objetivo é reduzir o tem- jam mais "limpos" e rápidos. software orienta o computador por in-
po de ocupação do computador central, termédio de comandos relativos à for-
devido ao custo elevado, e impor os gas- ma com que os sinais serão transmitidos
tos da interaçâo ao usuário). e recebidos.
As taxas de transmissão normalmente Muitas pessoas não conseguem en-
são múltiplos de 300 (300, 600, 1200, Denominamos fuli-dupiex ou half- tender como dois computadores aparen-
2400 etc), duplicando progressivamen- duplex ao parâmetro que varia de mo- temente incompatíveis podem se comu-
dem para modem e diz respeito à simul- nicar. E são essas mesmas pessoas que
te até atingir 9500 bauds, que é o máxi-
mo em uso atualmente. taneidade das funções de transmissão e costumam criticar os fabricantes de mi-
Em muitos computadores, dependen- recepção. Full-duplex significa que um cros por constantemente ignorarem os
do dos padrões definidos pelo CCICT determinado modem é capaz de receber padrões que facilitam a interligação en-
para interfaces seriais RS-232, as volta- e transmitir informações ao mesmo tem- tre equipamentos distintos.

gens de representação dos números bi- po; half-duplex indica que ele executa Por meio do CBBS, temos a falsa im-
nários 0 e 1 são, respectivamente, + 12 apenas uma função de cada vez. pressão de que um computador está
Evidentemente, um modem half-du- identificando os comandos enviados por
e - 12 V. Os micros que usam as volta-
gens + 5 e 0 V necessitam de um con- plex é mais barato e adequado a traba- outro diferente (um Apple e um MSX,
versor, que geralmente é barato. lhos com micros domésticos, ou até a al- por exemplo). Na verdade, isso só acon-
gumas aplicações profissionais mais tece porque a maioria dos CBBS imple-
simples. Como é preciso aguardar uma menta seu software de acesso por meio
transmissão terminar antes de iniciar a de menus relativamente simples.
recepção (ou vice-versa), os erros come- Com eles, o usuário seleciona uma
Cada caractere de informação trans- tidos na operação poderão trazer alguns opção pressionando uma tecla ou digi-
mitido por um modem compõe-se, ba- inconvenientes. A possibilidade de se tando uma linha de comando. Do ou-
sicamente, de um de início (start bil),
bil consumir um tempo excessivo pratica- tro lado, um programa especial "varre"

dos bits de dados (data bits) de um bit mente desaconselha o uso deste equipa- o modem de recepção, de modo a cap-
tar os sinais enviados e a interpretar cor-
de paridade (parity bit), usado em tes- mento para trabalhos profissionais.
tes de erros de transmissão, e de um bit Os CBBS se tornaram viáveis graças retamente o pedido. A partir daí, os co-
de término (stop bit). Como vemos, à sofisticação do hardware e software de mandos adequados passam a ser acio-
existem mais bits do que os oito de um comunicações. O maior passo nesse sen- nados pelo computador hospedeiro.
byte; assim, para saber quantos bytes tido foi a introdução de modems ou re-
(caracteres de (exto) são enviados por se- cursos de autodiscagem (auto-diating,
em inglês) e auto-resposta (auto-answe-
EXPLORANDO OS CBBS
gundo, tomando como padrão uma ta-
xa de 300 bauds, por exemplo, dividi- ríng). A partir dessas inovações, as con-
mos esse número por 11. sultas ao computador hospedeiro do O
primeiro passo para explorar todos
Embora não haja uma sequência CBBS passaram a ser respondidas au- os recursos dos CBBS à sua disposição é
"natural" nem uma quantidade prees- tomaticamente com uma linha conecta- adquirir um modem adequado. Confor-
tabelecida para os diferentes bits que da entre receptor e transmissor. me abordamos, os CBBS normalmente
formam o caractere de transmissão, é adotam um tipo padrão de 300 bauds,
importante que tanto o emissor quanto com protocolo CCICT ou Hayes. Os sis-
o receptor reconheçam a convenção se- SOFTWARE PARA COMUNICAÇÕES temas comerciais, como o Videotexto e
guida. Além disso, ambos devem ser ca- o Cirandão, utilizam o padrão 1200/75.
pazes de formatar, enviar ou receber os Além do computador, do modem e Assim, o ideal é que o usuário compre
dados conforme a taxa padronizada. do telefone, faz-se necessário um soft- um modem que tenha uma chave de se-

A velocidade adotada por um CBBS ware especial que transforme o micro leção para cada modalidade.
I será escolhida levando-se em conta a ne- em um terminal de dados. O
segundo passo consiste em provi-
IIIIIIIIIHHM * sonwM , IHIIIIIi
denciar um software de comunicação (se ciários etc. ou à execução da opção. Rede - Em sua forma mais restrita, re-
ele já não tiver sido fornecido juntamen- Muitos CBBS possuem uma seção que fere-se à ligação direta entre vários com-
te com o modem). permite aos novos usuários registrar seus putadores com objetivos específicos
O terceiro passo é descobrir os núme- dados (endereço, nome, telefone e senha (normalmente para fins comerciais ou
ros de telefone dos CBBSe seus deta- de acesso). Outras opções oferecidas po- de pesquisa, como a rede brasileira
lhes técnicos de acesso. Esses dados po- dem incluir uma seção técnica, comuni- RENPAC). As redes dividem-se em dois
dem ser encontrados em revistas espe- cações com o gerente etc. tipos: a locai (LAN, ou Local Area Net-
cializadas de microcomputaçâo. O elemento fundamental do CBBS work), que, geralmente, envolve apenas
Superadas todas as questões, passa- está no quadro que contém avisos e no- a ligação direta entre micros e seus pe-
remos à parte prática da operação. Co- tas para conhecimento geral. Isso, po- riféricos ou a um computador central,
necte omodem ã linha telefónica e ao rém, não exclui a possibilidade de exis- e a telemática (WAN, ou Wide Area
microcomputador e execute o software tir também uma seção de mensagens Network), que inclui ligações remotas,
de comunicação. Caso a versão utiliza- pessoais: "caixas postais", com acesso via rede telefónica, microondas ou sa-
da disponha de autodiscagem, todo esse limitado por senhas secretas. Esse siste- télites. Através da LAN, os usuários po-
trabalho será feito automaticamente, ma permite deixar informações reserva- dem compartilhar recursos como discos
uma vez especificado o CBBS que se de- das para outros usuários ou formar sub- e impressoras. A WAN, por sua vez,
seja acessar. Do contrário, bastará ligar quadros de avisos dentro do CBBS. permite a intercomunicação e a conse-
o número telefónico do mesmo e aguar- quente troca de mensagens e transações
dar o sinal de recepção (geralmente um (como em uma rede de automação ban-
som agudo de poucos segundos denomi- TERMINOLOGIA cária,que liga várias agências aos com-
nado portadora). Recebido o aviso, pres- putadores centrais).
sione o botão que conecta o modem ã Há vários lermos técnicos que, em- Uma rede pode ser privada ou públi-
linha (se o equipamento for de conexão bora comuns no campo da comunicação ca. Existem vários exemplos de redes pú-
direta), ou coloque o bocal do telefone entre computadores, são pouco conhe- blicas, como o Cirandão, da Embratel,
nas "orelhas" de acoplamento (se for cidos em outros ramos da informática. ou o CompuServe, nos EUA, com mais
um modem acústico). Devido a isso, às vezes, cria-se uma certa de 250.000 usuários.
Para termos acesso a alguns CBBS, confusão sobre seu significado. Nos últimos anos, o termo rede vem
é necessário chamar o número deseja- A seguir, uma lista dos termos que perdendo sua especificidade, passando
do, deixar tocar uma vez, e, em segui- normalmente são mal interpretados: a significar qualquer forma de interco-
da, discar novamente esse número. Só municação realizada entre computado-
então o procedimento já descrito pode- Videotexto - Sistema especial de comu- res. Por esse conceito, todos os serviços
rá ser observado. nicação entre computadores, oferecido do tipo videotex também poderiam ser
Muitos CBBS funcionam de manei- como um serviço público pelas compa- considerados uma rede.
ra semelhante. No início da operação, nhias telefónicas. Através de uma linha
o usuário recebe uma mensagem que in- comum, o computador central envia ao Telex e leletex - Serviços em fase de in-
dica seu contato com o CBBS. Depois, usuário a informação (organizada em tegração a redes de computadores e que,
deve enviar uma senha de entrada e/ou páginas ou telas). Esta é recebida por por isso, ainda são confundidos. O te-
o número ou nome de identificação — um terminal especial de videotexto ou lex é um sistema telefónico de comuni-
principalmente se o uso do CBBS impli- um micro qualquer, que podem respon- cação de textos, de baixa velocidade (15
ca pagamento através de assinatura der fazendo novas solicitações de dados. bauds), gerenciado por uma central es-
mensal ou anual. Tais sistemas, entre- No Brasil, tem-se acesso aos sistemas de pecial computadorizada. Existem inter-
tanto, chegam a oferecer, por um tem- videotexto por meio de uma assinatura faces que permitem dar a um micro a
po limitado, algumas informações para mensal junto à companhia telefónica de função de um terminal de telex (daí se-
convidados e "intrusos", isto é, pessoas cada cidade. Na Europa, esse serviço, rem chamadas de microtelex).
ainda não registradas no serviço. implantado em vários países, é denomi- O teletex é uma evolução técnica do
Os CBBS gratuitos, dependendo do nado Preslel. telex e,muito provavelmente, seu subs-
tipo, podem solicitar seu nome e cidade tituto direto. Utiliza o mesmo sistema
ou endereço e número telefónico, bem Teletexto - Sistema semelhante e mais de comunicação, porém, a uma veloci-
como algumas especificações do micro barato que o videotexto. Aqui, en- dade bem maior, de modo a facilitar o
usado (modelo, tamanho da tela etc). tretanto, a informação é enviada apenas uso de micros como terminais. Ainda
Esses detalhes são importantes para que em um sentido (do computador central não foi implantado no Brasil.
o computador hospedeiro saiba como para o terminal), aproveitando o inter-
operar durante a comunicação. valo disponível entre dois quadros exi- Correio elelrõnico - Serviço oferecido
Na fase seguinte, você receberá infor- bidos pela TV. Este sistema não existe por diversos tipos de rede, videotexto ou
mações do CBBS: horários de funcio- no Brasil. Exemplos no exterior são os CBBS. Consiste, basicamente, de "cai-
namento, limite de tempo para cada CEEFAX e o ORACLE, utilizados na xas postais" (espaço reservado no dis-
chamada etc. Tais dados interessam, so- Inglaterra. Aparelhos de TV de algumas co central a cada assinante), capazes de
bretudo, aos CBBS voluntários, já que marcas já são fabricados com a interfa- receber mensagens individuais ou circu-
algumas chamadas são feitas em horá- ce embutida. lares, enviadas por outros usuários. A
rios inconvenientes (desagradando o comunicação é feita a nível privado, e
operador, que geralmente utiliza o tele- Vídeotex - Termo geral que engloba o vi- protegida por senhas. Em alguns países,
fone de sua própria casa para isso). deotexto, o teletexto e os CBBS. Criou-se o sistema é prerrogativa do serviço es-
Assim como o videotexto, a maioria uma certa confusão depois que alguns tatal de correios. No Brasil, como em
dos CBBS é operada através de menus. CBBS evoluíram e se transformaram em outras nações, esse monopólio já foi
A escolha de uma opção em um menu uma rede, apesar de conservarem o mes- rompido (Cirandão, Mensagem, Video-
poderá levar a menus secundários e ter- mo nome. texto).
34 APLICAÇÕES 34

Continue digitando nosso programa


editor de melodias. Com as listagens
fornecidas no próximo artigo da série,

ele ficará completo e você poderá dar


vazão a todo o seu talento musical.

Apresentamos aqui a segunda parte 4260 PRINT '"Qualquer tecla par


de nosso editor musical. Carregue a pri- a retornar "
meira parte da fita cassete ou disco e di- 2600 PRINT "Duração DEVE ter 2 4270 PAUSE 0
gite,na sequência, a listagem dada abai-
dígitos" "ex. 3304-D», Colchei
'
4280 GOTO 4000
a 3a. oitava""ex. 6408-Ft. Min 4320 CLS
xo. Depois, grave as duas partes para
ima 4a. oitava" 4330 GOSUB 2500
juntá-las à que iremos publicar no pró- 2630 HETURN
ximo e último artigo da série —onde vo- 3000 CLS
cê encontrará, também, instruções de- 3010 PRINT "Tocar musica"
talhadas para uma eficiente utilização 3020 PRINT PRINT
: PRINT:

do programa. 3030 PRINT "Digite Tempo - (1- 650 P-P-36


Comovocê terá oportunidade de ob- 15) 660 IF P-1ANDCÍ6THEN OC+1:OCS-
servar, àmedida que for digitando, o 3040 INPUT 3 MIDS(STRSÍC) 2) ,

3050 IF S<1 OR S>15 THEN GOTO 670 IF P-2AND01THEN C-C-l:OCS-


programa é composto por várias sub-ro-
3000 MIDS(STR3(C) .2)
tinas chamadas do menu principal. É
3060 LET teapo-0 .02* (16-8) 680 IF(P-30RP-6)AND LE>1 THEN L
possível ter uma ideia da função de ca- "
da uma delas lendo os itens do menu — 3070
30BO
FOR 1-1 TO ct
LET D-U2M-1): LET M-t(2*
E=LE-1:LES-W1D3(H1S.LE.1)+"
690 IF(P-40RP-7)AND LE<7THEN LE
que pode ser exibido na tela ainda que i)
o programa esteja incompleto. 3090 IF n— 4 THEN GOTO 3120
3100 SOUND D*tempo.M
3110 GOTO 3130
3120 PAUSE 50«D»tempo
3130 NEXT 1
2000 CLS 3140 RETURN
2010 GOSUB 2500 4000 CLS
2140 PHINT "et;" Notas tecladas 4010 PRINT "EDITOR MUSICAL" "' -

( ;naxnotea; "Max. ) " '


"D - Mostrar todas as notas"''"
2160 INPUT "Entre Notas - <RET> E - Editar una nota"""I - Insa
para acabar" ;NS rir una nota"''*X - Apagar uma
2175 IF LEN (NS) -0 THEN GOTO 1 Retornar ao nenu
90 principal"
2180 FOB l-l TO LEN (NS) IF (N : 4090 PRINT "Escolha i

3(l)<"0" OB NS(l>>"9") AND (N$(


i)0"j") THEN GOTO 2000 4100 LET OS-INKEYS: IF OS-"" TH
2190 LET N-VAL (N3) EN GOTO 41 OU
2200 IF INT (N/1000) >11 AND INT 4105 IF CODE (OSX97 THEN LET
(N/10001O-4 THEN GOTO 2000 OS-CHRS (CODE (OS) +32)
2210 IF ti<0 THEN GOTO 2280 4110 IF 0$<>"d" AND 03<>"e" AND
2220 LET M-INT (N/100): LET D-N OSO"l" AND OS<>"r" AND QSO"x
-M"10G " THEN GOTO 4000
2230 LET 0 = M-INT (M/1Q)»10: IF 4120 IF OS="r" THEN RETURN
0<1 OR 0>7 THEN GOTO 2000 4130 IF 0$-"e" THEN GOTO 4300
2240 LET M=INT (M/10) + (0- 1 *1 2- )
4134 IF OS="l" THEN GOTO 4700
36 4136 IF OS="x" THEN GOTO 4800
2260 LET ct-ct+1: LET t(2*ct-l) 4140 CLS
=D: LET t (2*ct)=M 4150 FOR l-l TO ct
2*270 GOTO 2000 4160 LET M=t(2*i): LET D«=t(2*i-
2280 LET M = -4: LET D=0- (N-MM00 1)
)
4170 LET 0=INT (M+36) /l 2 +1
( )

2290 IF MO-4 THEN GOTO 2000 4180 LET NMM+36)-(0-l)*12


2310 GOTO 2260 4190 PRINT i;" Nota- ";N;" Oit.
2500 PRINT "Entre a Nota na for - " ;0; " Dur - " |B
.

ma -Numero'?. <Oitava>, <Duracao 4195 POKE 23692,255


4200 IF i-20*INT (i/20) THEN G
2520 PRINT "C - 0 E - 4 G|- OTO 4220
8"'"C*- 1 F - 5 A - 9"'*D 4210 GOTO 4250
- 2 Fl- 6 Al- 10"'"D|- 3 4220 PHINT '"Qualquer tecla par
0-7 B - 11" a continuar "
2560 PRINT '"PAUSA e -4"' "Seni '
42 30 PAUSE 0
colcheia-1 Mínima = 8"'"Col 4240 PRINT
cheia -2 Semibreve=16" "Se '
4250 NEXT i
) : ; 4
( >

34 APUCACÒIS 34

m SEGUNDA PARTE
DO PROGRAMA EDITOR
GRAVAÇÃO E LEITURA
DIGITAÇÃO DAS
SUB-ROTINAS

-LE+1:LES-MIDS(R1S,LE,1)+" * 780 PL$-PLS+PStPLAY PLS 890 IF A3-"n"OR AS-"M" THEN RET


700 IF P-5 THEN IS="P" PS-" " GO
: : 790 NN-NN+l:NS(NN)-IS+OCS+LES URN
TO 750 800 GOTO 5B0 900 IF LEN(AS)>40RLEN(AS)<3 THE
710 IF P-60BP-7 THEN LES=LEFTS( 810 CLS:COLOR 4,15 N 970
LES.D+V "
B20 LOCATE 3,2: PP T NT" ENTRADA MA 910 IF <INSTR(R33.LEFTS(AS,ln
720 IF P-8 THEN RETURN NUAL DE NOTAS"; -O THEN970
730 IF P=9 AND NN>0 THEN NN-NN- 830 LOCATE 3 1B PRINT" 'a'
. : RETO 920 IF LEFTS(AS.l)-"p" THEN A3-
1 RNAR-MENU PRINCIPAL" -p"+" "+MIDS(AS,3) :GOTO 940
740 GOTO 510 840 LOCATE 3 19 PRINT"USE FORMA
, : 930 IF <INSTR{R2$,MIDS(AS,2.1>)
750 U$-"L":IF I$>-"a" AND ISC-" TO:alh. (
'
.
'opcional) )-0 THEN 970
g" THEN PS-CHRS(ASC(IS)-32) ELS 650 GOSUB 360:LOOATE 3,21: PRINT 940 IF (INSTR(R13,MID3(AS.3.1))
E IF I$O p p"THEN P$-IS+"í"ELSE "ENTRE STRTNG NOTA:"; )-0 THEN 970
PS-"":ttS-"R" 860 IF NN*MX THEN LOCATE 1,23:P 950 IF MIDS(A$,4.1)<>-." THEN A
760 PLS-"V15T"+STRS<TE)+"0"+OC$ RINT-MAXIMO NUMERO DE NOTAS COL 3-LEFTS(A3.3)+" "
+US+L2S (INSTR (RIS. LEFT3 (LES 1)
, OCADO!":FOR S-1TO1000: NEXT RETU ! 960 GOTO 990
) RN 970 LOCATE 21,21: PRINT "ENTRADA
ILEGAL!":CHR3(7)
980 LOCATE 21,21:PRINT"
" :GOTO 850
990 NN-NN+1 :NS (NN) "AS
1000 GOTO B50
1010 IF NN-0 THEN RETURN
1020 COLOR l,15:LOCATE 0 , 0 : PRIN
T "MODO EDIÇÃO- 1/2/3/4

1030 LOCATE 0,1:PRINT STRINGS(4


0, 32)
1040 LOCATE 0.2:PflrNT STRTNG$ (4
0,32)
1050 LOCATE 0.18:PRINT STRINGSI
40,32)
1060 LOCATE 0,3: PRINT STRINGS(4
0.32)
1070 LOCATE 2,20: PRINT" 1 APAGAR :

NOTAS"
1080 LOCATE 2 21 PRINT" 2 INSERI , : :

R NOTAS"
1090 LOCATE 2 22 PRINT" 3 ALTERA , : :

R NOTAS";
1100 LOCATE 2,23:PRINT"4:CONTIN
UA" ;

1110 AS-INKEYS:IF AS< " 1 "ORAS> "


"THEN 1110
1120 OP-VAL (AS)
1130 ON OP COTO 1150.1250,1410,
1140
1140 RETURN
1150 LOCATE 12,0: PRINT" 1 APAGAR :

NOTAS"
1160 LOCATE 0,2:INPUT"INICTA NA
NOTA" ST ;

1170 IF ST-0 THEN 1010


1180 IF ST>NN THEN 1150
1190 LOCATE 0,3:INPUT"OUANTAS A
PAGA (ENTER"1 " ND )
;

1200 IF NDOO THEN ND" l

1210 IF ST+ND-1>NN THEN ND=NN-S


T+l
1220 FOR K»1T0ND
1230 FOR J-ST TO NN-1 NS J) =NS : (

|J+1) 'NEXT
1240 NN 3 NN- 1 : NEXT K :
I =SL-1 :GOTO |
34 APUCAÇÓtS 34
niuini
1010 MIDS(STRSÍC) .2) 1020 IF ST>NN THEN 1000
1250 LOCATE 12.0:PfiINT"2:INSERI 620 IF P = 2 ANDO 1 THEN C-C-l:OCS-1030 PRINT664 "QUANTAS APAGA (EN .

B NOTAS" MIDSÍSTRSÍC) .2) TER-1) " INPUT ND ; :

1260 LOCATE 0.2: INPUT" INICIA IN ,630 IF (P-30RP-6JAND LE>1 THEN 1040 IF NDOO THEN ND=1
SERÇAO APOS QUE NOTA"; ST LE-LE-1:LES-MIDS(R1S,LE,1)+" " 1050 IF ST+ND-1>NN THEN ND-NN-S
1270 IF ST<0 THEN 1010 640 IF (P-40RP-71AND LE<5 THEN T+l
1280 IF ST>NN THEN ST=NN LE-LE+1:LES-MIDS(R1S.LE,1)+" * 1060 FOR 1-1 TO ND
1290 LOCATE 0.3;PRINT"TECLE'M'P 650 IF P-5 THEN IS-"P" PS-" " GO 1070 FOR J=ST TO NN-1 NS J) -NS
: :
: (

ARA ENCERRAR: " TO 700 J+l) NEXT :

1300 IF NN-MX THEN LOCATE 2.18: 660 IF P-60RP-7 THEN LES-LEFTS 1080 NN-NN-1
PRINT"MAXIMO NUMERO DE NOTAS CO LES.D+" 1090 NEXT I RETURN :

1100 CLS PRINT67 "MODO INSERÇÃO


,

LOCADAS !*: FOR D=1T0 2000:NEXT:I 670 IF P=8 THEN RETURN :

-SL-l:GOTO 1010 680 IF P-9 AND NN>0 THEN NN-NN- DE NOTAS"


1110 PRINT664 "INICIA INSERÇÃO
,

1310 LINE INPUT NS.IF N3="M"OR 1


NS="m"THEN I=SL-l:GOTO 1010 690 GOTO 490 APOS QUE NOTA": INPUT ST
1320 IF LEN(NS)<3 THEN LOCATE 2 700 IF IS>-"a" AND IS<-"<3" THEN 1120 IF ST<0 THEN 940
2.3: PRINT" ILEGAL" GOTO 1290 :
PS-CHRS(ASC(IS)-32) ELSE IF IS< 1130 IF ST>NN THEN ST-NN m QUANDO V
1330 IF INSTR (R3S. LEFTStNS, 1) )- >"p" THEN PS-IS+"*"ELSE PS-"" 1140 PRINTS64 "TECLE ,
' '

OORINSTR (R2S MIDS (NS 2 1) -0ORI


. . . ) 710 PL$-"V31;T"+STR$(TE)+"L"+L2 OCE TERMINAR": PRINT
NSTR (RIS. MIDS (NS. 3. 1)1-0 THEN L S (INSTR (RIS LEFTS (LES.l) )
,
1150 IF NN-MX THEN PRINT"MAXIMO )

O CATE 22,3: PRINT" ILEGAL" :GOTO 1 720 IF MIDSUES.2,1)-"." THEN P NUMERO DE NOTAS COLOCADO !": FOR
290 NOTAS LS-PLS+" D-l TO 1000:NEXT:RETURN
1340 IF MIDSÍNS, 4,1)=". "THEN N$ 730 PLS-PL$+"0"+OCS+PS PLAY PLS 1160 INPUT NS:IF NS-"M"OR
:
NS-"m
=LEFTS(NS,4)ELSE NS-LEFTS (NS 3 . 740 NN=NN+1:NS(NN)=IS+QCS+LES "THEN RETURN
750 GOTO 530 1170 IF LEN(NS)<3 THEN PRINT"IL
1350 IF ST=NN THEN 1380 760 CLS EGAL" :GOTO 1160
1360 FOR K=NN+1 TO ST+2 STEP -1 770 PRINT64 "ENTRADA MANUAL DE
.
1180 IF INSTR<R3S.LEFTS(NS.1>>-
1370 NS(K)-NSIK-l) :NEXT NNTAS" PRINT633 "ENTRE m PARA R OORINSTR (R2S MIDS (NS ,2,1)1 -0ORI
:
.
' '
,

1380 NS(ST+1)=NS ETOHNAR AO MENU" NSTR (RIS MIDS (NS 3 1 -OTHEN PR . , , 1


)

1390 ST-ST+1 :NN-NN+1 780 PRINT"USE FORMATO :' alh .'(' INT" ILEGAL" GOTO 1160 :

1400 GOTO 1290 'OPCIONAL) 1190 IF MIDSÍNS. 4,1)-". "THEN NS


1410 LOCATE 13,0:INPUT"3:ALTERA 790 GOSUB 280 PRINT6416 "ENTRE:
-LEFTSÍNS.4) ELSE NS=LEFTS (NS
,
.

STRING NOTA:" )+" "


R NOTA" ST ;

1420 IF ST-0 THEN 1010 800 IF NN-MX THEN PRINTS448 "MA 1200 IF ST=NN THEN 1230 ,

1430 IF ST>NN THEN ST-NN XIMO NUMERO DE NOTAS COLOCADO!" 1210 FOR I-NN+1 TO ST+2 STEP-1
1440 LOCATE 11,2:PRINT NS(ST) :FORD- 1T01 00 0 NEXT: RETURN:
1220 NS{I)-NS(I-1) NEXT :

1450 RT-255:LP=-2:I=ST:GQSUB 16 810 POKE 282.0 :PRINTf»44U:PRINTe 1230 NS(ST+1)-NS


20 462 . LINE INPUT AS
; ;
1240 ST-ST+1 :NN-NN+1
146(1 LOCATE 0 2 PR INT"NOVO VALO
. :
820 IF AS-"" THEN 810 1250 GOTO 1150
:
R " :LINE INPUT NS
:
830 IF AS="m"OR AS-"M"THEN RETU 1260 CLS PRINT "MUDAR QUE NOTA"; :

1470 IF LEN(NS)<3 THEN 1460 RN INPUT ST :

1480 IF INSTR(R3$,LEFTS(NS. 1) 1= 840 IF LEN(AS)>40H LEN(AS)<3 TH 1270 IF ST=0 THEN 940


OORINSTR (R2S MIDS (NS .2.1)1 -0ORI
,
EN 910 1280 IF ST>NN THEN ST-NN
1290 PRINT PRINT" VALOR ATUAL "
:

NSTR (Rl$. MIDS (NS. 3, 1) =0 THEN 1 1 850 IF (INSTR(R3S.LEFTS(A$, 1) 1 :

460 =0 THEN 910 AS-NS(ST) :RT-255:GOSUB 350


1490 IF MIDS(NS. 4,1)=". "THEN NS 860 IF LEFTS(AS.1)-"P" THEN AS= 1300 PRINT NS(ST)
1310 PRINT0320 PRINTS320 ""
,
"p"+" "+MIDS(AS,31 :GOTO 880 IN
«LEFTS (NS.4JELSE NS-LEFTS (NS 3) .
: ; :

870 IF (INSTR(R2S.MIDS(AS.2,1>) PUT"N0V0 VALOR:";NS


1S00 NS(STJ =NS:GOSUB 1620 FOR : 1-0 THEN 910 1320 IF LEN(NS)<3 THEN 1310
K= 1TO20 00 NEXT RT-0 I=SL- 1 LP-0
: : : : 880 IF (INSTR(R1S.MIDS(AS.3.1)1 1330 IF INSTR(R3S.LEFTS{N$,1))=
:GGTO 1010 1-0 THEN 910 OORINSTR (R2S -MIDSÍNS- 2. 1) )=0OR
1510 IF NN = 0 THEN RETURN ELSE C 890 IF MIDS<A$,4,1)<>"." THEN A INSTR (RIS MIDS (NS 3. 1) -OTHEN 1 . i
1

LS:COLORl,15:LOCATE 11.1:PRINT" S-LEFTS(AS.3)+" " 310


L1STAR NOTAS" 900 GOTO 920
15Z0 C = l SL-1 :EL=NN:PS="N" RT=0
: :
910 PRINTe448,LEFT3(AS,4) ;" -EN
1530 LOCATE 4,3: INPUT" LISTAR NA TRADA ILEGAL " SOUND l,5:GOTO 8
!
:

IMPRESSORA (S/N) " PS ;


10 1350 N$(ST)-NS:FORK=lTO2000:NEX
1540 IF PS="S* THEN C=2 920 NN-NN+1:NS(NN)-AS T:GOTO940
1550 LOCATE 4,5: INPUT" INICIO EM 930 GOTO 790 1360 IF NN-OTHEN RETURN ELSE CL
(ENTER- 1) " :SL 940 IF NN-0 THEN RETURN ELSE PO 8:PH1NTÇ7, "OfUAO LISTAM NOTAiJ" .

1560 IF SL<=0 THEN SL-NN EL = NN :


KE 282.0 C-0
1570 LOCATE 4,6: INPUT" FTNAL EM 950 PRINT6448 " 1 APAGAR NOTA ". ,
1370 IF(PEEK(65314;AND1)-1 THEN
:

(ENTER-FIM) " EL ;
"2:INSERIR NOTAS " " 3 ALTERAR NO 1400 ,
:

1580 IF EL-0 OR EL>NN THEN EL = N TA ","4: CONTINUAR"; 1380 POKE 282. 255 PRlNTf*64 : . ; :

N 960 AS-INKEYS:IF AS<"l"OR AS>"4 INPUT"LISTAR NA IMPO t JSORA (S/N)


"THEN 960 ;PS
970 OP-UAL(AS) 1390 IF PS="S" THEN C= :POKE 1
980 ON OP GOTO 1000.1100,1260,9 50,1

D
600 P-P-36
90
990 RETURN
1000 IF NN-0 THEN 940 ELSE CLS
INPUT"INICIA NA NOTA":ST
1400 PRINTêl 28 "INICIO NA NOTA
INPUT ST
1410 IF ST<=0 THEN ST-NN
1420 IF ST>NN THEN :JT=NN
; :
,

610 IF P-1ANDC<3THEN C-C+l:OCS- 1010 IF ST-0 THEN 940 1430 CLS:LP=0


14]0
34 APLICAÇÕES 34
IIIIIIIIIHHBI PROGRAMAÇÃO BASIC IHHIIIIIIIII
Aprenda a explorar todas as
possibilidades do teclado do TRS-80
e a utilizá-lo de forma criativa.

Comandos PEEK e POKE garantirão

o sucesso de suas experiências.

Nos artigos anleriores desta série, mensagem "PRESSIONE QUALQUER repetem durante o período em que es-
examinamos os recursos "secretos" do TECLA PARA CONTINUAR", ela tão sendo pressionadas.
micro TRS-80 para a saída de vídeo. En- aciona justamente a tecla < BREAK > Este é um recurso útil para uma sé-
tre outras coisas, vimos como gerar A culpa, com certeza, é sua... rie de aplicações: por exemplo, jogos em
pseudo-sprites e como levar cópias de te- Para evitar ocorrências desse tipo, que o movimento de um cursor ou o dis-
las para a memória e vice-versa. convém bloquear o efeito da tecla paro de uma metralhadora são contro-
O
teclado do TRS-80 também tem vá- < BREAK > comandos POKE
através de lados por teclas auto-repetitivas.
rias características interessantes, que não nas locações de memória 16396 e 16397: Há uma maneira, porém, de saber se
estão bem documentadas nos manuais de uma tecla continua sendo pressionada
POKE 16396, 175:P0KE 16397,201 ou não, o que nos permite implementar
operação ou mesmo nos livros mais ele-
mentares sobre o assunto. Neste artigo, Para ativar novamente a tecla, basta uma rotina de repetição. Se o valor da-
você aprenderá alguns truques que po- utilizar o comando: do por um PEEK(14591> for igual a 0,
dem ser executados com facilidade, co- nenhuma tecla está sendo pressionada;
POKE 16396,201
mo o bloqueio da tecla <BREAK>, a se esse valor for maior que 0, uma tecla
implementação de um cursor piscante, a Esse truque funciona em qualquer está sendo pressionada.
programação da repetição automática de micro compatível com os modelos I e III Para entender como funcionaria um
a entrada dtreta de símbolos grá-
teclas e da linha TRS-80, e pode ser empregado laço simples de repetição, digite:
ficos pelo teclado. tanto como comando direto quanto den- 10 PHINT PEEKU4591) ; :GOTO 10
Esses recursos são possíveis porque tro de um programa.
a memória do TRS-80 contém o mapa Há um problema, entretanto. Se vo- Ao ser executado, o programa impri-
do teclado, assim como o do vídeo. O cê estiver usando o BASIC de disco, e me uma sequência de zeros na tela.
teclado desse micro é do tipo matricial, tentar acessá-lo durante a desativação da Quando uma tecla é pressionada, esse
ou seja, ao se pressionar uma tecla, ela tecla < BREAK > o computador pode-
, valor muda. Note que cada tecla ou
aciona o cruzamento entre dois condu- rá "congelar". Para evitar que isso combinação de teclas (pressionadas jun-
tores: um colocado nas colunas, e ou- aconteça, aconselha-se recorrer a outra to) tem um valor diferente, que não cor-
tro, nas linhas. Isso gera um código bi- locação de memória para dar o coman- responde ao valor ASCII da tecla.
nário, que é recuperado pelo software do POKE. Não se esqueça, porém, de Para aplicar esse expediente, identi-
processador do teclado. Este efetua uma que esta varia de acordo com o sistema fique os números das teclas que deseja
varredura a intervalos de alguns milis- operacional de disco (DOS) empregado: usar para direcionar a lógica de deter-
segundos, passando por todos os fios minado programa e introduza vários IF
horizontais e verticais. O número obti- DOS DESATIVA AT1VA dentro do mesmo. Se você quiser utili-
do é depositado em uma locação espe- TRSDOS 2.3 POKE 23886,0 POKE 23886.1 zar os valores ASCII gerados por cada
cífica da memória de teclado. NEWDOS 2.1 POKE 23461,0 POKE 23461,1 tecla pressionada, precisará de IF um
Diversas outras locações da memória NEWDOS 80 POKE 19408,0 POKE 19408,1 para testar se a tecla continua pressio-
RAM reservada para a área de irabalho nada, e outro para localizar essa tecla.
do interpretador BASIC são dedicadas A maioria dos micros nacionais da li- Como exemplo, execute este progra-
ao teclado. Através de comandos PEEK nha TRS-80 utiliza sistemas compatíveis ma. Ele desloca um cursor pela tela, sob
e POKE, é possível verificar, e mesmo com o TRSDOS (pronuncia-se trisdós). o controle de quatro teclas (flechas).
alterar, seu conteúdo, produzindo curio- Se seu micro usa a versão CP/M, você
10 CLS:X-64:Y>24
sos e variados efeitos. não poderá desativar a tecla < BREAK > 15 SETtX.Y)
por meio da operação sugerida. 20 IF Tl>0 AND PEEK 14591 } >0 {

BREAK
Um aviso final: se seu programa ain- THEN 50
BLOQUEIO OA TECLA >
da não foi gravado, tenha muito cuida- 25 TS=INKEYS:IF TS="" THEN 25
do ao usar esse truque, assegurando que 30 Tt=A3C(TS)
Como você já sabe, a tecla a tecla < BREAK > possaser reativa- 50 IF Tl = 8 THEN X-X-l ;GOT0 15
< BREAK > do TRS-80 interrompe um da. contrário, você poderá ficar na
Caso 60 IF Tl=9 THEN X-X+l :GOT0 15
desagradável situação de nunca mais po- 70 IF TI-91 THEN Y-Y-l:GOTO 15
programa BASIC em execução, indepen-
der listar seu próprio programa! 60 IF Tt-10 THEN Y-Y+l:GOTO 15
dentemente do que ele estiver fazendo, 90 GOTO 25
e retorna o controle ao interpretador.
A facilidade de interromper o progra- A
linha 10 do programa define a po-
ma pode ser um inconveniente quando sição inicial do cursor (um pequeno pon^
se deseja (orná-loimune a erros de ope- to na tela), "aceso" pelo comando SET.
ração ou se quer impedir que alguém o Os modelos da linha TRS-80 I e III com as coordenadas X
e Y na tela.
liste.Imagine a seguinte situação: vo- (como o Prológica CP-500) não têm a A
linha 20 verifica se alguma tecla es-
cê colocou um programa educativo nas capacidade de repetição automática das tá sendo pressionada —ou seja, se o va-
I mãos de uma criança; ao aparecer a teclas — ou seja, as teclas não se auto- lor T% (código ASCII da tecla, deter-
(

IIIIIIIIIHUM lllllllll
TRUQUES COM 0 TECLADO DAS TECLAS
COMO DESATIVAR CURSOR DE TEXTO
A TECLA <BREAK> PISCANTE
ROTINA PARA A ENTRADA DIRETA
REPETIÇÃO AUTOMÁTICA DE SÍMBOLOS GRÁFICOS

minado na linha 30) e o conteúdo da me- sor piscar quando está sobre um carac-
mória 14591 são, simultaneamente, tere já impresso. Nesse caso, devemos
maiores que 0. Em caso afirmativo, o copiar o
valor do
caractere em uma va-
programa pula para a linha 50, que ini- riável, antes de piscar, e recolocá-lo na
cia vários testes para identificar qual das tela. Os comandos PEEK e POKE des-
teclas com
flecha foi pressionada. As ta rotina encarregam-se disso:
coordenadas X
e Y são alteradas para
mais ou para menos, e um outro ponto 100 T$ = INKEYS: IF TSO" THEN
é aceso na tela na nova posição. A li-
120 VARREDURA DO TECLADO
nha 20 testa mais uma vez se essa tecla
110 POKE XI.95:POKE XÍ,CÍ:GOT0 A função INKEYS é bastante útil pa-
100 ra se detectar, dentro de um programa,
continua pressionada, executa um des-
120 RETURN se alguma tecla foi pressionada. Mas,
locamento e assim por diante. âs vezes, ela não é suficiente para sa-
Se nenhuma tecla estiver sendo pres- Antes de chamar a rotina, coloque a tisfazer certas necessidades do progra-
sionada, o programa vai para a linha 25, posição atual do cursor em X%. Este é mador — como indicar se duas ou mais
que cria um laço de varredura do tecla- um valor entre 15360 e 16383, números teclas foram pressionadas simultanea-
do com a função INKEYS. Essa linha que correspondem às locações da me- mente, ou detectar o acionamento de
se repete até que se pressione aJguma te- mória de vídeo na RAM. Para obtê-lo, uma tecla que não gera um código atra-
cla. Então, o valor ASCII da tecla é examina-se o conteúdo das memórias vés do INKEYS, como <SHIFT>.
identificado e armazenado em T%, pe- 16416 e 1641 7. O valor ASCII do carac- Conhecendo a organização do tecla-
do, porém, esse tipo de verificação não
la linha 30. A
partir daí, o micro se com- tere nessa posição deve ser colocado em
oferece dificuldade. O teclado é disposto
porta como se tivesse a capacidade de C%. Assim, a rotina poderá fazer o cur- na forma de uma matriz. Quando uma
repetição automática das teclas. sor piscar, após verificar o código arma- tecla é pressionada, um determinado va-
Observe que, se nenhuma das quatro zenado na locação X%
de vídeo: lor numérico entre 1 e 128 (potências
teclas com flecha tiver sido pressiona- de 2) é depositado na memória RAM
da, o programa retorna ao laço de es- 10 Xt-PEEK<16417>*256+PEEK correspondente a uma fileira (um dos se-
pera situado na linha 25. (16416) guintes endereços: 14337. 14338,
20 Ct-PEEK(XI) 14340, 14344, 14352. 14368, 14400
Ao executar esse programa, tenha o 30 COSUB 10Q:PRINT TS GOTO 10
cuidado de não ultrapassar os Omites da
; :
ou 144641. A correspondência entrete-
cia e endereço nos permite identificar a
tela com o cursor, para que não ocorra A linha 30 chama a rotina e imprime tecla ou teclas pressionadas. Por exem-
um erro na linha 15. Se quiser melho- o caractere que se pressionou, retorna- plo, a tecla < SHIFT >, quando pressio-
rar o programa, introduza testes para as do pela sub-rotina em TS. A volta à li- nada, gera o código 1 na locação de me-
alterações de X e Y, de modo a impedir nha 10 tem o efeito de deslocar o cur- mória 14464.
que eles ultrapassem os valores mínimo sor uma posição à direita no vídeo, rei- Quando duas ou mais teclas são
e máximo da tela. niciando a rotina de piscar o cursor. pressionadas simultaneamente, geran-
Essa rotina permite ainda que se mo- do códigos no mesmo endereço, o nú-
mero resultante é a soma dos códigos
difique a forma do cursor. Note que
0 CURSOR PISCANTE individuais. Assim, se J, K e L forem
usamos o código ASCII 95, que corres- pressionadas, o número 4 + 8 + 1 6 =
ponde ao traço de sublinhar. Para co- 28 será colocado no endereço 1 4338.
Normalmente, o cursor de texto do locar na tela um retângulo sólido, subs- Para montar sua própria tabela de
TRS-80 é um traço de sublinhar, não titua 95 por 191, na linha 110. correspondência entre teclas e valores,
piscante. Não é fácil localizá-lo com a faça um programa de uma linha, usan-
tela cheia de texto. A dificuldade au- do um PEEK para examinar o conteú-
GRÁFICOS PELO TECLADO
menta em aplicações de deslocamento do de cada uma das memórias dentro
bidimensional do cursor, sobretudo se de um laço infinito.
ele se sobrepõe a um trecho gráfico. Como vimos em artigo anterior (pági-
Um bom recurso consiste em fazer o na 1259), o emprego da rotina INKEYS com as anteriores, geramos o código AS-
cursor piscar repetidamente, distinguín- no lugar do comando INPUT possibili- CII 1. Detectando esse código na rotina
do-se dos caracteres de fundo. No ta a entrada dos caracteres gráficos do INKEYS, bastará somá-lo ao valor 128
TRS-80, porém, só se obtém esse efeito TRS-80 diretamente pelo teclado. Assim, para obtermos em TS (variável de saída)
por meio de software, já que nenhum de se usarmos uma combinação das teclas o gráfico correspondente, que também
seus comandos permite alterar a função <SHIFT> e <LINEFEED> (tecla pa- será impresso na tela.
do cursor. Portanto, a rotina precisa ser ra baixo), teremos o mesmo efeito da te- Substitua a linha 130 por:
suficientemente rápida para não "segu- cla <CONTROL> de outros computa-
rar" o usuário que está digitando o tex- dores, e poderemos gerar códigos ASCII 130 IF ASC[Tl)<32 THEN TS-CHRS
to a uma certa velocidade. diferentes, pelo teclado. Se pressionar- TI+128)
Um problema adicional é fazer o cur- mos, por exemplo, a tecla A, juntamente 140 RETURN
48 PROGRAMAÇÃO DC JOGOS 48 llllllllll II

Neste artigo, examinaremos novas


técnicas de compressão de textos.
Com as várias alternativas dadas, não
será dificil reduzir o espaço
de memória ocupado por seu jogo.

Como vimos no artigo da página


1332, podemos conseguir um alto índi-
ce de compressão de textos através da
utilização de um conjunto reduzido de
caracteres (só letras maiúsculas e alguns
sinais de pontuação) e da compactação
dos códigos resultantes em um número
menor de bits. Examinamos também o
uso da estatística de ocorrência de letras
e outros símbolos em um texto, para ob-
ter um código progressivo de quatro
bits. O procedimento garante uma gran-
de eficiência de compressão (cerca de
45%), envolvendo um programa relati-
vamente simples em BASIC, para codi-
ficação e decodificação.
Neste artigo, apresentaremos outros
métodos de compressão de textos. Um
deles, conhecido como método chinês,
mostra-se particularmente útil para a
compressão de textos muito longos e
com repetições frequentes de um con-
junto reduzido de palavras —
o que, cer-
tamente, não é próprio de programas de
aventuras. De qualquer maneira, esse
método completa o leque de alternati-
vas de compressão de textos e, dada a
sua eficácia, poderá ser aproveitado em
outros tipos de programa.

O algoritmo estatístico de compres-


são de textos, que estudamos no artigo
anterior,toma como base a diferença de
frequência das letras em um texto para
construir um sistema de códigos em que
os caracteres de maior uso têm um nú-
mero menor de bits. Para facilitar a pro-
gramação em BASIC desse algoritmo,
limitamos a quatro o número mínimo de
bits por caractere. Poderíamos, entre-
tanto, utilizar um número ainda menor
de bits para as letras mais frequentes:
dois ou três, por exemplo. Com
o esque-
ma adoiado anteriormente — em que se
usa um nibble 0 para assinalar a mudan-
ça de "dicionários" de códigos —
os ,

ganhos da compactação seriam míni-


mos, pois, com a mudança constante de
dicionários, q número de zeros acaba-
ria se tornando muito elevado. Portan-
to, para a codificação com um número
menor de bits, aquele esquema não ser-
Illllllllllll « PROGRAMAÇÂODUOGOS 43 1UH||||||||
UM SUPERCOMPRESSOR DES COMPRESSÃ O
ESQUEMA DUPLO DE O MÉTODO C H INÊS
CODIF ICAÇÃO CODIFICAÇÃO POR DICIONÁRI OS
CÁLCULO DA FREQUÊNCIA DECODIFICA CÃO
DE PARES VANTAGENS E DESVANTAGENS

20 NT-0:NP-0
ESQUEMA DUPLO DE CODIFICAÇÃO 30 FOR 1-1 TO 60:Lt(I)=0
35 FOH J=l TO 60
É possível empregar, porém, um mé- 40 FI(I,J)-0:NEXT JrNEXT I
todo mais elaborado, que adota um es-
quema duplo de codificação: Coloque um comando CLEAR 3000
• quanto mais frequente a letra no na linha 10, antes da declaração DIM,
texto a ser codificado, menor é o núme- para o TRS-80 e TRS-Color.
ro de bits usado para seu código. Por
exemplo: o espaço (caractere mais fre-
quente em qualquer texto) tem um có-
digo binário de três bits (011); a letra E,
de cinco bits (101 11). Já a letra P, não 10 DIM L(60) ,f (60,60) ,c(60)
tão frequente, tem um código de seis bits 20 LET nt-0:LET np-0
(110110), e a letra Z, de oito bits 30 FOH 1=1 TO 60:LET L(i)-0
35 FOR j-1 TO 60
(11111100);
- certos pares de letras muito comuns
40 LET f [i, j)=0:NEXT j :NEXT i

em um texto também recebem um códi- Aparte seguinte do programa prin-


go binário reduzido. O esquema de co- cipal lê as linhas DATA que contêm o
dificação é o mesmo das letras, mas o texto a ser codificado. Para fins de tes-
efeito de compressão é bem mais pode- te, você poderá recorrer ao texto de ins-
roso, já que estamos substituindo dois truções de uma aventura, dado no arti-
bytes (dezesseis bits) por um número go anterior, acrescentando-o ao final
muito menor de bits no novo código. deste programa.

CÁLCULO DA FREQUÊNCIA DE PARES

Apresentamos, a seguir, um progra- 60 PRINT "ANALISANDO..."


ma destinado a computar e exibir os pa- 70 READ LS:IF LS-'*" THEN 100
res de letras mais frequentes em um tex- 75 PHINT L5:LT=LEN(LS)
to. Ele usa a mesma técnica do progra- 80 NT-NT+LT
ma que determina a frequência simples 85 IF INT(LT/2)OI.T/2 THEN LS-
dos caracteres, fornecido no artigo an- LS+* "
90 GOSUB 520:GOTO 70
terior.
Em primeiro lugar, o programa ini-
cializa os conjuntos L —
que conterá a
frequência de pares que começa com ca-
da caractere ASCII, de 32 a 90 e F —
— que conterá em cada caseia F(1,J) a
frequência acumulada pelo par de carac- :oo
teres com códigos I e J. 75 PRINT LS LET Lt"LEN LS
:

Em todas as versões, exceto a do 80 LET nt-nt+I.t


85 IF INT Lt/2 <>Lt/2 THEN LET
Spectrum, o sinal %
depois de L e F ser-
LS-LS+" "
ve para definir como inteiro o tipo do 90 GOSUB 52D:C0T0 70
conjunto. Isso economiza memória e au-
menta a velocidade de processamento. Um asterisco na linha de lexto (LS)
As linhas 20 a 40 não são necessárias nos indica o fim do mesmo. Caso o texto
computadores que inidalizam em 0 to- não tenha terminado, calcula-se o com-
das as variáveis numéricas, quando primento LT de L$. Se LT for ímpar,
RUN é digitado. é preciso acrescentar um espaço em
branco ao final de LS, para que a roti-
na de contagem efetue corretamente o
cálculo e a extraçào de pares de carac-
teres. Isso é feito pela linha 85, que ve-
10 DIM LI (60) , Fl (60 ,60) , Cl (60) rifica se o resto da divisão de LT por 2 I
48 PROGRAMAÇÃO Dl JOGOS

é maior que O (se for, é impar). Final- 730 X=C1 ( J) :C1 (J) «Cl ( J+l) :Ct (J
+1) -X: FL-1
mente, a linha 90 chama a rotina de con-
740 NEXT J
tagem, que começa em 520: 750 IF FL-0 OR N«2 THEN RETURN
760 GOTO 700
770 REM - ROTINA DE IMPRESSÃO
780 NL'0:PRINT
790 PRJNT "FREQUÊNCIA DE PARES
500 REM - ROTINA DE CONTAGEM NO TEXTO" PRINT :

520 FOR I>1 TO LENÍLS)-1 BOO FOR 1=1 TO 60:IF H(I)=0 TH


525 NP=NP+1 EN 850
530 C1=ASC (MIDS (LS, I D -31 .
)
805 GOSUB 690
540 C2=ASC [MIDS [LS 1+1 1) -31 . .
)
810 FOR J=l TO 60
545 L\ (C1)=LI (Cl)+1 815 X-CÍ(J):IF F»(I,X)=0 THEN
550 Fl [Cl ,C2) =FÍ (Cl ,C2) +1 GOTO B25
560 NEXT I 820 PRINT CHRS(I+31)+CHR$(X+31)
570 RETURN iFKI.X) :" ":
825 NEXT J PRINT :

830 NL-NL+1:IF NL<15 THEN GOTO


850
840 NL=0:INPUT "PRESSIONE <ENTE
500 REM - ROTINA DE CONTAGEM R>
520 FOR i=l TO LEN LS"1
525 LET np=np+l
530 LET cl=ASC!LS,i TO i)-31
540 LET c2-«ASC(LS.i to i+lJ-31
545 LET L(cl)-LCcl)+l
550 LET f (cl.c2)-f (cl,c2)+l
560 NEXT I 680 REM - ROTINA DE ORDENAÇÃO
570 RETURN 690 LET n-60
695 FOR 3-1 TO 60 LET c(j)-j :

700 NEXT j LET fL-0 :

A rotina de contagem é muito sim- 710 LET n=n-l:FOR 3=1 TO n


ples: o laço que vai da linha 520 à 560 720 IF f (i,c<j))> = f (i,c(j + l))
percorre L$ tomando um caractere por THEN GOTO 740
vez. As variáveis Cl e C2 conterão os 730 LET x-c(j):LET c j =c { j+l (
) )

códigos ASCII do primeiro e do segun- LET c{ j+l)-x:fL=l


do caracteres de um par. Subtraindo o 740 NEXT J
valor 31 desse código, obteremos um nú- 750 IF EL-0 OR n-2 THEN RETURN
760 GOTO 700
mero compreendido entre 1 (espaço) e 770 REM - ROTINA DE IMPRESSÃO com código 1 + 31 no texto. Do contrá-
58 (letra Z). Cl e C2 servirão assim co-
780 LET nL-0: PRINT rio,o programa chama a rotina de or-
mo índices para acumular a caseia cor- 790 PRINT " FREQUÊNCIA DE PARES denação. O laço que vai da linha 810 à
reta de F e de L. NO TEXTO": PRINT 825 imprime todos os pares cuja fre-
O programa principal termina quan- 800 FOR i=l TO 60:IF L(i)=0 THE quência é maior que 0. A variável-índice
do se atinge o finaldo texto e a rotina N GOTO 650
X, extraída de C, é usada para mostrá-
dos resultados é chamada. 805 GOSUB 690
810 FOR 5-1 TO 60 los em ordem decrescente.
815 LET x-e(j):IF f{i,x)=0 THEN Se você quiser ver apenas os dois pa-
GOTO 825 res mais frequentes para cada caracte-
820 PRINT CHRS 1 + 31 ->CHR$ x+31 re, modifique a linha 810 para:
100 PRINT "TOTAL " NT "CARACTE U.x)
i
: ; ;f "i
BES E " NP "PARES":
i
825 NEXT i: PRINT
120 GOSUB 780 B30 LET nL = nL+l:IF nl.<l5 THEN G 810 FOR J=l TO 2
140 STOP OTO 850
B40 LET nL=0:INPUT "PRESSIONE <
A
rotina de exibição, que começa em
ENTER> ";xS
850 NEXT 1 PRINT
A
:

780, utiliza uma rotina de ordenação pa- 860 RETURN técnica de compressão explicada a
ra mostrar os resultados em ordem de- seguir apresenta um alto nível de eficiên-
crescente, ou seja, os pares mais fre- Para não alterar a matriz F, a rotina cia, dependendo do texto a codificar e
quentes em primeiro lugar. de ordenação utiliza um conjunto C, de sua extensão. Trata-se, na realidade,
que funciona como índice para isso, — de uma generalização do algoritmo de
ele é inicializadono começo da rotina codificação por pares de letras: se po-
(linha 695), de modo a conter os núme- demos empregar códigos numéricos pa-
ros 1,2,3 etc. A ordenação (do tipo bo- ra representar os pares de caracteres
680 REM - ROTINA DE ORDENAÇÃO lha) coloca esses números em uma or- mais frequentes em um texto, a fim de
690 N-60
dem diferente. comprimi-lo, é possível também usar
695 FOR J=l TO 60 Cl J = J NEXT : (
) :

700 FL=0 A sub-rotina de impressão examina tríades dos caracteres mais comuns. Na-
710 N=N-l:FOR J-l TO N cada uma das linhas da matriz F. Se o turalmente, essa abordagem se torna-
720 IF Fl tl.Ct(J) >>-Ft (I.Ct (J+l total L(I) da linha I for 0, não se regis- ria cada vez mais inviável, à medida que
D ) ) THEN GOTO 740 trou a ocorrência de nenhum caractere aumentássemos as dimensões da matriz
Illlllllll 48 PROGRAMAÇÃO DE JOGOS 48 IIIIIUIII

F: de 3.600 elementos, para contagem compressão é dada peia divisão de um 250 STOP
de pares, para 216.000 elementos, para valor pelo outro. 500 REM - ROTINA DE CONTAGEM
contagem de tríades etc. Para entender como funciona esse al- 510 LS-LS+" ":J-1:L-1
E por que não montar um dicioná- goritmo e verificar se é capaz de com- 520 C=ASC ÍMIDS (LS. I 1) .

rio com palavras completas? Cada pa- primir o texto-exemplo usado antes, di- 525 IF C<>32 THEN COTO 560
540 1 = 1 + 1 :IF KLEN LS) THEN
lavra receberia um código numérico de gite e execute este programa.
{

oito ou de dezesseis bits, e o texto seria


GOTO 520
550 RETURN
composto por uma sequência desses có- 560 L=I
digos. Para reconstituí-lo, bastaria bus- 570 C=ASC{MID5(LS.I.D)
car no dicionário a palavra correspon- 575 IF C-32 THEN GOTO 610
dente a cada número. 10 DIM FÍ200) ,C{200) ,PS(200) ,FS 590 1 = 1 + 1 :IF I=<LEN{LS) THEN
Esse sistema é chamado método chi- (50) GOTO 570
nês, pois as palavras em chinês não são 20 NT=0:NP=0:NR=0:L 60 0 RETURN
formadas a partir de um pequeno con- ET NL=0:NF^0 610 XS=MIDS(LS,L.I-L)
junto de fonemas ou sílabas, como nos 30 FOR 1=1 TO 200 620 FOR N-l TO NP
idiomas ocidentais, mas de figuras úni- 40 F(I)-0:C(I)=I 630 IF XSOPSCN) THEN GOTO 640
50 NEXT I 635 F(N)=F(N)+1:FS(NL)=FS(NL)+
cas, os .ideogramas, que correspondem
60 PRINT "ANAt.l SANDQ. "
. . CHRS(N) :G0T0 520
a códigos.
70 READ LS-IF LS = "*" TKEN GOTO 640 NEXT N
A idéia pode ser muito boa para uma 100 650 NP=NP+1:F(NP)=1'PS{NP)=XS
linguagem natural, mas não devemos 75 NL=NL+1 660 NR=NR+LEN (XS) FS (NL) =FS (NL)
:

nos esquecer de que, no computador, o 80 NT=NT+LEN (LS) +CHRS (NP)


dicionário também armaze-
precisa ser 85 GOSUB 510 670 GOTO 520
nado. Assim, para se conseguir o efeito 90 NF=NF+LEN (FS (NL) GOTO 70
) :
680 REM - ROTINA DE ORDENAÇÃO
de compressão, é necessário que o resul- 100 PHINT "TOTAL: " NT "CARACTE
; ; 690 N=NP
tado da soma do número de bytes obti- RES E " NP " PALAVRAS"
:
;
700 FL=0
110 PRINT "DICIONÁRIO COM " NH 710 N-N-1:F0R 1=1 TO N
do no processo com o número de bytes ;

"CARACTERES. 720 IF F(C(I) )=>F(C (1+1) THEN


gasto com a armazenagem do dicioná- )

115 PRINT "TEXTO COMPRIMIDO COM GOTO 740


rio na memória seja menor do que o nú- " ;NF; "CARACTERES" 730 X=C(I) :C{I)=C(I+1)
mero de bytes do texto não comprimi- 120 PHINT "ORDENANDO..." 735 C(I+1)=X:FL=1
do (original). A taxa ou eficiência de 130 GOSUB 690:GOSUB 780 740 NEXT I
Illllllllimt « RROGRAmÇÃOOUOGOS 48 |H|||||||||||
750 IF FL-0 OR N-2 THEN RETURN 690 LET n=np UM 6
760 GOTO 700 700 LET fl-0 DO 5
770 REM - ROTINA DE IMPRESSÃO 710 LET n=n-l:F0R i=l TO n SUA 5
780 NX-0 720 IF f (c(i)}->f (c(i + D) THEN
790 PRINT " FREQUÊNCIA DE PALAVR GOTO 740
AS NO TEXTO* PRINT : 730 LET x-c(i):LET c { 1 =c i + 1) ) ( : Observamos no texto-exemplo que:
800 FOR 1-1 TO NP LET c(i+l)-x:LET fl-1 - as palavras curtas aparecem mais;
820 PRINT I;PS(C(I)) ,F(C(I() 740 NEXT 1 - há um grande número de palavras com
830 NX-NX+1:IF NX<15 THEN GOTO 750 IF fl=0 OR n=2 THEN RETURN uma única ocorrência;
850 760 GOTO 700 - vírgulas e outros sinais são tratados co-
840 NX-0:INPUT "PRESSIONE <ENTE 770 REM - ROTINA DE IMPRESSÃO
R> ":XS 780 LET nx=0
mo parte da palavra junto à qual se en-
850 NEXT I: PRINT 790 PRINT "FREQUÊNCIA DE PALAVR contram.
860 RETURN AS NO TEXTO": PRINT Com de compressão
isso, a eficiência

800 FOR 1=1 TO np do algoritmo é muito baixa: de 1228 ca-


Os usuários do TRS-80 e do TRS- 820 PRINT iipS(c(i)) ,£(c(i) racteres do texto original, conseguimos
Color devem colocar um comando 830 LET nx=nx+l:IF nx<15 THEN G comprimir apenas 215 caracteres (uma
CLEAR 3000 antes do DIM, na linha 10. OTO 8 50 taxa de 82,5%); porém, o dicionário
840 LET nx=0:PRINT " PRESSIONE < ocupa outros 870 bytes, dando um to-
ENTER> " INPUT xS:
tal de 1085. A eficiência se reduz, assim,
850 NEXT i PRINT :

a apenas 1,6%.1
860 RETURN
O algoritmo é mais eficaz quando se
10 DIM £ (200) ,c{200) ,pS<200,lS) A parte principal do programa é a ro- combinam textos bem longos e uso de
.CS (50) tina de extraçào de palavras, que vai da um vocabulário reduzido.
20 LET nt = 0 LET np=0:LET nt=0:L
:
linha 500 à 670.
ET nl=0:LET nE-0 Para identificar e separar as palavras
30 FOR 1=1 TO 200 0EC0DIFICAÇS0
contidas em uma linha de texto,essa ro-
40 LET í(i>=0:LET c(l)=l (ina procura o primeiro caractere não-
50 NEXT 1 branco (que não é um espaço) a partir Para ver como o texto comprimido
60 PRINT "ANALISANDO..." do caractere I da linha L$. posição A é reconstituído, acrescente a sub-rotina
70 READ LS:IF L$-"»" THEN GOTO inicial da palavra é armazenada na va-
100 de decodificação:
riável L (linha 560).
75 LÍT nt=nl+l
80 LET nt=nt+LEN L3 Em seguida, a rotina procura o fim
85 GOSUB 510 da palavra: continua a percorrer o tex-
90 LET nf-nf+LEN fS(nl):GOTO 70 to até encontrar o primeiro caractere de
100 PRINT "TOTAL " nt "CARACTE
: ;
:
espaço. Isso é feito pelas linhas 570 a 140 GOSUB 900
RES E ";np;" PALAVRAS" 600. Note que, para evitar que a última
890 REM - ROTINA DECODIFICAÇÃO
110 PRINT "DICIONÁRIO COM " nr 900 NX=0:FOR 1=1 TO NL
;
palavra de um texto se perca, a linha 5 10
"CARACTERES. 910 FOR J-l TO LENÍFS(D)
da rotina sempre acrescenta um espaço 920 PRINT " " PS ASC {MIDS (FS (I
115 PRINT "TEXTO COMPRIMIDO COM ; [

em branco após LS. .j.im


" nf "CARACTERES"
;
;

120 PRINT "ORDENANDO..." Achado o da palavra, o sub-


final 930 NEXT J: PRINT
130 GOSUB 690:GOSUB 780 slring compreendido entre L e 1-1 (a no- 940 NX=NX+1:IF NX<15 THEN GOTO
250 STOP va posição) é copiado em XS (linha 610). 950
As linhas 620 a 660 verificam então se 945 NX=0:INPUT "PRESSIONE <ENTE
500 REM - ROTINA DE CONTAGEM a palavra XS existe no dicionário PS, R> " RS ;

510 LET LS=L3+" " LET i=l:LET : L com NP palavras. Se não existe, a nova
950 NEXT I: RETURN
-1 palavra é acrescentada. Antes de voltar
520 LET c-ASC L$<1 TO í) para a linha 520, para buscar nova pa-
S25 IF c<>32 THEN GOTO 560 lavra no texto, a rotina incrementa em
540 LET l-l+l:IF í < LEN L$ THEN
GOTO 520 Fa frequência de ocorrência da palavra.
140 GOSUB 900
550 RETURN A linha de saída, que contém o texto 890 REM - ROTINA DE CODIFICAÇÃO
560 LET L-i comprimido (armazenada em F$), rece- 900 LET nx-0:FOR i-1 TO nL
570 LET c-ASC L3(i TO i) be um novo caractere, que corresponde 910 FOR j=l TO LEN £S(i)
575 IF c-32 THEN GOTO 610 ao código da palavrano dicionário. Por- 920 PRINT " ";pSÍASC[FS(i.j TO
590 LET i-i+l:IF i-<LEN LS THEN tanto, uma palavra inteira é substituída
GOTO 570 por um byte. 930 NEXT j :PRINT
600 RETURN Concluindo o programa, as rotinas 940 LET nx»nx+l:IF /ix<15 THEN G
610 LET x$-L$(L to 1-1) das linhas 690 e 780 colocam as palavras OTO 950
620 FOR n-1 TO NP 945 LET nx=0:PRINT "PRESSIONE <
630 IF xSOpS (n) THEN GOTO 640
do dicionário em ordem alfabética, exi-
635 LET f (n)-f (n)+l:LET fS(nl)« bindo-as na tela em grupos de quinze,
como mostramos Essa rotina funciona de modo opos-
fS(nl)+CHHS<n) :GOTO 520 a seguir:
to ao da de codificação, mas é bem mais
640 NEXT n
simples. Os códigos armazenados em F$
650 LET np-np+l:LET f<np)-l:LET FREQUÊNCIA DAS PALAVRAS
PS(np)=x3 são recuperados pela função ASC da li-
660 LET nr-nr+LEN x$:LET £S(nl DE 15 nha 920, e servem como índice do dicio-
)=f${nl)+CHRS(np) O 10 nário P$ para reconstruir o texto origi-
670 GOTO 520 A 8 nal. Os espaços entre palavras são inse-
1,5 680 REM - ROTINA DE ORDENAÇÃO E 8 ridos automaticamente.
ROTINAS EM CÓDIGO ROTINAS NAS LINHAS DATA
A ESTRUTURA DE
UMA LINHA
PEEK POKE
DE ENTENDA COMO FUNCIONA
E

A linha DATA é um excelente lugar "moldar" as linhas DATA, dando-lhes 110 X=PEEK(X)+256*PEEK<X+1)
a aparência que julgar melhor. Por 120 GOTO 90
para se colocar programas em linguagem 130 IF PEEK(X+4)<>132 THEN PRIN
exemplo, uma linha do tipo:
de máquina embutidos em um programa T"Esta não é uma linha DATA" PR
330 DATA XXXXXXXX INT:GOTO 70
em BASIC. Aprenda aqui os truques
140 X=X+3
seria transformada em: 150 FOR 1=0 TO CO-1
que facilitam essa tarefa no MSX.
330 DATA A3.F2.01 160 X=X+3
170 IF PEEKtX)-0 THEN X-X+5:GOS
Convém, portanto, que você gaste al- UB 310
gum tempo na criação dessas linhas, se 180 IF PEEK{X+l)-0 THEH POKE X,
uma 32:X=X+6:GOSUB 310
quiser listagem bem organizada.
190 LET AS-HEXS(PEEK(E+I))
Com frequência, armazenamos, em 200 IF LEN(A3)=1 THEN AS="0"+AS
algum lugar da memória, uma rotina em RODANDO 0 PROGRAMA 210 POKE X.ASC(MID$(AS,1.D)
código de máquina, um arquivo de pa- 220 POKE X+l ,ASC (MIDS (AS 2, 1) ,

drões de um desenho ou até mesmo uma 230 IF PEEK(X+2)-0 THEN X-X-l :G


Após o acréscimo das linhas DATA, OTO 270
composição musical acompanhada de
passamos à execução do programa. Em 240 IF PEEK<X+3)-0 THEN POKE (X
instruções. Muitas vezes é útil incorpo-
primeiro lugar, ele solicita o endereço +2) 32:G0T0 270
,
rar esse arquivo de rotinas a um progra-
inicial do arquivo, pedindo, em segui- 250 IF PEEK(X+4>-0 THEN POKE {X
ma em linguagem BASIC. Se colocar- da, seu comprimento. Depois de termos + 2) ,32:POKE (X+3) 32 JC-X+1 :GOTO
. :

mos seus códigos nas linhas DATA do digitado essas informações, o computa- 270
programa que os acessa, tornaremos dor pergunta se as linhas DATA já fo- 260 IF IOCO-1 THEN POKE(X+2),4
bem mais fácil o manuseio do sistema, ram introduzidas. Caso isso ainda não 4
viabilizando a obtenção de uma listagem 270 NEXT I
tenha sido feito, o programa será inter- 280 IF PEEK(X+2)<>0 THEH POKE IX
completa e evitando repetidas buscas no
rompido. Finalmente, ele pede o núme- + 2) ,3Z-.X=X*1:G0T0 280
gravador ou no drive, para uma poste-
ro da primeira linha a ser preenchida. 290 LIST
rior junção. Com essas linhas DATA,
Se não encontrar essa linha, o compu- 300 STOP
precisaremos apenas acrescentar um la-
tador interromperá a execução do pro- 310 IF PEEK(X)<>132 THEH PRINT"
ço que, por intermédio do comando PO- Faltam linhas DATA*:STOP ELSE X
grama e imprimirá uma mensagem de
KE, carregue uma determinada região erro.O mesmo irá ocorrer se a linha in- -X+2
da memória com os dados nela contidos. dicada não contiver o comando DATA. 320 RETURN
É importante que todas as linhas re-
servadas "para os códigos estejam em se-
INTRODUÇÃO DAS LINHAS DATA quência na listagem —
durante a execu-
ção, uma mensagem de erro pára o pro- Para entender o funcionamento do
Para apresentar os códigos do arqui- grama quando o computador encontra programa, é necessário conhecer a estru-
vo, o mais conveniente é utilizar núme- uma linha que não seja DATA. tura de uma linha DATA, ou seja, sa-
ros hexadecimais, que ocupam menos ber como ela é armazenada na RAM.
espaço e reduzem a possibilidade de se 10 CLS Ao ligar o computador, digite:
cometer erros na digitação. Além disso, 20 INPUT"Qual o endereco do arq
uivo " EH PflINT 10 DATA A.B.C
o modo como dispomos os números na ; :

linha pode facilitar correçôes ou consul-


30 INPUT"Cjual o comprimento ";C Agora, para "ler" o que está escrito
tas posteriores —
ou seja, a quantidade
O :PP.IHT
40 PBINT"Você já introduziu ae
na memória, usaremos o comando
de números por linha indica que ali se linhas DATA? S/N " : PRINT PEEK, que mostra o conteúdo de um
encontra um determinado padrão grá- 50 G$=INKEYS:IF GS-"" THF.N GOTO determinado endereço. Começaremos
fico ou que aqueles códigos representam 50 pelo exame do byte de número 32769,
uma pequena sub-rotina dentro da ro- 60 IF GS-"N" OH GS = "n" TH EH PP.I que contém a primeira informação da
tina principal. NT "Eu vou parar o programa par linha inicial de um programa em BA-
O programa a seguir irá auxiliá-lo a voce f azeriaso" :STOP SIC. Para isso, digite o comando direto:
nessa tarefa. Inicialmente, você irá com- 70 INPUT-oual a primeira linha
plementá-lo com linhas DATA
seguidas
DATA " ;LD: PRINT
80 X-32769!
de caracteres que depois serão superpos- 90 IF PEEK CX+2) +256«PEEK (X+3) -L
tos pelo arquivo. importante ressal- Você deve ter obtido a seguinte se-
I
D TH EH 130
tar que a quantidade de caracteres por 100 IF PEEK(X)+256*PEEK(X+1)=0 quência de números:
linha determinará o número de código THEN PHINT"Não achei esta linha 13 128 10 0 132 32 65 44 66 44
nela armazenados, Assim, você pode " :STOP
iiiiiiiiihw—
ESTRUTURA DA LINHA

Os dois primeiros números referem-se


ao endereço inicial da próxima linha. Esse
endereço é armazenado na forma LH (do
inglês Low, parte baixa, e High, parte al-
Ao
—mm
encontrar a linha indicada pelo
usuário, o microcomputador verifica se
se trata de uma linha DATA. Para is-
so, pesquisa seu quinto byte. Se ele não
contiver o token correspondente à ins-
trução
sagem de
DATA,
erro.
será impressa uma men-
se encarregue de promover o salto para
a próxima Unha DATA.
Se o primeiro, o segundo e o terceiro
bytes após o código não contiverem 0,
a linha 260 se encarregará de imprimir
uma vírgula.
Quando o programa sai do laço, a li-
ta). Pode ser decodificado do seguinte nha 280 limpa a última linha DATA,
modo: 128-256 + 13 = 32781. O par se- imprimindo espaços em branco sobre os
0 LAÇO PRINCIPAL
caracteres que ali se encontravam.
guinte equivale ao número da linha, que
é armazenado da mesma forma: Finalmente, o computador exibe na
0*256+10 = 10. 0 próximo número, 132, Feitas todas essas verificações, o pro- tela a listagem completa, mostrando ao
éo código da palavra DATA. grama inicia o laço principal, controla- usuário os códigos já incorporados ao
O MSX atribui um número ou to- — do pela variável 1, que coloca os códi- programa.
ken (símbolo, indicação) — a cada pa- gos de máquina no programa em BA- Como estamos fazendo modificações
lavra e caractere reservados. Assim, o SIC. Antes, porém, a linha 140 acres- dentro do programa, convém gravá-lo
computador economiza bastante memó- centa três unidades a X, para que, den- antes da execução. Um pequeno erro de
ria: em vez de armazenar todos os ca- tro do laço, essa variável seja incremen-
digitação pode provocar um POKE e
inutilizar o programa.
racteres da palavra, guarda apenas o seu tada em mais três e alcance o endereço
token. É importante não confundir os do primeiro caractere da linha que de-
tokens com os códigos ASCII, que re- verá ser preenchida. LISTA DE TOKENS
presentam os caracteres comuns. Primeiro, o laço principal busca o có-
O número 32, que vem a seguir, é o digo na região da memória determina- Com os novos conhecimentos sobre
código ASCII do espaço em branco, que da pelo usuário, transforma-o na nota- a armazenagem das linhas em BASIC,
separa os dados do comando DATA. Os ção hexadecimal (linha 190) e o coloca você pode fazer uma série de experiên-
próximos cinco bytes contêm esses da- sobre os caracteres para os quais reser- cias com o comando POKE. Tente, por
dos, que vêm separados por uma vírgu- vamos espaço nas linhas DATA
(linhas exemplo, digitar uma linha e mudar o
la (44). O primeiro 0, na sequência, in- 210 e 220). Se esse código for inferior seu número com um POKE no primei-
dica o fim de uma linha, e os dois ou- a 15, sua notação em hexadecimal terá ro e no segundo bytes. Lembre-se de que
tros, o fim do programa. Quando iodas apenas um caractere. Para dar uma me- o primeiro byte do BASIC é o de núme-
as linhas tiverem sido examinadas, os lhor apresentação ao programa, a linha ro 32769. Você pode também "olhar"
dois bytes iniciais apontam para o pri- 200 acrescentará um 0 á direita desse ca- as linhas armazenadas no BASIC recor-
meiro destes dois zeros. ractere. rendo a alguns comandos diretos, como
As linhas 170 e 180 são responsáveis fizemos em nosso exemplo.
pela mudança de linha. Se o byte em Provavelmente, será útil dispor de
FUNCIONAMENTO DO PROGRAMA um
salto se-
questão contiver o valor 0, uma lista dos comandos com seus res-
rá necessário, pois esse valor indica o pectivos tokens. Para obtê-Ia, digite e
Após conseguir as informações soli- fim da linha. Incrementa-se então a va- execute este programa:
citadas no início do programa, o com- riável X, de modo que ela alcance o
putador passa às verificações. endereço do próximo caractere a ser
10 E-14962
A linha 80 inicializa a variável prin- superposto por um código, na linha
20 C-65
cipal, X, que contém o endereço do byte seguinte. Porém, se o byte posterior a
30 PRINT CHRS(C)
em estudo. Primeiro, ela assume o va- este contiver um 0, não será possível
40 A=PEEK(EÍ
lor 32769, que, conforme vimos, é o en- colocar um código na linha, por falta 50 B-PEEK(E+1)
dereço do byte inicial da primeira linha. de espaço. Nesse caso, além do incre- 60 AS=CHRS<A)
A linha 90 verifica o terceiro e quarto mento, é preciso imprimir um espaço 70 IF A<128 THEN PRTNT AS GOTO
bytes, obtendo o número da linha. Se es- em branco sobre o caractere que se en- 110
ta for a linha procurada (a primeira li- contra no endereço anterior ao 0. Am- 80 PUI NT CHRS(A-128) ;TAB(8) ;B
nha DATA), o programa é desviado pa- bas as linhas, antes do salto, utilizam 90 E=E+1
uma sub-rotina (linha 310) para verifi- 100 IF PEEK(E + l)O0 THEN PRINTC
ra a linha 130.
HHS(C);
Alinha 100 pesquisa o primeiro e o car se a próxima linha é realmente uma
110 IF PEEK(E+1)<>0 THEN 150
segundo bytes, que contêm o endereço Unha DATA. 120 OC+l:IF C=89 THEN 170
da próxima linha. Se houver um núme- Convém estar atento para que nada 125 B$=CHRS(C) :PRINT
ro 0 no lugar do endereço, estamos no seja impresso após o último código, pois 130 TF B5-"J" OR BS-"Q" THEN 15
fim do programa — o que significa que ele deve finalizar a linha DATA. Assim, 0
a linha não foi encontrada. Ocompu- quando o código já foi introduzido nas 140 PR TNT BSi
tador imprime então uma mensagem de posições X e X + 1, não haverá vírgula 150 E=E+1
erro. Caso contrário, é necessário pes- se o primeiro, o segundo ou o terceiro 160 IF E01S649 THEN 40
quisar a próxima linha. Assim, depois bytes após ele contiverem o número 0. 170 E=15654:PRINT
180 A-PEEK í E B=PEEK (E+l)
de atribuir à variável X o valor encon- Nesse caso, alguns espaços em branco
) :

190 IF A>1^7 THEN PRINT CHRS (A-


trado no primeiro e no segundo bytes (li- serão colocados sobre os caracteres an-
128)
nha 110), o programa retorna para a li- teriores àqueles bytes. O
valor de X tam-
:

200 IF A<128 THEN PRINT CHRS [A)


nha 90. Esse laço só será interrompido bém sofrerá uma pequena mudança pa-
quando a próxima linha do programa ra que, na próxima volta do laço, o en- 210 PRINT TAB (8) ;B
foi localizada ou quando chegarmos ao dereço X, incrementado em três, corres- 220 E=E+Z: PRINT
ponda ao endereço de 0, e a linha 170 230 IF E<15673 THEN GOTO 180

P^==-
35 APLICAÇÕES 35

EXECUÇÃO DA MELODIA
EDICAO
GRAVAÇÃO E LEITURA

Complete a listagem do seu editor seguido de um número de 1 a 5 (semi


colcheia, colcheia, semínima, mínima
musical e entregue-se ao prazer
O menu do programa do computador semibreve, respectivamente — quantc
de compor e executar melodias. Spectrum oferece sete opções. Selecio- maior o número, mais demorada é a no-
As instruções dadas a seguir mostram ne a opção que transforma o teclado
1 , ta). Pode-se estabelecer a duração de ca
do micro num piano. da nota antes de digitá-la e, também
como utilizar cada função do programa. A disposição das notas é igual à que corrigi-laapós digitar a melodia comple-
vimos no artigo da página 721..O dó ta, selecionando a opção 4.
mais grave corresponde à tecla Q; o dó O programa emite os sons à medida
Apresem a mos aqui a última parte do médio, à leda I, e o dó mais agudo, á que as teclas são pressionadas, armaze-
editor musical. Uma vez adicionada ao tecla B. O
usuário deve determinar se irá nando as notas musicais corresponden-
restante do programa, você poderá se acrescentar notas à melodia anterior, ou tes na memória. Depois, pode-se execu-
dedicar à composição e execução de pe- iniciaruma nova. Como nada foi com- tar a melodia completa sempre que se
ças musicais. posto ainda, escolha 'S' para começar. desejar através da opção 3. Para modi-
O programa foi leito de modo a ob- Defina também a duração cie cada no- ficar o andamento da melodia, usa-se
ter o máximo de cada máquina, em ter- ta, usando <SYMBOLxSHIFT> um número entre e 15
l — quanto maior
mos de efeitos sonoros. Como os recur-
sos das difereqies linhas de micros va-
riam muito entre si, as versões são bem
distintas, merecendo, cada qual, uma
explicação. Em
alguns casos, as instru-
ções parecerão bem complicadas. Mas,
seja como for. não há melhor maneira
de aprender a usar o editor do que
sentar-se diante do micro, carregar o
programa completo e tentar entender
um comando de cada vez.

Jl J
.

35 APUCACÓeS 35

o número, mais rápido o andamento. A nota, pressione as teclas com setas para As notas estão dispostas no teclado
a esquerda c a direita. A oitava e a du- em duas fileiras: Q corresponde ao dó
opção 2 possibilita a digitação das no-
tas por meio de um código simples. As ração correntes estarão impressas no to- da oitava mais baixa; I. ao dó da oitava
doze notas possíveis —
C (dó), C # (dó po da tela. Enquanto você toca, as no- média, e V, ao dó da oitava mais alta.
sustenido), D (ré), até o B (si) —
são nu- tas vão sendo exibidas com a duração A nota A # (A ou lá sustenido) não po-
meradas de 0 a e a pausa recebe o
1 1 , e oitava respectivas. de ser obtida com a tecla " ", já que es-
código -4. A oitava da melodia é es- Depois de experimentar essa manei- ta não gera nenhum código ASCII que
pecificada por um valor compreendido ra de entrar com as notas, selecione a identifique o seu pressionamento. As-
entre 1e 7, e o número que indica a du- opção 4 (as notas que você tocou per- sim, A# foi atribuída à tecla "[", dei-

ração de cada nota corresponde à sua manecem na memória). Ela permite a xando uma pequena descontinuidade no
duração teórica. Assim, uma semicol- entrada das notas por um processo que teclado. A barra de espaço indica uma
cheia vale uma colcheia, 2; uma se-
I: em certos casos pode ser bem útil. Pri- pausa com a duração especificada.
mínima, 4; uma mínima, 8 e uma semi- meiro, digite o nome da nota, de "a" O computador registrará a nota que
breve, 16. Essas durações valem, igual- até "f", para as notas naturais; A, C, você tocar, mas não imediatamente, de-
mente, para a pausa. D, F, G, para acidentes (bemóis são co- vido ao tempo necessário para o proces-
O código é muito fácil de usar. Por locados como sustenidos; logo, Bb = samento das instruções. Portanto, não
exemplo, a nota dó, segunda oitava, se- A# etc), e "p". para uma pausa. Em tem nenhuma importância que você de-
micolcheia, tem o código 1024; a nota seguida, entre a oitava —
um número more mais ou menos para teclar uma
si, quarta oitava, semibreve, é 11416. de 1 a 6— e a duração da nota —
letras nota. Também não haverá problema se
Para pausas, — 404 é o intervalo de uma w, h, q, e, s, correspondentes a semibre- algum erro for cometido: será fácil cor-
semínima. Não se esqueça de que cada ve, mínima, semínima, colcheia e semi- rigir as notas mais tarde.

código tem dois dígitos; assim, uma col- colcheia. Para uma nota pontuada, sim- Caso você queira mudar a oitava an-
cheia vale 02, e não 2. plesmente adicione um ponto no final. tes de executar uma nota, use as teclas
Após digitar algumas notas, pressio- Por exemplo: A2e. significa nota A (lá com setas para cima e para baixo. Para
ne < RETURN > para voltar ao menu;' sustenido), oitava 2, colcheia pontuada; alterar a duração da nota, pressione as
selecione a opção 3 para tocar a melo- c3w significa nota C (dó), oitava 3, se- teclas com setas para a esquerda e a di-
dia introduzida até o momento. mibreve. reita. A oitava mais baixa disponível no

Se você quiser alterar, apagar ou Entre as notas na ordem que quiser teclado estará impressa no topo da te-
acrescentar algumas notas, selecione a eouça a musica quando desejar, seleeio- ia, bem como a duração das notas, que

opção 4 do menu. Inicialmente, pressio- nando a opção 7 do menu principal. vão sendo exibidas à medida que você
ne D. para selecionar as notas que se- Outras opções do menu são a mudan- as toca. Para obter uma duração pon-
rão modificadas. Depois, entre o núme- ça no tempo de execução e a mudança tuada, selecione as teclas <INS> e
ro das notas e tecle E para editá-las. Pa- geral de oitava (com efeito retroativo) <DEL>; para apagar a última nota
ra mudar uma nota, digite seu número, — para executá-las, basta que teclemos executada, a tecla <CI.S>.
< RETURN > e seu código. Para inse- um novo valor. Otempo de execução Tendo experimentado essa forma de
rir uma nota, aperte X e entre seu nú- varia de 0 a 255 e indica a velocidade composição, use a tecla <ENTER> e
mero. Caso queira apagar tudo c reini- com que as notas são tocadas. Utilizan- volte ao menu principal. Selecione a op-
ciar o trabalho, selecione a opção 5. do as opções Superior e Inferior, você ção 4 (as notas que você tocou perma-
Quando estiver satisfeito com a me- pode subir ou descer a oitava de qual- necem na memória). Ela permite a en-
lodia, grave-a através da opção 6. quer grupo de notas. trada das notas por um processo que,
A opção 7 permite recuperar uma Para editar a melodia, selecione a op- em certos casos, pode ser muito útil.
música da fita cassete. ção 6. Com ela, você lista as notas e Primeiro, digite o nome da nota, de
identifica as que quer alterar. É possí-
vel escolher entre apagar, inserir, alte-
rar ou continuar. Experimente cada uma
dessas opções. Para apagar notas, en-
Ao executar o programa, um menu tre o número inicial e o número de no-
com nove opções será exibido na tela. tas que deseja eliminar. Para inserir, di-
Comece com a opção 3, para tocar mú- gite o número da nota que está antes do
sica diretamente no teclado. ponto onde se iniciará a inserção e en-
As notas estão dispostas em duas fi- tre uma nota por vez. Para alterar uma
leiras, como vimos no artigo da página nota, tecle seu número e entre o novo
72 1
. Odó menor corresponde ã tecla Q; conteúdo.
o dó médio, á I, e o dó maior, à V. A Finalmente, quando estiver satisfei-
barra de espaço indica uma pausa com to com a meiodia, armazene-a em fita
a duração desejada. O computador re- com a opção 2 e recupere-a quando qui-
gistrará cada nota que você tocar, mas sercom a opção l

não em tempo real —


assim, não impor-
ta que você demore mais ou menos pa-
ra teclar uma nota. Também não have-
rá problema se algum erro for cometi-
do: é fácil corrigir as notas depois. Ao iniciar a execução do programa,
Se você quiser mudar uma oitava an- um menu com nove opções será exibi-
tes de executar uma determinada nota, do na tela. Comece com a opção 3 para
recorra às teclas com setas para cima e tocar música diretamente no teclado.
para baixo. Para alterar a duração da Teremos três oitavas disponíveis.
35 APLICAÇÕES 35

"a"aié"f", para as notas naiurais; A, nota e o número de notas que deseja eli-
C, D.F.G, para acidentes (bemóis são minar. Para inserir, digite o número da
colocados como sustenidos; logo, Bb = nota imediatamente anterior ao ponto
A # etc.X e "p", para uma pausa. Em onde pretende iniciar a inserção e entre
seguida, entre a oitava — um núme- uma nota de cada. Para alterar uma no-
ro de 1 a 8 —
e a duração da nota — ta, tecle seu número e entre o novo
letras w, h, q, e. s, t, u, corresponden- conteúdo.
tes à semibreve, mínima, semínima, eol- Finalmente, quando estiver satisfei- TRANSCRIÇÃO DE PARTITURAS
cheia, semicolcheia, fusa e semiíusa. Pa- to com a melodia, armazene-a em fita Nem todos conseguem executar
ra uma nota pontuada, adicione um com a opção 2 e recupere-a quando qui- música simplesmente sentando-se
ponto no finai. Por exemplo: c8t. sig- ser com a opção 1 diante do micro e usando editor mu-
nifica C (dó), oitava 8, fusa pontua- sical como um processador de textos.
da; A4u significa A (lá sustenido), oita- Embora a opção de playback (execução
va semifusa.
4, da melodia entrada com o auxilio do
Entre as notas na ordem que quiser editor) ajude bastante, nosso programa

e ouça a música quando desejar, selccio-


não permite representar na tela uma
4152 INPUT "Entl ro da
partitura com os detalhes de uma apli-
nando a opção 7 do menu principal. im cação mais profissional.
Outras opções que temos são a mu- 5454 TF (NN<1) OR NN>ct THEN G
Assim, a solução é recorrer a parti-
dança no tempo de execução das notas OTO 1000
e a mudança geral da oitava. Esta últi- 4460 PP.1NT
nota " NN
"Re- entrando : mm turas de músicas de fácil execução pa-
ra violão, flauta; em órgão eletrônico ou
ma tem efeito retroativo. alterando a oi- :

piano, e transcrevê-las usando nos-


4470 PB TNT PB TNT :
tava de notas na memória. Para ambas so editor musical.
4480 INPUT "Entre ron nova nota
as opções, basta teclar 0 novo valor. O - " ;NS
tempo de execução varia de 32 a 255 e 4490 TF NS="" THEN COTO 4300
indica a velocidade com que as notas são 4501) FOR l-l TO LEN (NS)': TF (N S(i)<"0" OR NS(i)>"9") ANP (NS<
tocadas. Com as opções Superior e In- 9(i)<"0" OB NS(i}>"9") ANO (NSl I ).<>•-*') THEN GOTO 4700
ferior você pode subir ou descer a oita- i )<>"""} THEN «OTO 40(lfT 4//2 LET N = VAL (NS)
va de um grupo de notas. 4M0 LET N- VAI. (NS) 4/74 IF TNT (N/1000) >.ll THEN G
Para editar a melodia, selecione a 4520 IF TNT (N/]000)>M THEN G OTO 4 700
opção 6. Com ela, você lista M
notas OTO 4000 4776 IF N<0 THEN GOTO 4792
e verifica o que deseja alterar. É possí-
4530 IF N<0 THEN GOTO 4590 4778 LET M=INT (N/100): LET D=N
4'">40 ET M = TNT (N/100): I.FT D = N
L. -«*! 00
vel escolher entre apagar, inserir, alie-
100 4/82 LET 0=»-INT (M/10)*10: IF
nar ou continuar. Experimente cada
1 ít^O LET 0=M-INT (M/10)»10: IF 0<l OR 0>7 THEN GOTO 4700
uma dessas opções. Para apagar algu- o-;i on o>/ then goto 4000 4784 LET M=INT (M/10) + (O-l "l 2- )

mas notas, entre o número da primeira 4560 LET M=TNT (H/10) +{0-l) "12- 36
4786 FOP i=ct TO ia STEP -l LE
*NN- l)-Di LET T t(2*(i + l>)-t(2*j) LET t(2Mi:

Ni=M *l)-l)"t(2*i-l) NEXT i


:

4SB0 GOTO 4600 478B LET f(2"la-l)»D: LET t (2*1


4590 LET M INT - N/1U()) + 1: LET D a) = M
-0- (N-M" 00) I
4790 LET ct=rt+l GOTO 4000
:

4600 IF MO-4 Tl EN GOTO 4000 4797 LET M= INT (N/I0(l) + 1; LET D


4MO GOTO 45/0 = 0- (N-M*100)
4/00 CLS 4794 IF MO-4 THEN GOTO 4/00
4/05 PH INT "Etltl 4796 GOTO 4786
neta antes- -d, '
4800 CLS
480S PHTNT "Entre com numero da
'1/30 INPUT in nota a ser apagada .
" (D par
1 '

4735 IF EN GOTO 40
4/40 F I 48.10INPUT de
4/45 CLS 4835 IF dfi-0 THEN «OTO 4000
4/50 GOSUB 2500 4.B40IF de>ct THEN GOTO 4B00
4/55 PH TNT 4B45 FOR i»de TO ct LET t(2*0 :

4760 Dnx •Kntr va Nota = t (Z« (i+l) LET t(2«i-l)-t(2"(


> :

;NS i + D-l) NEXT i


4765 IF LEN (NS) =0 THEr> GOTO 4 4850 LET ct=ct-l
700 4855 ROTO 4000
4//0 FOtl 1 = 1 TO LEN (Ni 4900 DATA 3.0,-11,-9.0,-6.-4,-2
; : ) " ; : "("

35 APLICAÇÕES 35

,0,1 1590 PRINT INPUT" INICIO NA NOTA


;
1850 BS=MIDS(NS(D .2,1)
4910 DATA 12.9,8,-8, IU.0. 13,0, 1 (ENTER'1) " ;ST 1860 IF AS="I"THEN CS=CHRS(ASC(
5.0 1600 IF ST<-0 THEN ST-1 ELSE IF BS)-1):IF CS="0"THEN CS«"5"
4920 DATA 0,16.14,2,4,-12.-7,6, ST>NN THEN ST-NN 1870 IF AS="S"THEN CS=CHRS (ASC
-5.-1 1610 PRlNT"TEMPO=" TE ;
BS)+D:1F CS-"6"THEN CS-"1"
4930 DATA 11,-10,7,-3.5 1620 PLAY"V31 ;T" «JTP.S (TE) 1880 MIDSÍNS(I) ,2,1)-CS
5000 CLS 1630 EXFC 46481:F0R I-ST TO NN 1890 NEXT: RETURN
5010 INPUT "DIGITE NOME DO ARQU 1640 PRINT9256 "TOCANDO NOTA NU .
1900 CLS
1910 PRINTS4 "CARREGAR MUSICA D
,

IVO ";FS: LET T (KiaJtriotes+l =<r.t ) MERO" I ;

SAVE FS DATA Tl): RETURN 1650 AS=NS(I) A FITA"


6000 INPUT "DIGITE NOME DO AH(JU 1660 BS = LEFT3 IAS 1 IF BS="p"TH , ) :
1920 PRINT PRINT" ESTA OPCAO IRA
:

EN 1690 ELSE IF BS>""d" AND BS< APAGAR QUALQUER MUSI


"IUO ";FS- LOAD FS DATA T(): LET
g"THEN PS-CHRS !ASC[BS) -32)+" CA NA MEMORIA -VOCE QUER C
cl.=T{MAXNOTES+l) ti ET U RN :

" ELSE PS=BS+"I" ONTINUAR (5/N) "


1670 PLAY"0"+MIDS(AS,2 D +"L"+L ,
1930 POKE 282.255:INPUT AS
2S INSTR [RIS MIDS (AS ,3,1))) +MID
( ,
1940 IF ASO"S" THEN RETURN
1950 PRINT LINE INPUT "NOMEARQ
:

S(AS.4,1)+PS :

1680 GOTO 1700 ;AS


1440 FOR I=ST TO NN 1690 PLAY"P"+L2$<INSTR(R1$.MIDS 1960 OPEN "I", #-1. AS
1450 PRINTIC, USINCttt ";I; CAS. 3, 1) )
1970 INPUTI-l.TS.NS
1460 AS-NS(I) :BS=LEFT$(AS.ll 1700 NEXTI 1980 NN"VAL{NS) :TE-VAL(TS)
1470 IF BS> = " a " AND BS<- "g"THEN 1710 RETURN 1990 FOR 1-1 TO NN
CS-CHRS(ASC(BS)-32)+" "ELSE CS- 1720 CLS 2000 INPUTI-l.NS(I)
BS+"I" 1730 IF NN-0 THEN RETURN 2010 NEXT CLOSEI-1 RETURN
: :

"
1740 PRINT05 "MUDANÇA GERAL DE 2020 CLS
,

1480 IF BS-"P" THEN CS-"-


1490 PRINTICCSi OITAVA" 2030 IF NN-0 THEN RETURN
1500 IF BSO"p"THEN PRINTIC" O 1750 PRINT664. "OITAVA SUPERIOR 2040 PRINTS5, "SALVAR MUSICA EM
ITAVAI" ;MIDS [AS 2 1) ;ELSE PRINT . ,
OU INFERIOR(S/I) FITA"
2050 PRINT LINE INPUT"NOMEARQ
:

IC.STRINGSU1.32) 1760 POKE 282.245:INPUT AS r

1510 PRINTIC." ";LES(INSTR[R1S 1770 IF AS-"" THEN RETURN ;AS


.M1DS (AS, 3. 1) ) ) ;
1780 IF AS<>"S" AND AS<>"I"THEN 2060 OPEN "O" #-1 AS , .

1520 IF MIDS [AS ,4,l) i "."THEN R [


J 1750 2070 PRINTt-l.STRS(NN) .STRS(TE)
INTIC."." ELSE PRINTIC 1790 PRINT"INICIO EM (ENTER-TUDO 2080 FOR I-1TO NN
1530 LP-LP+Í:IF LP- 13ANU C-0 TH )
" ;INPUT ST
:
2090 PRINT#-1,NS(I)
ENLP-0 COSUB940:CLS 1800 IF ST<=0THEN ST-1 EN-NN GO : : 2100 NEXT:CLOSEi-l:RETURN
1540 NEXT:i;OSUB940 TO1840
1550 PRINT(J448,STRINGSt63, 32) : : 1810 INPUT "FINAL EM[ENTER'FIM
' ;EN
PRINTSS480 "PRESSIONE QIJAI.yNER T
.
)

ECLA/MENU" EXEC 3f>038 RETURN


; :
: 1820 IF EN-D OR EN>NN THEN EN=N
1560 CLS N
1570 PRINTÍ8 "MODO TOCAR NOTAí;" 1830 IF STT>EN THEN 5T-EN 1610 FOR I-SL TO EL
1620 AS=N$(I) :BS=LEFTS(AS.l)
,

1580 IF NN-0 THEN RETIJNN 1840 FOR I=lTO NN


35 APLICAÇÕES 35

1950 INPUT AS:IF AS = "" THEN RET (BS)-1):IF CS="0" THEN CS-"1" 2170 INPUT #1 .NN.TE
URN 2050 IF AS="S" THEN CS=CHRS (ASC 2180 FOR 1= 1 TO NN
I
1960 IF AS<>"S" AND ASO" "THEN (BS)+1):IF CS'"9" THEN CS-"8" 2190 INPUT il.NS(I)
1940 2060 MIDS(NSU) 2.D-CS , 2200 NEXT CLOSEI 1 RETURN
: :

1970 LOCATE 4.9: INPUT" INICIO EM 2070 NEXT:BETURN 2210 CLS:COLOR 15.6
(ENTER= 1 " ;ST ) 2080 CLS:COLOR 15,6 2220 LOCATE 8 . PRINT"SALVAR MU
1980 IF ST<=0 THEN ST=1:EN=NN 2090 LOCATE 5,1: PRINT"CARREGAR SICA EM FITA"
1990 LOCATE 4.10: INPUT" FINAL E MUSICA DO GRAVADOR"; 2230 LOCATE 4,6 PRINT"aperle SA
M (ENTER^FIM " EN )
r 2100 LOCATE1 2 3 PRTNT"ATENÇAO
, : J ! UE DC
2000 IF EN=0 OR EN>NN THEN EN-N 2240 :
LINE INPUT"NOME
N 2110 LOCATE 4,4:PRINT" ESTA OP ARQ "
:

2010 IF ST>EN THEN ST = EN CAO IRA APAGAR 0 2250 OPEN "CAS:AS" FOR OUTPUT A
2020 FOR I=ST TO EN UALQUER MUSICA NA MEMORIA" S*l
2030 BS=MIDS(NS!D ,2,1) 2120 LOCATE 4 7 INPUT"VOCE QUER
. : 2260 PRINT II NN ,TE
,

2040 IF AS="I" THEN CS=CHRS (ASC CONTINUAR? (S/N) " AS ;


2270 FOR 1= 1 TO NN
1630 IF BS>="a"AND BS<="g"THEN 2130 IF AS<>"S" THEN RETURN 2280 PRINT ll.NS(I)
' ELSE C
T
2140 LOCATE 4,10: PP IN "aperte L 2290 NEXT:CLOSE 1 1 RETURN
CS=CHRS<ASC(BS)-32)+" :

"
S=BS+"# OAD no gravador"
1640 IF BS-"P" THEN CS""- 2150 LOCATE 4,12:LINE INPUT"NOM
1650 CS=" "+CS EARQ " AS
!
;

1660 IF BSO"p"THEN CS = CS+"0ITA 2160 OPEN "CAS: AS" FOR INPUT AS


VA |"+«IDS [AS. 2 1) ELSE CS=C$+ST .

RINGS<9,32)
1670 CS=CS+" "+LES(INSTR(P1S.MI
DS (AS. 3.1) )

1680 IF MIDS (AS 4 1) =" "THEN CS . ,


.

=CS+"."ELSE CS=CS+" "


1690 IF C=l THEN LOCATE 5.LP+5:
PRINT USING"#t#";I; :PRINT CSELS
E LPRINT USING"***";I; LPRINT C :

S
1700 IF RTOO THEN RETURN
1710 LP-LP*1:IF LP-13ANDC-1 THE
N LP = 0 :G0SUB lQlOrCLS
1720 NEXT:GOSUB 1010
1730 LOCATE 2,18: PRINT"APERTE Q
UALOUER TECLA-MENU PRINCIPAL *
1740 QS-INKEYS:IF QS""" THEN 17
40
1750 RETUPN
1760 CLS:COL0R 1.10: LOCATE a.l:
PRINT"M0DO -TOCAR NOTAS"
1770 ST-1:IF NN=0 THEN RETURN
1780 LOCATE 4,5: INPUT" INICIO NA
NOTA (ENTEB^l) " ST :

1790 IF STO0 THEN ST=1 ELSE IF


ST>NN THEN ST=NN
1800 LOCATE 4 7 PRINT " TEMPO DE . :

EXECUÇÃO" " TE r

1810 PLAY"V15T"+STR5 (TE)


1820 FOR I = ST TO NN
1S30 LOCATE 6,12: PR TNT "TOCANDO
NOTA " :
;

1B40 AS=NS(I)
1B50 BS-LEFTS (AS 1) IF BS""P"TH . :

EN 1880 ELSE IF BS>="a"ANDBS<="


g"THEN PS=CHRS (ASC (BS) -32) +" "E
LSE PS=BS+"*"
1B60 PLA¥"0"+MIDS(AS.2.1)+"L"+L
2S INSTR (RIS MIDS AS 3 1) ) +PS+
( . ( . . )

MIDS (AS. 4.1)


1870 GOTO 1890
1880 PLAY"R"+L2S(INSTR(R1S.MIDS
(A$ 3 1) ) +MIDS (AS 4 1
, , ) . ,

1890 NEXT I
1900 RETURN
1910 CLS:COLOR 1,3: ST-1 EN-NN :

1920 IF NN=0 THEN RETURN


1930 LOCATE 7.1: PRINT "MUDANÇA G
ERAL DE OITAVA"
1940 LOCATE 0 6 PRINT"OITAVA SU , :

PERIOB OU INFERIOft{S/I) "


IHIimillMMl^^^MMWMW 1111111

Algumas versões mais poderosas do

IPRITES EM LOi LOGO


sprites.
permitem a programação de
Seguindo as instruções deste
artigo, os usuários do MS X poderão gerar

e controlar quarenta figuras diferentes.

Em artigos anteriores sobre a lingua- tação dos sprites na tela em diferentes dos de 0 a 9 e de 36 a 59, são matrizes
gem LOGO. vimos como desenhar na planos, destacando-os ou ocultando-os de 16 x 16 pixels contendo figuras que
tela com a tanaruga. um cursor gráfico conforme os critérios que determinam o usuário não pode mudar. O acesso a
a prioridade de uns sobre os outros. eles é dado pelo comando MUDEFIG,
que pode ser ativado ou desativado por
Aproveitando os recursos do MSX, seguido do número do sprite.
meio de comandos primitivos.
Como você deve ter notado, a elabo- o HotLOGO, versão lançada no Brasil
ração de uma figura mais complexa de- pela Sharp para computadores dessa li- As figuras de 0 a 9 são:
nha, inclui entre suas propriedades a 0 circulo 5 foguete
mora um lempo razoavelmente longo,
programação de sprites verdadeiros. coração 6 tijolo
o que torna impossível, por exemplo, 1

desenvolvermos um videogame com Algumas versões de LOGO


para o 2 gato 7 helicóptero
mação gráfica —
tarefa simples em BA Apple e o TRS-Color também fazem 3 cachorro 8 locomotiva
9 vagão
SIC ou outra linguagem imperativa. Al uso de sprites. No exterior, a linha Com- 4 caminhão
gumas versões do LOGO, porém, per modore 64 tem poderosos instrumentos
mitem a geração e utilização de sprites. para a programação de sprites multico- Os sprites numerados de 36 a 59 re-

Nos artigos das páginas 88 c 80" 1


J
loridos. Mas, em
todas essas máquinas, presentam tartarugas em diversos ângu-

mos como trabalhar com sprites no os sprites não são controlados por hard- los e posições.Todos aceitam os mes-
MSX. única máquina nacional que pos- ware, como nos micros da linha MSX. mos comandos e podem ser movimen-
tados simultaneamente na tela. Os spri-
sui esse recurso implementado em hard-
ware. O Speetrum, o TRS-Color, o Ap-
ple e o TK-2000 têm comandos especiais SPRITES PRE-PROGRAMADOS
para definir blocos gráficos (UDG) e
usá-los em animações rápidas. Mas es- Existem doistipos de sprites em Hot-
ses micros não dispõem de sprites "ver- LOGO: os pré-programados e os pro-
dadeiros" —
ou seja, não contam com gramáveis pelo usuário. Cada um deles
controle de hardware (pelo Vídeo Dis- recebe um número inteiro, entre 0 e 59.
plav Processor) que garanta a movimen- Os sprites pré-programados, numera-
IIIIIIIIIIIHHH 5 UNGUAUNS 5 «|||||||||
0 QUE E UM SPRITE E VERDADEIROS
TARTARUGAS X SPRITES H0TL0G0
VERSÕES DO LOGO SPRITES PRÉ-PROGRAMADOS
COM SPRITES COMO PROGRAMAR
SPRITES FALSOS UM NOVO SPRITE

ies fixos (O a 9), porém, não mudam de quiser guardar a figura que está editan-
orientação, como ocorre com as tarta- do, tecle <CTRL> e <STOP>.
rugas ao encontrarem um comando PA-
RA DIREITA ou PARAESQLERDA.
ANIMAÇÃO GRÁFICA

SPRITES PROGRAMÁVEIS Na produção de animações gráficas


com sprites, usam-se os comandos PARA-
Os spriles numerados de 10 a 35 po- F RENTE, PARATRÁS, PARADIREITA
dem ser programados pelo usuário. e PARA ESQUERDA para mover a figu-
O primitivo utilizado para desenhar ra de um lado a outro. Por exemplo: Como funciona um sprite?
um sprile novo na tela é muito simples: A característica fundamental de um
HG sprite é a sua velocidade. Aliás, é exa-
chama-se EDF1G (edita figura), e deve
MUDEFIG 7 tamente esta a origem do nome: spri-
indicar o número do sprite a ser criado te,em inglês, designa um pequeno
ou modificado. Quando digitamos esse
USENADA
PARAFRENTE 20 duende que, segundo a lenda, corre co-
comando, a tela fica em branco e apa- ESPERE 300 mo o vento.
rece um cursor piscando no canto supe- PARADIREITA 90 Outra característica do sprite é a sua
rior esquerdo. Podemos movimentá-lo PARAFRENTE 90 capacidade de interpenetração, ou se-
em qualquer direção, por meio das te- ja, se duas figuras estiverem ocupan-
ESPERE 300
clas de controle. Para acender um pixel PARATRAS 30 do a mesma área de vídeo. aquel3 que
PARADIREITA 90 PARAFRENTE 50 for de menor prioridade dará a impres-
(bit correspondente, na matriz do spri-
são de estar passando "por trás" da
te), pressiona-se a tecla de espaço no
ponto onde estiver o cursor. Para apa- O helicóptero (sprile pré-programado Teoricamente, pode-se reproduzir
gá-lo, pressiona-se a mesma tecla sobre 7) parecerá levantar vôo, esperar um uma "família" de sprites através de
esse ponto. momento, voar para a direita, subir software, mas eles não serão suficien-
Se você quiser sobrepor uma grade à mais um pouco e, por fim, aterrissar. temente velozes. Um sprite baseado
telaem branco, a fim de visualizar me- Para simular certas ações —
como em hardware, no entanto, consegue ter
lhor o padrão do desenho, pressione as um homem correndo —
podemos usar
,
velocidade, pois, como é o caso dos
ledas <CTRL> e <K>. dois ou mais sprites parecidos, mostran- micros da linha MSX, o vídeo dispõe de
Depois de criar ou modificar a figu- do a figura em diferentes estágios do um rapidíssimo processador, que cui-
da de todos os detalhes do funciona-
ra a seu gosto, tecle < ESC > : ela será movimento. O comando MUDEFIG se
mento das figuras, sem onerar o pro-
armazenada na memória, sob o núme- encarregará de alterná-los, enquanto se cessador central.
ro indicado no comando EDFIG. Se não provoca um deslocamento na tela.
"

IIIHIIHIllW^—^^MBBMIIIIIIIIHI
como comprimir

COMPRE Agora que você já sabe


e descomprimir textos, ponha o
programa para funcionar e observe

DE TEXTOS C
seu desempenho no desenvolvimento
de um jogo de aventura.

Nos artigos das páginas 1332 e 1404,


analisamos diversos algoriimos destina-
dos à compressão de textos. Não expli-
camos, porém, como utilizar esses pro-
gramas no contexto de um jogo de aven
tura. Como você deve se lembrar, nos-
so objetivo inicial era reduzir o cspa
ço de memória ocupado por uma aven
tura desse tipo, permitindo a progra-
mação de um jogo mais complexo e
extenso.
Neste artigo, examinaremos as técni-
cas de compressão e descompressão de
textos aplicadas ao desenvolvimento de
um jogo de aventura. Usaremos o algo-
ritmo que demonstrou a maior eficiên-
cia de compressão, com a máxima sim-
plicidade de programação: a técnica de
compressão de dois códigos por byte,
baseada na frequência dos caracteres no
texto. Como vimos, esse algoritmo po-
de ser programado em BASIC sem difi-
culdades, e é razoavelmente rápido.

DESENVOLVIMENTO DE AVENTURAS

Em
uma série de artigos de Progra-
mação de Jogos (páginas 208, 226, 270,
306 e 394), tratamos das principais téc-
nicas de desenvolvimento de aventuras
em BASIC. Com um número mínimo de
alterações no programa então forneci-
do, você poderá empregar as rotinas de
compressão e descompressão de textos,
economizando uma quantidade razoá-
vel de memória.
Se você não armazenou o programa
mencionado, digite-o agora, acompa-
nhando as listagens dadas nos sucessi-
vos artigos. Entretanto, cada vez que en-
contrar uma mensagem tal como:
345 PRINT "TIJOLOS SAO MUITO
PESADOS, SEU BHAC0 DEVE ESTAR
DOENDO.
Illllimilll « P*OG«AMAÇÃ0DtJ0GOS 49
1MHH| |||||1

TIPOS DE MENSAGEM PROGRAMA DE


E TEXTO DECODIFICA CÃO
COMO ADAPTAR SEU DE QUATRO EM
JOGO DE AVENTURA QUATRO NÍBBL ES
A LISTA-MESTRE O PROGRAMA EM A CÃO

substitua-a por outra mais curta, ape- outras mensagens (VOCE PEGOU); grama onde ocorrem. Agrupe as
elas
nas para lenibrar-se do que deve ser de- mensagens de ajuda (VERIFIQUE SE mensagens segundo o seu tipo: primei-
finido ou impresso ali. Por exemplo: ALGUMA PORTA ESTÁ ABERTA); ro as mensagens de localização, depois
345 PBINT "TIJOLO PESADO" instruções do jogo. as de identificação de objetos encontra-
dos etc. Deixe as instruções para o fim.
Procedendo assim, você poderá tes- Os jogos de aventuras dificilmente Isso facilitará a reprogramação do jo-
tar se o programa completo de aventu- contêm todos esses tipos de texto. De- go de aventura e tornará menos cansa-
ras está funcionando bem. sem gastar pois de verificar quais deles estão pre- tiva a "caçada" aos erros cometidos.
muito tempo digitando mensagens ex- sentes, você deverá decidir se vale a pe-
tensas, que depois serão retiradas do na comprimi-los. Listas de nomes cur-
programa principal. tos (objetos e locais, por exemplo) não
Quais são as mensagens e frases que devem ser comprimidas: o número de
admitem compressão? Em um jogo de bytes economizado possivelmente não Tendo todos esses dados, digite no
aventuras, utilizam-se doze tipos prin- compensará os bytes de código de pro- computador um programa em BASIC
cipais de texto alfanumérico: grama gastos para acessar o texto com- constituído apenas de linhas DATA,
primido. Todos os outros tipos de tex- com as mensagens que serão comprimi-
- nomes de lugares (por exemplo: to (sobretudo as instruções) podem e de- das. Cada mensagem deve ficar em uma
HALL DE ENTRADA); vem ser comprimidos, desde que tenham linha DATA separada.
- mensagens de localização (VOCE ES- duas ou mais palavras: isso levará a um Preparamos essa listagem para o jo-
TÁ NO HALL DE ENTRADA); ganho real de espaço. go de aventura publicado em INPUT.
- verbos (NADAR); Para localizar as mensagens que se- Ela serve para todos os micros, e come-
- nomes de objetos (REVOLVER); rão comprimidas, o melhor é tirar uma ça na linha 5000. Em algumas máqui-
- mensagens de identificação de objeto listagem em impressora e marcar todos nas é possível digitar o texto em letras
(VOCE PEGOU UM REVOLVER); os pontos em que elas ocorrem. Em se- minúsculas e a acentuação correta, mas
- mensagens de advertência(ESTA guida, faça uma lista das mensagens, in- não o faça. Isso é imporiante, pois, co-
MUITO ESCURO PARA VER AS dicando os números das linhas do pro- mo vimos nos artigos anteriores, empre-
SAÍDAS); garemos um código reduzido de repre-
- mensagens de erro (ISTO NÃO PODE sentação de caracteres, baseado em sua
SER ESVAZIADO);
- consequências de açôes do jogador ou
do programa (exemplo: AS BOLI-
NHAS SE ESPALHARAM PELO
CHÃO);
- perguntas ao jogador (QUER JOGAR
NOVAMENTE?);
- frases comuns, em conjunto com
" " "

49 PROBUMAÇÃODCJOGOS 49

prende NUMA masmohba IMUNDA Nesse programa, foram codificados


estes tipos de texto (com suas linhas):
5140 DATA "DESCULPE, VOCE NAO P
ODE SEGUIR NESSA DIREÇÃO" 5000 a 5110: mensagens de localização;
5150 DATA "VOCE NAO PODE LARGAR 5120 a 5260: mensagens de advertência e
0 QUE NAO TEM" erro;
5160 DATA "DESCULPE, NAO POSSO 5270 a 5370: consequências de ações;
AJUDAR AGORA"
5380 a 5405: frases comuns e comandos;
5170 DATA "TIJOLOS SAO MUITO PE
SADOS, SEU BRAÇO DEVE ESTAR DOE 5410 a 5440: instruções do jogo.
NDO"
5180 DATA "JA ESTA ACESA" Observe que só excluímos as listas de
É possível comprimir sons e melodias
5190 DATA "ISTO NAO PODE SER ES objetos, verbos e locais. As linhas com
em jogos de aventuras?
Existem técnicas bastante eficientes VAZIADO" instruções são as mais iongas (cuidado
para a compressão de melodias, mas 5200 DATA "AS BOLINHAS SE ESPAL para não ultrapassar 255 caracteres),
os algoritmos usados são extremamen- HARAM PELO CHAO" pois isso facilita seu posterior uso.
te especializados. Uma técnica muito
5210 DATA "NADAR AONDE ?" Depois de digitar o programa, arma-
simples pode ser empregada, entretan- 5220 DATA "QUE VERGONHA, VOCE S zene-o em fila ou disco.
to, pelos usuários dos computadores
E AFOGOU !"
TRS-Color e MSX: ela consiste em 5230 DATA "VOCE SE MOLHOU TODO"
comprimir a sequencia de comandos 5240 DATA "VOCE ACHOU UM REVOLV
usados para programar uma melodia ER"
como se fosse um texto Ivariável 5250 DATA "NADA ACONTECE"
string), e depois descomprimi-la no mo-
5260 DATA "VOCE NAO PODE PUXAR A técnica de compressão estatística
mento de tocar a melodia. ISTO" um código baseado na lista dos
utili/a
5270 DATA "VOCE CAIU DENTRO DO
caracteres mais frequentes no texto. Ca-
VASO E FOI EMBORA COM A DESCARG
— A !" da código ocupa uni nibblc (ou seja,
frequência no texto diferente, portan-
5280 DATA "PARABÉNS VOCE COMP quatro bits), e dois nibbles são compri-
to, do ASCII. Como a eficiência de
!

LETOU A TAREFA midos em um byte. Os quinze caracte-


compressão só é obtida se usarmos um
!

5290 DATA "FIM DO PROGRAMA DE A res mais comum têm códigos cie um nib-
máximo de 30-35 caracteres nesse códi- VENTURAS" ble (um número de I a 15). Os quinze
go, trabalharemos apenas com as letras
5300 DATA "QUER JOGAR NOVAMENTE caracteres seguinies, na ordem de fre-
maiúsculas e poucos caracteres de pon- CS/N) ?"
quência, têm códigos de dois nibbles
tuação. 5310 DATA "HA UM SACO DE BOLAS (um 0, seguido do código de 1 a 15); os
DE GUDE AQUI" próximos quinze têm códigos de irês
5320 DATA "TEM UM TIJOLO NO CHA
0" nibbles (dois 0, seguidos de um código
5330 DATA "HA UMA CORRENTE PEND de I a 15) e assim por diante. Em geral,
URADA SOBRE 0 TRONO" os quinze caracteres mais frequentes
5000 DATA "VOCE ESTA DO LADO DE
FORA DE UM GRANDE PRÉDIO" 5340 DATA 'TEM UM REVOLVER NO C correspondem a 80% ou mais de todo
5010 DATA *V0CE ESTA A BEIRA DE HAO" o texio, e é por isso que se obtém uma
UM GRANDE RIO* 5350 DATA "UM OLHO CRAVEJADO DE compressão em torno dos 50%.
5020 DATA "VOCE ESTA NUMA FLORE BRILHANTES ESTA NO CHAO" Se usarmos uma lista dos caracieres
STA PETRIFICADA" 5 360 DATA "VOCE ESTA DIANTE DE mais freqiienies em textos em português,
5030 DATA "VOCE ESTA NUMA SALA UMA LÂMPADA" conseguiremos uma boa eficiência de
EMPOEIRADA" 5370 DATA "DE REPENTE SURGE UM compressão, mas não a ideal. Para al-
5040 DATA "VOCE ESTA NUMA SALA COLETOR DE IMPOSTOS" cançar o nívelmáximo dc eficiência, de-
ESCURA" 5380 DATA "EU NAO SEI COMO"
vemos usar a ordenação de caracteres
5050 DATA "VOCE ESTA EM UM ATAL 5390 DATA "VOCE PEGOU"
5400 DATA "NAO ESTA AQUI encontrada no próprio texto. Se você
HO ENLAMEADO"
5405 DATA "PRESSIONE QUALQUER T quiser determiná-la, siga estas etapas:
5060 DATA "VOCE ESTA NA ENTRADA
DA CIDADE OCULTA" ECLA PARA CONTINUAR..."
5070 DATA "VOCE ESTA NO HALL DE 5410 DATA "INSTRUÇÕES" - carregue no computador as linhas DA-
ENTRADA" 5420 DATA "DEVIDO A UM COLAPSO TA com todas as mensagens;
5080 DATA "VOCE ESTA NO PÁTIO" FINANCEIRO, VOCE TEVE QUE DEIXA - acrescente as linhas do programa de
5090 DATA "VOCE ESTA NO JARDIM" R 0 PAIS. SEUS PROBLEMAS VAO TE contagem de letras fornecido no pri-
5100 DATA "VOCE ESTA NO GUARDA- RMINAR QUANDO VOCE ENCONTRAR 0 meiro artigo da série (página 1332);
LOUCAS" LEGENDÁRIO OLHO CRAVEJADO DE BR - rode o programa e anote o resultado.
5110 DATA "VOCE ESTA NA SALA DO ILHANTES DE UM TOTEM INCA."
TRONO" 5430 DATA "DEPOIS DE TRAZE-LO,
VOCE TERA QUE ENCONTRAR A SAÍDA Para poupar trabalho ao leitor, pre-
5120 DATA "ESTA MUITO ESCURO PA
RA VER AS SAÍDAS" CUIDADO COM O COLETOR DE IMPO paramos a lista de frequência de carac-
STOS teres no texto da aventura de INPVT
5130 DATA "COMO VOCE NAO TEM NA !

DA QUE POSSA SER CONFISCADO, EL 5440 DATA "*" (artigo da página 208 e seguintes).
IIIIIIIIIIM1 « PHOGRAMAÇÃODiJOGOS 49 IIIIII
(
LET kS (2) ""PHGQBFJ , .
!
-?XZ " r LET
k3<3>-")/"
180 PRINT "CODIFICANDO..."
190 LET i-0:LET k-1
200 READ LS:IF LS=""" THEN GOTO
230
210 GOSUB 710:LET i-i+l:LET f S
i)-x3 ACENTUANDO TEXTOS
215 PRINT isLS COMPRIMIDOS
220 GOTO 200 Para os perfeccionistas da progra-
230 LET nL-I mação, é frustrante não poder usar ca-
240 PRINT INPUT "NUMERO DA MENS
:
racteres acentuados em um texto que
AGEM ";1 será comprimido pelo algoritmo esta-
242 IF i=0 THEN GOTO 300 tístico discutido neste artigo. Mas. em
) 245 IF i<l OR i>nL THEN PRINT " geral, a falta de acentos não dificulta
*** NAO EXISTE" :GOTO 240
250 LET LS-fS(i) :G0SUB 870 Entre as poucas exceções destaca
O primeiro conjunto dc quinEe carae 290 GOTO 240 se a palavra é, que, sem acento, pode
teres (KSU)) é formado por: branco, 300 STOP impedir a compreensão do texto. Para
A,E,0,S,R,D,C,N,T,U,1,M,V e L. Os evitar esse problema sem aumentar o
demais caracteres fazem parte, portan As sub-rotinas que começam nas li- número de caracteres do conjunto uti-
to, dos conjuntos seguintes. nhas 710 (codificação) e 870 (decodifi- lizado, recorra ao apóstrofo: coloque-
De posse dessa lista, podemos escre- cação) podem ser copiadas integralmen- o logo após a letra que deve ter acen-
ver um pequeno programa para testar te do programa listado no primeiro ar- to agudo, sem deixar espaço — o re-
tigo, para os computadores respectivos.
sultado será satisfatório.
se a compressão e a descompressão es
tão funcionando com os textos de exem A linha 20 do programa define os três
pio. Carregue novamente na memória conjuntos de códigos de caracteres. O
somente as linhas DATA anteriores, e laço formado pelas linhas 1-80 a 220 primido; a outra efetua a descompres-
adicione este programa: comprime o lexto, lendo-o linha por li- são quando solicitado. Explicaremos
nha em DATA e colocando o resultado mais adiante como usá-las.
no conjunto F$ (uma mensagem por li- No programa-exemplo, o texto com-
El El OE GSM nha). A sub-rotina de codificação é cha- primido foi armazenado em um conjun-
mada em 210. to FS. Portanto, bastaria escrever uma
10 DIM FS(100) ,KS(3) Finalmente, as linhas 240 a 290 soli- sub-rotina de gravação desse conjunto
20 KS(l)-" AE0SRDCNTUIMVL":KS(2
citam ao usuário o número da mensa- (com texto comprimido) e, depois, uma
-"PHGQBFJ t-7XZC:KÍ(3>-")/"
.

sub-rotina para lê-lo, de volta à memó-


)
gem que
,

deseja imprimir. Digite 0, se


180 PRINT "CODIFICANDO..."
quiser interromper o programa. ria, no programa de jogo.
190 I-0:K=1
200 READ LS:IF LS-"*" THEN GOTO Parece tudo muito simples, mas há
230 um senão: trabalhando com conjuntos
ARMAZENAGEM DO RESULTADO alfanuméricos, como o FS, no progra-
210 GOSUB 710:I-I+1:FSÍI)-XS
215 PRINT I;LS ma que utilizará o texto comprimido,
220 GOTO 200 ocuparemos um espaço de memória,
230 NL-I que ultrapassará, em tamanho, o exigi-
240 PRINT INPUT "NUMERO DA MENS
:
do pelo texto original, descomprimido.
AGEM ";I Vamos agora desenvolver dois pro- Devido ao modo como o BASIC tra-
242 IF 1-0 THEN GOTO 300
gramas separadamente. O primeiro fun- ta cadeias de caracteres (siring), è difí-
245 IF Kl OR I>NL THEN PRINT "
ciona como o programa anterior, servin- cil evitar esse problema. Usaremos, as-
NAO EXISTE" GOTO 240
sim, um conjunto numérico T% para
:

Z50 LS-FS(I) :GOSUB 870 do para comprimir todas as mensagens


290 GOTO 240 e instruções. O resultado, gravado em armazenar os bytes comprimidos. Os
300 END fita ou disco, em um arquivo sequencial, dois bytes gerados pela compressão de
será depois carregado pelo programa de cada quatro nibbles serão armazenados
Para os computadores das linhas jogo propriamente dito. Assim, a roti- em um conjunto de T%, pois uma va-
TRS-80 e TRS-Color, adicione a linha: na que executa á compressão não preci- riável inteira (em todos os computado-
sa ser incluída no programa do jogo. res, exceto o Spectrum) ocupa dois

CLEAR 2000 Neste se introduzem apenas as rotinas bytes, e pode armazenar um número en-
5
responsáveis pelo carregamento, des- tre - 32768 e 32767. O tamanho de T°?o
compressão e impressão. será igual ao número de caracteres com-
O segundo programa compõe-se de primidos (no exemplo anterior, 447 bytes).
duas rotinas que podem ser acrescenta- Para localizar o início de cada men-
das ao jogo de aventura. Uma delas lê sagem nessa sequência contínua de có-
o arquivo sequencial com o texto com- digos, temos que criar um segundo con-
.

IIIIIIIIIIIIHHE" PROGIUMAÇÂODIJOGOS 49 1HHI


jiinto A%, que conterá os apontadores, 760 TKNC)-(CtU) OR (16*Ct(2) 740 FOR P = l TO 15:IF CS=MI£>S(KS
O comprimento de ))+256MCt(3) OR (16*Ct{4)))- (K).P.l) THEN COTO 750
ou índices de T^o.
745 NEXT P:P-0
A% será igual ao número de mensagens 32768
765 NC-NC+1 :N-0
mais (no nosso exemplo, 46).
1
775 IF P-0 THEN K-K+l :GOTO 740 A sub-rotina é igual à apresentada no
Se dimensionamos T% e A% em seu
776 K-l artigo anterior, com uma diferença: os
limite, obteremos o máximo de econo-
7B0 NEXT J nibbles são armazenados de quatro em
mia de espaço de memória. 785 IF LN-4 THEN RETURN quatro, no conjunto C%, e comprimi-
A rotina de codificação é a seguinte 790 FOR J-LN+1 TO 4:Ct(J)-l
programa de teste vem depois): dos pelas linhas 760 e 795. O valor 32768
(o 792 NEXT J
c diminuído do byte assim comprimi-
795 T%(NC)-(CtU) OR U6-C1 (2)
))+256*(CI(3) OR (16*Ct(4)))- do, para que seu conteúdo fique entre

QQVA
700 REM - ROT IMA DE CODIFICAÇÃO
32768
796 NC-NC+1: RETURN
-32768 e 32767.
Segue-se o programa principal:

710 N-0:LN-0
720 FOR J-l TO LEN (L$)
730 CS-MIDSÍLS. J.U
740 P-INSTR{KS(K) ,CS>
Para executar a rotina nos micros 10 DIM K$(3) ,Tt (450) .At (46)
750 N-N+l :CI (N) -P:LN-N
compatíveis com o Apple, acrescente: 15 DIM Nt (2) .Ct (4)
755 IF N<4 THEN GOTO 775
20 KS(l)-" AEOSRDCNTUIMVL-:KS(2
2)-"PHGQBFJ. !-?X2(" :KS<3)-")/"
.

1B0 PRINT "CODIFICANDO. ."


190 I-0:K-1:NC-1
200 READ LS:IF L$-"*" THEN GOTO
230
205 I-I+l:At(I)-NC
210 GOSUB 710
215 PRINT I;At(I) ;LS
220 GOTO 200
230 NL-I:At(I+l)-NC
300 INPUT "GRAVAR (S/N) " RS i

310 IF RS-"S" THEN GOSUB 400


320 END

:omputadores das linhas

J
?^ r*> c*j ,\t
MUNIU 49 PROGRAMAÇÃO DE JOGOS 49 lllllllll

TRS-80 e TRS-Color, acrescente a linha: 440 FOR I-l TO NL+l:PRINTIl,At Inicialmente, carregue o jogo de
(I) NEXT I
: aventura completo e acrescente as linhas
5 CLEAR 2000 450 FOR 1-1 TO NC: PRINTtl Tl (I , abaixo (renumere-as para compatibilizar
A
sub-rotina para o armazenamento ) NEXT I
:
com o programa do jogo, se isto se fi-
em arquivo sequenciai começa na linha 460 CL0SEÍ1 RETURN :
zer necessário):
400, e grava os conjuntos T (com os có- r—r-] r-jri
digos comprimidos) e A
(apontadores): (j|J |
Q | 10 DIM kS<3. 15) t [450) ,a{46)
15 DIM c(4)
,

400 REM - ROTINA DE GRAVAÇÃO 20 LET kSU)=" AEOSRDCNTU1MVL" :

410 NI (1) =NL:Nt (2)=NC LET kS (2) =*PHGQBFJ . .


!
-?XZ (
" : LET
420 INPUT "GRAVADOR PRONTO " NS ; kSOí-*)/"
430 STORE Nl:STORE AI:STORE Tl 190 LET i-=0: LET k*l LET nc=l :

400 REM - ROTINA DE GRAVAÇÃO 460 RETURN 200 PRINT " ENTRE A MENSAGEM ";:
410 INPUT "NOME DO ARQUIVO" N, ;
LINE INPUT LS:IF L$-"«" THEN GO
420 OPEN "0-.I-1.NS Para executar o programa completo TO 230
430 PRINTi-l,NL.NC de compressão, acrescente ao final as li- 205 LET l-i+l:LET a(l)-nc
440 FOR 1 = 1 TO NL+1 PRINT(-1
nhas DATA. O computador executará 210 GOSUB 710
:

[I) :NEXT I
toda a tarefa automaticamente. À me- 215 PRINT l a (l ) LS
; ;

450 FOR 1 = 1 TO NC:PRINTÍ-1.TÍ 220 COTO 200


NEXT I
dida que codifica as linhas, o programa
) :

as exibe na tela, perguntando se o usuá- 230 LET nl-i:LET a(i+l)=nc


460 CLOSEI-1 :RETURN 240 STOP
rio deseja gravar o resultado. Se a res-
posta for S, os conjuntos A e T serão O programa principal
pedirá ao usuá-
armazenados para uso posterior pela ro- rio para entrar as mensagens pelo tecla-
tina de decodificaçào. do, uma de cada vez. Quando chegar à
400 REM - ROTINA DE GRAVAÇÃO última, responda com um asterisco, pa-
410 INPUT "GRAVADOR PRONTO ":NS ra assinalar o fim.
430 PRINTl-1 NL NC . ,

Usaremos um conjunto numérico T


440 FOR 1-1 TO NL+1 PRINTI-1 Al : ,

para armazenar os bytes comprimidos.


(I) NEXT I:

450 FOR 1=1 TO NC:PRINT*-1,TI [I


No Specirum não há tratamento se- Os dois bytes gerados pela compressão
) : NEXT I
parado para arquivos sequenciais em fi- de cada quatro nibbles serão armazena-
460 RETURN ta, a não ser que se disponha de um Mi- dos em um elemento de T. O tamanho
crodrive (não existente no Brasil). Por desse conjunto será igual ao número de
isso, o programa para essa máquina caracteres comprimidos (no nosso exem-
apresenta uma abordagem diferente dos plo, 447 bytes). Para localizar o início
demais micros. de cada mensagem nessa sequência con-
400 REM - ROTINA DE GRAVAÇÃO tínua de códigos, temos que criar um se-
410 INPUT "NOME DO ARQUIVO" ;N gundo conjunto, A, que conterá os
420 OPEN "CAS:"+NS FOR OUTPUT
apontadores, ou índices de T. O com-
AS II
430 PRINTI1.NL. NC primento de A será igual ao número de
mensagens mais (no exemplo, 46).
1

Se dimensionarmos T e A no limite,
obteremos o máximo de economia de
memória. Acrescente a rotina de codi-
ficação:
IIIIIIIIIIIIHB 49 nooum»oDiJOGos *9 WHHHIHW
720 FOR 3-1 TO LEN LS T 3 895 Ct<3)-C2 AND 15:Ct(4)-(C2
730 LET cS-LS(J) 795 LET t{rtc)-(c(l) OR (16"c AND 240) /16
740 FOB p-1 TO 15:IF cS-kS(k.p) (2) ) +256* (c(3) OR (16*c(4)))
) 900 FOR L-l TO 4
THEN GOTO 750 -32768 910 IF CMD-0 THEN K-K+l:GOTO
745 NEXT p LET p=0
:
796 LET nc=nc+l RETURN : 930
750 LET n»n+l LET c(n)-P:LET L
:
920 PRINT MIDSÍKS(K) ,CI(L) .1) ;

Asub-rotina é igua! à apresentada no K-l


755 IF n<4 THEN GOTO 775 artigo anierior, com uma diferença: os 930 NEXT L :NEXT J
760 LET tlnc)-(cU) OR <16*c nibbles são armazenados de quatro em 950 PRINT RETURN r

12] )*256-(c(3) OB (16*c(4)))


) quatro, no conjunto C%, e comprimi-
-32768 dos pelas linhas 760 ou 795. O valor Complete o programa com a rotina
765 LET nc-nc+l:LET n-0 32768 é diminuído do byte assim com- de carregamento dos conjunios A e T,
775 IF p=0 THEN LET k-k+l:GOTO primido, para que seu conteúdo tique com os dados no arquivo sequencial:
740 -32768 e 32767.
entre
776 LET k*l
760 NEXT 3 Depois de acrescentar o programa
7B5 IF Ln-4 THEN RETUHN principal e a rotina de decodificação ao
790 FOB j = Ln+l TO 4 c ( j ) -1 NEX
: :
jogo da aventura, execute-o. Após en- 500 REM - ROTINA DE LEITURA
trar todas as mensagens, grave o progra- 510 INPUT "NOME DO ARQUIVO" NS ;

ma e os dados juntos, em fita. 520 OPEN "I".»-1.N3


530 INPUT#-1,NL,NC
540 FOB 1-1 TO NL+1:INPUT|-1.AI
(I) : NEXT I
550 FOR 1-1 TO NC:lNPUT|-l,TttI
A descompressão do texto é feita por ) : NEXT I
Uma segunda rotina, que deve ser acres- 560 CLOSEI-l RETURN :

centada ao programa de aventura:

-
coEiaiEiMr 500 REM - ROTINA DE LEITURA
510 INPUT "GRAVADOR PRONTO ";NS
530 INPUTt-l.NL.NC
540 FOR 1-1 TO NL+1:INPUT#-1,AÍ
(If :NEXT I
550 FOR 1-1 TO NC:INPUT#-1.TÍ(I
) : NEXT I
560 RETURN
49 PROGRAMAÇÃO DE JOGOS 49

As linhas 240 a 300 simplesmente im-


primem a mensagem solicitada pelo
usuário e mostram como a sub-rotina
500 REM - ROTINA DE LEITURA 10 DIM KS<3) ,TI(450) ,AI(46) 870 (dc decodificação) deve ser usada
510 INPUT "NOME DO ARQUIVO" rNS 20 KStl)"" AE0SRDCNTUIMVL":KS(2 dentro do programa de aventura.
520 OPEN "CAS:"+NS FOR INPUT AS )- p PHGQBFJ, !-?XZ(":KS(3)-")/*
.

•1 30 GOSUB 510
530 INPUTH.NL.NC 240 PRINT: INPUT "NUMERO DA MENS
540 FOR 1-1 TO NL+l:INPUTtl.AI AGEM " j
COMO ADAPTAR 0 PROGRAMA
(I) :NEXT I 242 IF 1-0 THEN GOTO 300
550 FOR 1-1 TO NC:INPUTIl,Tt(I 245 IF Kl OR I>NL THEN PRINT "
Carregue de novo o programa de
):NEXT I *** NAO EXISTE" :GOT0 240 aventura e localize as linhas que contêm
560 GLOSEI 1 RETURN
: 250 GOSUB 670 mensagens incluídas na lista de compres-
290 GOTO 240 são. Suponhamos que você encontre a
300 END
seguinte linha {abreviada, como reco-
mendamos no começo deste artigo):
As linhas 10, 20 e 30 desse programa
500 REM - ROTINA DE LEITURA 345 PRINT "TIJOLO PESADO"
devem ser colocadas no inicio do pro-
510 INPUT "GRAVADOR PRONTO ";NS
530 RECALL NI RECALL At RECALL
: :
grama do jogo. Elas dimensionam os Substitua-a por:
Tt:NL-NI(l) :NC-NÍ<2> conjuntos de trabalho do descompres-
345 LET I-17:GOSUB 870
560 RETURN sor de textos e chamam a rotina 510. Es-
ta carrega os conjuntos T e A, a partir Essa linha iguala o apontador I ao
Apresentamos a seguir um pequeno do texto comprimido que está armaze- número da mensagem na lista compri-
programa de teste. Com ele, você terá nado na memória auxiliar. mida, e passa o controle para a sub-
oportunidade de verificar o funciona- rotina de descompressão. Esta localiza
mento conjunto das rotinas de leitura e o início e o fim da mensagem, no con-
de descompressão: junto de apontadores A, e imprime na
tela o lexto descomprimido.
Repita esse procedimento com todas
as linhas onde ocorrem mensagens, e
grave o resultado final. Não se esqueça
de adicionar as linhas 1 0, 20 e 30 do nos-
so exemplo (renumeradas, se for o caso).

Para o Spectrum, o esquema é um


pouco diferente. Carregue o programa
de aventura que gravou em fita, junta-
mente com o programa de compressão
e o texto comprimido. Apague as linhas
190 a 796 e modifique cada uma das li-
nhas com mensagens, como foi explica-
do antes. Em seguida, acrescente:

860 REM - DECODIFICAÇÃO


870 LET n-0 LET k*= 1
:

875 FOR j-a(i) TO a(i+l)-l


880 LET c2-INT{(Uj)+32768)/256
'LET cl-(t(jl+32768> c2*256
890 LET c(l)-cl AND 15:LET c<2)
= tcl AND 2401/16
895 LET c:3)=c2 AND 15:LET c(4)
-(c2 AND 240J/16
900 FOR L-l TO 4
910 IF ctL)-0 THEN LET k-k+1 -G
OTO 930
920 PRINT KSÍK.cCD) LET k = l
: :

930 NEXT LrNEXT j


950 PRINT RETURN
:

Armazene a nova versão em fita. Pa-


ra rodar o programa completo, use um
GOTO para a primeira linha do progra-
ma de aventura (não a linha 10 do pro-
grama de codificação). Nunca empregue
o comando RUN, pois você perderá to-
do o texto das mensagens.
iiiiiiimiiMM—
IHÂMÂCé
,

— iiiiiiiii
Muitos consideram o Pascal
melhor alternativa para o BASIC.
como a

Com seus poderosos recursos, podem-se


elaborar programas bem estruturados

e fáceis de documentar e testar.

Para quem está familiarizado com A programação estruturada lambem FUNDAMENTOS DO PASCAL
apenas uma linguagem de programação, é um aspecto importante de uma lingua-
o aprendizado de outra pode apresen- gem imperativa, o Pascal. Como vimos
tar maior ou menor dificuldade — o que no artigo da página 1288, ele faz parte O
Pascal foi criado em 970 pelo pro-
1

depende, sobretudo, do grau de seme- da família de linguagens algorítmicas e fessor Niklaus Wirth, do Instituto Fe-
lhança entre as duas linguagens. declarativas iniciadas com o ALGOL. deral de Tecnologia em Zurique, Suíça.
Se a estrutura e sintaxe de ambas fo- Sua filosofia pode parecer totalmente Seu nome é uma homenagem a Blaise
rem parecidas, basta fazer uma tradu- estranha ao programador BASIC. Ain- Pascal, filósofo e matemático do sécu-
ção: o novo "vocabulário" é aprendi- da que experiente, este está acostuma- lo XVII, responsável por importantes

do, e as regras de formação de instru- do a elaborar programas no teclado, tes- descobertas cientificas e inventor de uma
ções são aplicadas da mesma maneira. tando e alterando seções à medida que das primeiras máquinas de calcular me-
As vezes, porém, a diferença entre as progride, até chegar a um resultado que, cânicas, a Pascalina.
linguagens é tão grande, que o aprendiz muitas vezes, evidencia um objetivo não O
objetivo de Wirth era desenvolver
se vê forçado a abrir mão das regras que muito claro no começo do trabalho. O uma linguagem destinada a ensinar os
conhece e adotar um outro raciocínio. Pascal só lhe parecerá menos complica- conceitos fundamentais de estruturas de
A linguagem LOGO, por exemplo, do se ele tiver desenvolvido hábitos de programação. Essa linguagem deveria
examinada em artigos anteriores, foi programação estruturada —
em BASIC estimular o estudante a elaborar a estru-
projetada para facilitar ao máximo a in- ou outra linguagem. tura do programa antes de começar a
trodução de iniciantes ao mundo da pro- Por que então dar-se ao trabalho de escrevê-lo. Nela Wirth introduziu uma
gramação. Entretanto, para quem foi aprender Pascal? Além de permitir a ela- serie de recursos a fim de permitir que

"criado" em BASIC — como a maio- boração de programas mais bem estru- a solução programada contenha a pró-
ria dos usuários de micros pessoais — turados e de simplificar a documenta- pria informação a ser processada.
a adaptação pode apresentar problemas. ção e a execução de testes, essa lingua- Emoutras palavras, para se escrever
Algumas vezes, chega a ser difícil acei- gem apresenta certas vantagens sobre o um programa em Pascal é necessário
tar as afirmativas de que LOGO foi fei- BASIC. Em programas muito comple- planejar como resolver o problema. A
to para principiantes! xos, o Pascal produz um código mais solução escolhida é refinada sucessiva-
Isso ocorre, fundamentalmente, por- claro e curto. A facilidade em definir mente, cobrindo detalhes cada vez me-
que o LOGO tem uma estrutura inter- procedimentos possibilita a programa- nores, até se alcançar o nível de um pro-
na bastante diferente da do BASIC, em- ção modular e a formação de bibliote- cedimento (unidade algorítmica). Só se
bora seu vocabulário seja mais simples. cas de procedimentos, que podem ser trabalha no programa principal depois
LOGO é uma linguagem mais bem es- aproveitados integralmente em outros que todos os procedimentos necessários
truturada, e trabalha com listas hierár- programas. Finalmente, as versões mo- estiverem programados.
quicas, como o L1SP. Essas caracterís- dernas do Pascal são adequadas tanto Para desenvolver o Pascal, Wirth uti-
ticas estimulam o programador inician- para programação científica (cálculos lizou muitas das idéias em que se baseia
te a adorar padrões estruturados de ra- matemáticos) quanto para o desenvol- o ALGOL 606. Originalmente orienta-
ciocínio e de resolução de problemas. vimento de aplicações comerciais. do para o ensino de linguagens estrutu-
radasem computadores de grande por-
o PASCAL foi adaptado para uso em
te,
microcomputadores. Hoje, é extensa-
mente empregado tanto no ensino quan-
to em aplicações comerciais em micros.

PASCAL PARA MICROS

Existem versões do Pascal para diver-


sas linhas de micros pessoais e profissio-
nais. As versões reduzidas (que não têm
todos os comandos do Pascal padroni-
zado), chamadas Tiny-Pascal, podem
ser carregadas de fita cassete. Porém, o
Pascal é mais eficiente quando usado
com sistemas baseados em disco, como
o UCSD Pascal, para o Apple.
Como são muitas as versões comer-
ciais dessa linguagem, não forneceremos
IIIIIIIIHIHMHMMaMHHIIIIIIIIIIII
FUNDAMENTOS DO PASCAL LINGUAGEM ESTRUT U RADA
PASCAL PARA MICROS MELHORE SEUS HÁBITOS
PROJETO ALGORÍTMICO DE PROGRAMA ÇÃO
ANTES DE COMEÇ AR A FILOSOFIA DO PASCAL
UM PROGRAMA EM PASCAL PR OGRAMAS DISPONÍVEIS

listagens específicas para cada linha de


microcomputador — como fizemos pa-
ra o BASIC e o LOGO. Mas. mesmo
que não tenha um compilador Pascal,
não se preocupe: você poderá entender
os elementos básicos da linguagem, sem
precisar rodar o programa em um com-
putador. Afinal, o desenvolvimento de
programas longe da máquina é uma das
principais características do Pascal.
Existe outra diferença fundamental
entre o BASIC usado em microcompu-
tadores pessoais e o Pascal: ele é uma
linguagem compilada.
O BASIC adotado na maioria dos
micros é uma linguagem interpretada —
cada vez que o interpretador encontra
uma instrução em BASIC, converte-a
para códigos de máquina e a executa.
Assim, para um laço simples como:

10 FOR N-l TO 100


20 PHINT N
.10 NEXT, N

cada declaração nas linhas 10 a 30 será


traduzida cem vezes para código de má-
quina! Não surpreende, portanto, que
o BASIC seja considerado uma lingua- programa-fonte. O Pascal, ao contrário, talhamento passo a passo do método a
gem lenta. Outra desvantagem c que o foi projetado especificamente para ser ser empregado na solução do problema.
interpretador precisa permanecer na me- compilado, permitindo a obtenção de Um exemplo familiar de um algorit-
mória o tempo todo, ocupando um es- programas tão compactos e rápidos mo é a receita culinária: ela contém to-
paço valioso, que poderia ser utilizado quanto os escritos diretamente em As- da a informação necessária para repro-
pelo programa ou dados do usuário. sembler. E há uma vantagem adicional: duzir um certo prato. Um programa fi-
Uma linguagem compilada funciona é mais simples desenvolver um progra- nalizado tem, igualmente, toda a infor-
de maneira diferente. Uma vez que se te- ma em Pascal do que em Assembler. mação de que o computador precisa pa-
nha entrado o programa na máquina, na O Pascal apresenta, portanto, um ra resolver um problema ou realizar uma
forma de um texto (o programa-fonte), equilíbrio bem satisfatório entre veloci- tarefa de um determinado modo.
ele é traduzido de uma vez só para có- dade de desenvolvimento e de execução. Entretanto, o programador (ou o co-
digo de máquina (o progratna-objeto), Somente o C, uma linguagem semelhan- zinheiro), quando começa a escrever um
que o computador executa. De-
e é este te a eleem estrutura e filosofia, apre- programa (ou a receita), não tem uma
pois de feita a tradução, o programa senta maior eficiência. idéia bem definida sobre o procedimen-
compilador não é mais necessário, fican- to a seguir para chegar ao objetivo de-
do armazenado em fita ou disco. Em sejado. Como exemplo, vamos analisar
consequência, mais espaço na memória PB0JET0 ALGORÍTMICO o processo de elaboração de uma receita
é liberado para uso do programa apli- de torta. Em uma primeira tentativa,
cativo desenvolvido pelo usuário. Como vimos, a programação em poderíamos dividir a tarefa (ou algorit-
As linguagens compiladas são muito Pascal requer uma fase inicial de proje- mo inicial) em quatro passos:
mais rápidas que as interpretadas, pois to, antes de se chegar à máquina. Nessa
o demorado processo de tradução para fase, utilizam-se certas ferramentas de 1. Preparar a massa
código de máquina é executado apenas planejamento que ainda não discutimos 2. Preparar o recheio
uma vez. Embora existam compiladores em INPUT, entre as quais o fluxogra- 3. Colocar tudo numa forma
para o BASIC, essa linguagem não foi ma. Este deve ser usado com cautela, 4. Assar a torta
projetada para ser compilada; assim, pois, em si, não é estruturado. Uma fer-
seus programas-objeto são longos e, fre- ramenta mais conveniente para o pro- Aofazer uma torta, talvez você não
quentemente, tão lentos quanto o jeto de programas é o algoritmo: úm de- precise cumprir lodos os passos (é pos-
iiiiiiiiiiiuhh < iwcmgtMMMMmmiin
sívelcomprar a massa pronta, por exem- O programa anterior poderia resul- PRINT RBSULTADO de um programa
plo!).Suponhamos, porém, que o com- tar de um algoritmo inicial como: em BASIC. Não há ponto e vírgula no
da linha, pois a declaração seguinte
putador é um "cozinheiro amador", final

que deve conhecer cada detalhe. 1. Estabeleça as condições iniciais ê um end. Alguns compiladores permi-
A próxima etapa consiste em fazer a 2. Inicie o procedimento tem o uso desse sinal desde que se colo-
subdivisão dos passos em operações me- 3. Entre os números que uma linha em branco depois.
nores —
processo denominado refina- 4. Acrescente os números O Pascal conta, naturalmente, com
mento gradativo. Você encontrará esse 5. Imprima o resultado vários outros comandos e funções, ad-
conceito na metodologia de desenvolvi- 6. Termine o procedimento mitindo também a introdução de notas
mento de programas muito extensos, e comentários no programa, entre cha-
que não podem ser projetados de uma O
programa segue rigorosamente o ves: lei. Com os microcomputadores que
só vez. No nosso exemplo, refinando o algoritmo. Observe que é necessário de- não têm essas teclas, pode-se utilizar
passo 1, teríamos: clarar explicitamente os passos 1, 2 e 6 uma combinação de parênteses com as-
— ou seja, precisamos especificar o que teriscos (* e *).
1.1 -Pesar a farinha é trabalhado pelo programa, quando
1.2- Pesar a manteiga iniciá-lo e quando encerrá-lo.
com Este é um dos fatores que explicam EDIÇÃO DO PROGRAMA
1 .3 - Misturar a manteiga a farinha
1.4 - Adicionar água a maior extensão de um programa escri-,
1.5- Mexer to em Pascal em relação a um equiva- O processo de edição e teste de pro-
lente em BASIC. Vamos agora analisar gramas em linguagem compilada, como
Poderíamos refinar ainda mais cada o programa linha por linha: o Pascal, não é tão direto como com um
passo, até chegarmos a um nível de sim- interpretador. Normalmente, edita-se
ptrogram exemplo ( ínput output
, ) ;

plicidade lai que fosse possível a qual-


quer um fazer uma torta. significa que o programa terá entradas
O
principal, nesse processo, foi ter- (inputj e saídas (output) e se chamará
mos considerado previamente todos os exemplo. Se ele não precisasse ler dados
passos da solução do problema, em vez externos, bastaria escrever:
de iniciarmos a tarefa em um ponto pi oaram exemplo (output) ;

qualquer, ao acaso. Para a programa-


ção em Pascal, o método a ser seguido O ponto e vírgula no final de uma li-
é muito similar. No estágio inicial, es- nha indica o fim de uma declaração.
creve-se cada passo em português mes- As características de todas as variá-
mo. Refinando-os sucessivamente, che- veis usadas por um programa em Pas-
ga-se à formalização proporcionada por cal devem ser especificadas. A linha:
uma declaração ou instrução cm Pascal.
Separados do algoritmo inicial, os pas-
sos podem ser representados por proce-
dimentos ou funções. Estes são poste- informa que usaremos irês variáveis in-

riormente reunidos em um programa teiras (inleger): nl, n2 e resultado.


só. Mas como escrever um programa Feitas as declarações, assinalamos o
em Pascal sem conhecer os comandos início do procedimento propriamente di-
dessa linguagem? Examinemos alguns to, com a palavra begin. Note agora que
exemplos. o texto do programa é recuado em rela-
ção à linha anterior. Este é um recurso
muito usado em programas estrutura-
UM PROGRAMA EM PASCAL dos, pois indica para quem lê quais são
as declarações deniro de um procedi-
mento ou laço de repetição.
Os programas em Pascal costumam
A leitura dos dados pelo teclado é
parecer complicados demais em relação
muito semelhante à do BASIC: read
á simplicidadeda tarefa a cumprir. Ve-
Só podemos usar aqui esses no-
(nl,n2).
por exemplo, este programa, que so-
ja,
mes de variáveis porque elas foram de-
ma dois números e exibe o resultado: claradas antes, em var.
A declaração aritmética lambém é se-
melhante a uma instrução em BASIC:
reaultado:-nl+n2;
ad (nl.nZJ :

aultado:=nl+n2; O símbolo de atribuição := foi as-


Iteln (resultado)
sim definido para evitar a confusão cau-
sada pelo = do FORTRAN e do BA-
Como pode notar, o programa e
se SIC, que dá a impressão errónea de se
mais longo que um equivalente em BA- tratar de uma fórmula matemática.
SIC, embora de execução mais rápida. Finalmente, escrevemos o resultado:
Quanto maior a complexidade da tarefa, writeln (reaultado)
porém, maiores a economia e concisão
I oferecidas por um programa em Pascal. que tem um efeito semelhante ao
NGUAGINS

apenas o programa-fonte, com o auxí- ce a vantagem final de inviabilizar a O uso mais sério do Pascal requer
lio de um editor de linhas (quase sem- ação de "espiões". Assim, depois de componentes mais caros, exigindo, no
pre disponível como um utilitário do sis- editar um programa em Pascal, você po- mínimo, um acionador de disquetes. Por
tema operacional) ou de umprocessa- derá ter a certeza de que ninguém copia- isso, máquinas como o Apple e a IBM-
dor de textos. Depois, compila-se o pro- rá os algoritmos de sua criação. PC contam com as melhores versões.
grama e testa-se o resultado, executan-
do-o. Caso se verifique algum erro. to-
do o processo deve ser repetido, a par- PROGRAMAS DISPONÍVEIS
tir do programa-fonte.
Alguns compiladores Pascal, como o Existem compiladores Pascal para a O compilador Pascal para o Spec-
UCSD e o Turbo-Pascal, dispõem de maioria das linhas de microcomputado- trum é exclusivo para microdrives e dis-
um editor próprio, o que evita esse vai- res.Entretanto, como já mencionamos, quetes (não disponíveis no Brasil). In-
vém entre editor, sistema operacional e eles variam muito entre si, quanto ao cluium editor de linhas, um gerador de
compilador. Nesse caso. tanto o progra- funcionamento e desempenho, e nem io- números aleatórios e suporte gráfico em
ma-fonte quanto o programa-objeto po- dos podem ser encontrados com facili- alta resolução.
dem residir na RAM enquanto durar o dade no Brasil. Antes de adquirir um

processo, agilizando-o muito
programa não for muito longo, e se
houver boa capacidade de memória.
Como está em linguagem de máqui-
se o programa desse tipo, convém fazer uma
pesquisa em diferentes "software hou-
ses" —de preferência nas especializa-
das em uma determinada linha de com-
D Existem diversas versões do Pascal
na pura, sem comentários, rótulos, ou putadores ou nas dedicadas exclusiva- para o TRS-Color. Suas características
o programa compilado ofere-
similares, mente à programação Pascal. variam conforme o sistema operacional
utilizado: Flex, RS-DOS (original) ou
OS-9 (semelhante ao Unix). Todas fun-
cionam somente em micros dotados de
acionadores de disquetes.

Esse micro dispõe de duas versões do


Pascal: um compilador que roda sob o
sistema operacional TRSDOS e compa-
tíveis, e outro, semelhante ao Turbo
Pascal, que roda sob o sistema opera-
cional CP/M. Ambas são bastante com-
pletas, mas não incluem suporte gráfico.

As duas versões mais utilizadas de


Pascal para as máquinas compatíveis
com a linha Apple são o UCSD e o
Turbo-Pascal. O UCSD (abreviatura da
universidade onde foi desenvolvida:
University of Califórnia al San Diego)
foi o primeiro e mais popular sistema
Pascal (p-Syslem). Trata-se, na realida-
de, de um sistema operacional comple-
to, que substitui o DOS. e não apenas
de um compilador.
Já o Turbo-Pascal roda sob o sistema
operacional CP/M {Contrai Program for
Microcornpmers), que pode ser coloca-
do em um Apple quando se troca a UCP
por um microprocessador Z-80.

OPascal para o MSX é do tipo Mi-


crosoft e destina-se a máquinas dotadas
de acionador de disquetes de 5.25 ou 3.5
polegadas, rodando sob o sistema ope-
racional MSX-DOS ou compatível.
) ) ,

IIHHHHH MI^M^^^— MBIBIIIIIIIIN

0 PRINT USING
VALORES MONETÁRIOS
FORMATAÇÃO
COM PARÊNTESES
UMA ROTINA PODEROSA

110 INPUT "Valor ";UI ISO INPUT "Valor " ;V#


Se você tem problemas com a formatação 160 COSUB 1000: PRINT SS:GOTO 15
120 PRINT FNNS(V#.El) GOTO 110 :

de saída para valores monetários, 0


1000 1S=MIDS ISTRS1F1X <V#) 2) :F
A função FNFS, estabelecida na linha ) .

poderá encontrar aqui uma boa solução;


S=MID$(STRS (1NTU00* !V#-FIX(V#)
10, tem dois argumentos: V # um va- ,

o uso de duas eficientes rotinas lor monetário em precisão dupla (pode ))) ,2) :SS-""
1010 IF LEN(IS)<=3 AND VAL(FS)>
PRINT USING. incluir centavos ou não), e F%, um va-
no lugar do comando 0 TKEN SS-t3+S$+"."+FS:(SOTÓ 103
lor inteiro que especifica o número de
0
colunas a usar na formatação (com jus- 1015 IF LENIISK'3 AND VAL(FS)=
tificação à direita). As linhas 100 e 120 0 THEN SS=IS+SS:GOTO 1030
O comando PRINT USING é um dos formam um laço simples de teste. 1020 SS-"."+RICiHTS(IS,3)+S$:IS-
recursos mais poderosos do BASIC de O BASIC das máquinas mencionadas LEFTS(IS.LEN(IS)-3) GOTO 1010 :

aleumas linha*, de computadores, como é capaz de definir em apenas uma linha 1030 IF V*<0 THEN X$=NS ELSE XS
o TRS-80. o TRS-Color e o MSX. Com expressões de grande complexidade
— -PS
inclusive expressões condicionais que 1040 SS-RIGHTS (STRINGS E t BS) + S ( ,

ele. podemos formatar de diferentes ma- S+XS.EÍ) RETURN


imitam a operação de um IF...THEN.
:

neiras a saída de números e cadeias al-


fanuméricas. Porém, esse comando apre- Observe, por exemplo» a expressão; Os argumentos de entrada são: V#
senta inconvenientes, sobretudo quanto LEíTS í
"
(
" , ABS (VI <D) valor monetário em precisão dupla (in-
à foi matacão de valores monetários. cluindo centavos ou não, após o ponto);
No Brasil, usam-se variáveis de pre- Pode parecer estranho utilizar um ope- £%, número de colunas para formata-
cisão dupla (quinze dígitos) para repre- rador de comparação (sinal de menor) ção; BS, caractere de preenchimento à
sentar valores monetários, pois a preci- dentro de uma expressão matemática. esquerda (asteriscos, zeros ou um espa-
são simples não nos permite iidar com Mas podemos compreender sua função ço em branco); PS e NS, símbolos à di-
valores superiores a 10 milhões de cru- sc levarmos em conta que o resultado nu- reita do valor, para indicar créditos e dé-
zados. E o PRINT USING, infelizmen- mérico de uma expressão lógica é igual bitos, respectivamente. O
string de saí-
te, é muito lento quando se trata de for- a -1 (ou 1. em alguns computadores), da retorna em SS. As linhas 110 a 160
matar variáveis de precisão dupla. se ela for verdadeira, e a 0, se for falsa. testam a sub-rotina.
Além disso, não é possível utilizar o Assim, se V # for menor que 0, a ex- Na linha 1000, V#
t quebrado em
PRINT USING dos computadores men- pressão anterior resultará em um síríng dois valores inteiros, correspondentes
cionados para formatar valores mone- contendo um parêntese à esquerda — aos cruzados e aos centavos. Esses va-
tários segundo convenção
a brasileira, LEFTSCCM). A linha 10 concatenará es- lores são armazenados em duas cadeias,
que impõe a separação dos milhares por se parêntese (se o número for negativo) IS e FS, respectivamente.
pontos e dos centavos por vírgulas. ou um espaço em branco (se o número As linhas 1010 e 1015 verificam se IS
As funções que explicamos nesle ar- for positivo) à cadeia de saída. A expres- tem três ou menos dígitos (um valor
tigo oferecem várias alternativas para a são UEFTS (" ", ABS <V# > 0)) se en- igual ou menor que 999 cruzados), e
formatação de valores, e são muito mais carrega da operação, que depois é repe- se existe um valor em centavos
rápidas (três a seis vezes) do que o tida para o parêntese direito. (VAUF$>>01. Conforme o resultado
PRINT USING normal. dos dois testes, a rotina termina, saltan-
DINHEIRO À BRASILEIRA do para a linha 1030, que concatena o
símbolo adequado para créditos e débi-
FORMATAÇÃO COM PARÊNTESES
Examinaremos agora uma função ca- tos ao final de SS. A linha 1040 enqua-
paz de formatar valores usando pontos dra o string SS de saída dentro de
e vírgulas, segundo a convenção bancá- espaços. O laço formado pela linha Í020

ria brasileira. Símbolos especiais repre- reduz progressivamente o tamanho de


sentarão números positivos (créditos) e IS,separando cada grupo de três dígi-
Esta rotina permite a formatação de
números negativos (débitos). tos por um ponto, até que UEN(IS) seja
valores monetários segundo as conven-
ções dos balanços contábeis: com os nú- Como essa função é mais complexa, menor ou igual a 3.
uma sub-rotina: Entre as aplicações dessa rotina,
meros negativos entre parênteses: definiremos
inclui-seo preenchimento de cheques —
110 INPUT "Numero de colu os caracteres de proteção de campo são
10 DEF FNNS(VI,Ei)=RIGHTS(STRIN Et colocados à esquerda do valor. Se qui-
GSIEÍ." -)+LEFTS(" (" .ABS (VK0) ) 120 INPUT "Caractere de p ser adicionar um cifrão (ou o símbolo
+LEFTS " " ,ABS (Vt>-0) )+MID$(STR
(
imento " :BS Cz$) entre os caracteres de proteção e
S(V*) .2) ,EÍ!+LEFT$<") " .ABS (Vl<0 130 INPUT "Símbolo p/valo
o valor numérico, na linha 1000 da ro-
+LEFTS " " .ABS (V|->0)
) tivo ":P$
) !
tina, que inicializa SS, substitua a ex-
100 INPUT "Numero de colunas "; 140 INPUT "Símbolo p/valo
tlvo " rNS pressão SS= "" por SS = "CzS".
IIIIIIIIHHI ROGRAMACAO BASIC

TIPOS OE IMPRESSORA

IMPRIMA DESPEJO DE TELA


PROGRAMAÇÃO GRÁFICA
MONTAGEM DA TELA
SEUS DESENTO! PROBLEMAS COM CORES

Ao desligar o micro, os maravilhosos PRINT#-2 ele, funcionam apenas com As impressoras matriciais, por sua
caracteres ASCII. Alguns fabricantes vez, imprimem os caracteres utilizando
desenhos que você criou na tela
oferecem impressoras que têm o conjun- um conjunto de pontos, num processo
desaparecem sem deixar rastros. to ampliado dc caracteres. Este inclui os idêntico ao da formação de caracteres
Com umas poucas linhas em BASIC, você caracteres semigráficos, típicos dos mi- na tela de vídeo. O sinal enviado pelo
cros TRS-80, TRS-Color. TK-2000 c computador à impressora aciona uma
poderá preservá-los em papel.
MSX, mas ainda assim não é suficiente série dc pinos ou agulhas situados na ca-
para copiar uma tela com gráficos de beça de impressão, de modo a reprodu-
A capacidade gráfica dos micros per- média ou de alta resolução. zir um padrão de pontos que compõe
mite a elaboração de vários cipos de grá- Como vimos em um artigo da seção um determinado caractere.
fico ou desenho no vídeo. Quer você es- Periféricos (página 648), existem dois Nas impressoras matriciais não-
teja interessado nas aplicações práticas modelos de impressora para micros: as gráficas (impressoras de teMo), os pa-
desses gráficos, quer seja um artista impressoras de tipo formado (como as drões formados para cada caractere já
preocupado em adotar um novo meio de baseadas na "margarida"), e as impres- estão pré-programados em uma memo-
expressão, as imagens produzidas com soras matriciais. Embora algumas im- ria ROM na impressora, e não podem
a ajuda do computador apresentam uma pressoras margarida possam fazer grá- ser manipulados ou alterados indivi-
grande limitação: existem apenas en- ficos compostos de pontos, elas são mui- dualmente. Nas impressoras matriciais
quanto a tela não for apagada. Se você to lentas para ter alguma utilidade na porém, pode-se programar ca-
gráficas,
quiser uma cópia permanente da ima- cópia freqiiente de telas gráficas. da agulha da cabeça de impressão por
gem criada, precisará usar uma máqui- meio de software, o que permite a ela-
na fotográfica ou copiar a tela em uma boração de gráficos de alta resolução.
impressora gráfica.
Para guardar uma listagem, uma lis-
ta de números ou um texto produzido
por um programa, os usuários também
têm que recorrer a uma impressora. Há, Como funciona um programa desti-
porém, uma grande diferença entre co- nado a copiar cada pontinho de alta re-
piar uma tela de textos, escritos em AS-
Cil padrão, e uma tela gráfica, de bai-
xa ou alta resolução. Com exceção dos
:rocomputadores da linha Sinclair
(ZX-81 e Spectrum), que possuem o co-
mando COPY, os comandos de impres-
são do BASIC, como LPRINT, PR # 1,
IIIIIIIIIIIHH llllllllll
solução de uma tela gráfica? O coman- programadas externamente para efetuar em BASIC. O processo é muito fácil.

do COPV dos micros da linha Sinclair as funções mencionadas. Nesse modo- Para entendê-lo, devemos examinar co-
é um bom exemplo disso. Esse coman- grúfico, é possível aluar sobre grupos de mo certos bytes enviados para a impres-
do efetua uma operação que chamamos agulhas usando códigos de oito bits. A sora são interpretados pelos circuitos de
despejo de tela(screen dump, cm inglês). informação captada na memória de ví- controle da mesma.
Com o micro acoplado a uma im- deo é enviada para a impressora não sob A
impressora normalmente está capa-
pressora adequada (própria para a linha a forma de códigos ASCII, mas como citada para reconhecer os códigos ASCI I

Sinclair), o comando COPV "traduz" códigos binários correspondentes ao pa- e ASCII estendido, que estão pré-pro-
as configurações de pontinhos de cada drão de ativação das agulhas da cabe- gramados na memória ROM. Assim, se
setor da tela em padrões dc atuação das ça. Assim, existem códigos binários pa- enviarmos uma sequência de códigos en-
agulhas da cabeça de impressão. Desse ra desligar q avanço automático de li- tre hexadecimal 20 (correspondente a es-
modo, o conteúdo da tela (texto e/ou nha, para avançar a cabeça de uma li- paço em branco) e 7E (líl), a impresso-
gráfico) é fielmente reproduzido —me- nha para outra, para definir o espaço ra irá reconhecê-los como códigos de ca-
nos a cor, evidentemente. entre as linhas eic. O programa propria- racteres. Por exemplo, a palavra ABA
Os sistemas operacionais de alguns mente dito simplesmente "varre" a te- é impressa quando enviamos:
micros (como o TRS-80) podem ter fun- la e produz as linhas de impressão cor- LPRINT CHR$(65) ;CHRS(32)
ções de despejo de tela, que também só respondentes a cada grupo de bits. CHRS (65)
atuam se uma impressora compatível es- Mais adiante, apresentaremos pro-
tiver acoplada à máquina. O CP-500 da gramas desse tipo para os micros Spec- Entre hexadecimal 00 e 1F síiuam-se
caracteres de controle com diversas atri-
Prológica, por exemplo, despeja a tela trum e TRS-Color. Antes disso, porém,
buições, que variam de impressora pa-
semigráfica na impressora P-500S, precisamos examinar as combinações
ra impressora. No padrão Epson,
quando as teclas J, K e L são pressio- micro-impressora possíveis.
CHRS(7) faz soar o alarme sonoro da
nadas simultaneamente no teclado.
impressora, CHRSM3) provoca um re-
A maioria dos micros, porem, não COMPATIBILIDADE torno de carro, enquanto CHRSt 12) de-
tem comandos ou funções especiais pa-
termina a mudança de página.
ra produzir despejos de tela. E mesmo
Outras funções de controle podem ser
que seu computador disponha desses re- Os programas de despejo de tela de-
pendem não só do tratamento dado à te- acionadas por meio da combinação de
cursos, lembre-se de que eles nada pro-
como tam- vários caracteres. Essas sequências co-
duzirão sem a impressora adequada. la gráfica pelo computador,
meçam sempre pelo caractere CHR$(27),
bém da marca e do modelo da impres-
sora que será utilizada. Isso ocorre por-
que corresponde ao ESCAPE por is- —
PROGRAMAÇÃO DA IMPRESSORA so, são chamadas dc sequências de es-
que ainda não existe uma padronização
dos caracteres de controle gráfico e da cape. A sequencia ESC G, por exemplo,
Nãoé possível escrever na impresso- coloca a impressora em modo de im-
cabeça dc impressão.
rausando o mesmo método com o qual pressão em qualidade carta (cada carac-
Nossos programas destinam-se às
escrevemos na tela. Se dermos, por tere é impresso duas vezes):
máquinas que adotam o padrão Epson.
exemplo, o comando: Este foi estabelecido para as impresso- LPRINT CHR$(27) ;
"G"
ras do fabricante da marca Epson, c po-
PRINT CHHS (255) Para mudar o espaçamento entre
de ser encontrado em modelos muito
li-

no TRS-Color, um bloco colorido será populares, corno, por exemplo, o Epson nhas de impressão, utiliza-se ESC A n.

exibido na tela (255 é o código do ca- MX-80, MX-120c FX-80. No Brasil, vá- onde n refere-se ao número de passos
ractere gráfico correspondente). Entre- rias empresas, entre elas a Elebra (im- por avanço de linha:
tanto, se você tentar fazer isso com a im- pressoras Mônica e Alice), a Rima e a LPRINT CHRS (27) "A" CHRS
;
; (4)
pressora, enviando o comando: Grafix, seguem esse padrão.

PHINT|-2.CHR$(255) As impressoras compatíveis com o Umpasso é equivalente a 1/48 ou


padrão Epson usam uma matriz de oito 1/72 de polegada, dependendo do mo-
nada acontecerá, pois a impressora in- pontos de altura. Esta é a configuração delo da impressora (com densidade sim-
terpretará o código 255 de modo total- mais conveniente, pois permite ao mi- ples ou densidade dupla). No exemplo
mente diferente. Dizemos, por essa ra- cro enviar informações provenientes da anterior, o deslocamento entre cada li-
zão, que os códigos de controle dos dois tela, um byte de cada vez, pela interfa- nha de impressão equivale ao espaça-
periféricos, vídeo e impressora, produ- ce paralela. O TRS-Color possui inter- mento entre quatro agulhas.
zem efeitos diferentes. face serial, mas o método é o mesmo. A scleção do modo gráfico, no padrão
Precisamos, assim, de um programa No Spectrum e no ZX-81, o usuário de- Epson, é feita pela sequência F.SC K
especial para efetuar o despejo de tela ve inserir uma interface paralela no co- ou ESC L. Quando você seleciona o
— um programa que prepare a impres- nector de expansão. O Spectrum, além modo gráfico, o código binário envia-
sora para receber gráficos. Algumas disso, precisa ser carregado com um do à impressora aciona diretamente o
funções automáticas da impressora de_- programa em linguagem de máquina, padrão de agulhas da cabeça de impres-
vem ser desligadas, e outras, ligadas. É para usar a impressora. são: quando o bit for 1, a agulha cor-
necessário acionar a cabeça de impres- respondente é acionada; quando o bit
são de forma que as agulhas possam ser for 0, a agulha fica inativa. O bit me-
TEORIA DE PROGRAMAÇÃO GRÁFICA
controladas individualmente. Além dis- nos significativo (DO) controla a agulha
so, o avanço horizontal e vertical da ca- inferior, e o bit mais significativo (D7),
beça de impressão precisa ser feito em A programação da sequência dc im- a agulha superior. Assim, se quisermos
passos diminutos, sem deixar espaços pressão das agulhas da cabeça para a ob- imprimir uma coluna de pontos, a agu-
entre cada ponto impresso. tenção de efeitos gráficos pode ser feita lha de cima e as duas últimas agulhas de
As impressoras gráficas podem ser por meio de alguns comandos simples baixo não serão acionadas; o código a
IIIIIIIIIHUH lllllllll
enviar é 1000001 ou 128 + 0 + 0 + 0 + Para os usuários do TRS-Color, o
0+ 0+2+1 =
1.

decimal.
131 em 5CE] sistema é um pouco diferente: algumas
A sequência de escape precisa espe- 5 PRI1 linhasdo programa de despejo têm que
cificar, ainda, o número de bytes de có- 10 PR INT CHRS (27) "A" CHR$ (8)
:
; serexecutadas antes que o desenho seja
20 PRINT CHRS (27) "K" CHRS 16)
;

digo gráfico que serão enviados, e, em ; ( traçado na tela.


seguida, os bytes propriamente ditos: CHRS (0) ;

ESC K nl n2 dados. 30 FOR J-7 TO 0 STEP -1


40 PRINT CHRS(2"J) IMAGEM DE LADO
Os bytes nl e n2 são. respectivamen-
50 NEXT J
te,o mais significativo e o menos signi- 60 FOR J-7 TO 0 STEP -1
de um número de dczesscis bits,
A imagem despejada por este progra-
ficativo
edevem ser apresentados no conhecido
70 PRINT CHR3(2-J) ma é imprimida de lado ou seja, no —
80 NEXT J sentido longitudinal c não transversal,
formato 256 * n2 + nl. 90 PRINT CHRS (10) relativamente à imagem que aparece na
Se vamos enviar 550 bytes gráficos, 100 PR|0
damos o comando:
tela. Com isso. obtemos uma imagem
maior e mais margem no papel.
LPRINT CHRS(27) ;CHRS(38) ;CHRS A 0 estabelece um espaçamen-
linha 1

(2) f
to de oiio passos entre linhas. A 20 pro-
grama a impressora para o modo gráfi-
pois 256*2 + 38 = 550. A expressão
co, avisando que a seguir serão envia- 15 LPRINT CHRS5;
que se segue, em BASIC, serve para cal-
dos dezesseis bytes gráficos. Quando os 20 LPRINT CHRS2 7 "A"; CHRS8; 1
cular nl c n2 a partir de n, que repre-
dados não eslão incluídos imediatamen- 30 FOR x=0 TO 255 STEP 4
senta o número total de bytes:
te na sequência de escape, o ponto e vír- 40 LPRINT CHRS 1 3 CHRS27: "K" ;

Nl - INT (N/2S6) gula no final dessa linha é obrigatório. CHRS0; CHRS96: CHRS1;
N2 - N-INT (N/256) Os laços das linhas 30 a 50 e 60 a 80 im- 50 FOR y-0 TO 175 STEP 8
primem, respectivamente, um padrão 60 FOR d"0 TO -7 STEP -1
Este programa ilustra o padrão de 70 LET bt- (POINT (x ,y-d) *128) + (P
descendente e outro ascendente de pon-
acionamento das agulhas: 01NT (x.y-d) *64)+ (POINT (x+1 ,y-d>
tos (determinados pelos códigos que cor- * 32) + (POINT (x; 1 y-d) * 16) + (POINT
.

respondem a potencias de 2: 128, 64, 32 <x+2.y-d)"B)+IPOINT(x+2,y-d>«4)


Mc), Finalmente, a linha 90 alimenta + (POINT fx+3 y-d) *2) . * (POINT (x + 3
uma linha. y*d)
10 LPRINT CHRS(27) "A" CHRS (8)
;
;
72 LPRINT CHRSbt
20 LPRINT CHRS (27) ;"K"; CHRS (16) 74 LPRINT CHRSbt
MONTAGEM DA TELA 80 NEXT d
;CHRS (0) ;

30 FOR J-7 TO 0 STEP -1 00 NEXT t


40 LPRINT CHRS(2**J); Para copiar um desenho na impres- 100 NEXT x
50 NEXT J sora, é necessário executar um progra-
1Í0 LPRINT CHRS4 : STOP
60 FOR J-0 TO 7 ma que o trace na tela. Existem duas al- A linha 15 desliga o conjunto de ca-
70 LPRINT CHRS (2**J> racteres ASCII na impressora. O co-
;
ternativas para isso. Uma
delas consis-
80 NEXT J
te em carregar o programa de desenho mando LPRINT da linha 20 informa à
90 LPRINT CHRS (10)
no computador e, em seguida, combiná- impressora que não deve haver espaça-

um
10 LPRINT CHRS(27) ;"A";CHRS(8)
lo com o programa de despejo (a nume-
ração das linhas de ambos tem que ser
diferente). O primeiro programa deve
mento entre as linhas impressas.
O laço que vai da linha 30 à 100 var-
re uma linha da tela, em blocos de qua-
ser alterado na tela depois que o dese- tro pixels de cada vez. A linha 40 passa
20 FOR 1-1 TO 5
nho estiver pronto, de modo que o pro- para a impressora um código de retor-
25 LPRINT CHRS (2 7) "K" ; CHRS (16) ;

;CHRS (0) grama de despejo seja chamado auto- no de carro (código 13) e, em seguida,
30 FOR J-7 TO 0 STEP -1> maticamente, ou quando se pressionar o código *0, que se encarrega de prepa-
40 LPRINT CBRS(2"J) determinada tecla. Se achar convenien- rar a máquina para receber o número de
50 NEXT J te, poderá incluir permanentemente o bytes que a linha corrente de tela irá en-
60 FOR J-7 TO 0 STEP -1 programa de despejo no programa de viar. Esse byte é composto dos códigos
70 LPRINT CHRS(2*J) desenho, na forma de uma suh-roiina. 96 e (também na linha 40), que são in-
1

80 NEXT J A segunda alternativa é a de mais fá- terpretados como 1*256 + 96 ou se- —


90 LPRINT CHRS (10) cil execução, mas depende da capacida- ja, 352 bytes.
100 NEXT I
O da linha 50 à tinha 90 percor-
de do micro de armazenar o conteúdo laço

Q
10 PRINTt-2,CHRS(27) j-A- ;CHRS
de telas gráficas em disco ou fita (co-
mandos BSAVE, SA VEM ele). Se seu
computador tem essa capacidade, car-
regue e execute o programa de desenho
re a tela

xels de
de cima para baixo: o laço da
linha 60 à 80 toma um bloco de oito pi-
cada
vez. Antes de incrementar
os laços, a linha 70 usa o comando
(8) e armazene a tela resultante em fita ou POINT para ler os pixels na tela. Estes
20 PRINT*-2,CHRS(27) ;-K" ;CHRS disco. Depois, carregue o programa de são condensados pela expressão numé-
(16) CHRS (0)
despejo usando um comando na linha rica no byte bl, que é enviado duas ve-
; :

30 FOR J-7 TO 0 STEP -1


10 (essa linha não foi colocada nos pro- zes à impressora, pelas linhas 72 e 74.
40 PRINT»-2,CHR$(2"J) !
50 NEXT J gramas que se seguem justamente para A segunda impressão fará a imagem
60 FOR J-7 TO 0 STEP -1 criar um espaço para o seu comando de aparecer duas vezes maior que na tela,
70 PRINTt-2.CHRS(2-J) ;
carregamento). Com esse procedimen- na direção horizontal.
80 NEXT J to, o programa irá ler, em primeiro lu- Finalmente, a linha 10 retoma a im- 1

90 PRINT»-2,CHRS(10) gar, a tela armazenada. pressora ao conjunto ASCII e encerra


3 { . 13

IHIIIIHIllBB—^^^^WMMIlllllllllll
a execução. Se você quiser transformar diz à impressora para esperar 128 +
esse programa em sub-roiina, não se es- 1*256 bytes gráficos, ou seja, um total

queça de substituir o STOP dessa linha de 384 bytes. 10 CLEAR 59999


um RETURN. O laço da linha 50 à 80 percorre a te- 20 LET L-100: RESTORE L FOR N-
por :

la de cima para baixo (192 pixels de al- 60000 TO 60247 STEP 8


tura); o da linha 60 toma quatro pixels 30 LET T-0:FOR M-0 TO 7
El de cada vez, examina-os com PPOINT,
40 READ A LET T-T+A:POKE N+M. A.
:

2 DIM AIH 1) calcula as cores e coloca o resultado nos


NEXT M
50 READ A:IF AOT THEN PRINT "E
.

4 FOR K J 0 TO B: REA!) AIK,0},A(K bytes S e P. A linha 70 imprime esses


.1) NEXT
RR O NOS DADOS DA LINHA " L STO ; :

bytes. Finalmente, a linha 990 reinicia-


:

6 DATA 3,3,2.1,0.0.3,1.3,3.0.0, P
liza a impressora. 60 LET L-L+10: NEXT N STOP
1,2,3,1.3. :

20 PR [NT t-2. CHRS(27) :"A";CHRS 100 DATA 243.62.3.205,1.22.33,7


(8) PROBLEMAS COM CORES 0.639
30 FOR L = 0 TO 255 STEP 4 110 DATA 235.6,4.205.9.235.62.0
40 PRIN1' t-2 ,rHRS(H) :CHHSUn .
,756
-K- ;CHRS (01 1CHR5U28) CHRS El) ; i O programa de despejo de tela, em 120 DATA 50 ,83,235,62.0.50.64.2
50 FOR K-191 TO 0 ÍTKf ' 1 BASIC, imprime apenas uma represen- 35. 799
60 T=0:S=0:FOH M-0 TO 3;P"PPOIN 130 DATA 6.175.221,33.85,235.19
tação binária, em preto e branco, da te-
TIL*M,K) :T-TM + A(P,0) ;S*SM+MP 7.62. 1014
la de alta resolução, pois reproduz o pa-
NEXT 140 DATA4.237. 75.83. 235, 245. 205
, 1 ) :
drão de pixels sem diferenciar as cores ,15.1099
70 PRINT |-2,CHRS(T) ;CHHS(SI
presentes na imagem original. Em con- 150 DATA 235.245.205,30,235.241
80 NEXT K.L
90 PRINT |-2.CHRS(27) ;"«*" sequência, a imagem obtida apresenta ,126,32.1349
densidade igual para todas as cores, não 160 DATA 6.203.63.203.63,203,63
É importante que as três primeiras li- representando com fidelidade o desenho .230, 1034
nhas do programa (2, 4 e 6) precedam copiado. 170 DATA 7.214,7.237.68.221.119
a rotina de geração da tela gráfica que É possível, porém, escrever um pro- .0.873
grama de despejo de tela em que as co- 180 DATA 221.35,241.12.61.32.22
será impressa. Na linha 10. reservada 2.58.882
para o seu programa, você deve estabe- res sejam representadas por diferentes
190 DATA S4 235 660 50 BA\ 235.
, , .

lecer o tipo de SCREEN e de PMODE. tonalidades de cinza e preto. Esse efei-


93. 16,957
Em virtude da forma de armazenagem to é conseguido por impressões sobre- 200 DATA 205.6.7,197.33.74,235.
de telas gráficas no TRS-Color, o pro- postas de partes da imagem, de modo 6,763
grama de despejo precisa levar em con- a obter tons mais escuros ou claros de 210 DATA 9. 205. 'i. 235. 221 33,85,
.

ta as cores empregadas. cinza, conforme a cor presente. Em uma 235. 1032


A linha 2 dimensiona um conjunto tela com quatro cores, por exemplo, po- 220 DATA b. 175. 197.6.4. 30.0, 19/
dem-se definir quatro diferentes padrões ,615
A, para armazenar o padrão de pontos 12--..0
de pontos, para representar o vermelho, 230 DATA203. 35, 203. 35, 221.
usado em cada cor. Existem nove cores, 254.1077
mas nem rodas podem aparecer na tela com um cinza bem claro; o verde, com .

240 DATA 0,40, 7. 221,53. 01,62.3.


ao mesmo tempo. Os padrões estão de- um cinza mais escuro etc. Isso é feito ini- 86
finidos em DATA. na linha 6, c são car- bindo-se o avanço da cabeça de im- 250 DATA 24.2.62.0,131,95.221,3
regados no conjunto A pela linha 4. pressão.
Dois itens em DATA determinam cada Evidentemente, o tempo total de im-
cor; o segundo é impresso sobre o pri- pressão é muito longo, nesse caso. Um
meiro. Por exemplo, o primeiro par de despejo de tela simples demora quase
números (3,3) indica preto, formando meia hora em alguns micros; se levar-
um padrão binário de 3 ( ) sobre 3(11).
1 1 mos em consideração a cor, esse tempo
O segundo par (2,1) especifica verde, será aumentado para várias horas! Um
formando um padrão de (01) sobre 2 1 programa em código de máquina co-—
(10). Note que há repetição de pares na mo o que apresentamos a seguir para
sequência, mas isso não importa: a se- duas linhas de computadores —
pode re-
gunda ocorrência determina uma cor solver esse problema.
que não pode aparecer na tela junto
a primeira especificação.
A
linha 20 prepara a impressora pa-
ra receber gráficos. A sequência de es-
cape que contém instrui a impressora a
não dar espaçamento entre linhas.
O
laço que vai da linha 30 à
80 percorre uma linha da tela,
em blocos de quatro pixels. A
linha 40 envia à impressora um
código de retorno de carro (13)
e, em seguida, o código *, que
coloca a impressora em modo
gráfico. Ainda nessa linha,
CHRS(0) define a densidade de
I impressãoeCHR$U28);CHR$(l)
Illll lllllllllllll!
270 DATA 193,16.215.193.16.197, 7, 3357
33,65,928 1010 DATA 140.231.77.39.4,129,2
280 DATA 235.6.5,205.9.235,62.1 ,38,3.108.140.220.150,193,68,16 Embora o código de máquina esteja
0.767 7.140.216.48.140,214.23.0.142,2 comido em uma lisla de números em
290 DATA 215.58.83.235.198.4.50 632 DATA, cada linha inclui somas de ve-
.83.926 1020 DATA 95,52,4,51,141.1.1.19 rificação, cuja finalidade é evitar que se
300 DATA 235,210,115,234.62.4.2 0,191.166.228,52,6,134.4,52.2.2 cometam erros de cópia.
15.251.1326 3.0.134.48.140,10 7,166.1996 Não se esqueça de observar as pre-
310 DATA 201.126,35,215,16,251, 1030 DATA 134,167,192,108,97.10
cauções usuais ao rodar um programa
201,197,1242 6, 228, 38, 240. 5 3,2, 53,6, 166. 228,
320 DATA 205.170.34.71.4.126,20 90.193,255,38,223,198,3.52,6,28 em linguagem de máquina: para não
3. 7,820 76 correr riscos, armazene o programa, as-
330 DATA 16,252,230.1.193.201,1 1040 DATA 51,141.0,212,198.192. sim como suas versões corrigidas, em fi-
97.62.1152 231. 228.48. 140 65 141 81
. 79 198
, . . .
ta ou disco, antes de executá-lo.
340 DATA 175, 144. 230 240. 71 .88.
. ,4.72.72,106,192.43.2.138.3,263 Depois de testar o programa comple-
2Z. 0.978 7 to, rode-o com RUN e, em seguida, apa-
350 DATA 203.35.203.18.203,35,2 1050 DATA 90,38,245,173.159.160 gue-o (o programa em código de máqui-
0J, 18, 918 ,2 173. 159. 160, 2. 106,228, 38,230
,
na ficará armazenado em uma porção
360 DATA 121.203.63,203.63.203, 1 34. 13, 173. 159, 160. 2. 106,97. 38
protegida da memória RAM). Digite ou
,

63. 111 .1030 ,2845


370 DATA 38.0.25.17,0.88.25,193 1060 DATA 207.53,6.134.10,173.1 carregue seu programa de desenho e exe-
. 386 59, 160,2. 53,4, 17 3,159,160,0. 29 cute-o. Para imprimir a imagem na te-
380 DATA 201,27,64,27,65,8,5.27 .3,39.4.203.4.38,138.48,2059 la, chame este comando:
,424 1070 DATA 140.17,32,18,5,27,42,
390 DATA 65.8,27.65.0,13.27.42. 4. 128. 1.3. 1.0, 2. 3.0.1,2,3,2,27.
247 64 230. 128.880
,

400 DATA 0.96.1.0,0.48,48,193.3 1080 DATA 166,128,173.159,160,2 RANDOMIZE USR 60000

mm
.90, 38. 247. 5 7.134 32.109. 141 .25

582
,

5.48, 39, 1 ,68. 52, 2, 166. 101 ,214. 2

1090 DATA 182.193.1,34,1,68,230


D
EXEC 30000
10 CLEAR 200,29992 .224.61,211.186,31,1,2 30,99,84.
20 CLS:F0R K-0 TO 12:T=0:FOR L= 84.84,109,141.255,18.39,1,2567 E importante desligar a alimentação
0 TO 23 READ A
: U00 DATA 84,58.166.99.109.141. automática de linha em sua impressora,
30 POKE 29993+24*K+L.A:T=T+A 255.8.39.8.132,15,64,139,15,68. antes de usá-la para despejos de tela. Pa-
40 NEXT READ A:IF AOT THEN PRI
: 32.5.132. 7,64,139, 7.198,1984
ra isso, siga as instruções do manual de
NT "ERflO NOS DADOS DA LINHA" 10
; 1110 DATA 1,74,43.3,88.32,250,1
00+10*K.END 09,141,254,2 38,39,14,52,4,197.8 operação.
50 NEXT 5,39,5,88,235,224,32,3.2250 Imprima a tela em uma fita de im-
1000 DATA 0.0.0.3,27,51,24.134. 1120 DATA 84,235.224,52.4.166,1 pressão já usada, pois isso proporciona-
254,151.111.111.140,242.111,140 32,164,224,84.3 7,3.68.32.250,17 rá um contrasie melhor entre as diferen-
.240.150.182.133,1,39.3,108.235 1 . 141 254 206, 171
, , , 141 254 203 5
, , , tes tonalidades.
Já examinamos a filosofia e os

ESTRUTURAS princípios básicos do Pascal.


Mostraremos agora como as estruturas

DO PASCAL dessa linguagem são organizadas


na construção de um programa.

Como vimos no artigo da página mostram a estrutura geral de uma decla-


1436, ê fundamental estudar a maneira ração. Suponhamos que se queira defi-

de solucionar determinado problema an- nir um identificador; mu identificador é


tes de iniciar a elaboração de um pro- definido como uma ou um dígito.
leira

grama em Pascal. O algoritmo para a re- Em um diagrama de sintaxe, teríamos:


solução do problema deve ser aperfei-
çoado e refinado até se tornar semelhan-
te a um programa que possa ser com-
preendido pelo microcomputador.
Para realizar essa tareia, você preci-
sará conhecer as ferramentas disponíveis
HO seu micro, ou seja, as estruturas e os
comandos aceitos pelo Pascal. Esse pro-
cedimento não é muito diferente daquele
que adotamos ao elaborar um progra-
ma cm BASIC. A partir de nos^i expe-
riência com a máquina, sabemos quais
comandos são válidos, o que nos permi-
te esboçar uma solução adaptável ao mi-
crocomputador.
No BASIC, diversos recursos podem
ser utilizados em cada etapa da resolu-
ção de um problema. Esses recursos não
seresumem a simples comandos, mas a
combinações de vários deles. Por exem-
plo, quando precisamos repetir uma ta-
refa várias vezes, um laco FOR...NEXT
costuma ser uma boa saída; para uma
tomada de decisão, basta um
IF...THEN. Existem estruturas seme-
lhantesem Pascal —
mas elas exigem
um grau de refinamento maior que no
BASIC. Neste artigo, examinaremos as
mais simples e úteis dessas estruturas.
: ; i 1 ( ;

nmiiii iiiiiiim

ralmente usado quando a seleção depen- case nodia of


de de um ou outro de dois eventos. Po- 1 :wr iteln Segunda-f e ira
1 '
) ;

2 :wr í telnt Terça- f eira >


1

rém, se a decisão depende de um núme-


'

3:writeln< Quarta-f ei r a
' ' ) ;

repeal < instrução > until < expressão ro maior de eventos, costuma-se utilizar A :wr iteln( 'Quinta-f ejra } ' :

lógica > case...of. Não há nenhuma estrutura si- 5:begin


milar a case no BASIC. wr iteln Sexta-íeira
( ' ' ) :

As instruções entre repeal e unlil são writeln('Dia de pagamento')


repetidas até condição
que a Final se tor- end;
ne verdadeira. Todas elas são executa- 6, 7:begin
das pelo menos uma vez, pois o teste só
i feitoao final. Ao contrário da forma if < expressão lógica > then < insirução
whilc.do. não é necessário acrescentar 1 >else<instrução 2>
begin e end a um conjunto de instruções. else begin
Usando-se essa técnica, o programa an- Essa estrutura indica que, se a expres- writelnCUse valores 1

) |

terior pode ser escrito da seguinte são lógica for verdadeira, o programa writelnCentre 1 e 7 1

executará a instrução 1; se for falsa, a


instrução 2. Como mostra o diagrama
FBN, o else é opcional; uma construção
alternativa seria if...lhen. Em algumas variações do Pascal, os
rótulos 6 e 7 devem ser co-
1, 2, 3, 4, 5,
locados entre parênteses, fugindo, por-
tanto, do Pascal padrão. Na verdade,
A declaração case permite ao progra- em algumas implementações para a
ma selecionar uma instrução de uma lis- adaptação ao sistema BASIC, a mudan-
writf(sum) ta de várias possibilidades. ça na sintaxe é necessária.
A forma geral de case é: O programa exemploS mostra co-
Esse programa é mais eficiente que o mo superar um problema bastante fre-
anterior, pois, com o uso de repeal. ..un- case expressão of quente no uso do case. Muitas vezes, o
til, economiza-se uma instrução identificador pode assumir valores não
read(no). Para efetuar uma soma cor- cl : instrução; encontrados entre os rótulos de case, o
melhor que o programa entre di-
rente, é c2 : instrução; que provocaria uma interrupção e uma
retamente no laço inicializado por re- mensagem de erro. Assim, utilizamos
peal.No programa exemplo2, o progra- um desvio condicional if...Ihen...else
ma chega à solução por intermédio de para mudar o curso do programa, caso
uma estrutura menos adequada que a cn : instrução os valores de nodia não se encontrem
utilizada no exemplo3. end; no intervalo apropriado. Observe tam-
bém que foram empregados rótulos com
O valor da expressão deve correspon- mais de um valor e instruções compos-
der a um dos c e ser do mesmo tipo. No tas após alguns deles.
Pascal padrão, se o valor da expressão
No ao contrário do que acon-
Pascal, não for enconirado na lista, uma men- DESENVOLVIMENTO DE PROGRAMAS
tece no BASIC, o laço inicializado por sagem de erro será exibida. Em algumas
FOR só pode caminhar em passos versões, porém, o programa simples-
(STEP) de + ou - Adaptando o pro-
I I .
mente ignorará o case. Com um conhecimento mais detalha-
grama anterior ao uso dessa técnica, tere- Note que há um end associado ao ca- do dos procedimentos disponíveis no
mos que introduzir inicialmente a quan- se que não corresponde a nenhum be- Pascal, podemos passar ao exame de um
lidade de números a serem somados, gin. Esse tipo de estrutura não é fre- programa escrito nessa linguagem.
program exemplo4; quente, e pode trazer inconvenientes du- O programa que apresentamos a se-
rante a busca de um erro dentro do pro- guir verifica se uma palavra ou frase é
var no sum, quant
, , i : integer —
grama. Geralmente, a primeira coisa um palindromo ou seja, se ela pode
°read (quant) que se faz é verificar se há correspon- ser lida de trás para frente sem sofrer al-
dência entre o número de begin e end. teração (como "radar" ou "Socorram-
for ít=1 to quant do A associação do end ao case provoca- me, subi no ônibus em Marrocos"), ig-
ria uma diferença. Para contornar o norando-se os espaços em branco e os
'read (no) :
problema, coloca-se um rótulo, em ca- sinais de pontuação. Suponhamos que
sum =aum*no
:
da end —
por exemplo, end; jcase|. você queira testar se esta frase é um pa-
As instruções equivalentes a cada op- lindromo:
ção (c) podem ser instruções compostas,
sempre entre um begin e um end. Arara é ave rara
Veja este exemplo do uso de case:
program exemploS;
O algoritmo inicial poderia ser:

Como o BASIC, o Pascal dispõe de var nod ia integer :

vários recursos para verificar qual deci- begin


são deve ser tomada diante de determi- r ead 1 n (nod ia) leia uma cadeia de caracteres
O
nado resultado. primeiro deles, co- xí (nodia>0) and tnodia<8) teste se é um palindromo
I mum ao BASIC, é o if...then...else, ge- then end
IIIIIIIIIIIHHH y linguagens IIIUIIII
Essa frase inicial é bem simples, con- o que, em Pascal, corresponderia a a[dccr|.] Tudo o que precisa ser feito é
sistindo só de duas elapas, além do be- tornar pai igual a false quando o teste
if pai then
gin edo cnd requeridos pelo Pascal. Po- a|crsc| = a[decr] apresentar esse resul-
deríamos elaborar um algoritmo mais tado. No momento em que o programa
detalhado para a primeira etapa: voltar para o cabeçalho do laço, encon-
trará um desvio condicional dentro de
início 0 PROGRAMA COMPLETO while. A
técnica empregada em BASIC
leia o número de caracteres (n) seria a seguinte:
teia os caracteres colocando-os na Refinando algumas partes anteriores
matriz A(i) e reunindo-as, chegamos ao seguinte
firo programa em Pascal:
program exemplo6;
Traduzindo essa primeira etapa pa- conat comp=30; 100 TF AlCRÍiaOAUiKCR) THKN
ra o Pascal, temos: var a array 1 comp
: | . . ] o£ char ;

2J0 NEXT I
Passando para a segunda etapa, che- A1Q !'H1NT "fAí.fNDUi
gamos ao seguinte algoritmo: 2b0 GOtO 2/0
260 PR1NT "NÃO Ê P,
inicio 2/0 ENI)
faça crsc igual a 1
decr) and pai do Um algoritmo melhor estruturado
faça decr igual a n poderia ser apresentado assim:
enquanto crsc <decr faça
se a|crsc| é pontuação então then cr ac :

incremente crsc else defina o conjunto pontuação


senão if <a[decr]=
se a|decr| é pontuação então
decremenle decr se a(crsc| estiverem pontuação então
senão incremente crsc
se alcrsc] = a|decr| então l"a|decr ] the
incremente crsc se a|decr| estiver em pontuação então
decremente decr decremenle decr
senão senão
faça a variável booleana else pai =f ai se :

(pai) igual a false if pai then


fim writelnl 'ral índrom. Uma declaração desse tipo economi-
zaria exaustivas comparações do tipo:
Esse algoritmo poderia ser refinado itelnC ha palindn 1

para o Pascal desta maneira: if (a|crsc] = ' ')or (a|crsc] = ',') or


O Pascal apresenta um tipo de variá- (afcrscl = '.') or <a[crsc| = "") then...
vel desconhecido do BASIC, a variá-
vel booleana, que não assume valores O Pascal aceita a definição de con-
while (crsc < decr) and |
numéricos nem guarda caracteres. Ela juntos (alguns compiladores mais sim-
if UlcrBC]*'
or (alcrsc]- '
,
-Jorlalcruc
' or (alcrsc
)
assume o valor de resultados lógicos — plespodem não aceitar essa declaração).
true (verdadeiro) e false (falso). Note Assim, modifique o programa anterior
que é desnecessário dizer: aproveitando essa definição:

if pai = true Ihen... program exemplo7;


const comp"30
bastando apenas: type carac - z ' '
. .
' '
;

simb » set of caraci


var a array 1 comp 1 of char;
: I . .
if pai then...
i n, crsc decr
, integer , :

pai boolean; :

pont si mb: :
RERNAMDO 0 PROGRAMA
pont :-[ ','..'.',"];
'

Se o seu sistema Pascal dispõe de al- pal:= true;


Precisaríamos de uma terceira etapa, gumas formas adicionais de manipular readln(n)
na qual o programa mostraria o seguinte dados, diversos aperfeiçoamentos po- for i:-J to n do read(a[i]);
cr*c:*l]
resultado: dem ser incorporados ao programa. En-
decr :-n;
tretanto, como está, ele deve funcionar while (crac<decr and pai do )
se pai é igual a true então na maioria dos sistemas. if alcrsc] in pont then
escreva "palindromo" A variável booleana é usada para des- +1
senão viar o programa do laço while quando eis
escreva "não é palindromo" se determina que a(crsc| não é igual a
IIIIIMIIHIMM—
decr -decr-1
elae
:

if alcrscj-aldecr] then
;

num
decr:-decr-l;

elae pai -false :

if pai then
wnteln ( ' palindrome -
)

tln
writelnCnao ha palindrome')

Finalmente, temos a melhor estrutu-


ra parao problema do palindromo, ori-
ginalmente dividido em três etapas:

* enlrar a cadeia de caracteres


* verificar se ela é um palindromo
* mostrar o resultado

Cada etapa foi refinada em etapas


menores até que os resultados fossem as
próprias declarações em Pascal e, jun-
tas,formassem um programa. No nos-
so caso, o programa era bem simples.
Porém, em situações mais complexas, é
aconselhável construí-lo por partes se-
mi-independentes (procedures) e testá-
las separadamente. Um
procedure é uma
sub-rotina nomeada com um rótulo e em execução alguns dos exemplos ante- Para iniciar qualquer trabalho, você
declarada junto com as variáveis. Du- riores. Para isso. depois de ter acessa- terá que digitarW seguido do nome de
do o compilador Pascal, digite o progra- um arquivo. Se ele já existir no disque-
rante a execução do programa, basta
ma c compile-o. Os programas devem te, o computador irá trazê-lo para a me-
chamar o procedure através de seu ró-
funcionar para qualquer compilador mória; caso contrário, criará um arqui-
tulo, como se fosse um comando. Essa
técnica permite modularizar os progra- que aceite letras minúsculas. vo com esse nome.
mas, tornando-os bem estruturados. Os microcomputadores que usam o Suponhamos que você queira criar o
CP/M dispõem de um compilador po- arquivo exemplo7. Tendo escrito esse
Há dois grupos de sistemas Pascal.
Um deles usa compiladores em código deroso, o TURBO PASCAL. Paraaces- nome seguido de < ENTER > . entre no
específico —
ou seja, escritos exclusiva- sá-lo, basta chamar do disquete o nome modo de edição digitando a letra E.
mente para as máquinas em que irão ro- TURBO, seguido de <ENTER>. Vo- No manual de instruções que acom-
dar. Como várias máquinas são simila- cê irá obter a seguinte saudação na tela: panha o compilador, você encontrará
orientações para movimentar o cursor
res,usando sistemas operacionais CP/M
DOS, as adaptações de uma pa-
MS TURBO Pascal syslem Version 2.00A por meio das teclas. Recorra a ele para
ou
CP/M-80, Z80 escrever seu programa. Ao terminar,
ra outra são muito simples.
conhecido como Copyright (C) 1983, 1984 hy saiado modo de edição usando o co-
O segundo grupo é
Pascal UCSD (Universidade da Califór- BORLAND Inc. mando apropriado (veja manual). An-
Include error messages (Y/N)? tes de tentar compilar o programa, guar-
nia, em San Diego). Nesse sistema, o
Pascal é compilado para o código de um de-o no disquete digitando S.
computador hipotético denominado má- Pode-se optar por mensagens de er- Para compilar o programa, pressio-
ro escritas por extenso (V) ou simples- ne a tecla C. Caso haja algum erro, o
quina p, e seu código é conhecido por
código p. Isso significa que o compila- mente descritas pelos seus códigos (N). compilador indicará em que posição ele
Se você estiver iniciando seu contato ocorreu. Depois de corrigi-lo, tente
dor é o mesmo para todas as máquinas.
Na verdade, o UCSD é escrito em Pas- com o Pascal, digite Y e <ENTER>. compilar o programa novamente. Se o
cal, possuindo um programa especifico O sistema apresentará um menu: computador indicar que completou a ta-
refa, execute o programa com X.
para cada máquina. Sua vantagem é a
incrível compatibilidade. Porem, a ve- Logged drive: Lembre-se de que cada declaração
locidade da compilação nesse sistema é precisa ser seguida de um ponto e vir-
Work gula, exceto quando depois dela houver
bem menor que a proporcionada pelo file:

compilador específico. Main file: um end. Uma instrução composta deve


vir entre um begin e um end. Se você co-

Edit Compile Run Save locar um ponto e virgula imediatamen-


EXPERIÊNCIAS COM 0 PASCAL te após um while, um repeal ou um for,
eXecule Dir Quit compiler Oplions
o computador entenderá que aquele é o
um
sistema Pascal pa-
Se você possui Texl: fim da declaração e ignorará os coman-
ra seu microcomputador, tente colocar Free: dos seguintes a serem repetidos.
36 APLICAÇÕES 36 lllllllllll

ORGANIZAÇÃO CAMINHO CRITICO


REDE PERT
ATIV IDADES, TEMPOS
EEVENTOS
DE FIROJETOS CÁLCULOS

Se você deseja montar e controlar O cálculo do caminho crítico né jeto que envolve a coordenação de vá-
- tão fácil se estivermos limitados ao rias etapas diferentes, muitas vezes sob
qualquer tipo de projeto da
pel e caneta, mas, com o auxílio do ct prazos rigorosos: a compra de uma ca-
reforma de um automóvel à compra de um putador e do programa que aqui forne- sa. O diagrama da página 1452 mostra
imóvel -, utilize este programa cemos, torna-se bem mais simpies e rá como deveria ser o fluxo PERT para a
para se organizar e economizar tempo.
pido. O programa permite a construção execução dessa tarefa. Os círculos assi-
de um banco de dados contendo todas nalam os eventos, ou seja, momentos
as atividades, seu tempo de execução (ou entre atividades cujo tempo depende de
estimativas, caso não se conheça o tem- outras. Eles marcam, assim, o início ou
Algumas vezes temos que realizar ta- po real) e a ordem em que elas deverão o fim de uma atividade. As atividades
refas que incluem várias ações, cada ser executadas. Baseado nessas informa- estão descritas ao longo das linhas que
qual exigindo um tempo diferente de ções, calcula o caminho crítico bem co- ligam os eventos, junto com as estima-
execução, e todas dependendo do suces- mo o tempo livre das atividades não tivas do tempo necessário.
so das etapas anteriores. Sem uma boa criticas (aquelas que não pertencem à se- Até aqui. muitas atividades parecem
dose de organização e planejamento, é quência especial). Esse último dado in- incertas e várias linhas se cruzam. Em-
quase impossível saber quais etapas exe- dica ao usuário por quanto tempo é pos- bora o diagrama contenha toda a infor-
cutar, e em que ordem. A situação fica sível interromper o projeto sem alterar mação necessária, ainda é difícil saber
ainda mais difícil quando há um prazo seu prazo final. que atividades merecem prioridade. Não
para o término da atividade. Para o cálculo do caminho crítico, se pode garantir, também, que o proje-
Se calcularmos o tempo de execução utilizam-se as técnicas de programação to seja concluído dentro do prazo esti-
de todas as ações envolvidas, veremos conhecidas como CPM (do inglês Criti- pulado. Além disso, à medida que avan-
que há sempre uma certa sequência de cai Palh Method, Método do Caminho çamos no projeto de aquisição da casa,
eventos que determina o tempo total do Crítico), CPA (do inglês Criticai Palh é possível que surjam outros fatores ca-
projeto. A essa sequência chamamos ca- Analysis, Análise do Caminho Critico) pazes de afetar as expectativas iniciais,
minho crítico. Qualquer atraso ou e PERT (do inglês Program Evaluation exigindo que o diagrama seja modifica-
adiantamento no caminho crítico se re- and Review Technique, Técnica de Ins- do e atualizado.
fletirá numa alteração do tempo toma- peção e Estimativa de Projeto). Nosso programa se encarrega de to-
do pelo projeto. Por outro lado, uma Não só projeios empresariais, mas das essas questões. Na primeira parte,
atividade que não pertença a essa se- qualquer projeto, por menor que seja, apresentada a seguir, cuida do banco de
quência especial poderá ser atrasada sem pode ser avaliado pelo programa. dados das atividades; na segunda, cal-
causar alterações no tempo total. Vamos tomar como exemplo um pro- cula o caminho critico.
36 APLICAÇÕES 36

124 LET aa-a+1: LET a<aa)-x:


LET u(x)=u
130 PRINT wS(4) ifSi':"i INPUT
:

uS{x): PRINT uS(x): LET xa=x


140 PRINT pS;"iniciar evento,
tinalizar evento*;: INPUT a.f:
PRINT s:" ";£: LET s=INT a:
LET t = TNT f
142 IF,a<l OR B>zz OR f<l OR £
>zz THEN PRINT wS(3): GOTO
140
150 LET u=-s: GOSUB 450: IF u(
x)<0 THEN GOTO 156
152 IF ee=me THEN PRINT u$(2)
;"eventoa": GOTO J40
154 GOSUB 350
156 LET b (xa) -X
160 LET u^-f: GOSUB 450: IF u(
X)<0 THEN GOTO 166
162 IF ee=me THEN PRINT wS(2)
:"eventos": GOTO 140
164 GOSUB 350
~'"6=carrega do gravador "*" 7- 166 LET t (xa)
testa gravador "' "8=mo3tra det 170 PR [NT p$| "tempo provave 1 p
ara executar ":: INPUT t fKa)
5 BOHDEB 0: PAPER 4: INK 0: 62 PRINT "9 = SAIDA" "10=verifl PRINT Wxa)
ca e ordena a rede" 172 TF (xa)'-0 THEN PIIINT "NA
CLS 1

7 POKE 23658,8: POKE 2361)9. 64 PRINT "Jl-cralc com tempog O PODE SER FEITO COM ESTA VELO
20 CIDADE": GOTO 1/0
10 CLS LET falae=0: LET ma=
: 66 PRINT "12=calc com inrerte 1H0 PRINT "Introduza BSClMtlV
100: Í.ET me-100: LET mh=212; zaa": PRINT a de tempo com 90* de certess
LET S«— 1: LET fp = -l: COEUB 70 INPUT I : PRINT t: IF t = 9 a": PRINT "Pode aer executado
12: LET ck-false: LET M*0i TilEN STOP em ";: INPUT n(xa): PRINT n(xa
LET ee-0: GOTO 50 72 ÍF Kl OR t>12 THEN PRINT )

12 LET ".cz^9999 LET truci: : t-";tí" NAO RECONHECIDO": 182 IF n(*a}<t(xa) THEN print
LET p$ - " í ntroduza " LET n$=" : COTO 114 "ISTO NAO E COMPATÍVEL COM O
at i vidade" 74 ] F I >1 0 AND NOT ck THEN TEMPO PlluVAVEL": GOTO 170
14 DTM uS (85. 32) LET wS(l)=" : PR TNT "FACA VERIFICAÇÃO DE DA 190 RETURN
Nenhuma"+aS+" = PHF.CEDE o evenL DOS PRIMEIRO": GOTO L14 200 FOU b-1 TO aa: IF x=a(b)
o": LET wS (2)"" EXCEDEU" 76 IF aa = 0 AND (t>7 OR t-5) THEN LET a = b
16 LET wS(3)-"VOCE NAO PODE U THEN PRINT "IMPOSSÍVEL - NAO 220 NEXT b: LET a(a)=a(aa):
SAR ESTE NUMERO ": LET wS(4)= FOI INTRODUZIDA NENHUMA" aS ; LET u(x)=zz+l: LET aa=aa- 1
p5*"texto paia este(a) " GOTO 114 RETURN
18 LET wS(5)-aS+"REFERE A EVE 80 IF t>7 THEN COTO 100 300 IF u(x)<0 THEN GOSUB 9"46
NTO NAO DEFINIDO " 82 IF t = 6 THEN Ct.F.AR LET t :' GOSUB 933: GOTO 330
22 DEF FN a<X)~x«(x<0) 310 IF ee^me THEN PRINT wS(2)
DEF FN z(x)^x*(x>0) :f3: HFTURN
26 DIM a{ma) DIM g(ma) :
3J 2 GOSUB 350
30 DIM w(ma): DEF FN w(x)=ABS fS: GOTO 100
x*(x<J)+ABn (2-x)*(x>l) 86 LET £$»*S: IF t>2 THEN
DEF FN x(x)=x* (2. 37572+x*x*
15.9402-x*x* (184 744 -x*x* .
LET ÍS-"even1o"
88 PRINT pS;t3i" numero":
H]E]
688.472)))/! -20667 PRINT "ou zero para sair "; 5 CLEAR
34 DEF FN I$|x)=(STH5 (x)+" 90 INPUT u: PRINT u: LET u~ 10 MA - IOOiME - 100:FA - 0:MH
-) (TO 6) INT u: IF u=0 THEN GOTO 50 = 212: GOSUB 12:CK - FA: GOTO 5
36 DEF FN b(x)=x-INT (x/2S6)* 92 IF u<[ OH u>zz THEN PÍ1INT 0
256 WS (3) GOTO 88 12 TR = 1:2S - CHRS (13):DOS
38 DEF FN p$(x)=" "( TO TNT — :

94 IF t>2 THEN LET U="-« ZS + CHRS (4):2Z = 32766:QTS


((6-x)/21): DEF FN <i$ (x) «" 96 GOSUB 480: LET ck=falae - CHRS (34)
"( TO TNT (6-x) /2) ( 98 IF (t=2 OR t=4) AND (0=u(x 14 PS = " FORNEÇA
"
AS - " ATIVI
:

40 DIM u (me) ) OR zz<u[x)l THEN PRINT "VO D ADE "


42 DIM x(8) CE NUNCA USOU ESTE NUMERO": 16 DIM W${5):US(J) - "NENHUMA"
+ AS +" PRECEDE EVENTO" :W3 (2)
44 DIM 3(mh): DIM í (tnh) DIM :
GOTO 114
u(mll): DIM t (mh) DIM n(mh): : 100 GOSUB 20» (t = l) + l00*t+900* "EXCEDEU "
=
t-10)"(t>l0) » "NAO PODE USAR ESTE
18 WS (3)
DIM uS(mh,20): DIM Y(rah): DIM
i (ah) 112 GOTO bO NUMERO":WS(4) * PS + "TEXTO PAR
46 DIM p(mh): DIM g(tnh) 114 FOR t-1 TO 500: NEXT t: A ESTE (A)
GOTO 50 21) WS(b) - " REFERE A EVENTO NA
48 DEF FN u(x)=u[ABS x+(x=0)) "
* (x>0) : RETURN 120 IF 0<u{x) AND zz>=u(x) O DF F T N T DO
50 CLS PRINT "l=de£ine " a$
: ;
THEN GOSUB 942: GOSUB 932: 22 DEF FN A(X) = X * (X < 0)
'"2=apaga ";aS: PRINT "3=defi GOTO 130 DEF FN ZtX) = X * (X > 0)
ne evento" "4=apaga evento" '
122 IF aa=ma THEN PRINT uS(2) 28 DIM A (MA) , G ( MA
60 PRINT "5-salva no gravador ifS: RETURN 30 DIM- W(MA) DEF FN W(X) =
:
( (( , *
)

36 APLICAÇÕES 36

ABS (X) * (X < - 1) + ABS (2 GOTO 114


: ZZ + 1 = U(Z)) THEN X * Z
- X) « (X > 1) 100 IF KKS "S" AND (T > 7 AN 470 IF U - U(Z) THEN X - Z: BE
32 DEF FN X(X) X * (2.37572 D T < 12) THEN PRINT DOS"PB#l" TURN
+ X * X * (15.9402 - X * X " { 101 HOME ON T GOSUB 120,200. : 4B0 IF Y - 1 OR U(Z) - 0 THEN
184. 744 - X * X * 688.472) / 300,400,500,600.700,800,900,100 RETURN
1.20667
) )

0,2000,3000,960 490 Z-Z+Y-MH* INT (Z + (

40 DTM E (ME) 105 IF KKS = "S" AND (T > 7 AN Y-l) / MH) :Y Y + Y - MH *


44 DIM S(MH) .F(MH) .U(MH) .T(MH) D T < 13) THEN PHINT DOS"PRI 0 INT (Y + Y - 1) /MH): GOTO 4
(

, N (MH) . US (MH) . Y (MH) ,Z(Mt() 60


46 DTM P(MH) Q (MH) , 11 2 GOTO 50 500 HOME PRINT DOS'OPEN "FS
:

48 DEF FN U(X) * U( ABS (X) + 114 FOR T - 1 TO 1000: NEXT : 505 PRINT DOS"DELETE "FS
(X = 0) * (X > 0) RETURN
) : GOTO 50 510 PBINT DOS"OPEN "FS
50 HOME PRINT TAB /);"MENU
: ( 120 IF 0 < U(X) AND ZZ > - U( 515 PRINT ROS"WRITE "FS
PRINCIPAL": PHINT PHINT "01 : X) THEN GOSUB 942: GOSUB 932: 520 PHINT MA;ZS;ME;ZS;MH;ZS;AA
= DEFINE";AS: PHINT "02 o DELET GOTO 130 ;ZS EE; ZS :CK
:

A";A$: PBINT "03 - DEFINE EVENT 122 IF (AA - MA) THEN PRINT W 525 IF CK THEN PRINT BI i 29 i PI
Ò": PBINT "04 - DELETA EVENTO" $(2) ;F$: RETURN 530 FOR A - 1 TO AA:X = A (A)
52 PBINT "05 = SALVA DADOS" V : 124 AA - AA + 1:A(AA) - X:U<X) 5Jb PRINT X ZSU (X) ZSS (X) ZpF ÍX)
:

RI NT "06 = CARHEGA DADOK" PRIN : - U /Sr(X)ZSN(X)ZSG(A)/5US(X)


T "07 = DELETA ARQ DO DISCO" P : 130 PBINT WS(4);FS: INPUT U$ (X 540 NEXT A
B1NT "08 = MOSTRA DETALHES" ):XA - X 545 FOR E - 1 TO KE:X E(E)
54 PR TNT "09 - REINICIA" 140 PBINT PS; "EVENTO INICIAL . '.50 PHINT X ;7.$U (X) ZSS (X) Z$F (X)
56 PBINT "10 - VERIFICA E ORDE EVENTO FINAL": INPUT S.F:S = Z$T(XJZ$NtX)2$US(XJ
NA REDE" INT (S) :F = INT <F) 555 NEXT L
58 PRINT "11 CALC COM DURACA 142 IF S < 1 OR S > ZZ OR F < 560 FOR X = 1 TO MH: IF U(XI
O MEDIA" 1 OR F > ZZ THEN PRINT WS (3): ZZ 4 THEN PRINT X
I

60 PBINT "12 = CALC COM INCERT GOTO 140 565 NEXT X: PHINT 0
EZAS": PRINT "13 - SAÍDA PARA
"
150 U - - S: GOSUB 450: IF U(X 5/0 PBINT DOS"CLOSE "FS
) < 0 THEN 156 5 75 RETURN
62 IF KKS = "S" THEN INVEBSE 152 IF EE - ME THEN PRINT WS (

: PRINT " IMPRESSORA" NOBMAL ! 2) "EVENTOS":


GOTO 140 :

63 IF KKS < > "S" THEN INVEB 154 GOSUB 350


SE PRINT "TELA": NORMAL
: J56 S(XA) - X
PBINT "14 = TERMINA"
160 U - - F: GOSUB 450: IF U(X 4 MAXFILESO
64 < 0 THEN 166 6 OPEN "CRT " FOR OUTPUT AS#1
:
)
66 PRINT PRINT :T = 0: INPUT:
162 IF EE = ME THEN PBINT WS 8 OPEN "LPT:" FOR OUTPUT AS#2
"SUA OPCAO (1-14) " :T "EVENTOS" GOTO 140
;
10 CLEAR 2000:MH-212:ME-100:MA-
2)
IF T = 14 THEN INPUT "TEM :

68 100:FA-0:GOSUB 20 :CK-FA: GOTO 14


164 GOSUB 350
CERTEZA (S/N) ? ";AN5: IF LEFTS
166 F(XA) = X 0
IANS.1) "S" THEN HOME END :
ZZ-9999.TR— 1 :PS-"INTRODUZA
170 PBINT PS;"TEMPO PROVÁVEL D 20
69 IF T = 13 OR T = 14 THEN 10 E EXECUÇÃO": INPUT T(XA) ":AS-" ATIVIDADE":ES-CHRS(13)
0 172 IF T(XA) < 0 THEN PRINT " 30 DIMW$(5) :W$(1)-"NENHUMA"+AS+
MUITO RÁPIDO !!*: GOTO 170 " PRECEDE O EVENTO":WS(2)-"EXCE
72 IF T = 9 THEN 900
74 IF T < OB T > 13 THEN PR 1 180 PBINT "ESTIMATIVA COM 90» DEU"
INT "CÓDIGO" ;T; "NAO EECONHECIDO DE CEBTEZA" PRINT "PODE SER FE : 40 WS(3)-"VOCE NAO PODE USAR ES
" GOTO 1 14
:
ITO EM": INPUT N (XA) TE NUMER0":W$(4)-PS+"TEXT0 PARA
76 IF T > 10 AND NOT <CK) THE 182 IF N(XA) < T(XA) THEN PRI ESTE (A) "
N PBINT "USE OPCAO (10) PRIMEI NT "NAO CONFERE COM O TEMPO PRO 50 WS(5)="REFERE A EVENTO NAO D
RO": GOTO 114 VAVEL": GOTO 170 EFINIDO"
78 IF AA 0 AND (T > 7 OR T = 190 RETURN 60 DEFFNA(X)— X* (X<0) :DEFFNZ(X)
5) THEN PRINT " IMPOSSÍVEL - N 200 FOR B = 1 TO AA: IF X = A( —X* (X>0)
KNlillMA" AS GOTO 114
; : B) THEN A = a 70 DIM A (MA) , G (MA)
80 IF T > 7 THEN 100 220 = A(AA):U(X) =
NEXT B : A (A) 80 DIM W (MA)DEFFNW (X) "-ABS
: (X)
B2 I F T - 6 THEN CLEAB :DOS * ZZ+1:AA=AA-1: RETURN (X<-1)-ABS(2-X)MX>1)
CHRS (13) + CHRS (4) :T - 6 300 < 0 THEN
IF U(X) PRINT "E 90 DFFNX(X)=X*(2.37572+X*XM15.
84 IF T > 4 THEN HOME PBINT : VENTOS" XP U(X) GOSUB 950: P
: = : 9402-X*X*(184. 744-X*X*688.472]
"FORNEÇA NOME DO ARQ ":: INPUT RINT US (X) GOTO 330 : )/l. 20667
FS: GOTO 100 310 IF EE = ME THEN PBINT WS 100 DIM E (ME)
86 FS = AS: IF T > 2 THEN FS = 2) ;FS: RETURN 110 DIM S (MH) F (MH) U (MH) T (MH)
, , ,

" EVENTO" 312 GOSUB 350 ,N (MH) US (MH) Y (MH) Z (MH)


. , .

88 HOME PRINT PS "NUMERO DO


:
;
330 PRINT WS(4);F$: INPUT US [X 120 DIM PCMH) Q (MH)
A)";FS: PHINT "OU 7.EBO PARA TER ) :S(X) =0: RETURN 130 DEFFNU(X)«-U(ABS(X)-{X-0))*
MINAR" 350 EE - EE + 1:E(EE) - X:S(X) (X>0) RETURN
:

90 INPUT U:U - INT (U) IF U : = - 1:F(X) - 0:U(X) = U 140 CLS:PR-l:LOCATE 12,1: PRINT"
"
= 0 THEN 50 360 T(X) - 0:N(X) - 0:US(X) = MENU PRINCIPAL" PRINT" 1 "DEFINE" :

92 IF U < 1 OB U > ZZ THEN PB " RETURN


: ;AS;" OU EVENTO" PRINT" 2"APAGA" :

INT WS O): FOR E ~ 1 TO 1000: N 400 Z =• X: FOR F - 1 TO EE : IF ;AS:" OU EVENTO"


EXT GOTO 88
: E(F) - Z THEN E = F 150 PRINT" 3-SALVA DADOS" PRINT" :

94 IF T > 2 THEN U - - U 420 NEXT F E (E) - E(EE):U(Z) - : 4-CARREGA DADOS" PRINT" 5-IMPRIM :

96 GOSUB 450 :CK FA ZZ + 1 EE = EE - 1 RETURN


: : E DETALHES" PRINT"6-TERMINA"
:

98 IF (T = 2 OB T - 4) AND (0 450 Z - U - INT ((U - 1) / MH) 160 PRINT" 7-VERI FICA E ORDENA A
= U(X> OB ZZ < U(X)) THEN PBIN * MH Y = 2:X = 0 : REDE"
T *VOCE NUNCA USOU ESTE NUMFBO" 460 IF X = 0 AND (0 " U(Z) OR 170 PRINT"8-CALC COM TEMPOS MED ie
nHIHMMMI * "W5 36

N (XA) S<3) :GOTO 2B0


PRINT"9-CALC COM INCERTEZAS 570 IF N{XAXT(XA) THEN PRINT
1

320 IF TS="E" THEN U--U


NAO E COMPATÍVEL COM O TEMPO 330 GOSUB 700:CK=FA
190 TS-INKEYS:IF TS<"1" OR TS>" PROVÁVEL" :GOTO 540 340 IFIT-2 OT TMIAND(O-UIX) <)R

9" THEN 190 580 RETURN ZZ<U(X) THEN PRINT"VOCE NUNCA


200 T-VAL (TS) PRINT T :
USOU ESTE NUMERO" :GOTO 380
210 IF T>7 AND NOT ICK) THEN PRI 350 ON T GOSUB 390.590.750.810.
NT" FACA VERIFICAÇÃO (7) PRIMEIR 890.960.1070,1550,1660
O*: GOTO 380 360 IF T<3 THEN 290
10 PC LEAR CLEAR 2000 MH-2121 : : :
370 GOTO 140
220 IF AA-0 AND (T>40 OR T-3) T E-100 :MA-100 FA-0 :GOSUB 20:CK-F
BEN PRINT-IMPOSSIVEL - NAO FOI
;
180 FOR T-l TO IOOOiNEXT T COTO :

A: GOTO 140 140


INTRODUZIDO" AS GOTO380 : :
20 Z2-9999:TR 1 PS = " INTRODUZA — :
390 IF FSOAS THEN 620
230 IF T>4 THEN 350 ":AS-" ATIVIDADE" ES-CKRS (1 3) :

400 IF 0<U(X) AND ZZ-=U(X) COSU


240 IF T-4 THEN CLEAR 2000:T-4 30 DIMWS (5) :WS (1) - "NENHIJMA" + A5+ B 1030:GOSUB 1000:GOTO 430
250 IF T>2 THEN PRINT"NOME DO A " PRECEDE O EVENTO":WS(2)-"EXCE 410 IF AA-MA THEN PRINTWS 2 FS I J ;

RO.UIVO":INPUTFS:GOTO 350 DEU" RETURN


260 CLS PRINT AS;" OU EVENTO (A
:

: 40 WS(3)="VOCE NAO PODE USAR ES 420 AA=AA+1:A(AA)»X:U(X)=U


/E) ?"i TE NUMERO" WS Í4) =PS + " TEXTO PARA
:
110 PRINT US (4) FS INPUT US(X):
; :

270 TS-INKEYS IF TSO"A" AND TS :


ESTEIA) "
XA-X
<>"E" THEN 270 50 WS (5) ""REFERE A EVENTO NAO D 140 PRINT PS:"INICIAR EVENTO. F
280 PRINT TS:IF TS-"A" THEN FS- EFINIDO" 1MALI ZAR EVENTO" INPUT S.F:S-1N
:

AS ELSE FS-" EVENTO" 60 DEFFNA(X)--X*IX<0) iDEFFNZÍX) TIS) F- TNT (F


290 PRINT PRINT PS;FS;" NUMERO"
: — X* (X>0) ;

450 IF S<1 OH S>ZZ OR F<1 <JR F>


:PRINT"OU ZERO PARA SAIR" 70 DIM AIMA) C (MA) ,
ZZ THEN PRINT W$(3>:GOTO 440
300 INPUT U:U=INT(U) :IF U-0 THE 80 DIM W (MA)DEFFNW (X) --ABS : (X)
460 U-~S:GOSUB 700:IF UIXXO TH
N 140 (X<=1)-ABS(2-X)*(X>1> EN 490
310 IF U<1 OR U>ZZ THEN PRINT U 90 DFFNXIX)-X*(2.37572 + X*X*U5. 470 IF EE-ME THt.N PRINT US<2);"
S{3) :GOTO 280 940 2-X*X* (184. 744-X*X*688.4 72) EVENTOS" ;LÍOTO 440
320 IF TS-"E" THEN U=-U ) 20667
/l .
480 GOSUB 660
330 GOSUB 70D:CK«FA 100 DIM E (ME 490 S(XA)=X
340 IF(T-2 OT T-4) AND (0-U (X) OR 110 DIM S(MH) F (MH ,U(MH) T (MH) , ) .
500 U--F:GOSUB 700:IF UlXl^O TH
ZZ<U(X) THEN PRINT"VOCE NUNCA ,N (MH US [MH ) Y (MH) Z (MH
) . , , I

EN 530
USOU ESTE NUMERO" GOTO 380 :
120 DIM P IMH) Q IMH) ,
510 IF EE-ME THEN PRINT US 2 ( 1
:

350 ON T GOSUB 390.590,750.830, 130 DEFFNU(X)--U<ABS(X> tX-0))* EVENTOS" :GOTO 440


890 960 .10 70.1550. 1660
. (X>0) : RETURN 520 GOSUB 660
360 IF T<3 THEN 290 140 CLS:PR=0:PRINT #8. "MENU PRI 530 F(XA)-X
370 GOTO 140 NCIPAL":PRINT"l=DEFINE";ASi" OU 540 PRINT PS;"TEMPO PROVÁVEL PA
380 FOR T-l TO 1000:NEXT T:GOTO EVENTO":PRINT"2=APAGA";AS;" OU RA EXECUTAR" INPUT TIXA)
:

140 EVENTO" 550 IF T(XA)<0 THEN PRI NT "NAO P


390 IF FSOAS THEN 620 150 PRINT" 3-SALVA DADOS" PRINT" :

ODE SER FEITO COM ESTA VELO


400 IF 0<U<X) AND ZZ>-U (X) GOSU 4-CARREGA DADOS" PRINT" 5=IMPRIM :
CIDADE" ;GOTO 540
B 1030:GOSUB 1000:GOTO 430 E DETALHES" PRINT" 6-SAI DA" r

560 PRINT" INTRODUZA KSTIMATIVA


410 IF AA-MA THEN PRINTWS 2 FS ) ; 160 PRINT"7=VERIFICA E ORDENA A DE TEMPO COM 90» DE CERTEZA":
: RETURN REDE" PRINT"PODE SER FEITO EM" INPUT ;

420 AA-AA+1:A(AA)-X:U(X>-U 170 PRINT"8=CALC COM TEMPOS MED N(XA)


430 PRINT WS(4) FS INPUT USIX) ; : IOS" 570 IF NÍXA)<T(XA) THEN PRINT
"

XA-X 180 PRINT"9-CALC COM INCERTEZAS NAO E COMPATÍVEL COM O TEMPO


440 PRINT PS;"INICIAR EVENTO. F " : PRINT"?" PROVÁVEL" :GOTO 540
INALI2AR EVENTO" INPUT S,F:S=IN :
190 TS=INKEYS:IF TS<"1" OR TS>" 580 RETURN
TIS) :F-INT<F) 9" THEN 190
450 IF S<1 OR S>ZZ OR F<1 OR F> 200 T-VAHTS) :PRINT T
ZZ THEN PRINT WS 13) :GOTO 440 210 IF T>7 AND NOT(CK) THEN PRI PLANEJAMENTO DA REDE PERT
460 U = -S:GOSUB 700:IF U(XK0 TH NT "FACA VERIFICAÇÃO (7) PRIMEIR
EN 490 O": GOTO 380 Antes de usar o programa para ava-
470 IF EE-ME THEN PRINT US (2);" 220 IF AA-0 AND (T>40 OR T-3) T
liar um projeio. você terá que dividi-lo
EVENTOS" :GOTO 440 HEN PRINT"IMPOSSIVEL - NAO FOI
em atividades individuais e estimar o
480 GOSUB 660 INTRODUZIDO" :AS:GOTO380
490 S(XA)-X 230 IF T>4 THEN 350 tempo de execução de cada uma delas.

500 U— F:COSUB 700:IF UIXX0 TH 240 IF T-4 THEN CLEAR 2000:T-4 Para isso, o mais conveniente, como já
EN 530 250 IF T>2 THEN PRINT "NOME DO A vimos, é desenhar um esquema de blo-
510 IF EE-ME THEN PRINT WS(2);" RQUIVO" INPUTFS GOTO 350
: : cos: a rede PERT.
EVENTOS" GOTO 440 : 260 CLS:PRINT AS;" OU EVENTO (A À medida que for desenhando o dia-
520 GOSUB 660 /E) ?"i grama, descreva as atividades ao longo
530 F (XA) -X 270 TS-INKEYS :IF TSO"A" AND TS das linhas de conexão entre eventos.
540 PRINT PS; "TEMPO PROVÁVEL PA <>-E" THEN 270 Dentro dos círculos, coloque a descri-
RA EXECUTAR* INPUT T (XA) : 280 PRINT T$:IF T$-"A" THEN FS- ção dos eventos. Se estes forem apenas
550 IF T(XAX0 THEN PRINT"NAO P AS ELSE F5-" EVENTO" passos intermediários entre atividades,
ODE SER FEITO COM ESTA VELO 290 PRINT PRINT PS;FS;" NUMERO"
:
nomes
:PRINT"OU ZERO PARA SAIR" não é necessário atribuir-lhes es-
CIDADE" :GOTO 540
pecíficos.
560 PRINT" INTRODUZA ESTIMATIVA 300 INPUT U U-INT (U) IF U-0 THE : :

DE TEMPO COM 90* DE CERTEZA" N 140 A versão do programa para o Spec-


PRINT"PODE SER FEITO EM" INPUT : 310 IF UCl OR U>ZZ THEN PRINT W trum permite o uso de até vinte caracte-
36 APIICACÕCS 36

res por evento ou atividade; nos demais menos 10%, devido a eventuais dificul- eventos de inicio e de fim. Entretanto,
micros, podem-se utilizar 255 caracteres. dades de trânsito). Portanto, entramos 90 se encontrar alguma inconsistência na
Entretanto, dê preferência a títulos su- minutos como tempo médio, e 100 mi- rede, emitirá uma mensagem de erro,
cintos, para não sobrecarregar a memó- nutos como tempo pessimista. Essa si- identificando caminhos circulares ou in-
ria disponível. tuação corresponde à curva conhecida terrupções.
Se você tem uma noção mais ou me- como curva normal ou gaussiana.
nos precisa da duração de cada ativida- A que chamamos
terceira situação é a
de, escreva esse valor no diagrama. Pos- "espere até acontecer". Por exemplo: 0 CAMINHO CRÍTICO
teriormente, veremos como estimar os você só terá a certeza de que a reforma
tempos. Lembre-se, porém, de que a no telhado foi bem feiía quando come- Finalmente, selecione a opção para
unidade de medida de tempo escolhida çar a chover. Aqui, o tempo pessimista calcular o caminho critico. Existem duas
(hora, dia, semana etc.) deve ser sem- é cerca de 2,5 vezes maior que o tempo alternativas: a primeira usa o tempo mé-
pre a mesma em toda a rede. médio. Este pode ser obtido a partir do dio de cada atividade, e a segunda, o
O programa só funcionará correta- número de dias de chuva naquele mês tempo incerto (pessimista). Peça antes
mente se a rede for viável do ponto de específico. a primeira alternativa.
vista lógico —deve ter apenas um pon- A quana e última situação correspon- O vídeo mostrará todas as atividades.
to de partida e um de chegada, e não de ao tempo do "ludo ou nada". É mui- seu número de código e descrição. Em
formar laços ou caminhos circulares. to improvável, por exemplo, que uma seguida, dirá quando cada uma deve ser
O passo seguinte ao desenho da rede determinada peça do carro quebre, mas, iniciada e concluída, se existe alguma
PERT é a numeração de todas as ativi- se isso ocorrer,o veículo ficará na ofi- íolga, e se a atividade é crítica — ou se-
dades e eventos e sua introdução no pro- cina durante dez dias. Nesse caso, tome ja, se está no caminho crítico, com fol-
grama. A ordem dos números não é im- o valor máximo (dez dias) como o tem- ga igual a zero.
portante, mas o computador precisa de- po pessimista, e a média aritmética (10 O tempo é expresso na mesma uni-
les para trabalhar. Um
método bastan- vezes 1/100, ou 1/10 de dia) como o dade que foi entrado. Assim, se você
te em numerar os even-
simples consiste tempo médio. usou dias, todos os tempos irão se refe-
tos de dez em dez,
como se faz com um Não é necessário indicar ao micro- rir a dias, contados a partir do evento
programa em BASIC — o que permite computador o gráfico em que se encai- inicial da rede. Suponhamos que a ta-
inserir números extras entre os já exis- xa cada atividade. A máquina simples- bela indique que a atividade 3 deve co-
tentes, se for necessário. mente toma as duas estimativas de tem- meçar no dia 6. terminar no dia 10, e
Quando você for definir os eventos po, e efetua os cálculos. Se a diferença tem uma folga de dois dias. Você pode-
e as atividades, o computador pedirá o enire os dois valores for de 0 a 30%, ele rá começar aquela atividade no mínimo
número e a descrição de cada um deles, usa a curva gaussiana; se for de 30 a seis dias depois de iniciado o projeto,
além de uma estimativa do seu tempo 130%, usa uma curva gaussiana modi- com uma tolerância de dois dias (ou se-
médio e do seu tempo pessimista (aque- ficada. Por outro lado, se o valor da mé- ja, se você atrasar a atividade até o dia
le que conta com 90% de possibilidade dia estiver entre 130 e 300%, o progra- 8. o tempo total do projeto não será al-
de não ser ultrapassado). ma recorre à curva exponencial e, se es- terado).
Na vida real, raramente podemos cal- tiver acima dessa porcentagem, utiliza As atividades que têm folga zero de-
cular com precisão o tempo que levare- a curva bimodal. vem começar exatamente no dia indica-
mos para realizar uma atividade mes- — Depois de entrar todas as atividades do; caso contrário, haverá um atraso no
mo que a tenhamos executado muitas e suas respectivas estimativas de tempo, projeto. Se isso ocorrer, você precisará
vezes. Entretanto, não é difícil estimar você deverá entrar os eventos. Para isso, recalcular toda a rede, com a nova esti-
sua duração média, bem como sua du- basta digitar o número e a descrição de mativa para a atividade ou atividades in-
ração aproximada. Isso é tudo o que o cada evento no diagrama. Se você come- fratoras.
programa exige em termos de estimati- ter algum erro, chame as opções de apa- Se a maioria dos tempos que você en-
va de tempo. No entanto, como você ve- gamento ou de modificação de eventos trou são incertos, e o tempo pessimista
rá, os cálculos que ele faz não são tão ou atividades. é muito distinto do médio, use a segun-
simples, pois devem levar em conta qua- A informação entrada no computa- da opção de cálculo, pois o caminho
tro diferentes situações. dor pode ser exibida em vários tipos de critico será diferente.
Aprimeira situação é aquela em que tabela. A opção "Mostre Detalhes" Quando você escolhe essa opção, o
estamos absolutamente seguros quanto mostrará uma lista de tudo o que foi en- computador considera cada atividade e,
ao tempo que uma certa atividade leva- trado. Se você tem uma impressora, po- usando o gráfico de distribuição mais
rá. Por exemplo, se as instruções para derá também obter uma cópia cm papel. apropriado, seleeiona um tempo ao aca-
a construção de uma casa recomendam so, dentro dos limites propostos. A par-
que deixemos o cimento secar por 48 ho- tir desse tempo, ele calcula o caminho
ras, é exatamente isso que vamos fazer! CONSISTÊNCIA DE DADOS crítico para toda a rede, exatamente co-
Nesse caso, ao usar o programa, deve- mo na opção anterior, e armazena os va-
mos indicar o mesmo valor para o tem- Antes que o computador prossiga lores de início ede folga das atividades.
po médio e o pessimista. com os cálculos, é necessário checar se O processo se repete 44 vezes: em cada
A segunda situação ocorre quando es- há consistência lógica na rede entrada. uma delas um novo número aleatório é
tamos razoavelmente seguros sobre a du- Se esta contiver caminhos circulares, o escolhido para as atividades incertas. As
ração de determinada atividade. Sabe- programa cairá em uma alça sem fim de 45 repetições (todas são exibidas na te-
mos, por exemplo, que uma viagem en- cálculos e, eventualmente, apresentará la) proporcionam uma amostra razoá-
tre as cidades de São Paulo e Campinas, um defeito de execução. vel para a derivação dos valores médios
de automóvel, demora cerca de 90 minu- Escolha a opção de verificação e ob- de tempo.
tos, porque já a repetimos muitas vezes, serve o resultado. Se tudo estiver bem, Os tempos de inicio e fim do projeto
sem observar grandes variações (mais ou o programa imprimirá os números dos correspondem à média de 45 repetições
36 APLICAÇÕES 36

LOAD íS+"rT DATA n(): LOAD 1094 PRINT wS(l):u(z): IF aeOm


ao acaso; portanto, são bastante confiá- :

h THEN PHINT uSíl) ;utae) LET


veis.A folga média das atividades não fS+"s" DATA a<): LOAD fS+"t" :

DATA t.(): LOAD É$+"tJ" DATA u() ae-mh+l


também é indicada. 1096 NEXT e: IF se=0 THEN PHIN
críticas
LOAD fS+"uS" DATA uS O LET :

Os valores críticos mostram a porcen-


;

T "TODOS OS EUENTOS TEM* aS " P


:

:
talse»0: BETURN
tagem da participação de certa ativida- 700 LET xtl>=ma: LET x(2)=me: RECEDENDO"
de no caminho crítico 100% signifi- — LET x{3)-itih: LET x(4)=aa: LET 1098 IF ae=0 OR se>mh THEN GOT
ca que a alividade será sempre critica; x{5)=ee: LET xC6)=ck: LET x(7) 0 1750
0%, que ela nunca é crítica. -ae: LET x<8)=fe: UERIFY fS+"x 1J00 FOR p-1 TO ee: LET z=e (e)
LET ttz)=0: LET n(z)-0: NEXT e
O último valor mostra o desvio pa- " DATA x()
LET (ae)=l
drão do tempo de folga, indicando a va- 710 UERIFY !S+"a" DATA a(): : t.

UEHIFY £$+"e" DATA e<>: UERIFY 1110 LET l»at-l: FOR c=2 TO ee+
riação possível da folga e, também, a 2- IF last<>c-i THEN COTO 1170
confiabilidade da estimativa. Por exem-
f$+"f" DATA fO: UERIFY fS+"g"
UERIFY fS+"n" DATA n 1120 FOH TO aa: LET x=a ta)
DATA g()
LET y-a(X): IF t(y)Oc-t THEN
:

plo, se há uma folga de ,5 dia e o des-


UERIFY tS+"a" DATA a{)
1
:
() :

vio é igual a 1, a folga pode variar en- UF.HIKY £S+"r" DATA L(): UERIFY
GOTO 1160
tre 0,5 dia e 2,5 dias. Nesse caso, con- 11.30 IF y=f(x) THEN GOSUB 1200
fS+"u" DATA ut): UERTFY tS+"u$
cluí-se que a folga é pouco confiável. " DATA uS O BETURN : COTO 1160
:

1140 IF yOae THEN LET yaíy):


Ao contrário, um desvio padrão de 0,1 800 COSUB 942
mostra que o valor atribuído à folga é 810 FOR a = l TO aa: LET x=a (a) :
GOTO 1130
COSUB 932 1150 LET Y-f(x): LET sty)'S(x):
bastante confiável.
820 LET y=y+l+[LEN u$(x)>4): LET f(a(Y))-Y: LET t(Y)^<:: LET
IF y>20 AND a<aa THEN COSUB fe-y: LET laat=c
«40: COSUB 942 1160 NEXT a
830 NF.XT a: COSUB 940 1170 NEXT c: PRINT "evento mie
ia! =" u (se) "evento final=";u(£
;

840 G03U8 946: FOR c=l TO ee:


330 print w$M> ítSi":"-.: INPUT LET x = e (o) COSUB 933 :

aSO LET y-y+l.+ (LEN uS(x)>4): 1180 FOR e=l TO ee LET y-e(e)
U$(x): PHINT u$(x)- t.ET a (x) "
:

TF y 70 AND B<ee THEN GOSUB 1190 IF ftY)=0 AND yOEe THEN


0 BETURN
:
PHINT u(y)i"NAO CONECTADO AO EU
350 LET ee-ee+1: LET e(ee)=x: 940: COSUB 946
H60 NEXT e: GOTO 940 ENTO FINAL": LET ck=talae
LET atx)=-l: LET r(x)=0: LET u 1192 NEXT e: IF ck THEN GOTO 1
(x)=u 932 PR TNT FN ISIFN utatx)));FN
360 LET t(X)-0! LET n(x)=0: ISiFN u(f(x)));FN I$(Ux));FN 300
RETURN IStn(x)) :ABS u(x) ;" ";u$tx) 1194 GOTO 1750
LET uS txl :

1200 CLS PHINT "EXISTE O SEGU


40D LET Z"x: FOB t=l TO ee: IF RETURN :

933 PRINT ABS u(x).uStx): INTE LOOP": PRINT "EVENTOS...":


e(t)-z NUM LET e-£
LET xa = a ta)
420 NEXT t: LET e(e)=e(ee): RETURN
940 PRINT "pressione <ENTER> P 12)0 LET x=E(xa): PRINT u (x) L :

LET u(K)-»+l! LET ec = efi-l: ET y-a(xa): PRINT u[y)


BETURN dld sair* INPUT f$: CLS ! :

(u-1 /mh) *mh RETURN 1220 LET Y-3ÍY): PRINT ufv): IF


450 LET z=u-INT ( }
yOx THEN GOTO 1220
LET Y=Z: LET x^0 942 CLS PHINT " INTCI FINAL T
:

EMPO 90* CÓDIGO TEXTO" 1230 RETUBN


460 TF x=0 THEN IF 0 = il|z> OR 1300 LET k«l: LET ak=aa IF aa-
944 PRINT "FINAL INICT PHOUL E
:

ÍÍ+1»U(Z) THEN LET X-B


LET x-z: ÍJTIK "i LET V = 3: RETURN 1 THEN LET k-0
470 IF u-utíí THEN
946 PRINT "CODTGO" "TEXTO"
,
1310 LET ak-INT (tak*k)/2): IF
BETURN ak^O THEN GOTO 1500
480 IF Y-l OR 0'U(x) THEN RETURN
94H PRINT "PnEU FINAL MIN MAX ] 320 t.ET k = 0: FOR a-ak+1 TO aa
RETHBN LET ti-a-ak: LET n"a(a): LET v-
49Q LET z-z+y-mh*TNT (<«»-!>/ " LET Y=3: RETURN
a(b>- LET xa=s(xí: LET ye-aly)
!

mh) t.ET y" y+y-mh* TNT ((v+y-il 1000 LET CR-trU»! FOH a-1 TO aa
:

LET x^-a(a) 1330 IF r (ye)+ye/zz<-t(xe)+xe/z


/mtil BOTO 460 :

GOTO 1360
1020 LET z=a(x): IF stíXO OR z z THEN
500 LET x(l>-ma: LET «U)"M! 1340 LET a(a)-y: LET atbi^x: LE
LET mll-uh: LET x{4)-a.i: LET z<u(z) THEN PRINT u (x) wS (5 ; ) ;

ET x|/l (z) LET ck=f alse T k-1


x(5)'e*: LET x(6)=<-k: I :
1360 NEXT h: GOTO 1310
-3f. LET x(Bl"te: PR NT "preLia 1030 LET z=f(x>: IF aUKO OR z
1500 LET ntt>)"laat; Fort <i laat
1

LOMI <KNTER> dez V»**»" SAUE z<u(2> THEN PRINT u[x)iW$(5);u


-I TO 1 BTEP -1
!

f5+-x" DATA Xt): FOR X-l TO (z) LET rk-falae


:

1040 NEXT a: IF ck-falae THEN l^O KOn d^l TO da: LET x^a(a).
101): NEXT X Q(í(*)X>d+l THEN COTO ISA
GOTO 1750 IF
510 SAUE tê*'»' DATA a[): SAUE
1050 LET e=l D
tS-»"e" DATA (): SAUE f3+"t" 1550 LET y^Ei(x): LET tlyl-tfx):
DATA f(l; ^AVE ÍS+"<r" DATA 0(1 1060 LET z=ete): IF a(z)<0 THEN
DATA n<): SAUE COSUB 400: IF e<-ee THEN GOT LET n(y) «d
SAUE E3+"tl"
:
1560 NEXT d: NEXT d
fS+"s" DATA 3(): SAUE íS*"t" O 1060
1070 LET e=e+l IF e< = ee THEN 1600 FOH a TO aa: LET g(a)-a(
DATA LO: SAUE 1 $+"u" DATA u()
I
:

GOTO 1.060 a): NEXT d: LET k-1: LET «R-MS


SAVE tS+"»S" DATA uS
;
I )
IK aa^l THEN LET k'-0
RETURN 1080 FOR e = l TO ee: LET z-e(e): IF
1610 LET rfk-lNT ak+k /2)
LET s(z)=0: LET f(z>=0: NEXT e [ ( ) :

600 LUAD tS+"x" DATA x(): LET ak=0 THEN COTO 1700
md*x{L): LET w>=X CZ) LET mh^x 1082 FOR a^l TO as: LET x-a(a):
1620 LET R»0: FOR a=ak+1 TO aa
:

(3) LET aa-x(4) LET ee"X(!i) ! LET a(£ (x) =x NEXT a )


:

LET y-
LET b-h-ak: LET x--q(J)
:
:

LET ck-xtb) LET ae>x(/) LET 1090 LET ae-0: FOR e=l TO ee L :
!

g(b): LETxe-ttX): LETyr--£(y)


: :

íp-x(8) COSUB 12 ET z-e{e): IF BÍ!t)>0 THEN COTO


:

LOAD 1096 1630 IF titye)+yn/z-/<=n(xe)*xe/z


610 LOAD t5+"a" DATA •() I
z THEN COTO 1660
fS+"e" DATA eO: LOAD ti**t" 109Z IF ae=0 THEN LET ae-z GO :

TO 1096 1640 LET g(a)*y: LET g(b)=X: LE


DATA ft): LOAD ÍS+"«" DATA g()
36 APLICAÇÕES 36

T k-1 5) NEXT e
) : 870 INPUT »-l.X:IF X>0 THEN U (X
1660 NEXT a: GOTO lblO 3220 FOR a-1 TO aa LET x==a(a): : )-ZZ+l:GOTO 870
1700 LET ck^true: RETURN LET y = y[x): LET y
(x) -VaL (t-JTR I 880 CLOSE |-1:RETURN
1750 LET ck=falae: PRINT AT 21. 3 (y/45*100)+" ") TO 4)) ( 890 GOSUB 1870:A-0:GOSUB 1030
8; "QUALQUER TECLA PARA CONTÍNUA 3230 IF ptxXl.e-2 THEN LET p[ 900 FOR A-1 TO AA X-A (A! GOSUB : :

R": PAUSE RETURN 0: x)-0 1000


2000 FOR a= TO da: LET x-a(a):
I
3240 LET z^ (45-y)+l.e-9: LET z( 910 Y=Y+1:IF Y>8 AND A<AA GOSUB
LET t(x)»t(x): NEXT a: GOSUB 2 x)=z íf (x) >-y (s(xí)-VAL (FN i$(t> 1020:GOSUB 1030
100 (x) /Z) 920 NEXT AiCOSUB 1020
2020 FOR a=l TO ms LET x-a(«}: 3250 LET q(x)=SGH ABS ( <q (x) -p 930 E=0:GOSUB 1050:FOR E-1 TO E
LET y (x) - (z (t (x) -y {a !x) = z{x)
)*100: NEXT d
> ) x)*p(x)/z) / (z-l) + t— 9) IF .j ( . ] ) :
E :X-E (E) PRINT »PR USING"
: . MiM
(x)<l.e-6 THEN LET q(x)"Q ";ABS(U(X)) :PRINT fPR.U$(X) ;

2030 FOR b=l TO aa STEP 5: Cts 3260 NEXT d: COTO 2U.10 940 ]f«Y+Í:XF Y>15 AND E<EE GOSU
: FOR a=b TO aa+FN a(b-M-aa): L B 1020:GOSUB 1050
ET x-d(d) 950 NEXT E:GOTO 1020
2040 PRINT ã3i" " ;u(x) " = " :uS
){ TO 16)
2050 LET c-y(3(x)l: LET d = z (£ (x
)): PRINT "pode iniciar ";ci".d
; U
Q
590 IF FSOAS THEN 680
960 CLS PRINT"TEM CERTEZA ?
/N) "
!

970 TS-INKEYS:IF TSO"S" AND TS


<>"N" THEN 970
|S

600 FOR B = l TO AA IF X=A(B) THE : 980 IF TS="N" THEN RETURN


2060 PRINT "tempo livre "id-c-í N A-B 990 CLS END :

[X)I- (critico ";y{x)i"í)": 1F 610 NEXT B:A(A)-A(AA) :U(X)=ZZ+1 1000 PRINT IPR.USING"|||tl tttt
t=12 THEN PRINT "degvio-" q (x) ;
AA-AA- 1 RETURN
: :
I lt*H tllll 1 » 1 « :

620 IF UIXKO GOSUB 1050:PRINT ,FNU(F (X) ,T(X) ,N(X) .A3S(U(X) )


)
20/0 PRINT NEXT a: GOSUB 940:
: USINGdilil ":ABS(U(X)) PRINT ; : :IF PR=0 THEN PRINT
NEXT b: RETURN US (X) GOTO 650 :
1010 PRINT #PR." " US (X) RETURN ; :

2100 FOR e=l TO ee: LET y(e(e)) 630 IF EE = ME THEN PRINT WS(2);F 1020 IF PR-0 THEN PRINT"<ENTER>
=0: NEXT e S RETURN : PARA CONTINUAR" INPUT FS:CLS:fl ;

2110 FOR a~l TO aa: LET X«a(a) 640 GOiJUB 660 ETURN ELSE RETURN
LET y(f{x) =y f (x) +FN z(y(3(x
} ( ) 650 PRINT WS(4) FS INPUT US(X): i : 1030 CLS:IF PR-0 OR A-0 THEN PR
) )-y (f (x) )*z(x) NEXT a- I S(X)*0:RETURN INT #PR. "INICIO ULTIMA VEZ 90

:

2120 FOR e = i TO ee LET z(e(e)I f 660 EE-EE+1:E(EE)-X:S(X) 1 F (X : í ATIVTDADE " Y-3 :

-y(te): NEXT e; FOR a=aa TO 1 S )-0:U(X) -U 1040 RETURN


TEP -1 LET x=g (a)
: 670 T(X)-0:N<X)-0:U$(X)«"":RETU 1050 CLS:IF PR-0 OR E-0 THEN PR
2130 LET z (3(x) )-z (s (x) )+FN a(z RN INT IPR." EVENTO TEXTO" Y-3 :

(f (x) )-z(s (x) )-z (x) NEXT d: R ) : 680 Z-X:FOR F-l TO EE IF E(F)-Z : 1060 RETURN
ETURN THEN E = F 1070 CK=TR FOR A-1 TO AA:X-A(A)
:

3000 FOR a=l TO aa: LET x=a(a): 690 NEXT F:E(E)=E(EE) :U(Z)-ZZ+1 1080 Z=S(X)-IF S(Z)<0 OR ZZ<U(Z
LET p{x)=0: LET q(x)=0: LET y( :EE=EE- 1 RETURN ; THEN PRINT AS;U(X) :WS(5) ;U(Z)
)

x)=0: NEXT a 700 Z-U-INT IU-1 /MH) *MH Y-2 X- ( ) : : : CK'FA


3020 FOR e-1 TO ee LET z=e(e): : 0 1090 Z-F(X):IF S{Z)<0 OR ZZ<U!Z
LET p(z)'0: LET qUXO: NEXT e 710 IF X-0 (O-U(Z) OR ZZ+1-U(Z) ) THEN PRINT AS U (X) WS 5) U (Z) ; ; ( ;

3030 FOR m-1 TO 43 STEP 3: FOR ) THEN X-Z :CK-FA


a--l TO aa: LET w(a)-2*ílND-l: NE 720 IF U-U(Z) THEN X=Z:RETURN 1100 NEXT A:IF CK=FA THEN 1540
XT a 730 IF Y=l OR 0-U(Z) THEN RETUH 1110 E-1
3040 FOR n=0 TO 4 STEP 2: CLS : N 1120 Z-E{E):IF SIZX0 GOSUB 680
PRINT "CASO » ";m+n/2;" EM 45" 740 Z=Z+Y-MH*INT (Z+Y-l) /MH) Y- ( : IF EOEE THEN 1120
:

3050 FOR a-1 TO aa: LET x-a(a): Y+Y~MH*INT( (Y+Y-l) /MH) GOTO 170 : 1130 E=E+1:IF E<=EE THEN 1120
LET Lx»t(x)> IF tx=0 THEN LET 750 OPEN "O" i-1 F3: PRINT *-l,M , , 1140 FOR E=l TO EE:Z-E(E) :S(Z)=
2 lx) -0 GOTO 3080
: A ME MH AA EE CK
; ; ; ; ; 0:F(Z)-0:NEXT E
3052 LET nx-n[x) TF nx-T.x THEN : 760 IF CK THEN PRINT*-1 SE FE , ; 1150 FOR A-1 TO AA:X-A(A) :S(F(X
LET z(x)--tx: GOTO 3080 770 FOR A-1 TO AA X-A (A) PRINT : : ))*X:NEXT A
3054 LET w FN w w d i-n/ 3 IF n( ( ) ) : #-l,X;U(X);S(X);F!X);T(X);N(X); 1160 SE-0:FOR E'l TO EE:Z=E(E):
X>-tx»3 THEN LET t (x)-n(x) * («< C(A) :U5(X) NEXT A : IF S(Z)>0 THEN 1190
tx/nxl OOTO 3OH0
: 780 FOR E = l TO EE Z-E (E) PRINTi : : 1170 IF SE-0 THEN SE=Z:GOTO 119
3060 IF RX>tx*2. 34 THEN LET z{ - ,2;U(Z) ;S(Z) ;F (Z) ;T(Z):N(Z) ;U
1 0
X)--lx'LN w: GOTO 3080 $(Z) NEXT E : 1180 PRINT W$<1) ;U(Z) IF SEÍ-MH :

JU/0 LET w-FN xíw-.b): LET z(x) 790 FOR X-l TO MH I F U(X)-ZZ+1 : THEN PRINT MS 11) U (SE) SE-MH + 1 ; :

-ABS Lx+w* (nx-tx)


( THEN PRINT #-l,X 1190 NEXT E:IF SE-0 THEN PRINT"
3080 NEXT a 800 BEXT X:PRINT|-1.0 TODOS OS EVENTOS TEM" PRINT AS; :

3090 nosua 2100 810 CLOSEt- 1 MOTORON FOR X-l TO : : "PRECEDENDO"


J100 FOR ,j-1 TO aa. LET x-a(a): 100:NEXT X MOTOROFF RETURN : : 1200 IF SE-0 OR SE>MH THEN 1540
LET z = z(t (x) -y {s [x> -z (s)
) 1
820 CLS:PRINT"SALVAR DADOS - er 1210 FOR E-1 TO EE:Z=E(E) :T(Z>-
3110 LET p(x)=p(x)+z: LET q(x!= ro:FOR K=l TO 1000:NEXT:RETURN D:N[Z)=0:NEXT E:T(SE)-1
q(x)+z*z: I.ET y(x) -y U> +(zvl .c- 830 OPEN"I" |-1 FS INPUT*-1 ,MA. , . : 1220 LA-l:FOR C=2 TO EE+2:IF LA
6) : NEXT a ME .MH AA EE CK GOSUB 20
. , . : OC-1 THEN 1280
3120 FOR e-1 TO ee: LET z = c (e) : 840 IF CK THEN INPUT |-1,SE.FE 1230 FOR A-1 TO AA:X=A(A) :Y-S(X
LET p (z ) -p (z ) +y ( z) LET q (z -q :
)
850 FOR A=l TO AA:INPUT i~l,X,U ):IF I(Y)OC-l THEN 1270
lz)+z(z): NEXT e: NEXT n: NEXT (X) ,S (X) ,F(X) ,T(X) ,N(X> .G(A) ,U$ 1240 IF Y-F(X) GOSUB 1330:C;OTO
(X) :A(A)-X:NEXT A 1270
3200 FOR e-1 TO ee LET z-e(e): r 660 FOR E-1 TO EE INPUT#-1 Z U : , . ( 1250 IF YOSE THEN Y>S(Y):GOTO
LET y(z}-VAL (FN IS(p(z)/45)) Z).S(Z),F(Z),T(Z),N(Z),U$(Z):E{ 1240
3210 LET z(z)=vAL (FN TS(q(z)/4 E) -Z:NEXT E 1260 Y-F(XÍ :S(Y) -S (X) :F (S(Y) - Y )
ms7
U EY ) ) -T
X(-
- . : )" :

36 APLICAÇÕES 36

):NEXT E FOR A- AA TO 1 Í!TEP-1:X ) ZZ -1 GOTO 640 :

:T(Y)-C:FE-Y:LA-C :

645 PRINT DO3"CL0SE "F9


1270 NEXT A -G(A)
1650 Z(S(X) )-Z(S(X) >+FNA(Z(F (X) 650 RETURN
1280 NEXT C:PRINT"EVENTO INICIA PRINT DOS"OPEN "FS
) -Z(S (X)
1
-Z(X) :NEXT A RETURN 700
L";U(SE);", EVENTO FINAL " , tf ) :

710 PRINT DOS"DELETE "FS


1660 GOSUB 1870:FOR A-l TO AA :

-A (A) :P(X!=0:Q(X)-0:YfX)-0:NEXT 720 PRINT DOS"CLOSE "FS


1290 FOR E-l TO EE:Y-E(E) 730 RETURN
1300 IF F(Y)-0 AND YOFE THEN P A
800 GOSUB 942
H1NT U(Y) ;"NAO CONECTADO AO EVE 1670 FOR E-l TO EE Z-E (E P (Z : ) :
1

0:Q(Z)-0:NEXT E 810 FOR A = 1 TO AA:X - A (A)


NTO FINAL" :CK-FA GOSUB 932
1310 NEXT E:IF CK THEN 1370 1660 FOR M=l TO 43 STEP 3 FOR A :

-1 TO AA:W(A)-2*RND(0)-1:NEXT A 820 Y - Y + 1 + ( LEN (US(X) > !

1320 GOTO 1540 12): IF Y > 20 AND (A < AA) TH


1330 CLS:CK-FA:PRINT"EXISTE O S 1690 FOR N-0 TO 4 STEP 2:CLS:PR
INT"CASO";M+N/2:" EM 45" EN GOSUB 940: GOSUB 942
EGUINTE LOOP":PRINT"EVENTOS ... 630 NEXT A: GOSUB 940: PRINT
"
" :XA"A(A) 1700 FOR A-l TO AA X-A (A) TX-T : :

X):IF TX-0 THEN Z(X)-0:GOTO 175 EVENTOS" Y = 3 :

1340 X=F(XA) PRINT U(X) :Y=S(XA) :


840 FOR E = 1 TO EE:X = E(E):X
:PRINT U{Y) D
1710 NX=N(X):IF NX-TX THEN Z(X) P = U(X): GOSUB 950: PRINT US(X
1350 Y-S(Y):PRINT U(Y):IF YOX
THEN 1350 -TX:GOTO 1750 )

1720 W-FNW(W(A)+N/3> IF NX>-TX* 850 Y = Y + 1 + (LEN (US (X) > )


1360 FOR X-l TO 1 000 NEXT HETUH ; :
:

12): IF Y > 20 AND E < EE THEN


3 THEN Z(X)— NX«(W<TX/NX) :GOTO
1750 GOSUB 94 0: GOSUB 946
1370 K-1:AK-AA:IF AA-1 THEN K=0 860 NEXT E GOTO 940
1380 AK-INTI (AK+K1/2) IF AK=0 T 1730 IF NX>TX*2.34 THEN Z(X)—
!

INPUT "REINICIA O PROGRAMA


:

X*LOG(W) :GOTO 1750 900


HEN 1430 (S/N) ? ";ANS: IF LEFTS (ANS.l
1390 K-0:FOR A-AK+1 TO AA:B-A-A 1740 W-FNX(W-.5) Z (X) -ABS (TX+W* :

(NX-TX) ) = "N" THEN 50


K:X-A(A) :Y-AÍB) iXE-SÍX) :YE*SÍ5M 910 IF ANS < > "3" THEN 9D0
1400 IF T(YE)+YE/ZZ<-XE/ZZt-T(XE 1750 NEXT A
92 0 RUN
THEN 1420 1760 GOSUB 1620
)
932 XP = FN UíS(X)>: GOSUB 950
1410 A(A)=Y:A(B)=X:K=1 1770 FOR A-l TO AA X-A (A) Z-Z F :

FN U(F(X)): GOSUB 950:XP


: (

:XP =
1420 NEXT A:GOTO 1 360 (X) )-YÍS(X) -Z (X)
)

= T(X): GOSUB 950:XP - N (X)


1430 N (FE -LA FOR D-LA-1 TO 1 8 ) 1780 P(X)=P(X)«-Z:Q(X)-Q(X1+Z*Z:
933 GOSUB 950:XP = ABS (U (X)
:

TEP-1 Y (X = Y (X) * (Z<]E-6) NEXT A


) :

1790 FOR E-l TO EE Z-E (E GOSUB 950


1440 FOR A-l TO AA;X-A(A):IF N( P (Z) :
: ) :

935 PRINT PRINT "TEXTO = " iU


p(z)+y(z) :q (z) -q{2) +2 (2) :next e
:

F[X))OD+l THEN 1460 RETURN


S (X) :
1450 Y-S(X) :F(Y)-FÍX) :N(Y)-D .n,m
940 IF KK5 < > "S" THEN PRIN
1460 NEXT A NEXT D 1600 FOR E-l TO EE Z- E E) Y Z) : ( : (

T "<RETURN> PARA CONTINUAR" : I


:
;

1470 FOR A-l TO AA: G (A) -A A) NE [ : VAL LEFTS (STRS P Z 745) .6)
( ( ( )
RETURN
1810 Z(ZJ-VAL(LEFT3(STRS!Q(Z)/4 NPUT FS: HOME
XT A:K-1 :AK-AA: IF AA-1 THEN K=0
:

941 RETURN
1480 AK-INTf (AK+K) /2) IF AK-0 T : 5) .6)) NEXT E :

HOME PRINT "ATIVIDADES :

1820 FOR A-l TO AA X-A Al Y-Y (X 94 2 :

HEN 1530 : ( :

943 PRINT "—EVENTOS-- TEMP


1490 K-0: FOR A-AK+1 TO AA B-A- :
) :Y(X)'-VAL(LEFTS(STRS(Y/45*100
AK:X-G(A) :Y-G(B) :XE-F(X) YE-F !
.4)
PRINT "FINAL INICI PROVL E
:
1 )
944
1830 IF P(X)<lE-2 THEN P(X)-0
)

1500 IF N(YE)+¥E/ZZ<-XE/ZZ*-N(XE 1840 Z-45-Y+. 1E-9:Z(X) =Z (F (X) > STIM CODIGO":Y - 3: RETURN
950 XPS = LEFTS STRS (XP) + (
THEN 1520 Y (S (X) -VAL (LEFTS (STRS (P (X) /Z)
)
)
-.61: PRINT XPS;: RETURN
1510 C(B)-X:G(A)-Y:K=1 6) )

1520 NEXT A:GOTO 1480 1850 Q(X) -SQRIABS ((í (X)-P(X) *P( (
PRINT "SAÍDA P/ IMP
960 HOME :

1530 CK-TR RETURN : X)/Z)/( (Z-l + .1E-9) )) :IF Q(X)- J J


RESSORA (S/N) 7"
1540 CK"FA FOR X-l TO 1000:NEXT : E-6 THEN Q (X) =0
> "N" A
970 GET KKS: I F KKS <
.

X RETURN 1860 NEXT A:GOTO 1570


ND KKS < > "S" THEN 970
:

1550 GOSUB 1870:FOR A-l TO AA X .


1870 IF(PEEK(65314)AND1)-1 THEN
980 RETURN
-AIA) Z (X) -T (X) NEXT A GOSUB 16
: : : RETURN ELSE CLS PRINT"TELA OU TO AA:X A-l
1000 CK - TR FOR
:

IMPRESSORA (T/I) ?"


:

20 = A (A)
1560 FOR A=l TO AA:X-A(A) :¥(X)- 1880 QS = INKEYS:IF QSO"T" AND Q IF S(XE) < 0 OR
1020 XE - S(X)
(Z(F (X) >-Y(S(X) -2(X) "100.NEX
:
- ) )
SO"I" THEN 1680 ZZ < U(XE) THEN PRINT U(X);WS
T A 1890 IF QS="I" THEN PR--2
(5) :U(XE) :CK = FA
1570 FOR B-l TO AA STEP 3:CLS:F 1900 CLS RETURN :

IF S(Z) < D OR Z
1030 Z = F(X) :

OH A-B TO AA+FNA{B+2-AA) :X=A(Ai PRINT U(X):WS(5)


Z < U(Z) THEN
1580 PRINTIPR. AS;UtX) ;"-":US(Xl
;U(2) :CK = FA
1590 C-Y(SIX) :D=Z(F (X) :PR1NT )
1040 NEXT A: IF (CK = FA) THEN
)

IPR."PODE INICIAR" C: "DEVE TERM ;

600 HOME PRINT DOS"OPEN "FS 1750


IN AR" ;D :

605 PRINT DOS "READ "FS 1050 E = 1


1600 PRINTIPR "TEMPO LIVRE" INT
.

1060 X = E(E): IF S(X) < 0 THEN


;

(100" (D-C-Z(X) /100 " (CRITICO" ;


610 INPUT MA, ME .MH AA EE CK G . , . ;
) )

OSUB 12 GOSUB 400: IF E < = FE THEN


Y (X) ;"»)": IF T-9 THEN PRINTIPR
;

615 INPUT SE, FE


IF CK THEN 1060
,USING"DESVIO = MII II" ;Q(X) -
1070 E - E + 1: IF E < - EE TH
1610 PRINTIPR NEXT A:G05UB 1020 :
620 FOR A = 1 TO AA
625 INPUT X.U(X) ,S(X) ,F(X) ,T{X EN 1060
NEXT B RETURN
; :

1080 FOR E-l


TO EE:X - E(E)
1620 F^R E-l TO EE Y Ê (E '0 NE (
)
),N<X) ,C(A) ,US(X) :A(A) - X: NEX
S(X) = 0:F(X) = 0: NEXT E
: ) :

XT E T A
630 FOR E = 1 TO EE 1082 FOR A 1 1 TO AA:X = AIA):
1630 FOR A-l TO AA X-A A) í F [X : í ; (
S(F(X) = X: NEXT A
-Y (F (X) )+FNZ{Y(S(X))-Y(F(X) i+
) 635 TNPUT X,U(X) .S(X) F (X) ,T(X .
1
1

,N(X) .US(X) ;E(E) - X: NEXT E 1090 SE = 0: FOR E = 1 TO EE:X


Z(X) NEXT A ) :
)
- ElE): IF StX) > 0 THEN 1096
. 1640 FOR E-l TO EE: Z(E(E) -Y (FE ) 640 INPUT X: IF X > 0 THEN U(X
36 APLICACÔÍS 36

1092 1F SE - 0 THEN SE - X: GO 1700 CK TR RETURN :


3200 FOR E = 1 TO EE:X = E(E):
TO 1096 1750 CK - FA: TNPUT "TECLE <RET Y(X) = VAL ( LEFTS STRS ÍP (X (
1094 PRINT WS(1) ;U(X) IF SE < : URN>" HGS RETURN : I
) / 45) ,6)
= MH THEN PRINT H5[l) ;U(SE! 2000 FOR A = 1 TO AA X - A (A) : 3210 Z(X) - VAL LEFTS STRS ( (

SE - MH 1 Z(Xi - T(X): NEXT A: GOSUB 2100 (Q(X>


/ 45) ,6) NEXT E ) :

1096 NEXT E: IF SE 0 THEN P 2020 FOR A - 1 TO AA:X - A (A) 3220 FOR A - 1 TO AA X - A (A) :

RI NT "TODOS EVENTOS TEM ";AS;" Y(X) = (Z(F(X)l - Y(S(X)) = Z(X Y Y(X):Y(X) = - VAL
= LEFTS (
PRECEDENDO" )) * 100: NEXT A: GOSUB 2100 STRS (Y / 45 * 100) ,4)
(

1098 IF SE = 0 OB (SE > MH) TH 2030 FOR B = 1 TO AA STEP 5: H 3230 IF P (X) < 1 E - 2 THEN P( .

EN 1750
3100 FOR E
T[X) = 0:N(X)
M =
TO EE:X = E{E):
0: NEXT E:T(SE)
OME
+ 4
FOR A = B TO AA + FN A (B

2040 PRINT
:

- AA) : X
:
= A (A)
PRINT AS:U(X)i" =
X)
3240 Z - (45 - Y) + .1E - 9:1
l
- Z(FIXÍ) - Y(SOO) - VAL
- 1 " :U5(X)
LEFTS STRS (f(X) / Z),6)) (
1110 LA = 1: FOH C - 2 TO EE + 2050 C = Y(S(X) :D = Z(F (X) ) 3250 Q(XI = SOR (Q(X> - 1M> (

2: IF LA < > C - 1 THEN 1170 2055 PRINT " PODE INICIAR IN • P(X) I Z) / (Z - 1) .1E (
1120 FOR A = ] TO AA:X = A (A) I T (C * 100) / 100;", DEVE TERMI 9) IF (XX) < l.E - 6 li.l-.N t
) :

Y S(X> IF T(Y) < > C - 1 TH| NAR " INT (D * 100) / 100 ) - 0
EN 1160 2060 PRINT "TEMPO LIVRE - ": I 3260 NEXT A: GOTO 2030
1130 IF Y = F(X) THEN GOSUB 1 NT (D - C - Z(X)) * 100) / 100
(

200: GOTO 1160 !" ("; INT (Y[X) * 100) / 100;


1140 IF (Y <
(Y) GOTO 1130
> SE) THEN Y - S
:
"t CRITICO)"
2065 IF T - 12 THEN PRINT "DE
mi
1150 Y - F(X):S(Y) - S(X):F(S(Y SVIO - "i INT (Q(X) * 100) / 10 590 IF FSOAS THEN 680
) = Y:T(Y) = C:FE - Y LA - C
) : 0: 600 FOR B-l TO AA IF X=A(B) THE :

1160 NEXT A 2070 PRINT NEXT Ai HOSUB 940: N A-B


1170 NEXT C: PR TNT "EVENTO INI : NEXT B: RETURN 610 NEXT B A (A) »A (AA) U (X) -ZZ + 1 : :

CIAL »";U(SE):". EVENTO FINAL - 2100 FOR E = 1 TO EE Y (t! E) r ( ) :AA-AA-1 RETURN :

iU(FE) 0 : NEXT E 620 IF UÍXX0 GOSUB 1050:PRINT


1180 FOR E = 1 TO EE Y - E(E) : 2110 FOR A - 1 TO AA X - A(A): : USINGtMM* " rABSUJ (X) PRINT ) ; :

1190 IF F(Y) - O AND (Y < > F Y(F(X)) - Y(F(X)) + FN Z(Y(S(X US(X) :GOTO 650
E) THEN PRINT U(Y);"NAO CONECT - Y(F(X)
) ) + Z(X) NEXT A ) ) : 630 IF EE-ME THEN PRINT US(2);F
ADO AO EVENTO FINAL" CK - FA : 2120 FOR E 1 TO EE:Z(E{E)) - S: RETURN
1192 NEXT E IF CK THEN 1300 : Y (FE) NEXT E: FOR A - AA TO 1
:
640 GOSUB 660
1194 GOTO 1750 STEP - 1 :X = G (A) 650 PRINT WSI4) ;FS:INPUT US (X) :

1200 HOME PRINT "EXISTE O SE ! 2130 Z(S(X)) = Z(S(X)) + FN A( S(X)=0:RETURN


GUINTE LOOP
" XA - A(A)
PRINT "EVENTOS . ZÍF(X)) - Z(S(X)1 - Z(X)): NEXT 660 EE-EE + 1:E(EE)=X:S[X1 1:F(X —
: A: RETURN )=0:U(X)-U
1210 X = F(XA): PRINT U(X)rY - 3000 FOR A = 1 TO AA X = A A) : ( : 670 T(X)-0:N(X)»0.US(X>-"":RETU
S(XA) PRINT U(Yi : P(X) = 0:Q.(X) = 0:Y(X) - 0: NEX RN
1220 Y S(Y): PRINT U(Y): IF Y T A 680 Z«X:FOR F-l TO EE IF E(F)~2 :

< > X THEN 1220 3020 FOR E * 1 TO EE:X - E(E): THEN E=F
12 30 RETURN P(X> = 0:Q(X) - 0: NEXT E 690 NEXT F: E (E) -E (EE) :U ÍZ) -2Z+1
1300 K - 1:AK - AA: IF AA = 1 T 3030 FOR M 1 TO 43 STEP 3: F :EE=EE-1:RETURN
HEN K = 0 OR A = l TO AA:U(A) - 2 • RN 700 Z-U-INT( (U-l) /MH) «MH: Y-2 :X-
13)0 AK - INT ( (AK K) / 2) (1) - 1 NEXT A :
0
I F AK - 0 THEN 1500 3040 FOR N - 0 TO 4 STEP 2: HO 710 IF X-0 (O-U(Z) OR ZZ+l-UIZ)
1320 K - 0: FOR A » AK + 1 TO A PRINT "CASO i";M + N / 2;" ) THEN X-Z
A B - A - AK:X
: A(A):Y = A B < ) : /45' 720 IF U-U(Z) THEN X«Z:RETURN
XE = S(X) YE - S(Y) : 3050 FOR A - 1 TO AA X ' A (A) : 730 IF Y-l OR 0=U(Z) THEN RE TUR
1330 IF T YE) + YE / ZZ < - T ( TX T(X): IF TX 0 THEN Z (X) N
(XE) + XE / ZZ THEN 1360 • 0: GOTO 3080 740 Z-Z+Y-MH*INT({Z+Y-1)/MH) :Y=
1340 A (A) - Y A (B) = X:K = 1 : 3052 NX - N(X) IF (NX - TX) TH : Y+Y-MH*INT( (Y+Y-l) /MH) :GOTO 170
1360 NEXT A: GOTO 1310 EN ZIX) - TX: GOTO 3080 750 OPEN "CAS:"+FS FOR OUTPUT A
1500 N (FE) = LA: FOR D LA - 1 3054 W = FN W(W(A) + N / 3) 1 : S »3
TO 1 STEP - 1 F NX > = TX * 3 THEN Z(X) - NX 755 PRINTI3, MAZSMEZSMHZSAAZSEE
1520 FOR A - 1 TO AA:X = A (A) * (W < TX / NX) GOTO 30B0 : ZSEEZSCKZS
1 F N F X < > D * 1 THEN 156
( ( > ) 3060 IF NX > TX * 2.34 THEN Z( 760 IF CK THEN PRINTI 3 SEZSFE .

X) = - TX * LOG (W) GOTO 308 : 770 FOR A-l TO AA X-A (A) PRINT : :

1550 Y S(X) :F(Y) - F(X) :N(Y) 0 13. X ZSU (X) ZSS (X) ZSF (X) ZST(X) ZS
:

3070 W = FN X (W - 5) Z (X) = . :
NIX)ZSG(A)ZSUSÍX) NEXT A :

1560 NEXT A. ABS (TX + W * (NX - TX) 780 FOR E = l TO EE Z = E E) PRINT» : ( :

1600 FOR A 1 TO AA G (A) - A( - : 30B0 NEXT A 3 .Z ZSUIZ) ZSS (Z) ZSF (Z) ZST (Z) ZSN
;

A): NEXT A: K - 1:AK - AA: IF AA 3090 GOSUB 2100 (Z)ZSUS(Z) NEXT E :

- THEN K = 0 1 3100 FOR A = 1 TO AA X - A (A) : 790 FOR X-l TO MH IF U(X)-ZZ+1 :

IMO AK = INT (AK + K) / 2) ( : Z - Z(f(X) - Y !S (X) ) - Z<X) ) THEN PRINT 13.


IF AK " 0 THEN 1700 3110 P(X) - P(X) + Z:Q(X) - Q(X 300 BEXT X:PRINT|3,0
1620 K « 0: FOR A AK + 1 TO A ) + Z • Z:Y(X) - Y(X) - (Z < 1. 810 CLOSEI3:MOTORON:FOR X=l TO
A B = A - AK:X = G(A]:Y
: G<B) : E - 6) NEXT A : 100:NEXT X :MOTOROFF RETURN :

XE F (X) YE - F(Y) : 3120 FOR E = 1 TO EE:X = E(E): 820 CLS PRINT"SALVAR DADOS - er :

1630 IF N (YE) + YE / ZZ < * N P(X) - P(X) + Y(X) :Q(X) - Q(X) ru:FOR K"l TO 1000 NEXT RETURN : !

(XE) + XE / ZZ THEN 1660 + Z(X) NEXT E.N.M : 830 OPEN "CAS:"+FS FOR INPUT AS
1650 G(B) - X:G(A) - Y:K - 1 3125 IF KKS = "S" THEN PRINT l.l:INPUT I3.MA.ME.MH.AA.EE.CK:
lb60 NEXT A: GOTO 1610 DO$"PRI 1" GOSUB 20
36 ARLKACÕIS 36
1
.

1230 FOR A-l TO AA X-A A) Y-S (X NEXT B RETURN


840 IF CK THEN INPUT I3.SE.FE ( : : :
:

1620 FOR E=l TO EE Y E E) )


-0 NE
850 FOR A=l TO AA: INPUT I3,X,U( ):IF T(I)OC-l THEN 1270 : ( I
!

X) .S(X) ,F<X) .T{X) .NIX) .GfA) ,U$( 1240 IF Y-FÍX) GOSUB 1330:GOTO
1270 1630 FOR A-l TO AA: X=A (A) Y (F (X i

X) :A(A)-X:NEXT A )-Y !F (X) )+FNZ(Y (S (X) )-Y(F(X) )+


860 FOR E-l TO EE INPUT* 3 Z U . . ( 1250 IF YOSE THEN Y-S(Y):GOTO )
:

1240 Z X NEXT A )

l.S(Z).F(Z) ,T(Z).N(Z),US(Z):E{E
( ) '

=Y 1640 FOR E-l TO EE Z (E (E =Y FE )


Y = F (X) :S(Y)-S :F(S(Y) (

)-Z:NEXT E 1260 (X) ) : )

:T(Y)=C:FE-Y:LA=C :NEXT E FOR A=AA TO 1 STEP"1:X


870 INPUT |3.X:IF X>0 THEN U(X)
) :

= ZZ + 1 :GOTO 870 1270 NEXT A G (A)


(S (X) )+FNA{Z<F (X)
1280 NEXT C:PRINT"EVENTO INICIA 1650 Z(S(X) )=Z i

880 CLOSE *3:RETURN )-Z(S(X))-Z(X)); NEXT A RETURN


890 GOSUB 1B70:A-0:GOSUB 1030 L";U(SE);", EVENTO FINAL " ; U ( FE :

1660 GOSUB 1B70:FOR A=l TO AA:X


900 FOR A=l TO AA:X-A(A) :G0SU8 )

1290 FOR E=l TO EE Y= E E) =A(A) :P(X)=0:Q(X)-0:Y(X)-0:NEXT


1000 : (

910 Í*Í+1:IF Y>8 AND A< AA GOSUB 1300 IF F(Y)-0 AND YOFE THLN P A
BI NTU(Y);"NAO CONECTADO AO EVE 1670 FOR E-l TO EE Z-E : (E) : P (Z) =
1020:GOSUB 1030
NTO FINAL" CK-FA 0:Q(Z)-0:NEXT E
920 NEXT A:GOSUB 1020 :

1310 NEXT E:IF CK THEN 1370 1680 FOR M=l TO 43 STEP 3 FOR A :

930 E=0;GOSUB 1050:FOR E=l TO E -1 TO AA:W(A)-2*RND(0)-1:NEXT A


E:X=E!E) :PRINT t PR USINO" I t I I 1320 GOTO 1540
1330 CLS:CK=FA:PRINT"EXISTE OK 1690 FOR N = 0 TO 4 STEP 2:CLS:PR
.

" ;ABS (U<X) :PRINT IPR,US(X)


) ,
45"
EGUINTE LOOP":PRINT"EVENTOS ... INT"CASO";M+N/2;" EM
940 Y-X+1:IF Y>15 AND E<EE GOSU
B 1020:GOSUB 1050
" :XA-A(A) 1700 FOR A-l TO AA X-A (A) TX-T : :

950 NEXT E-GOTO 1020 1340 X=F(XA) :PRINT U(X) ;Y-S(XA) X):IF TX-=0 THEN Z(X)=Q:GOTO 175
960 CLE PRINT"TEM CERTEZA ? (S :PRINT U(Y) 0
1350 Y-S(Y):PRINT U(Y):IF YOX 1710 NX=N(X) :IF NX-TX THEN Z (X)
:

"
/N)
970 T$-INKEY$:IF T$< AND TS THEN 1350 -TX:GOTO 1750
O-N" THEN 970 1360 FOR X-l TO 1000:NEXT:RETUR 1720 W=FNW!U(A)+N/3) :IF NX>-TX«
980 IF TS="N" THEN RE TU RN N 3 THEN Z (X) NX* (U<TX/NX) GOTO — :

990 CLE END 1370 K-1:AK=AA:IF AA=1 THEN K-0 1750


1730 IF NX>TX*2.34 THEN Z(X)—
:

1000 PR NT tPR.USING~l*lll «Ml


1
1380 AK= INT (AK+K) 72 IF AK-0 T ( ) :

#MI»":FNUÍSÍX)} HEN 1430 X*LOG(W) :GOTO 1750


f 1IIM llllt
,FNU(FiX) T (X) N (X .ABS(UIX)
1 . . ) ) 1390 K-0:FOR A-AK+1 TO AA B=A - A : 1740 U-FNX(U-.5> Z (X) =ABS (TX+W* :

:IF PR=0 THEN PRINT K:X=A(A) :Y-A(B) :XE-S(X) :YE=S(Y) (NX-TX)


1010 PRINT IPR," " US (X RETURN ; ) :
1400 IF T(YE)+YE/ZZOXE/ZZ+T(XE 1750 NEXT A
1020 IF PR-1 THEN PRINT "< ENTEH> ) THEN 1420 1760 GOSUB 1620
PARA CONTINUAR" INPUT F$:CLS:R :
1410 A{A)=Y:A(B)=X:K-1 1770 FOR A-l TO AA X=A (A) Z-Z [F ; :

1420 NEXT A:G0T0 1380 (X) -Y (S(X) -Z(X) ) )


ETURN ELSE RETURN
1030 CLS:IF PR = 1 OR A-0 THEN PR 1430 N (FE) -LA FOR D-LA-1 TO 1 S : 1780 P(X)=P(X)+Z:Q(X)=Q(X)+Z*Z:
1NT |PR. "INICIO ULTIMA VEZ 90 TEP-1 Y(X)=Y(X)+(Z<lE-6) NEXT A :

t ATIVIDADE" :Y'3 1440 FOR A-l TO AA:X-A(A):IF N( 1790 FOR E=l TO EE Z-E E P (Z : ( ) :
J

1040 RETURN F(X)K>D+1 THEN 1460 P(Z)+Y(Z) :Q!Z)=Q(Z)+Z(Z) :NEXT E


1050 CLS:IF PR-1 OP. E = 0 THEN PR 1450 Y-S(X) :F(Y)-F(X) :N[Y)=D N M
. .

INT IPR." EVENTO TEXTO" Y = 3 :


1460 NEXT A NEXT D : 1800 FOR E-l TO EE Z = E (E) Y (Z) = : :

1060 RETURN 1470 FOR A-l TO AA G A) =A (A) NE : í :


VAL (LEFTS (STRS (P(Z) 7451 .6)
1070 CK-TR FOR A-l TO AA:X-A(A)
:
XT A:K-1:AK-AA:IF AA-1 THEN K-0 1810 Z(Z)=VAL(LEFTS(STRS(Q(Z!74
1080 Z-S{X):IF S(Z)<0 OR ZZ<U!Z 1480 AK-INT (AK+K) 72) IF AK-0 T ( :
5) .6) NEXT E ) :

) THEN PRINT AS;U(X) :WS(5) ;U(Z) HEN 1530 1820 FOR A=l TO AA X=A (A) Y= Y (X : :

: CK-FA 1490 K=0: FOR A-AK+1 TO AA B-A- :


)
:Y(X)=-VAL(LEFTS(STRS(Y/45*100
1090 Z-F(X1:IF SIZK0 OR ZZ<U(Z AK:X=G(A) :Y=G(B) :XE-F!X1 YE-F (Y :
) .4) )

} THEN PRINT AS U (X) WS 5 U (Z) r ; ( ) ; ) 1830 IF PIXK1E-2 THEN P (X) -0


:CK-FA 1500 IF N(YE)+YE/ZZOXE/ZZ+N(XE 1840 Z=45-Y+.1E-9;Z(X)-Z(F(X))-
1100 NEXT A:IF CK-FA THEN 1540 ) THEN 1520 -VAL (LEFTS (STRS (P (X) 7Z)
Y (S (X) )
,

1110 E-l 1510 G(B)-X:G<A)-Y:K=1 6) )

1120 Z=E{E,):IF SÍZK0 GOSUB 680 1520 NEXT A:GOTO 1480 1850 Q(X)=SQR(ABS((Q(X)-P(X)*P{
1530 CK-TR: RETURN X) /Z)/ (Z-D + 1E-9) :IF 0(X)<1
:IF E<-EE THEN 1120 ( . ) )

1130 E-E*1:IF E<-EE THEN 1120 1540 CK-FA FOR X=l TO 1000:NEXT
: .E-6 THEN Q(X)-0
1140 FOR E-l TO EE:Z-EÍE) :S(Z>- RETURN
X : 1860 NEXT A:GOTO 1570
0:F(Z)-0:NEXT E 1550 GOSUB 1870:FOR A-l TO AA:X 1870 CLS PRINT "TELA OU IMPRESSO :

1150 FOR A-l TO AA:X=A[A) :S(F(X -A ÍA) 2 (X) "T (X) :NEXT A GOSUB 16
: :
RA (T7D ?"
))=X:NEXT A 20 1880 QS = INKEYS:IF QSO"T" AND Q
1160 SE=0:FOR E=l TO EE:Z-E(E): 1560 FOR A-l TO AA: X-A (A) : Y (X) $<>"I" THEN 1880
IF S (Z) >0 THEN 1190 -(Z{F(X))-Y(S(X))=Z(X))*100:NEX 1890 IF QS="I" THEN PR»2
1170 IF SE=0 THEN SE-Z:GOTO 119 T A 1900 CLS: RETURN
0 1570 FOR B-l TO AA STEP 3 CLS F : :

1180 PRINT WSU) ;U(Z) :IF SEC-MH OR A=B TO AA+FNA (B+2-AA) X=A (A) :
Se você lem um acionador de disque-
THEN PRINT W$ (1 U (SE) SE = MH + 1 ) ; : 1580 PRINTIPR, AS;U(X) ;"=":US(X) te acoplado ao seu MSX. proceda às se-
1190 NEXT E:IF SE-0 THEN PRINT" 1590 C=Y (S (X) ) D=Z ( F (X) PRINT : ) :

guintes modificações:
TODOS OS EVENTOS TEM" PRINT AS; :
#PR."PODE INICIAR"iC;"DEVE TERM
"PRECEDENDO" INAR" ;D
1600 PRINTIPR "TEMPO LIVRE" INT
.
750 OPEN "A:"+F$ FOR OUTPUT AS
1200 IF SE-0 OR SE>MH THEN 1540 ;

(100* (D-C-Z(X) / 1 0 0 " (CRITICO" 13


1210 FOR E=l TO EE :Z-E (E) :T CZ) ) ) i

Y (X) **} " IF T = 9 THEN PRINTIPR 830 OPEN "A:"+FS FOR INPUT ASI3
0 N (Zl "0 NEXT E:T(SE)-1 ; : :

INPUTI 3 MA ME MH AA E E CK GOSU
: :

1220 LA-l:FOR C-2 TO EE+2 IF LA :


,USING"DESVIO=l*l* It" ;Q(X) -
: . , . , . . :

1610 PRINTIPR NEXT A:GOSUB 1020 B 20


m OC-1 THEN 1280 :
37 APLICAÇÕES 37

UM INDEXADOS USOS DO PROGRAM A


BUSCA E SUBSTITUI ÇÃO
DE CARACTERES '

DE PROGRAMAS BUSCA DE UM STRING OU


DE UMA PALAVRA-CHAVE

0 utilitário que apresentamos neste Outra aplicação de grande utilidade pontos em que a variável se encontra à
consiste na localização de erros em um esquerda de um sinal de igual. Quando
artigo localiza e substitui qualquer programa. Suponhamos que você des- o programa é complexo, a tarefa torna-
palavra ou comando em programas BASIC. cubra que uma variável está recebendo se muito desgastante e é provável que ve-

Com ele, os usuários do Spectrum e do


valores errados em algum lugar do pro- nham a ocorrer alguns enganos. O in-
grama. O processo normal seria percor- dexador executa o mesmo trabalho, com
TRS-Color economizarão esforço e tempo. rer linha por linha, checando todos os exatidão, em pouquíssimo tempo.

Como lodos os utilitários, o progra-


ma de referencia cruzada fornecido nes-
te artigo não faz nada sozinho: é empre-
gado como uma ferramenta para desen-
volver outros programas. Escrito em có-
digo de máquina, pode ser carregado na
memória do computador junto ao pro-
grama em BASIC ali residente. O utili-
tário permanece na memória RAM até
que o computador seja desligado. As-
sim, é possível utilizá-lo repetidamente,
sempre que for necessário.
O programa de referência cruzada,
ou indexador, funciona como um "ca-
çador". Muitas vezes, ao desenvolver
um programa em BASIC, precisamos
localizar palavras, comandos, funções,
cadeias de caracteres ou números escri-
tos em algum ponto da listagem. Depen-
dendo do tamanho do programa, a ta-
refa é bastante morosa e cansativa. Mas,
se você informar ao programa aquilo
que está procurando, em um "piscar de
olhos" ele percorrerá toda a listagem e 10 IF(CK>THENI
imprimirá as linhas em que se encon-
tram os caracteres procurados.
O indexador oferece uma alternativa $$jpFOR A= 1 TO X x :
ainda mais interessante: a substituição
de uma cadeia de caracteres por outra.
Se você quiser, por exemplo, trocar os
640 FORE=lTOEE:
PRINT de um programa por LPRINT,
ele passará a enviar todas as saídas de
650 INPUT#-1,X:
tela para a impressora. O indexador
também se encarrega de buscar e subs-
tituir variáveis no programa, dispensan-
660 CLOSE#-l:RE
do o uso do comando EDIT.
Quando se pretende fazer a adapta-
700 SKIPFF$:RET
ção de um programa para determinado
computador, o indexador mostra-se um
valioso auxiliar. Não só a tradução de
800 G0SUB942
uma versão de BASIC para outra fica
muito mais fácil (por exemplo, trocar
810 FORA=lTOXX :
cada comando HOME, do Apple, por
CLS), como o fluxo lógico do progra-
ma torna-se mais compreensível, já que
820 Y=Y+1-ÍLEN<
é possível listar todas as ocorrências das
instruções GOTO e GOSUB.
830 NEXTA:80SLIB
r . . ,

37 APLICAÇÕES 37

BOPDER 0: INK
10 CLEAR 64559: 250 DATA 64.255,17.65.255.205.
PAPER 0: CLS
7: 3,253.42,83.92,126,254,64.208,
INVERSE 1;AT 0,10;"
20 PRINT 17.2003
INDEXADOR " 260 DATA 4,0.25,126.254,13.32.
O indexado: pata o Spectrum c par- 30 PBINT •'-»'" Inoerindo em c 3 35 24 240 254 34 32 9 35
, , , . , , , ,

e do programa maior de fei ramentas, 1120 Wk


odigo de maquina. Prepare o c
listado no artigo da página 1281 Enire- 270 DATA 1.0.0,237,177.126.24,
aasete para gravar."
.

^ler usado de forma in- 40 LET L-9Q: RESTORE L FOR N :


243.205,179,252.56.3,35.24,227
você preferir. O progra- =64560 TO 65341 STEP 16 ,1789
de uma rotina curta de 50 LET T=0 FOR D=0 TO 15:
:
280 DATA 58,63,255,79.58,64.
seguida por código de READ A: POKE N+D.A: LET T=T+A 255,145.56.25,40,8.79,6,0.229.
máquina em linhas DATA. Digite o pro- NEXT D :
1420
grarro em BASIC, armazene-o emjfjta 60 READ A: IF AOT THEN 290 DATA 205,85,22.225,58.64.
PRINT FLASH 1 " ERRO DE CHEC
;
255.17,65.255.79.6,0.235,237,
com SAVE e execute-o com RUN. Ele 176, 19B4
próprio se encarregará de gravar uma fi- KSUM NA LINHA "il.:"!": PRINT
"VALOR ESPERADO ";A;" VALOR 300 DATA 235. 24.192. 237 ,6B, 79,
ta com o código de máquina criado. 6,0.229,205.232.25,225,24,229.
O programa que você realmente uti- ATUAL ";T: STOP
70 LET L-L+10 NEXT ti 62,2072
lizará é essa versão em código de máqui-
:

80 PRINT AT 18,0; "QUALQUER TE 310 DATA 13,205.48,252.17,85.


na. Para carregá-la, digite: CLA PARA COMEÇAR A ORAVAR" 255,33,63.255,205,3,253.33,150
85 LET AS=INKEXS: 1F AS="" .0,1870
THEN GOTO 85 320 DATA 27.235.203.254,235.1,
87 SAVE " CREF"CGDE 64560 ,832 165.90.197.205.179.252,56.13.
Você poderá carregar o programa em* 88 STOP
' 35.203,2350
código antes ou depois de ler colocado 90 DATA 203.39,95,22.0,221,33 330 DATA 126,35.40.251,193,12.
um programa em BASIC na memória, 1^233. 253, 221,25, 221, 110, D, 22J 16.240,195,87,252.193,42.83,92
.34,1891
para realizar buscas ou substituições. O ^02,1999
100 DATA 1,205,69,252.201,62, 340 DATA 59,255,126,254,64,208
procedimento e o mesmo em ambos os .35,35,35,35,126,35,254,13,40.
254.229,205.1,22.225,126,35.
casos. Uma ve? carregado, as diversas 239,1813
254.255,2396
opções serão executadas por meio de co- 350 DATA 185.32,247.197,62.13.
LIO DATA 40,4.215. t95, 76. 252,
mandos do tipo RANDOMIZE USR, 201.207,9,209.225.205,229,25. 1,0,0,237,177,229,42,59.255.
conforme explicamos a seguir. 201,205.2498 205.1941
Para procurar urmveadeia de carac- 120 DATA 142,2.14,0, 32,24.9.205 360 DATA 85.24.62.13.215.225,
teres no programa, dÍghe:^V ,30.3,48.244,21.95,205,51.3. 193.24.214,15.254.70,254.79,
1344 254,86.2067
RANDOMIZE USR 646Í4' 130 DATA 254.0,201,46,25.118, 370 DATA 254.98.254,110,254,27
O programa solicitará a cadeia que 45.32,252,201,62,13.705.48.252 . 254 35 254 . 48 254 , 64 , 254 , 124
, , .

.33,1787 254,143,2681
deve procurar: entre-ã pelo teclado e
140 DATA 63.255,17,85,255.3, 380 DATA 254,160.254.184.254.
pressione <ENTER>. As linhas que
253 42 ,83,92 34 59, 255, 126. 254. 206.254,229.254.236,254,0,255.
contém a cadeia serão exibidas na tela.
. ,

2081 10.255,66.3125
Para procurar uma palavra-chave em
.

150 DATA 64.208.17,4.0,25,126. 390 DATA 89.84.69,83,32,70.82.


BASIC
ASIC (comando
(con ou função), digite: 254,13,32.3,35,24.237,205,179. 69,69,61,255,80,82.79.71.82.
ZE USR 64911
tílZE
RANDOíJI 1357
160 DATA 252,56,3,35.24,240, 400 DATA 65,77,255,78.85.77.66
Como no comando anterior, você 229,42,59,255,205.85,24.62.13, ,69,82,32,65,82,82,65.89.255.
precisará. digitar a palavra-chave desejjf- 215.1799 1524
da c pressionar < ENTER > O indexa-'
. 170 DATA 225.24.240.229.17,85. 410 DATA 67.72.65.82,65.67,84.
dor imprimirá iodas as linhas do progra- 255.58.63,255.71.26,19.190.35, 69,82,32,65,82,82,65.89,255,
32.1824 1323
ma em que ela ocorre. Para substituir 420 DATA 66,89,84.69.83.255.80
180 DATA 5.16,248.225.55,201.
um nome de variável por outro, digite: 225,191.201,62,254.205.1,22,42 ,82.79,71,82.65,7 7.61.255.32.
RANDOMIZE USR 64796 ,83,2036 1530
190 DATA 92,34,59,255,126,254, 430 DATA 66,89.84.69.83,255.70
Desta vez, você precisará entrar duas 64,208,17,4.0,25,126,254.13.32 7 3 7 6 69 3Z 84 89 80
. . , 69 6 1
, , , , , ,

cadeias de caracteres: o nome da variá- ,1563 1349


vel já existente (a ser procurado) e o no- 200 DATA 3, 35, 24. 237, 254. ]68. 440 DATA 32,255,70.73.76.69,32
vo nome. Este pode ser mais curto ou 40,7,254,206,40,3.35,24.237, ,78.65,7 7.69.61.32.255,70.73,
mais longo que o original — o progra-v 229, 1796
ma aceita até vime caracteres para cada 210 DATA 42,59,255,205,85,24. 450 DATA 76,69.32,76.69.78.71.
um. Ao pressionai < ENTER > iodas .
62,13.215,225,62,13,1.0.0,237, 84. 72, 61, 32, 255, 69, 78. 84. 69.
1498 1275
"^ituiçôes serão executadas auto-
as substii
220 DATA 177,24,206,175.119, 460 DATA 82,32.83,84,65.82.84.
maticamtmente, mas as linhas modificadas 32,76,73. 78. 69, 32, 58 255.69,
213,229.205.115.252.205,95.252 .

não1 aaparecem
par na tela. ] 254
.245.215,241,2968
A última opção permite que você ve- 230 DATA 225.209,254,13,40.5. 470 DATA 78, 84, 69. B2. 32.69, 78.
ja todas as linhas em que uma função 18.19,52,24,2 34.201.62,13,205, 68, 32. 76, 73, 78,69, 32,58. 255.
-íoi definida (DEF FN) ou usada. Para 48, 1622 1233 _
480 DATA 69,78.84.69,82,32,76.
isso. digite: 240 DATA 252,17,85.255,33,63.
255,205,3,253,62,18,205,48,252 73.78.69,32,73.78,67,82.69.
RANDOMIZE USR 64 713' ,33, 2039 1111
490 DATA 77,69,78,64,63,32,58,
2 55 69 , 7B 84 69 8 2 3 2 84 65
1299
. . , ,

500 DATA 82,71,69.84,32,83,84.


82,73,78.71,58,32.255,69,78,
, , ,
. .

37 APLICAÇÕES 37

150 DATA 574F5244530D3C46JE554E
4354494F4ED346. 1429
160 DATA 494E443FA0494E53455254
3FA04E4F54204 6 147 7 .

170 DATA 4F554E44A0303030303030


1301 20A0308CDD1701.1J83
510 DATA 84,69,82.32,68.69,67, 160 DATA 818E02001700B47D023927
7 3,77.65.76.32.78,85,7 7,66. 0Be6CBA7i.i08622.151O
U00 190 DATA A7807C0239B6027HBB0239
520 DATA 69,82,32,58,255,72,69 87022C7D022927.1387
. 88 3 2 61 32 . ! 55 69 , 78 84 69
. , , , , . 200 DATA OC308CB91701578E021417
1405 008A108E001910 1020
,
».
530 DATA 82.32,72,69,88.39,32. 210 DATA 8F022E108E001B1QBF0230
78.85. 77.66.69.82. 58, 32, 255, 1700AB7D023C26. 1100 A^Ê
1216 220 DATA 06308C9D1 701J^rW2007C
540 DATA 68.69,67.73,77,65,76, 022920A48E0121.989
61.32,255,69.78,84.69,62,32, 230 DATA BF022E8EQ,
1257 FF741701188E02, 14Í
550 DATA 78,69,87,32.83.84.82. 240 DATA 008D4CB607!
73,78.71,58,255.0.0,0.0,1050 A6848A80A7848E, 175a
560 DATA 9.23,220.10.254.21. 250 DATA FFFFBF0234*
206,11,254,80,3.23,220,10,215, 0200C601F7022C,:
24.1583 260 DATA F602382707i
570 DATA 177,1.0.10,0,100,0, 2CB6023780016A. 1838
232,3.16,39,48.48.49.48,0,771 270 DATA BOA7847F023620:
BF022E8E0127BF.1570
280 DATA 02307C023820A85FB
27FB810D272681.1706
290 DATA 08260CC10027EF5A301FBD
O
programa indexador para os com- A28220Bg6DAM27^23 ^tf
patíveis com o TRS consiste de uma 300 DATA A780812426087DQ2292703
rolina curta de carregamento, seguida de 7C0 2395CC1142D.1249
linhas DATA
onde estão os códigos do 310 DATA D1F7022B39AE9F022E7D02
programa em linguagem de máquina. 36260ABF023210, 1427
Digite essas linhas cuidadosamente. 320 DATA AE6410BF02345F108E0200
O computador irá imprimir uma men- funções) e substituição. Pressione a ini- A6804D2A107C02.1377
sagem de erro se você cometer algum en- cial da alternativa escolhida. 330 DATA 377D023B260881FF260430
gano na digiiação dos números, mas só Se você acionar a primeira opção, o 0120EBAC9F02 30 1407
.

quando você executar o programa. programa pedirá que entre a cadeia dese- 340 DATA 2C5FBC02342D133410BE02
Não havendo erros, grave o progra- jada. Digite-a e pressione <ENTER>. 34BF0232AE9F02.1335
35J1 DATA 32BF023435103004A1A026
ma em com CSAVE. Em seguida,
fita Todas as linhas que contêm a cadeia se- C45CF1022C2DC3, 1590
armazene o programa em linguagem de rão listadas. 360 DATA 7D0236263B6D467D022927
máquina gerado na memória com: Para substituir uma
cadeia por outra, IÍ2 108E0214F60 2 1299
,
^_
digite ambas as cadeias. Elas devem ter 370 DATA 2BF7023E7D02392609F6Q2
CSAVEM "CREF". 28672, 29500. 28672
o mesmo número de caracteres. 2CF7023E503085.1449
Oprograma que você realmente uti- Quando usar a opção de busca de pa- 380 DATA A6A0E684C122270CA780BC
lizará é essa versão em linguagem de má- lavras-chave, lembre-se da distinção en- 02342C057A023E.1738
quina. Para reservar espaço para ela, o tre comando e função. Se não souber a 390 DATA 26EC128D12208139860DBD
iopo da área do BASIC è reduzido em que categoria pertence a palavra, lente A282A6802B05BD, 1828
400 DATA A28220F73934367C023C66
quatro Kbytes. Assim, o indexador não ambas as alternativas. 0DBDA282BE0232 ,1790
pode ser empregado com programas 410 DATA 8D7130aDFE4F8DDCBE0232
muito longos em BASIC (que sc esten- 10 CLS CLEAR 2Q0.Í.H6FFF
: 30Í14A680BC0234 1967
.

dam além da memória 6FFF). 20 FOR X-l TO 741 STEP 18 420 DATA 2C-314D2B0SSBA28220F1B1
Para usar o programa, digite: 30 READ XS:CS-0 30BE01,tó*i^.
FF7 72834
40 FOR P-l TO 36 STEP 2 430 DATA 21108E01221QBF023ABD2E
50 V-yAL("S.H"+MIDS(X$.P,2)l A680AC9F023A2E, iWl ^VL
60 CS-CS+V:POKE &.H6FFF+X+P/2 V , 440 DATA 0D4D2B05BDA282W^
Você poderá carregá-lo antes ou de- /0 NEXT READ A:IF CSOA THEN PR
: BDA282 3 5 30 20C5 1961
,

INT" ERRO DE CHECKSUM NA LINHA" 450 DATA A6803430BE0126108EJ


pois de ter colocado o programa em BA-
100+10*INT(X/18) END : 20D4S60DBDA282, 1693
SIC na memória, para realizar buscas ou 80 NEXT 460 DATA 3536391E89C0805D27.G,
O procedimento é o mes-
substituições. 100 DATA 34367F02297F02387F0236 80AC9F02302C06.1522
mo em ambos os casos. Uma vez carre- 7F02397F02377F.1141 470 DATA 4D2AF55A26F239BDA1?
gado, as diversas opções serão executa- 110 DATA 023C308C231701F6BDA1C1 03BD8CC6342010.2003
das por meio do comando: 27FB8153102700.1657 480 DATA 8E303010BF708310BF7085
120 DATA 666152102700B7814B1027 10BF70873002AE.1818
EXEC Í.H7000 00B68146102 701 1247 . 490 DATA 843001318DFDC23121301F
130 DATA 031602A85345415243480D 8C00002711A6A4, 1505
Depois de na te-
digitá-lo, aparecerá 3C533E5452494E, 1168 500 DATA 4CA7M813A2DEA8630A7A4
la um menu com estas opções: busca de 140 DATA 4753203C523E45504C4143 313F20EF352039.1911
cadeias, palavras-chave (comandos ou 450D3C4B3E4559, 1184 510 DATA 153639.164
IIIIIIIIIIIHHW * ^«lllllllll
Mesmo que suas necessidades de

GERENCIAMENTO DE arquivamento sejam mínimas,


de gerenciamento de banco de dados
um sistema

Conheça suas possibilidades.

Os computadores têm a capacidade xo, estado civil, número de dependen- comprar um programa para gerencia-
de armazenar grande quantidade de da- tes, data de admissão, cargo, salário. mento de agenda telefónica, por exem-
O conjunto de especificações de um plo, terá que obedecer ao esquema já es-
dos em um espaço muito reduzido e de
trabalhar com eles a uma velocidade registro (nome do campo, comprimen- tabelecido internamente para o arqui-
denominado esquema ou for- vo-mestre, sendo impossível modificá-
fantástica. São, por isso, a ferramenta to etc.) é
mato. Note que o número de bytes ocu- lo de acordo com suas necessidades.
ideal para manipular e recuperar infor-
mações organizadas de uma forma es- pados por um registro é igual à soma dos Um sistema de gerenciamento de
pecial, que é denominada banco de da- bytes ocupados pelos campos (no exem- banco de dados é bem mais flexível e po-
dos ou, ainda, base de dados. Os pro- plo anterior, o comprimento de um re- deroso. Por ser um programa genérico,
gistro corresponde a 124 bytes). ca- Em possibilita a alteração de um esquema
gramas destinados a executar essa tare-
fa constituem os sistemas gerenciadores da registro colocam-se as informações já existente e a definição de novos es-
de bancos de dados (SGBD). referentes a uma pessoa ou empresa. quemas, totalmente diferentes, segundo
Um banco de dados é essencialmen- Dentro de um banco de dados, os regis- o desejo do usuário. Além disso, o
te um conjunto de informações corre- tros normalmente são identificados pe- SGBD tem uma série adicional de fun-
lacionadas e organizadas em um ou mais lo seu número de série ou posição se- ções que dão acesso a eficientes recur-
arquivos de computador. Os arquivos, quencial (1,2,3... etc). sos de manipulação de arquivos de da-
Tais dados são reunidos em uma mes- dos, entre os quais ordenação, modifi-
por sua vez, são conjuntos de registros
de dados, cada qual formado de uma sé- ma unidade de informação por estarem cação de registros, substituição de um
rie de campos. Para entender melhor es- inter- relacionados. Se puséssemos todos ou mais campos em todo o arquivo, ge-
os nomes em um arquivo, os endereços ração de arquivos auxiliares, pesquisa e
sa hierarquia (base, arquivos, registros
campos), tomemos como exemplo em outro, e os telefones em um tercei- recuperação de informações seleciona-
e
uma agenda telefónica simples. Um dos ro, seria muito difícil estabelecer a cor- das, elaboração de relatórios impressos,
arquivos, que chamaremos arquivo- respondência entre as informações dos estruturados conforme especificações do
mestre, contém certo número de regis- três arquivos, e acabaríamos não saben- usuário etc. Nos artigos das páginas 81
tros. Cada registro corresponde a uma do a quem pertence um endereço ou te- a 706, apresentamos um programa re-

ou vice-versa. lativamente simples de gerenciamento de


pessoa ou empresa listada na agenda, lefone,
comportando um número fixo de cam- Esse tipo de organização, chamado banco de dados, com algumas das ca-
registro de formato fixo, é o mais utili- racterísticasmencionadas.
pos com conteúdos bem definidos:
zado em bancos de dados para micro- Outra diferença clara entre um arqui-
Campo Tipo N? de caracteres computadores. Definido o formato, os vo simples e uma base de dados é que
dados podem variar de registro para re- nesta usamos o computador não só pa-
Nome A 40 gistro, ou mesmo serem modificados ra colocar os dados em arquivos, mas
Endereço A 45 dentro de cada registro. O esquema, po- também para extrair novos tipos de in-
Cidade A 25 rém, continua sempre o mesmo. formação do repertório original ._
Estado A 2 Em nosso exemplo, outros arquivos Costuma ocorrer certa confusão no
CEP N 5 seriam necessários para a caracterização uso dos termos "banco de dados" e
Telefone N 7 de um verdadeiro banco de dados: ar- "sistema gerenciador de bancos de da-
quivos-fndice, arquivos auxiliares etc. dos". Muitas vezes, utiliza-se "banco de
Além do nome, dois outros elemen- Mais adiante veremos o significado e dados" para designar o sistema geren-
tos caracterizam um campo: o fato de também a importância dos arquivos se- ciador, com seu hardware e/ ou softwa-
ser alfabético (A)ou numérico (N) e o cundários —
como uma lista de códigos re, quando esse termo se refere apenas

espaço que reserva para o dado (40 ca- DDD das cidades presentes em um ar- ao conjunto dos arquivos que contêm
racteres para o nome da pessoa, 5 para quivo-mestre —
para a organização de informações especificas, ou aplicações.
oCEPetc). Os campos funcionam co- um banco de dados. Em um verdadeiro SGBD os dados exis-
mo uma espécie de rótulo para um da- tem independentemente dos programas:
por isso, é possível fazer modificações
do ou informação. O número, nome, ti-

po e comprimento de cada um variam 0 QUE É UM SGBD? no esquema sem alterar o programa que
gerência o banco de dados.
de acordo com a aplicação. Um ban-
co de dados para arquivar sua coleçào Um arquivo-mestre como o definido Há uma grande variedade de SGBD
de discos, por exemplo, teria campos pa- acima seria apenas o equivalente eletrô- para microcomputadores domésticos e
nico de um fichário manual, onde cada profissionais. Eles diferem muito entre
ra o nome do disco, ano de gravação,
conjunto, solista, género de música, gra- ficha corresponde a um registro no ar- si quanto ao número e potência dos re-
vadora etc. Um sistema para folha de quivo. Em um arquivo de dados, a or- cursos que oferecem, e também quanto
pagamentos de uma empresa teria cam- ganização do registro geralmente é às restrições que impõem (número má-
pré-programada e não pode ser altera- ximo de campos por registro, número
pos totalmente diferentes, como nome
do empregado, data de nascimento, se- da pelo usuário do programa. Se você máximo de registros etc). A utilização
IIIIIIIIIIIIUHHI^BMHHHIIIIIIIIIII!
O QUE É UM SGBD? BUSCA DE INFORMAÇÕ ES
PROJETO DE UM IMPORTAÇÃO E EXPORTAÇÃO
BANCO DE DADOS CHAVES DE ACESSO
GERENCIAMENTO E DE ORDENAÇÃO
DE ARQUIVOS TIPOS DE SAÍDA

dos SGBD em geral não apresenta difi-


culdades, pois toda a operação é orien-
tada através de menus ou comandos
simples, que podem ser aprendidos em
pouco tempo. Neste artigo examinare-
mos algumas das principais funções dos
sistemas de gerenciamento para micros.

DEFINIÇÃO DO REGISTRO

Todo SGBD oferece ao usuário a op-


ção de definir o esquema de arquiva-
mento. Esta é a primeira tarefa a cum-
prir quando se está montando um banco
de dados no computador. A opção em
geral funciona de forma conversacional
em sistemas para micros —
o usuário
pode determinar, em interação com a
máquina, o nome, tipo e comprimento *
mt
de cada campo, alterando-os à vontade
durante o processo de definição.
Uma vez estabelecido, o esquema pa-
ra o banco de dados é armazenado em
disco ou fita cassete, de modo que, to-
da vez que o usuário especificar o no-
me do arquivo que quer usar, o SGBD
automaticamente se "lembrará" do es-
gJ3
quema definido para o mesmo.
Os sistemas de gerenciamento variam
muito quanto à flexibilidade e capaci-
dade de definição do esquema. Alguns
não admitem ao usuário que elabore
mais que simples listas de nomes de cam-
pos com seus respectivos comprimentos.
Outros permitem a especificação de um
grande número de propriedades adicio-
nais para cada campo —
como número
de decimais, posicionamento do campo
na tela, parâmetros de verificação de
consistência e erro (por exemplo, valo-
res mínimo e máximo para um campo
numérico) —
aceitando ainda uma va-
,

riedade maior de tipos de campo (datas,


variáveis lógicas etc.).
Convém planejar cuidadosamente o
formato de um registro antes de come-
çar a defini-lo com o auxilio do SGBD,
pois muitos sistemas não permitem a al-
teração do formato após a entrada dos
dados nos registros. Assim, é interessan-
te colocar um ou dois campos adicio-
nais, denominados NOTAS. OUTROS
etc, para que novos tipos de dados pos-
sam ser introduzidos posteriormente.
No momento da definição do forma-
Illlllllll -
também é importante de- total de registros por arquivo. Por ou- para corrigir ou modificar os dados já
to do registro,
tro lado, se definirmos um número mui- entrados em qualquer um dos registros
cidirquando juntar ou separar informa-
o campo será que fazem parte do banco.
ções diferentes em um mesmo campo. to pequeno de caracteres,
insuficiente para a maioria dos nomes. Cabe aqui uma breve explicação so-
Por exemplo: no banco de dados para
E necessário, portanto, encontrar um bre os dois métodos básicos usados pe-
gerenciar uma agenda telefónica, você
los SGBD para armazenar registros em
poderia ter optado por colocar CEP, es- ponto de equilíbrio.
tado e cidade em um único campo, e não Os SGBD também diferem muito um arquivo, pois eles afetam bastante
campos separados. A escolha de^ quanto à capacidade. Mas todos im- o desempenho do sistema.
em três
pende da aplicação desejada. Se você põem certas restrições na definição do O método mais comum, principal-
formato: número total de campos por re- mente nos SGBD mais simples, destina-
pretende ordenar o arquivo segundo o
gistro, número máximo de caracteres no dos aos micros domésticos, é o dos ar-
CEP, ou contar quantos amigos tem no
nome de um campo, comprimento máxi- quivos-seqúenciais. Esse método é o úni-
Estado de Minas Gerais, o trabalho se-
mo de um campo alfabético ou numéri- co disponível para microcomputadores
rá bem mais fácil se esses dados estive-
co, tamanho total do registro etc. Tais com memória auxiliar baseada em fitas,
rem separados.
condições têm que ser levadas em conta e impõe certas restrições no emprego de
Outra consideração relevante diz res-
um banco de dados. Um arquivo se-
peito à dimensão de cada campo. Em al- quando se projeta o formato do registro.
quencial é mais do que suficiente quan-
guns casos (uma data, por exemplo) po-
dem-se utilizar medidas padronizadas.
do se deseja listar de uma só vez toda
a informação armazenada (como em um
Mas muitas vezes o tamanho depende da
programa de mala direta), mas não tem
informação que será incluída. Qual é o
Depois de termos definido o forma- muita utilidade quando é necessário iso-
número ideal de caracteres para o no-
to dos registros, o programa se encar- lar ou procurar detalhes específicos.
me de uma pessoa? Se especificarmos Além disso, a inserção de novos regis-
um comprimento muito longo (digamos, rega de criar o arquivo. Podemos então
passar ao próximo passo, que consiste tros em um arquivo desse tipo precisa
cem caracteres), praticamente todos os
em "encher" o banco de dados, ou se- ser feito sempre no final, e envolve di-
nomes existentes poderão ser colocados, dependendo do compu-
dados que preten- ferentes passos,
sem que precisemos abreviá-los. Mas os ja, introduzir os reais

espaços em branco que sobram também demos armazenar. Os SGBD possuem tador utilizado.
ocupam memória, limitando o número funções especiais para isso, bem como O método mais eficiente é o dos ar-
IIIIIIIIIHHHHMHHHHHIIIIIIIIIII
quivos de acesso direlo, empregado nos permitem transformar ou transferir in- porta arquivos precisa ser capaz de re-
SGBD mais sofisticados e profissionais, formações de um arquivo sequencial pa- conhecer esses separadores.
que exigem o uso de discos magnéticos. ra um arquivo direto, e vice-versa. Es- Já existem alguns padrões de repre-
Esse método permite que se atinja um sas operações, chamadas respectivamen- sentação seqiiencial de dados para faci-
determinado registro de qualquer pon- te de importação e exportação de arqui- litar a importação e exportação de ar-
to de partida, não sendo necessário re- vos, possibilitam, por exemplo, que da- quivos entre diferentes aplicativos. O
copiar todo o arquivo quando se faz dos de uma planilha ou de um proces- mais conhecido para micros é o padrão
uma inserção ou modificação. AJém dis- sador de textos sejam utilizados com um SDF (Standard Data Format).
so, a velocidade de acesso é considera- programa de banco de dados.
velmente maior. Funções típicas de Para transformar um tipo de arquivo
SGBD de arquivos sequenciais, como a em outro, os separadores de campos de- BUSCA DE INFORMAÇÕES
geração de relatórios sequenciais, po- sempenham um papel importante. Um
dem ser executadas facilmente pelo soft- separador é um caractere de controle que O que fazer com os dados depois que
ware destinado ao gerenciamento desses assinala quando um campo termina e ou- elesforam armazenados nos registros de
SGBD de acesso direto. tro começa, em um arquivo sequencial. um banco de dados? A função empre-
Sistemas de acesso direto possibilitam Em geral utiliza-se como separador gada com mais frequência é a de busca
ordenações, indexações e buscas muito o caractere ASCII 13 (carriage return, e recuperação de informações. Ela de-
mais complexas do que os sistemas de ou retorno de carro), gerado quando se pende, basicamente, da especificação
acesso sequencial. pressiona a tecla <ENTER> ou a te- das condições que devem ser satisfeitas
cla < RETURN >, mas é possível usar por um registro para ser encontrado no
qualquer outro. Os SGBD mais pode- banco de dados, e pode ser tão comple-
IMPORTAÇÕES E EXPORTAÇÕES rosos permitem a definição do separa- xa quanto se queira.
dor que se pretende utilizar. O papel de um SGBD equivale ao do
Embora sistemas de acesso direto e Com o emprego de separadores de gerente de um arquivo não eleirônico,
seqiiencial sejam bastante diferentes no campo predeterminados pode-se com- que se encarrega de aiualizar os dados
que diz respeiío à organização dos ar- pactar a informação transmitida, de ma- e de achar a informação desejada pelos
quivos, eles não são mutuamente incom- neira a maximizar o uso da memória dis- usuários. Em um sistema manuai, o ge-
patíveis. Os bons SGBD têm opções que ponível. O programa que importa ou ex- rente de arquivo tem que tomar algumas

"

t/W**',
realmente quando começamos a usar os implementada em sistemas baseados em
arquivos auxiliares. Em um sistema discos. A única busca possível em arqui-
computadorizado, o arquivamento é fei- vos sequenciais é a linear, que, além de
to exatamente da mesma maneira que tomar muito tempo, exige que se rebo-
decisões sobre a forma de dispor as fi- no sistema manual, ou seja, o SGBD bine manualmente a fita toda vez que se
Um arquivo de empre- dispõe os registros do arquivo-mestre se- inicia uma nova busca.
chas nas gavetas.
gados, por exemplo, poderia ser arran- gundo determinado tipo de arranjo, e
jado de acordo com a ordem alfabética um conjunto de outros arquivos auxi-
liares são construídos. Alguns simples-
0 CAMPO-CHAVE
dos nomes das pessoas. Para localizar
a ficha com os dados de um funcioná- mente utilizam uma forma de ordena-
rio, bastaria saber seu nome. ção diferente da do arquivo-mestre — Tanto na ordenação quanto na inde-
O problema realmente começa quan- são os chamados arquivos-índice. Ou- xação de um banco de dados, utiliza-se
do se pretende localizar informações a tros contêm informações adicionais, o campo-chave para organizar os arqui-
partir de outras referências— por exem- mas se relacionam ao arquivo-mestre vos auxiliares. Normalmente, todo ar-
plo: quais são os Funcionários que estão através dealgum campo (por exemplo, quivo-mestre tem pelo menos um cam-
completando trinta anos de serviço? Co- o nome do funcionário). Os bancos de po-chave, que corresponde ao campo
mo as fichas não foram organizadas se- dados organizados desse modo são de- mais importante —
aquele no qual se
gundo o tempo de serviço, seria preciso nominados relacionais. Os softwares buscam informações mais frequente-
examiná-las uma a uma até encontrar dos SGBD mais eficientes para micros, mente. É este o campo que o SGBD usa-
aquelas que contêm a condição pedida. como o dBASE II, incluem-se nessa ca- rácomo referência quando for realizar
Se esse tipo de informação é solicitado tegoria. uma ordenação ou recuperar um regis-
com frequência, o gerente acabará deci- Buscas em arquivos-índice levam me- tro através de
da técnica busca binária.
dindo montar um arquivo auxiliar, com nos tempo que em arquivos-mestre, pois Se a busca tem como alvo apenas um
aqueles, além de menores, são organi- registro (por exemplo, um determinado
as fichas individuais dos funcionários co-
locadas em ordem de tempo de serviço. zados para permitir o uso de técnicas rá- funcionário em uma folha de pagamen-
Muitos outros fichários como esse pidas de busca, como a busca binária. to),o campo-chave também precisa ser
podem ser necessários,tornando a ta- Nesse tipo de busca, o trabalho se ini- único. Por isso, não convém usar o no-
refa do gerente cada vez mais complexa cia a partir do meio do arquivo, e não me completo do funcionário (ou, pior
e difícil. Um
computador seria nesse ca- do começo, como no método linear. ainda, só o sobrenome). O melhor é
so a melhor solução. Quando procuramos o nome de uma adotar um sónúmero de identificação,
pessoa em uma página da lista telefóni- como o da carteira de identidade ou o
Se o fichário com todos os dados dos
empregados estiver armazenado na me- ca, por exemplo, a técnica que costuma- atribuído pela própria firma (número
moria, a máquina irá agir da mesma for- mos utilizar é justamente a binária: pri- funcional). Os sistemas de controle de
ma que o gerente para localizar os fun- meiro, verificamos se o nome está an- contas correntes de bancos utilizam es-
cionários que atingiram trinta anos de tes ou depois do nome que ocorre no se processo. O campo-chave para efe-
serviço. Examinará registro por registro, meio; se estiver antes, examinamos a tuar todos os acessos e transações com
comparando a chave de busca com os primeira metade da página, dividindo- o sistema é o número da conta do clien-
dados contidos no campo ou campos a novamente ao meio. Repetimos o mes- te, e não seu nome.

correspondentes, até que a condição de mo procedimento várias vezes, até che- Quanto mais sofisticado um SGBD,
busca seja satisfeita. A diferença é que gar ao nome desejado. maior será sua flexibilidade, e mais fá-
o computador pode fazer essa mesma A
vantagem da busca binária é que, cil a localização de informações.

tarefa em um espaço de tempo milha- através dela, se pode examinar um nú-


res de vezes menor. Mesmo assim, se o mero muito menor de registros do que
numa busca linear, até achar o registro MÉTODOS DE BUSCA
arquivo-mestre for muito grande, esse
tipo de busca, chamado busca linear, procurado. A busca binária em um ar-
pode demorar demais. quivo relacional requer a técnica de Existem vários métodos de busca de
A eficiência da máquina se revela acesso direto e, portanto, só pode ser informações, alguns dos quais já cita-
dos anteriormente. Em uma busca inde- As telas mostram várias funções de ui
xada, a informação desejada está con- sistema moderno de gerenciamento de
tida em um ou mais campos do arquivo- bancos de dados para
(ndice. A busca propriamente dita é feita esquerda para a direita: menu das
nesse arquivo, onde cada registro tem operações disponíveis, procedimento de
definição da estrutura do banco,
um apontador para o registro corres- formatação de entrada e edição
pondente no arquivo-mestre. de dados, busca seletiva,
Quando se realiza uma busca por relatório de saida.
campo único, em geral se utiliza um
campo-chave para localizar a informa-
ção diretamente no arquivo-mestre.
Em uma busca por critérios, várias
informações são combinadas de modo
a fornecer uma expressão lógica, que é
resolvida para cada registro do arqui-
vo-mestre, até que resulte verdadeira.
No exemplo dado, o presidente da com-
panhia poderia querer localizar todos os
empregados com mais de cinquenta anos
de idade, mais de trinta anos de servi-
ço, que fossem do sexo masculino e re-
sidissem na capital de São Paulo ou na
cidade de Campinas.
Finalmente, existe a busca por sub-
cadeias literais — com certeza a mais
versátil, mas também a mais lenta, por
ser linear. O computador simplesmente a ele definir os campos que devem ser
LINGUAGENS DE PROGRAMAÇÃO
procura em um determinado campo a incluídos c em que ordem, a largura e
ocorrência de uma cadeia de caracteres o título de cada coluna de dados, se os
— uma palavra, ou então um número totais devem ser calculados, se o relató- Alguns SGBD destinados a micro-
— especificada pelo usuário e mostra to- rio será subdividido em diversos níveis computadores, como o dBASE II por
dos os registros em que a mesma ocor- (com ou sem subtotais) etc. exemplo, são muito mais do que um sis-
re. É um tipo de busca muito útil para A forma mais simples de saída o re- é tema pronto para gerenciamento de ban-
achar informações situadas no meio de latório (report), cuja formatação pode cos de dados. Como se baseiam em uma
um campo, ou que não foram isoladas ser estipulada de maneira muito simples linguagem de comandos (diretivas sim-
em um campo próprio. Por exemplo: lo- por alguma opção constante do sistema ples, formadas por palavras e frases em
calizar todas as pessoas que têm um de- de gerenciamento. inglês ou português), é possível escrever,
terminado sobrenome em uma agenda Os SGBD mais sofisticados oferecem armazenar e executar programas a par-
telefónica em que o nome completo é o ao usuário a opção de determinar um ou tir deles. Assim, sistemas muito mais
campo-chave. mais critérios de seleção, de modo que complexos podem ser desenvolvidos.
o relatório contenha apenas um subcon- Linguagens desse tipo são chamadas lin-
junto específico do banco de dados. guagens de quarta geração.
RELATÓRIOS DE SAÍDA
Outros tipos de saída, como etique- Existem versões do dBASE II, que é
tas para endereçamento, gráficos, for- o SGBD relacional mais utilizado em to-
Um SGBD de qualidade sempre in- mulários específicos etc, podem ser ob- do o mundo, para todo os micros com-
clui algum tipo de recurso de formata- tidos por meio de funções especiais dos com o sistema operacional
patíveis
ção de relatórios de saída (em vídeo SGBD mais profissionais, ou da trans- CP/M: Apple Z-80, CP-500M, a linha
e/ou impressora). Isso permite ao usuá- ferência de dados pelo formato SDF ou MSX com disquetes etc. Já se desenvol-
rio construir um relatório exatamente na outro, para os programas que são capa- veu inclusive uma versão çôm os coman-
forma em que será apresentado. Cabe zes de realizar essas tarefas. dos em português, chamada DIALOG.
20 PIRIFIRICOS 20

APLICAÇ ÕES

PROCESSAMENTO CÂMARA DE VÍDEO


DISPOSITIVOS CCD
ADEQUA ÇÃO AQ MICRO

DE IMAGENS SOFTWARE

Sistemas de processamento de imagens feixes eletrônicos varrem sistematica- UM MODELO PARA SEU MICRO
mente a superfície e transformam os ní-
já se encontram à disposição veis de luminosidade em ondas elétricas.
Na conversão destinada ao uso por um Não faz muito sentido utilizar um
dos usuários de microcomputadores
computador, um conversor analógi- CCD com um computador que lenha re-
pessoais, abrindo-lhes as portas para solução mais baixa que a da câmara. As-
co-digilal produz sequências de bits que
um fascinante campo de aplicações. são enviadas à memória da máquina, re- sim, os micros Apple e MSX
são os que
presentando um retrato mais ou menos dispõem de maior oferta de periféricos
fiel da imagem captada. de captação de imagens.
O vidicon tem uma alta resolução de Os micros compatíveis com a linha
Oprocessamento de imagens por
computador é unia das áreas mais fas- imagem — ou seja, o número de linhas IBM-PC têm sido os mais usados para
da varredura é grande (trezentas a qui- processamento de imagens, devido a sua
cinantes e complexas do mundo das apli-
nhentas por tela, geralmente). O efeito velocidade e capacidade de memória.
cações da eletrônica digital.
disso, na conversão para números biná- Existem vários modelos para essas má-
O computador pode realizar verda-
quinas, entre eles o PC-Eye.
deiros milagres ao converter uma ima- rios, é a divisão da tela em uma espécie
(números de quadriculado, em que cada "quadra- Podem-se utilizar também interfaces
gem em impulsos digitais bi-
dinho" equivale a um ou mais bytes de comerciais para ligar um videocassete e
nários) e processá-la com programas es-
informação, descrevendo a intensidade sua câmara a um micro de boa resolu-
peciais, em alta velocidade.
luminosa, cor etc. do ponto. Esses ele- ção gráfica. Essas interfaces dispõem de
Para satisfação dos usuários de mi-
cros domésticos, muitas dessas aplica- mentos são chamados pixels (do inglês, um conversor analógico que, embora rá-
picture elements). pido, serve apenas para imagens estáti-
ções, antes restritas a computadores de
Uma câmara digital, por sua vez, é cas, por não conseguir acompanhar os
grande porte, estão agora disponíveis da filma-
baseada em um circuito integrado cuja sessenta quadros por segundo
para máquinas como as suas.
O
passo central para o processamen- larga superfície já é dividida em uma gem de vídeo.
to de imagens consiste em sua captação matriz de elementos fotossensíveis. Ca-
e conversão em sinais digitais. Isso é fei- da elemento corresponde a um pixel. A SOFTWARE E APLICAÇÕES
to por um periférico composto por uma imagem, projetada sobre essa superfície,
câmara especial, acoplada a um conver- éautomaticamente dividida em pixels,
sem a necessidade de uma varredura por Diversos tipos de programa de pro-
sor e a uma interface.
um feixe eletrônico. cessamento de imagens já foram desen-
Existem atualmente câmaras simples
A câmara digital é muito mais sim- volvidos para micros. Os mais elemen-
de preço razoável, para apli-
(digitais),
ples e barata do que o não
vidicon, pois tares são geralmente vendidos com o pe-
cações em micros. Elas são baseadas na
requer tubo blindado de vidro, vácuo, riférico, e servem apenas para capturar
tecnologia do circuito integrado (CCD,
ou Charge-Coupled Device). nem filamentos de aquecimento. O
con- uma imagem e armazená-la em disco.
sumo de energia é pequeno e a câmara As versões mais sofisticadas permitem
pode ser facilmente miniaturizada. escolher filtros de imagem, determinar
Entretanto, há uma desvantagem: se uma intensidade mínima para a capta-

comparados ao vidicon, os dispositivos ção (ifiresholding) etc.


CCD têm uma resolução de imagem ain- Softwares mais complexos são dota-
Podem-se captar imagens em tempo
real por meio de câmaras de vídeo se- da pobre. Os modelos mais baratos, dis- dos de outras funções de processamen-
poníveis para micros, possuem uma ma- to de imagens, como detecção automá-
melhantes às que são usadas em conjun-
triz de 64 por 64 pixels, o que resulta em tica de bordas, aumento de contraste,
to com videocassetes ou em estúdios de
uma imagem bastante grosseira. Câma- cálculo de áreas, falsa-cor etc. Suas apli-
televisão ou através de câmaras digitais.
CCD profissionais já atingem 256 cações se estendem a vários ramos das
Há, entre ambas, uma grande diferen- ras
por 256 pixels, ou 512 por 512. Estas úl- ciências e da tecnologia. Uma das mais
ça de preço, correspondente à qualida-
timas oferecem uma resolução que, a interessantes para micros refere-se ao
de da imagem obtida.
olho nu, é praticamente indistinguível de desenvolvimento de bancos de imagens.
A câmara de vídeo é baseada no tu-
bo de imagem, ou vidicon —
uma am- uma boa fotografia. Estes permitem a armazenagem, por

O CCD tem a vantagem de não exi- exemplo, de fotografias de pessoas
pola de vidro, dentro da qual se produ-
gir um conversor analógico-digital espe- junto com uma ficha contendo nome,
ziu vácuo absoluto, e que contém um ou —
endereço, dados funcionais etc. ou
mais "canhões" eletrônicos, que geram cial, pois geralmente os circuitos conver-

feixes de elétrons como em um tubo de sores de luminosidade estão embutidos das ilustrações de um livro de zoologia,
no próprio chip. Uma lente razoável e para programas didáticos. O único pro-
TV (cinescópio). A imagem, captada
a interface de conexão tudo de que se blema desse tipo de aplicação é o gran-
por lentes e projetada na parte plana do é
tubo, impressiona elementos fotossen- precisa —
sem falar, é evidente, no soft- de espaço de memória ocupado por uma
síveis que recobrem sua superfície. Os ware que controla o sistema. imagem detalhada em disco.
SUMARIOGERAl |MBBMHH|||||||
UMA AGENDA ELETRÕNICA (3) 868-871
APLICAÇÕES Terceira parte do programa de calendário e agenda

ESCREVA CARTAS SEM ESFORÇO 17-20 UM ASSISTENTE PARA O DOS 936-940

Um programo simples para edição de cartas Acionamento dos comandos de disquetes por um menu

ORGANIZE AS SUAS COLEÇÕESI(I) *8- 75 UM AMPLIADOR GRÁFICO 1049-1055

Programa para arquivamento de dados Programa para ampliar ou reduzir gráficos

ORGANIZE AS SUAS COLEÇÕES (2) 81-B5 UMA PLANILHA ELETRÕNICA (I) 1108-1115

Busca, modificação e apagamento de registros


Primeira parte de um programa de folha de cálculo

PONHA ORDEM EM SUAS CONTAS 134-140 UMA PLANILHA ELETRÕNICA (2) 1I34-U3B

í/m programa para contabilidade doméstica Segunda parte do programa de folha de cálculo

REÚNA SEUS DADOS EM GRÁFICOS 181-187 UMA PLANILHA ELETRÕNICA (3) 1155-1160

Construção de gráficas de barras Terceira parte do programa de folha de cálculo

UM PROFESSOR DE DATILOGRAF1A 253-259 TRS-COLOR: UM EDITOR DE DISCOS 1216-1220

Modificação direta das trilhas do disco


Programa que ensina a usar o teclado

DAT1LOGRAFIA-. ALFABETO COMPLETO 276-280 PROGRAMA PARA TESTE DO VÍDEO 1257-1258

Teste se o seu monitor de video está bem ajustado


Segunda parte do programa

MELHORE A SUA DAT LOGRAFl A I


281-286 CONSULTA AOS ASTROS 1261-1270

Um teste de rapidez e exatidào Um programa para a elaboração de horóscopos

DAT LOGRA FE FRASES LONGAS


I
328-333 FERRAMENTAS PARA O SPECTRUM 1281-1283

Rotina de máquina com novas funções para o BASIC


Extensão do programa de aprendizado

CONVERSÕES NO COMPUTADOR 374-380 DESENHO ARQUITETÕNICO (1) 1367-1371

Programa para converter medidas inglesas em métricas Programa de decoração de interiores

UM ASSISTENTE DE ARTE 414-420 DESENHO ARQUITETÕNICO (2) 1386-1390

com o cursor Segunda parte fio programa de decoração de interiores


Pacote completo de desenho na tela

1398-1400
ROTINAS PARA O CAD 421-424 UM EDITOR MUSICAL (I)

Aplicativo que transforma o computador em um piano


Desenho de retàngulos e preenchimento com cores

UM EDITOR MUSICAL 1408-1411


GERAÇÃO DE BLOCOS GRÁFICOS (1) 489-495 (2)

Como gerar blocos gráficos na tela e armazená-los Segunda parte do programa de edição musical

GERAÇÃO DE BLOCOS GRÁFICOS (2) 507-512 UM EDITOR MUSICAL (3J 1421-1425

Rotinas para inversão, rotação e reflexão de desenhos


Terceira parle do programa de edição musical

UM EDITOR DE TEXTOS (!) 576-5BO ORGANIZAÇÃO DE PROJETOS 1451-1460

Primeira parte de um programa edilor de textos Planejamento de pmjetos pela técnica PERT

UM EDITOR DE TEXTOS (2) 586-591 UM INDEXADOR DE PROGRAMAS 1461-1463

Criação e modificação de textos


Complete o arsenal de ferramentas para seu Spectrum

UM EDITOR DE TEXTOS (3) 614-620


Parte final do programa de processamento de textos

APERFEIÇOE SEU BANCO DE DADOS 706-711 PROGRAMAÇÃO EM LINGUAGEM DE MÁQUINA 1-3

Mais rotinas para o programa de arquivamento de dados O que é código de máquina e programação Assembler

UMA AGENDA ELETRÕNICA (1) 834-840 APRENDA A CONTAR COM UM DEDO SÓ 34-40

Um programa para calendário e agenda de compromissos O sistema binário e sua conversão para decimal

UMA AGENDA ELETRÕNICA (2) 841-845 APRENDA ARITMÉTICA HEXADECIMAL 56-60

Segunda parte do programa de calendário e agenda Programa para a con versão de números hexa em decimais

- pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 - pág. 601 a 900; vol. 4 -
IIIIIIIIIIIUHH suMAmotm IIIIIIHII
COMO ENTRAR CÓDIGO DE MÁQUINA 88-95 UM ASSEMBLER PARA O TRS-80 679-680
Um monitor para programar em hexadecimal Um programa montador escrito em BASIC

NO CORAÇÃO DE UM MICRO 109-1 12 APPLE E TK-2000: EFEITOS SONOROS 712-714


UCP, pilha e registros internos Como produzir sons e ruídos em linguagem de máquina

ABAIXO DE ZERO 142-145 AVALANCHE: UM V1DEOGAME EM ASSEMBLER 748-755


Números negativos nos sistemas binário e hexa Parte I: objetivos do jogo e tela de titulo

MEMÓRIAS SÃO FEITAS ASSIM 174-180 AS INSTRUÇÕES DO JOGO 761-765


A organização inferna das memórias ROM e RAM Parte 2: leia de instruções de A valanche

TRADUÇÃO MANUAL DO ASSEM BLY 196-200 AVALANCHE: EFEITOS SONOROS 788-795


Mnemónicos, endereçamento e tradução do Assembler Parte 3: programação da melodia "Greensteeves"

PROGRAMAS EM CÓDIGO DE MÃQU1NA 213-220 BLOCOS GRÁFICOS EM AVALANCHE 81S-B20


Tradução manual de programas em Assembly Parte 4: definição dos elementos gráficos

ASSEMBLER PARA O APPLE 238-240 AVALANCHE: MONTE O CENÁRIO 824-833


Um programa montador escrito em BASIC Parle í: definição gráfica do cenário do jogo

ASSEMBLER PARA O SPECTRUM 248-252 AVALANCHE: RISCOS E PRÉMIOS 941-946


Um programa montador escrito em BASIC Parte 6: perigos e recompensas

ASSEMBLER PARA O TRS-COLOR 296-300 AVALANCHE: A ROTINA PRINCIPAL 969-971


Um programa montador em Assembler Parte 7: rolina de inicialização do jogo

FIGURAS MÓVEIS 316-320 AVALANCHE: ACERTO DAS VARIÁVEIS 995-999


Animação de gráficos no Apple e no ZX-81 Parle 8; rotina de sincronização

MOVIMENTE FIGURAS NA TELA 341-347 AVALANCHE: CONTE OS PONTOS 1001-1008


Criação e animação de blocos gráficos: tanques e sapos Parte 9: rotina de contagem de pontos

RASTREAMENTO NO SPECTRUM 381-387 EFEITOS SONOROS COMPLEXOS 1027


Programa para a localização de erros Efeitos de tiro laser no Apple e no TK-2000

ASSEMBLER PARA O MSX 401-405 AVALANCHE: O VOO DAS GAIVOTAS 1028-1031


Um programa montador escrito em BASIC Parle 10: rotinas de movimentação das gaivotas

GRÁFICOS INSTANTÂNEOS 406-413 SONS E RUÍDOS NO TRS-80 1032-1033


Mais blocos gráficos e conversão binária 'hexadecimal Rotinas em linguagem de maquina para O BASIC

DRAGÃO ANIMADO 474-477 PERIPÉCIAS NO MUNDO DE NETUNO 1056-1060


Blocos gráficos binários em animações complexas Parle II: movimentação do mar em Avalanche

O BASIC NA MEMÓRIA 513 AVALANCHE: O TEMPO FECHA 1076-1080


Listagem de programas armazenados na memória Parle 12: efeitos meteorológicos

UM COMPACTADOR DE PROGRAMAS 536-540 AVALANCHE: AS PEDRAS ROLAM (I) 1116-1120


Programa utilitário de compressão para o TRS-Color Pane 13: primeira parte da rotina de movimentação

EFEITOS SONOROS NO SPECTRUM 556-560 AVALANCHE: AS PEDRAS ROLAM (2) 1128-1132


O uso de BEEP e OUT para a obtenção de sons Parte 14: segunda parle da rolina de movimentação

COMO FUNCIONA O GERADOR GRÁFICO 565-569 AVALANCHE: A ESCALADA 1146-1154


Listagem em Assembler do programa de animação gráfica Parte IS: Willie começa a andar

AMPLIE O BASIC DO TRS-COLOR 597-600 AVALANCHE: OS SALTOS DE WILLIE 1168-1175


Novas instruções e funções para o BASIC Parte 16: primeira parte da rolina de salto

UM RELÓGIO NA TELA 658-659 AVALANCHE: MAIS SALTOS LI 86-1 193


Programação de interrupções e suas aplicações Parle 17: segunda parte da rolina de salto

Vol. 1 — pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 — pàg. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIIIIIHI SUMÁRIO GERAL mm
AS CINCO VIDAS DE WILLIE 1208-1213 TV VERSUS MONITORES 851-854

Parte IS: rotinas de marte, sons e finalização Selecione o vídeo mais adequado para seu micro

AVALANCHE: PONTOS GANHOS 1228-1233 A ESCOLHA DA MEMÓRIA AUXILIAR 876-880

Filas e discos: características e funcionamento


Parte 19: marcação de pontos e aumento da dificuldade

AVALANCHE: AS COBRAS VIVEM! 1241-1245 COMO UTILIZAR UM DISQUETE 906-911

Parte 20: rotina de movimentação das cobras O hardware e os comandos de controle do acionodor

CANETAS ÓPTICAS 926-929


AVALANCHE: COMEÇA O JOGO 1271-1276
Parte 21: laço principal de chamada das rotinas Tipos, funcionamento, ligação e aplicações

TABLETES GRÁFICOS 964-968


AVALANCHE: LISTAGEM COMPLETA 1292-1300
Parte 22: despejo hexadecimal paro verificação Dispositivos para entrado de gráficos e desenhos

MOUSE MECÂNICO E MOUSE ÓPTICO 1000

An vantagens de um dispositivo de entrada gráfica

A TORRE DE BABEL 1288-1291 DISCOS RÍGIDOS HM


Funcionamento de discos de alta capacidade
As linguagens de programação: tipos e características

PROGRAMANDO EM LOGO 1314-1320 VIDEOTEXTO E MICROCOMPUTADORES 1200

Introdução a uma linguagem diferente Hardware e software para ligar o micro ao videotexto

O LOGO E A TARTARUGA 1326-1331 ROBÔS CONTROLADOS POR COMPUTADOR 1284-1287

Desenho de gráficos usando o LOCO Uma introdução à robótica aplicada

MÚSICA. MICROS E MIDI 1306-1310


LOGO: ALÉM DA TARTARUGA 1341-1346
Processamento de números, palavras e I islãs Interfaces e software para controle de sintetizadores

SPRITES EM LOGO PARA O MSX 1426-1427 COMPUTADORES QUE OUVEM 13H


da fala em micros
Como definir e utilizar os 36 sprites do MSX em LOCO Periféricos para reconhecimento

PROGRAMAÇÃO EM PASCAL 1436-1439 CONTROLE POR COMPUTADOR 1321-1325

O uso do micro para controlar dispositivos mecânicos


Introdução a uma linguagem estruturada

ESTRUTURAS DO PASCAL 1446-1450 PROCESSAMENTO DE IMAGENS 1470

Os principais comandos e sua utilização Utilização de câmaras digitais e de video

mm
COMO DESCOMPLICAR SAVEs E LOADs 53-55 NÚMEROS AO ACASO "16
Técnicas e cuidados na utilização do gravador cassete O emprego da junção RND

JOYSTICKS 287-291 A ARTE DE FAZER LAÇOS 21-27

Escolho e utilização de um joystick Como o computador repete e conta coisas

COMPUTADORES QUE FALAM 446-448 ENSINE SEU MICRO A TOMAR DECISÕES 41-45

O que são sintetizadores de voz e como usá-los As declarações IF...THEN

AS PLACAS DE SINALIZAÇÃO 76-80


CUIDADOS COM FITAS E DISCOS 488
Organização e manutenção de arquivos Desvios no fluxo dc imn:runhnão tom GOTO £ GOSUB

COMO ESCOLHER UMA IMPRESSORA J21-525 PROGRAME JOGOS A CORES 86-87

Tipos de impressora e sua utilização Como utilizar os recursos gráficos do TRS-Color

O QUE SÃO VARIÁVEIS 96-'™


SUA LIGAÇÃO COM O MUNDO 561-564
O uso do telefone para contatar outros computadores Tipos de variável e seu uso

CONECTE UMA IMPRESSORA 648-652 COMO DESENHAR EM BASIC 113-120

Para que serve uma impressora e como acionà-la Os comandos de desenho do BASIC

VoL I
- pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 - pág. 601 a 900; vol. 4 - pág. 901 a 1200; vol. 5 - pàg. 1201 a 1500.
IIIIIIIIIIIHHHI^HIMHHHHIIIIIIÍ
OS COMANDOS READ E DATA 128-133 EDIÇÃO NO TRS-80 E NO TRS-COLOR 399-400
Comandos para armazenamento e recuperação de dados O comando EDITe suu utilização para modificar linhas

FAÇA PROGRAMAS MAIS CURTOS Hl EDIÇÃO DE PROGRAMAS NO MSX 425


Alguns truques para aumenlur a velocidade em BASIC Modificação de um programa em BASIC

ORDEM F LIMPEZA NO VÍDEO 146-152 FUNÇÕES MATEMÁTICAS 434-440


A Junção TA B e os sinais de pontuação para impressão Cálculo de raízes quadradas, cubos e potências

E AGORA... O QUE FAZER? 161-167 COMO EVITAR ERROS 441-445


Como entrar dados em um programa usando o INPUT Preparação de armadilhas para erros de operação

CRIE SPRITES NO MSX 188-191 COMO COMBINAR PROGRAMAS 456-460


Programação e animação de eraftens baseados em sprites O comando MERCÊ e técnicas para juntar programas

CONJUNTOS: CAIXAS DE INFORMAÇÃO 192-195 ROTINAS DE ORDENAÇÃO 468-473


Utilização de variáveis indexadas e a declaração DIM Técnicas de ordenação binária, de bolhas e Shell

CONJUNTOS DE DUAS DIMENSÕES 201-207 ANIMAÇÃO GRÁFICA NO TRS-COLOR 478-480


Programação de matrizes e tabelas em BA SIC Os comandos GET e PUT e suas aplicações

COMO ESTRUTURAR SEUS PROGRAMAS 221-225 COMO TRAÇAR GRÁFICOS 481-487


Programação estrutiiradu e uso de fluxogramas Aprenda a colocar seus dados em forma de gráficos

RECURSOS GRÁFICOS SOFISTICADOS 232-237 A FUNÇÃO INKEYS NO TK-2000 496-499


Desenho de círculos e arcos em BASIC Como escrever uma rotina para varredura do teclado

CADEIAS DE CARACTERES 241-247 COMO FUNCIONA O PR1NT USING SOO


Funções e comandos para manipular dados alfanuméricos Uma instrução útil para formatação de saídas em BASIC

CÓDIGOS DE CONTROLE 260 APERFEIÇOE SUAS TELAS 501-506


O que são e como usa-los na programação Formatação de textos na tela com PRINT

OS COMANDOS PEEK E POKE 261-268 CONJUNTOS DE BLOCOS GRÁFICOS (1) 526-535


Como examinar e alterar diretamente a memoria do micro Criação e proteção de gráficos

MAIS CÓDIGOS DE CONTROLE 269 CONJUNTOS DE BLOCOS GRÁFICOS (2) 541-547


Truques de programação no Spectrum Montagem de um cenário com blocos gráficos

ORDENAÇÃO PELO MÉTODO DE BOLHAS 292-295 PROTEJA SEUS PROGRAMAS 548-551


Aplicação da programação estruturada Desativação de teclas, auto-carregamento e copyright

RELAÇÕES MUITO LÓGICAS 301-305 ZX-81: EDIÇÃO DE PROGRAMAS 312


Os operadores lógicos AND. OR e NOT Como modificar as linhas de um programa em BASIC

COMO EVITAR E DETECTAR ERROS 311-315 SÍMBOLOS GRÃFICOS NO MSX 553-555


Métodos para localizar e corrigir erros em BASIC O uso de gráficos da ROM em programas em BASIC

BÚSSOLAS E RELÓGIOS 334-340 CONJUNTOS DE BLOCOS GRÁFICOS (3) 570-575


Gráficos circulares e o desenho de bússolas Finalização do cenário com gráficos do usuário

MAIS REQUINTE EM SEUS DESENHOS 354-360 PROGRAMAÇÃO DE GRÁFICOS EM 3-D (1) 581-585
Gráficos circulares e o desenho de relógios Desenhos em forma de grade em três dimensões

TRABALHE COM O CÓDIGO ASCII 361-366 FUNÇÕES SOB ENCOMENDA 608-613


Os códigos de caracteres e seu uso em um programa O comando DEF FN e suas aplicações

CÓDIGOS PARA O MSX 367 MSX: TECLAS PROGRAMÁVEIS 621-626


Controle do vídeo pelo teclado e por programa Utilização das teclas Fl a FIO em programas

ARTE GRÁFICA EM SEU MICRO 388-393 SPRITES PARA O TRS-80 (1) 627
Novas idéias para usar cores em seu micro Os caracteres gráficos e sua utilização

Vol. 1 — pág. I a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. S — pág. 1201 a 1500.
iniHimiiiM»— iiiwi
PROGRAMAÇÃO DE GRÁFICOS EM 3-D (2) 628-633 PROGRAMAÇÃO GRÁFICA DE CURVAS 861-866
Programação de um cubo em três dimensões Como incorporar curvas cónicas a um programa

GRÁFICOS: BARRAS E SEGMENTOS 634-639 OS SEGREDOS DO SPECTRUM (1) 867


Programação de gráficos para diversos lipos de dados Truques de manipulação da tela e obtenção de cores

GRÁFICOS DA ROM NO SPECTRUM (I) 640 MENSAGENS SECRETAS 888-893

O que são os caracteres gráficos pré-programados Cifras, códigos secretos e sua programação em BASIC

PROGRAMAÇÃO DE GRÁFICOS EM 3-D (3) 641-647 ARMAZENAGEM DE NÚMEROS 894-900

Como acrescentar perspectiva a um desenho Como números reais são armazenados na memória

SPRITES PARA O TRS-80 (2) 660 OS SEGREDOS DO TRS-80 (1) 912


Criação e animação de blocos gráficos Organização do vídeo e cópia da tela asm PEEK e POKE

GRÁFICOS DA ROM NO SPECTRUM (2) 661 MANCHETES E LETREIROS (1) 913-920


O uso dos símbolos gráficos dentro de programas Como desenhar caracteres de grandes dimensões

SPRITES PARA O TRS-80 (3) 669 MANCHETES E MAIS MANCHETES 921-925

Blocos gráficos complexos e sua animação Invente e utilize novos tipos de letras em BASIC

SIMULAÇÃO: FAÇA A BOLA ROLAR 670-678 ACELERE SEUS PROGRAMAS 930-935

.4 matemática è a programação de corpos em movimento Técnicas para aumentar a velocidade de execução

RECORRA AOS ARQUIVOS 687-692 OS SEGREDOS DO TRS-80 (2) 947


Programação de arquivo de dados em BASIC A função VARPTR; uma rotina de cópia de tela

PROGRAMAÇÃO DE GRÁFICOS EM 1-D (4) 693-700 ROTINA EM CÓDIGO DE MÁQUINA (1) 972-973

Esferas e círculos em perspectiva Introdução de rotinas em código no BASIC

DE OLHO NA TELA 7IS-720 ALAVANCAS, POLIAS E ROLDANAS 981-987

Detectando colisões: comandos A TTR, PEEK e POINT Princípios da mecânica c programas para demonstrá-los

MÚSICA EM SEU MICRO 721-727 CONTROLE POR TECLAS MÚLTIPLAS 988-993

Transforme o computador em um instrumento musical Instruções e um jogo como exemplo

SÍMBOLOS GRÁFICOS NO TK-2000 734-737 OS SEGREDOS DO TRS-80 (3) 994


Como utilizar os caracteres gráficos pré-programados Mais usos para VTRANSE: gravação e leitura de telas

MAIS TÉCNICAS DE ORDENAÇÃO 738-740 TOCANDO EM HARMONIA 1009-1015


Técnicas de substituição, espalhamento e inserção Programação de acordes em três canais no MSX

PROGRAMAÇÃO DE MELODIAS NO MICRO 741-747 MONTAGEM DE DESENHOS 1021-1026

Acrescente timbre e ritmo ao programa musical Técnicas de ampliação e deslocamento de gráficas

TUDO QUE SOBE. DESCE 766-773 MATEMÁTICA DO CRESCIMENTO 1061-1068

Programação da dinâmica de objetos voadores O computador na análise do comportamento

ACASO E PROBABILIDADE 774-780 AFINAL. QUAL É O SEU SOM 7 1081-1085

Simulação de cara e coroa e a medida de probabilidade Explore a tecnologia de digitalização de sons

SIMULAÇÕES ESPACIAIS 781-787 NOVAS MENSAGENS SECRETAS 1091-1095

Programas para desenhar trajetórias e órbitas Mais tipos de códigos e técnicas para decifrá-los

FIGURAS GEOMÉTRICAS 801-807 PÁGINAS GRÁFICAS 1096-1100

Exploração de cones, curvas e seçàes circulares Técnicas de animação usando sequência de telas

CRIE SPRITES COM VPEEK E VPOKE 808-814 ARMAZENAGEM DE PROGRAMAS 1101-1107

Técnicas avançadas de criação de sprites no MSX Como um programa é armazenado na memória

PALETA ELETRÓN1CA PARA O TK-2000 846-850 SIMULAÇÃO E PREVISÃO 1121-1127

Um programa para desenhar gráficos em cores Cálculos de probabilidade e suas aplicações

Vol- 1 — pág. I a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; voi. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIIIIIIIHMHHHHBMHHUIIIIIIIIII
MAIS SOBRE PÁGINAS GRÁFICAS 1141-1145 DESENHOS EM PERSPECTIVA 1391-1395
Sofistique os programas de animação gráfica Técnicas para acrescentar profundidade a um desenho

PADRÕES NATURAIS 1161-1167 FORMATAÇÃO DE TELAS 1395-1397


Pontas, curvas e órbitas para gráficos complexos Entrada de dados formatados no Apple e no TK-2000

MODELOS DA REALIDADE 1176-1180 MAIS OPERAÇÕES COM CADEIAS" 1401-1403


Predição de eventos reais com o uso da função RND Recuperação e substituição de subcadeias

MODELOS E SIMULAÇÃO 1 181-1 183 OS SEGREDOS DO TRS-80 (5) 1412-1413


O que são e como aplicá-los Programação com o teclado tPEEK e INKEYS)

FIGURAS TRIDIMENSIONAIS 1194-1199 ROTINAS EM CÓDIGO DE MÁQUINA (2) 1419-1420


Como produzir formas usando sólidos de rotação Como colocar códigos de máquina em linhas DA TA

COMPRESSÃO DE MELODIAS 1201-1207 FORMATAÇÃO DE VALORES , 1440


Técnicas para a redução do espaço na memória Formatação rápida para impressão de números

OPERAÇÕES COM CADEIAS 1214-1215 IMPRIMA SEUS DESENHOS I441-144S


Funções para remoção e conversão de caracteres O uso da impressora na produção de gráficos

TÉCNICAS DE RECURSÃO 1221-1227


Emenda como um programa pode chamar a si mesmo PROGRAMAÇÃO DE JOGOS
O SISTEMA OPERACIONAL 1246-1251 ANIMAÇÃO E SINAIS GRÁFICOS 4-10
Endereços de acesso e truques Animações complexas com os gráficos da ROM
COMO LIDAR COM ARQUIVOS 1252-1256 APONTAR.,. FOGO! 28-33
Métodos básicos de leitura e gravação de dados Como disparar um míssil com GETS e INKEYS

CONTROLE A ENTRADA DE DADOS 1259-1260 DIVIRTA-SE COM LABIRINTOS 46-52


Uma rotina para simular um INPUTcom mais recursos Movimente um come-came em labirintos criados por você

OPERAÇÕES COM DATAS 1279-1280 MARQUE O TEMPO E OS PONTOS 61-67


Compressão e conversão de datas Técnicas de competição em um jogo de campo minado

DIVERTIMENTOS MATEMÁTICOS 1301-1305 ATAQUE EXTRATERRESTRE 101-108


Resolução de quebra -cabeças lógicos e matemáticos Um jogo com espaçonaves blindadas e mísseis

OS SEGREDOS DO TRS-80 (4) 1312-1313 BOMBARDEIOS E EXPLOSÕES 121-127


Coordenadas de tela e truques com o teclado Blocos gráficos para produzir explosões e incêndios

OS SEGREDOS DO SPECTRUM (2) 1340 TORNE O JOGO MAIS DlFlclL 153-160


As variáveis de sistema e suas aplicações Como criar níveis de dificuldade no jogo de labirinto

FUNÇÕES PODEROSAS 1347 QUEBRE A BARREIRA DO SOM 168-173


O emprego do DEF FN no TRS-80, TRS-Color e MSX Efeitos sonoros para seus jogos

PAPEL, PEDRA, TESOURA 1348-1355 COMO PLANEJAR UMA AVENTURA 208-212


Técnicas estatísticas para dar inteligência a um jogo Introdução ú técnica de criação de jogos de aventura

A MATEMÁTICA DA IRREGULARIDADE (1) 1356-1360 O MAPA DA AVENTURA 226-231


O que são dimensões fracionadas e fractais Planejamento do ambiente

DOMINE O VlDEO DO MSX 1361-1366 COMO MOVIMENTAR O AVENTUREIRO 270-275


Controle da tela e programação de caracteres Deslocamento do jogador pelo cenário

A MATEMÁTICA DA IRREGULARIDADE (2) 1372-1377 OS OBJETOS DA AVENTURA 306-310


Flocos de neve e montanhas desenhados com fractais Definição dos objetos e programação das ações

BITS E BYTES EM BASIC 1378-1380 A CONCLUSÃO DA AVENTURA 321-327


Funções para acesso direlo aos bits de uma memória Instruções, perigos e avisos

Vol. I — pág. I a 300; vol. 2 — pág. 301 a 600; vol. 3 — pag. 601 a 900; vol. 4 — pag. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIHHHHBM— lllllllllll
O JOGO A RAPOSA E OS GANSOS (1) 90I-W15
PROGRAMAÇÃO PARA JOYSTICKS 348-353

Uma alça de mira controlada pelo joyslick Segunda parle do programa

TIRO AO PATO O JOGO A RAPOSA E OS GANSOS (3) 948-954


UM JOGO DE 368-373
Programação de um jogo com utilização do joyslick Terceira parte do programa

CRIE SUA PRÓPRIA AVENTURA 394-398 A ARANHA MARCIANA (1) 955-960

Ptanejamenio e programação de aventuras diferentes Um videogame de ação: Freddy combate as aranhas

PROGRAME UM CARTEADO 426-433 O JOGO DA VIDA 961-963

um jogo de cartas: embarathando Simulação de uma colónia de bactérias no micro


Primeira parte de

O COMPUTADOR DA AS CARTAS 449-455 A ARANHA MARCIANA (2) 974-980

Segunda parte: a vez do jogador Segunda parte do programa

AS REGRAS DO JOGO 461-467 JOGOS DE GUERRA: PRIMEIROS PASSOS 1016-102(1

Terceira parte: a vez do computador Simulação de um campo de batalha

O DIVERTIDO JOGO DA COBRA 514-520 JOGOS DE GUERRA: O MAPA DA BATALHA 1034-1040

Programação de um jogo de números Segundo parle do jogo

UM SIMULADOR DE VOO (I) 592-596 JOGOS DE GUERRA: A ARTE DE COMANDAR 1041-1048

Desenho do painel de comando Terceira parte do jogo

UM SIMULADOR DE VÔO (2) 601-607 JOGOS DE GUERRA; ÀS ARMAS 1069-1075


Quarta parte do jogo
Colocando o avião em movimento

INTELIGÊNCIA MILITAR 1086-1090


FELIZ ATERRISSAGEM 653-657
Última parte do simulador: controle pelo teclado Última parle do jogo

UM JOGO DE ESTRATÉGIA 662-668 O JOGO DA SENHA 1139-1140

Simulação da administração de uma mina de ouro Um jogo de adivinhação de sequencias de cores

SERRA PELADA: O TOQUE DE MI DAS 681-686 OS DADOS VÃO ROLAR 1234-1240


Programação dc lale. tradicional jugo de dados
Parte final do jogo de estratégia

ADIVINHAÇÃO DE PALAVRAS 701-705 O PINTOR ALOPRADO 1277-1278

Programação de um jogo educacional Um videogame de ação rápida

COMPLETE O JOGO DE PALAVRAS 728-733 COMPRESSÃO DE TEXTOS (!) 1332-1339

Segunda parle do programa Técnicas de compressão de lexios em aventuras

O JOGO DO OTELO (I) 756-760 COMPRESSÃO DE TEXTOS (2) 1414-1418


Esquema duplo de codificação e método chinês
Programação da tabuleiro e do movimento das peças

O JOGO DO OTELO (2) 796-800 COMPRESSÃO DE TEXTOS (3) 1428-1435

Programação das jogadas Como adaptar o programa de aventuras ao compressor

MÓDULO LUNAR: COMANDE O POUSO 821-823


Um jogo completo de pilotagem espacial

O BANDIDO DE UM BRAÇO SÓ 855-860 PROCESSADORES DE TEXTOS 1381-1385

Simulação de uma máquina caça- níqueis Características dos programas de processamento

O JOGO A RAPOSA E OS GANSOS (I) 872-875 TROCA DE MENSAGENS 1404-1407

Introdução a um jogo que usa inteligência artificial Quadros de aviso e intercomunicação entre micros

O BANDIDO DE UM BRAÇO SÓ (2) 881-887 GERENCIAMENTO DE BANCOS DE DADOS 1464-1469

Segunda parte do programa de caça-ntqueis Sistemas disponíveis e suas possibilidades

Vol. 1 - pág. I a 300; vol. 2 - pág. 301 a 600; vol. 3 - pág. 601 a 900; vol. 4 - pág. 901 a 1200; vol. 5 - pág. 1201 a 1500.
SUMAUtOGim

SUMÁRIO
DOS QUADROS
Existe uma maneira de se programar em Assembler no ZX-81? .. 251
Qual a velocidade de datilografia que devo tomar como meta para
começar? 237
Como acentuar textos em português em um microcomputador? .. 280
Como funciona um conversor analógico-digital? 291
Como o computador é capaz de repetir trechos de um programa . 27 tamanho dos números usados em
Existe limite para o e OR? AND .. 305
O longo ttajeto do ábaco a eletrômca 40 Deve-se seguir alguma regra ou modificar as frases do programa? 333
O sistema ocial 60 Qual o tamanho do maior circulo desenhado pelo computador? .. 340
O que é uma base de dados? 73 Podemos usar joysticks nos outros programas de jogos já publica-
l;ma técnica de animação de blocos gi ... nos microcomputador dos em INPUT? 3S2
rei da linha TRS-80 160 O que fazer para transformar o desenho do pato em um alvo
Como calcular a velocidade da bola 678 diferente? 373
Ditas para acelerar seu BASIC 932 O que acontecerá se houver um erro em meu programa-fonte? ... 402
Modelos experimentais 1359 Que sistema de numeração —
binário, decimal ou hexa é melhor —
usar nas linhas DATA? 410
Por que recebo uma mensagem de erro quando tento calcular a rajz
quadrada de um número negativo? 440
Existeuma forma simples de combinar programas no ZX-81? .... 4S8
Posso modificar os programas de modo a misturar dados positivo*
e negativos em um só gráfico? 484
0 que é escalamento? 4(6
Quantas portas existem? SS8
Quais são as principais diferenças entre o editor de tentos de INPUT
e o» editores vendidos nas lojas especializadu? 380
Como se especificam os intervalos de números aleatórios? 13 Posso colonr * irei r ames? 385
Os comandos ou palavras-chave em BASIC, lais como PRINT.GOTO, Só há uma Forma de o micro aceitar instruções adicionais? 600
STEP etc, precisam ser digiiados sempre em leiras maiúsculas? 23 Como melhorar a velocidade de execução do simulador de vôo? 607
Como devo procedei para manter um registro dc todas ai variáveis Posso modificar o programa para desenhar imagens uiferentes? .
630
usadas em meus programas? 26 Como assegurar bons resultados na procura de ouro? ., 663
Posso escolher qualquer tecla para operar os controles de um jogo Como variar a velocidade de simulação do movimento? 674
no microcomputador sem me perder entre tantos Xs e Ys7 31 O que é um Disassembler? 680
Por que o meu programa "bomba" (isto é. falha) se, num jogo qual- Há alguma Forma de se acelerar o desenho da estação espacial? 699 ..

quer, a figura que esta sendo movimentada atinge a borda da tela? 32 É possível transformar o programa em um jogo de palavras
Posso combinar dois ou mais IF...THEN em uma única linha? .... 44 cruzadas? 704
Por que ocorrem erros quando temo rodar programas digitados? .... 44 Como modificar o programa para trabalhar com arquivos em disco? 709
O sistema hexadecimal parece difícil c complicado. Não seria possí- Como usar o monitor- Disassemblér? 714
vel passar sem ele? Afinal, é realmente necessário aprendê-lo para Por que as programa nos microcompu-
teclas musicais criadas pelo
operar em linguagem de máquina? 60 tadores da linhaTRS-Color não tém auto- repetição? 726
Como devo fazer para reconverter de hexa para decimal? 60 A duração de uma nota pode ser controlada pelo tempo em que a
Existe algum limite máximo para o período de medida de tempo? .. 67 tecla se mantém sob pressão? 726
Como funciona o cronometro interno de um microcomputador? .. 67 Por que as linhas em que há a instrução CALL diferem nos progra-
Qual a diferença enlre gráficos de baixa, média c alta resolução? 120 mas do Apple e do TK-2000? 732
O TRS-80 pode ser usado para desenhar em BASIC? 120 Como o computador produz sons? 743
Quando posso utilizar o sistema decimal codificado em binário (BC D)? 145 Qual a diferença entre os comandos outi e otir no MSX? 792
Que problemas podem ocorrer com laços múltiplos? 206 Como adaptar um jogo que utiliza peças coloridas para um micro
Quanto espaço de memória necessito para escrever um jogo de com vídeo monocromático? 800
aventura? 212 A agenda é uma espécie de banco de dados? 871
O que devo fazer se cair numa armadilha durante a aventura? ... 212 Qual a utilidade dos códigos? 892
lí possível colocar textos na tela gráfica do Apple II? 237 O que é Inteligência Artificial? 905
O que fazer quando um programa longo — como o Assembler — Quais são as vantagens da utilização de cartuchos de programas em
não funciona depois de digitado? 240 vez de fitas e discos? Posso gravar meus próprios programas em
O que acontecerá se houver um erro em meu programa-fonte? ... 251 um cartucho? 911

Vol. 1 — pág. I a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500. un
^''''^
O BASIC é

F.

O
maquina
muilo lento e eu não gosto de programar em código de
Tenho outras opções?
possível usai utn sintetizador de voz paia
que é roll-ovei?
animai o jogo?

microcomputadores para a produção


925
963
Para
Como
uma ordenação
comparar dados
Faça música no Spectrum
mais rápida

Adicione seus próprios comandos


Hora da teta
.

É possível adaptai os demais


1014 Aperfeiçoe os programas
de acordes?
1040 Caractere» invertidos
O que í uma simulado aleatória?
1083 Utilização de modelos dinâmicos
O que é análise espectral?
ROM no programa em Assembler 680
Utilização das rotinas da j
Hâ vantagem em se cnptografai um programa de computador? 1094

Quantas variáveis cabem na memória? \126 Como melhorar a nitidez


Manipulação de cordões
Por que não usamos sprites para representar as pedras no MSX?
1 132
1140 Nâo perca seus dados
Como chegar mais rapidamente à sequencia correia das cores?
O que é uma planilha integrada? 160 1 0 mini-Assembler
Selecão de partituras
É possível realizar em um micro animações gráficas cm três dimen-
aparecem na TV? II" Como é feita a simulação de u n movimento .

sões como as que


O processador do TRSColor
Como uma cadeia * armazenada na memória do computador? ., 1215
12S4 Programação de matrizes
Como gravar dado* em fila cassete no Apple e no TK-2000?
1260 Parábolas c hipérboles
O que faz a instrução LINE INPUT?
Como calculai datas em um progtama de calendário
Hâ tobós para micros no Brasil?
Cuidados especiais com linhas DATA
O que e edição em tela completa?
meu LOGO que estão em Condições de visualização
Como posso tradimi os comandos de
inglês? lJ » Aplicações profissionais do programa de agenda

O que í um micromundo LOGO? 2 1 " Como ligar e desligar o acionador


1346 Como usar a impressora paia confeccionar cartazes e fanas
Quais as etapas para o desenvolvimento de uma nova linguagem?
Existe alguma aplicação prálica para os fractais? 1360 Como modificar o timbre
Idéias para o jogo
Qual é a vantagem de empregar cadeias alfanuméricas, em vez de con-
juntos numéricos, para armazenar grupos de bits? 1380 Aplicação em jogos

Como funciona um sprite? 1427 Fazendo previsões


É possível comprimir sons e melodias em jogos de aventuras? ... 1430 Leitura c escrita na VRAM do MSX
Use a planilha com mais eficiência
Mais melodias
Programas longos: melhore a velocidade de montagem
Aplicações para a tot ,na >"*
2 '"
Como aperfeiçoaar o programa '

„„.„,. 13t2

Conversão para o
c Ml.OGO 1319
MLOGO lUl

Como interromper um programa MLOGO 1344

computador 13»
Use o laço orno
Melhore a qualidade do !
Um modelo para números em diferentes base*
• Varredura do teclado
Os operadores lógicos
Transcrição de partituras
Conversão do Color para o TRS-80
Exterminador de problemas
Acentuando textos compi
Funções de conversão hexadecimal
Como tornar um programa longo mais fácil de digitai
O que é um spnte?
Organize melhoi os comandos DATA em un
Como contar "em computes
Efeitos sonoros no TRS-80
Planejamento de sprites
Conjuntos de cores no TRSColor
DATA Variáveis: o que voei pode e nào pode usar
Como editar uma linha
REM Tabela de código ASCII
Como usar a declaração
Como detectar erros em programas longos PEEK e POKE de teclado do TRSColor
Tabela de localização de códigos de erros
Como aumentar a velocidade de digitação
programas longos Sumário dos comandos de FD1T
Tabela de códigos de tecla
A apresentação de ut
Caracteres do PRINT USING
Descubra os códigos
programas longos Caracteres gráficos do MSX .

Programas editores Caractetes gráficos para o IK-2000


Tabela de conversão de escala musical
Cotes no Specirum
Tabela de conversão de escala musical para o MSX
Detecte erros automaticamente
Variáveis do sistema para o Spectrum

- pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 - pág. 601 a 900; I
- pág. 901 a 1200; vol. 5 — pàg. 1
1 1

illlllHIlllMM—^MMMliHllllll
Anagrama (programa) 242-244 - desenho com DRAW 116.237, 318, 343-344
Análise espectral 1083 - diferenças do CALL com TK-2000 732
- em sislemas dc reconhecimento da fala 131 - efeitos sonoros 266.712-714. 1027
Análise sonora 1081-1085 - escritana tela de alta resolução 534-535
Analógico-decimal. conversor V. Conversor - gravação de dados em Hia cassete 1254
umilt iiiiai-decimat - interpretador LOGO 1317
Análogos, modelos 1176 - joystiçks 291
AND 43, 301-304 - organização da memória 179-181

[LOGO) 1344 - limite para tamanho dos números 305 APPLESOFT 179
tbstralos, desenhos 358-360 - na manipulação de bits 1335, 1378 APRENDA 1319
Aon 774-780. 1176-1180, 1181-11 Andamento 744-745 (!'./. Música) Aranha Marciana. A (programa) 955-960.

(Kr. Aleatórios, números) Animação gráfica 4-10, 316-320, 341-347, 974-980


- utilização em jogos de simulaçãc 406-413. 474-477 Arco co-seno 613
Aceleração de um enrpo 770 alça de mira 348-353
478-480 - desenho de 232
Acentuação bicicleta
- bomba moto-continua 1 141- 1 145 Arco seno 613
comprimidos 143
1097-1098 - comparação entre quadrados
cubo
- arquivos aleatórios 688. 1467 - dançarino 6-8 (programa) 436-439
dragão 474-477 -conversão de medidas (programa) 374-380
- arquivas sequenciai* 687. 1466
- direio à memória V. PEEK e POKE n Avalanche 1028-1031. 1
076- 1
-simulação do crescimento 1063
- rcmoio 561-564, 1404-1407 1116-1120. 1128-1132. 1146-1154, Áreas da memória
1168-1175, 1186-1193. 1241-1245 - atributos 175
- senhas (programa) 166-167, 888-893,
1091-1095, 1260 - figuras tridimensionais 1 194-1 199. 1391 1395 - edição 175
Acidentes musicai* 743-744 - foguete 2S-33 - entrada e saida 180
helicóptero 10 - exibição 175
Acoplador acústico 564 -

Acordes musicais 1009-1015 - míssil 28-33 - informação de canal 175

Acumulador 1UCP) 1 10 - monstro 319-320 - matrizes (MSX) 179

ADA 1288-1290 - motocicleta 316-318 - programa


ADDB 199 - nado parabólico 863-864 no MSX 179
Adivinhação - no Apple 316-318 no Spectrum 175
-de palavras (programa) 701-705. 728-733 - no TK-2000 316-318 no TRS-80 178
-jogos 12-13. 42-43 - no TRS-Color 478-180 no ZX-81 177
- jogo Senha (programa) 1 139-1 140 - no TRS-80 120, 160. 669 - irabalho
Agenda tk Irónica (programa) 834-840. - no ZX-81 319-320 Apple 180
841-845, 868-871 - sapo 344-347 Spectrum 176
- aplicações profissionais 870 - sprites em LOGO 1426-1427 ZX-81 177

Agenda telefónica (programa) 1 29 - submarino 316-318 -usuário 180


Alarme anliladrões 1322 - tanque de guerra 342-347 - variáveis

Alavanca 982-984 - técnica de paginação 1096-1100. 1141- 145 no Apple e no TK-2000 180

Alça V. Laços - trajetórias 670-678. 766-773, 781-787. 166 no MSX 179


Alça de flla 877-878, 908 Apagamento no Spectrum 175
Alça de mira (programa) 348-353 - da tela 12. 52. 118, 393. 1318 no TRS-Color 178
Alça fechada (sistemas de conlrolc) 1323 - de arquivos em BASIC 911.940 no TRS-80 178
Alealória. distribuição 777-780. 1176-1177 - de arquivos em LOGO 1330 no ZX-81 177.
Aleatórios, números 11-16, 1121-1127, - de linhas 425, 911. 940. 12BI-1283 Aritmética hexadecimal 56-60
1176-1180. 1181-1185, 1344 - rotina de (Spectrum) 1281-1283 Aritméticas, expressões V. Expressões
Alfa-bela, algoritmo 874 APAGUEDESENHO 1318 aritméticas e Operações

Alfabetização (programa) 390-391 APAREÇATAT 1329 Armazenagem


V. I. Ordenação) APL 1288 - de datas 1279
(

Alfanuméricas, variáveis 13. 99-100. 194-195. Aplicativas, linguagens 1290 -de números 894-900.1101-1107
1101-1107, 1215 (Kl Cordões) Apontadores -de programas em BASIC 1101-1107
ALGOL 1288-1290, 1436 - cm blocos gráficos 528-529 - de leia 947. 994
Algorítmicas, linguagens 1290. 1436 - na memória 174-180 - de variáveis M0I-I107, 1215
Algoritmo 1437 - na UCP 109-112 - em DATA e arquivos
Apple (comparação) 252-1 256
- alfa beta 874 1

- linguagens algorítmicas 1290, 1436 - acionadores de disquetes 906-907 Arquilelura interna


Alice, impressora 1442-1443 - animação gráfica 316-318 -6502 112
Alisamento exponencial 1349 - áreas da memória 180 -6809 112, 793
Alofõnico, sintetizador 446-448 - Assembler (programa) 238-240 -Z-80 111-112
Alunissagem (programai 821-823 - Autosiart ROM 1249 Arquilelura por computador 1367-137),
Amostragem 1126, 1176-1177 - CATALOG 269 940
,
1386-1390
- aplicações - CHRS 269 ARQUIVOS 1330
- círculos (desenho) 1 17-1 18 Arquivos 75. 1464 V,t. Banco de dados)
(

produção digital de 743 - códigos de controle - acesso direto 688. 1467


sistemas de reconhecimento da fala 1311 -COLOR 116 - apagamento de 940
- área dc blocos de conlrolc (MSX)
tabletes digiiali/adores 967 - compilador PASCAL 1438-1439 179

Ampliação de caracteres (programa) 913-920, - controle dc vídeo 503 - buffer 690


921-925 -cores 1250 - comparação com armazenagem em
Ampliador gráfico (programa) 1049-1055 de uir DATA 1252-1256

Vol. 1 — pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. :


- pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 - pág. 120! 1500.
IIIIIIHIIlUHMiHHnHHHIIIIIIIIII
- controle de 692 Bactérias , Simulação
- de nomes 908-910 Atrito, simulação de 673 Balística 766-773, 781-787. 1161-1163
-em LOCO 1329 ATTR 47, 155. 369. 716-720 Banco de dados 706-71 1, 1464-1469
- formam ASCII 688 Atuadorr-, 1322. 1324 - acesso remoto 561-564. 1404-1407
- mestre 1464 Aulocarrrgarncnlo dr pruaramav 549-550 -agenda 871
sequenciais 1466 Autodiscagem 1406 - campo-chave 1468
técnicas de programação 687-692, 1252-1256 Auto-rvecueáo de i u- 550 - definição 75. 1464
uso do CHRS (Apple) 692. 1254-1256 Automação - de imagens 1470
- transferências entre computadores 1404 bancaria 1407 - modelos 75
Arredondamento 1347 comercial 892 - pesquisa 81-82. 1468-1469
-erros 899 Aulo-reprliçáo 726 - programa aplicativo 68-75. 81-85, 706-711
Arte piir computador 358-360, 388-393. 1197 no Spectrum 265. 1248 - técnicas de programação de arquivos 687-692
(KA Gráficos) - no TRS-Color 265, 1248, 1251 Bandeira 1 10
aplicações dos fractais 1360 - no TRS-80 1313. 1412-1413 Bandidn de um braço só (programa) V. Caça-
- canetas ópticas926 A uki- resposta 1406 níqueis
- Desenho Auxiliado por Computador Auio-semelhança 1358 Bar (simulação) 1181-1185
(programa) 414-420. 421-424 Auliislun ROM (Apple e TK-2000) 1249 Baralho, naipes do (MSX, TK-2000) 554-555,
- editor gráfico (programa)
846-850, Auloteste em impressoras 649 736-737
1021-1026. 1367-1371, I3B6-I390 Auiiliar. memória 876-880 V.L Disco e Fita) ( Barras, código de 892
-instrumentos musicais digitais 1306-1310 Avalanche Barras, eráficti de Histogramas V.
-mouse 1000 - animação gráfica 1028-1031 BASE 268,531-533. 812,1361-1366
- paginação gráfica 1096 cobras 1241-1245 Base de dados V. Banco de dados
tablete digilalizador 964-968 jogador 1146-1154. 1168-1175. 1186-1193 Bases de numeração 34-40, 56-60
- uso de curvas geométricas 865 mar 1056-1060 - modelos 36
Arvore, busca em 873 pedras 1116-1120, 1128-1132 programa de conversão 35-37, 1281-1283
-

ASC 263. 362, 364. 1214 tempo 1076-1080 BASIC 1288, 1314
ASCII 361-366, 1332 - blocos gráficos S15-S20
arquivos 688
- - cenário 824-833 operacional 1246-1251
códigos de compressão 1332
- - contagem de pontos 1001-1008, 1228-1233 - apagamenlo de arquivos 940
- comparações entre códigos 364 controle dc vidas 1208-1213
- - armazenagem de números 894-900
- correspondência com códigos de teclado 969-971
- controle global - armazenagem dc variáveis 1101-1107. 1215
(TK-2000) 499 - efeitos sonoros 788-795 -atribuição 13. 96, 933
- tabela 263 - estrutura getal 748-755 - cálculo de datas 840
- técnicas de programação 361-366 - inicialização 995-999 - compactador de programas

versão brasileira (BRASC1I) 280


- - instruções 761-765 (TRS-Color) 536-540
Ashbv. Ros* 1287 - listagem completa 1291-1300 - comparação com o PASCAL 1436
ASL 199 - moniagem do programa 765 - decisões em 27, 41-45, 78-80. 222-223. 444.
ASR 199 - níveis de dificuldade 941-946, (228-1233, 625-626. 940
Assemhler 1288, 1314 V.t. Código ( 1241-1245 - definição dc funções 608-613
de máquina) - programa principal 969, 971, 1271-1276 - entrada de dados 161-167
- códigos operacionais 2 - riscos e prémios 941-946 - extensão de comandos
- definição 2 - spriles 815-820 no Spectrum 1281-1283
- geração dc blocas gráficos - variáveis 995-999 no TRS-Color 597-600
(programa) 565-569 - võo das gaivotas 1028-1031 - interpretador 1247-1248
- moniagem dc programas longos 1244 A>enlura, jogn de 208-212, 226-231, 270-275, - manipulação dc bytes 1378-1380
- para o Apple II (programa) 238-240 306-310, 321-327, 394-398 - organização de programas na memória 513,
- para o MSX (programa) 401-105 - características 209-211 1101-1107
- para o Spectrum (programa) 248-252 - compressão de melodias 1430 - prevenção de erros 441-445
- para o TRS-Color - compressão de textos 1332-1339, - rotinas em código de máquina 972-973
errata 794 1414-1418. 1428-1435 TRS-80 1032-1033
programa 296-300 - criação 211-212. 394-398 - tabela de códigos dc erro 312
- para o TRS-80 (programa) 679-680 linhas de ajuda e instrução 321-327
- - técnicas de aumenlo de velocidade 930-935
-paraoZX-81 251 - lisia de variáveis 397-398 Bauds 1406
- tradução manual 196-200, 213-219 - mapeamento do ambiente 226-231 BC D 111, 145
- uso do CLEAR 217 movimentação do aventureiro 270-275
- Beasty 1286 (V.t. Robôs)
- vantagens em relação ,io codiuo dc máquina 3 - origem e (ipos 208 HLLP (Spettrtim) 168-170
Assembl) V. Assemhler - planejamento 208-212 BECIN 1438
Assimetria 1372-1374 - programação dos objelos 306-310 Bell, padrão 1405
Assistente para o DOS (programa) 936-940 - tipos de mensagens e textos 1430 BEQ
Astrologia (programai 1261-1270 - no 6502 99 1

ATN 771 - no 6809 200


AT RI BI' A 1345-1346 Bequadro 744
Atribuição V t. Expressões aritméticas e
I
Bernoulli. processos de 1176
Expressões lógicas) Bicicleta (animação gráfica) 478-480
- em BASIC 13, 96, 933 Bimodal, distribuição 1454
- em LOGO 1345-1346 Binária, pesquisa 873, 934, 1468
-em PASCAL 1438 Binário
Atributos, área dc (memória) 175 BACK 1287, L118 - circuilo5 eletrõnicos 40
Atributos de tela H5, 716-720, 814 Back-up 488. 878. 908 - codificação em decimal (BCD) 111, 145
- no MSX 515. 814 Backus-Naur Form 1446 {V.t. PASCAL) - conversão do decimal (programa) 38-39

Vol. | — pág. 1 a 300; vol. 2 — pág- 301 a 600; vol. 3 - pág. 601 a 900; vol. 4 - pág. 901 a 1200; vol. 5 - pág. 1201 a 1500. jtfg
ÍNDICE REMISSIVO lllllllllll
mniiiiii
- conversão para hexadecimal (programa) 56-60 BUTF1RST 1345-1346
- definição de UDGS 406 BUTLAST 1345-1346 no TK-2000 499, 734-737
- fraçôes em 38 Byte 144 no TRS-80 627, 660, 669. 1413
- multiplicação em 37-39 - definição 38 técnicas de animação 4-10

na criação de sprites 808-811 - manipulação cm BASIC 1378-1380 uso do CHRS V. CHRS


números negativos 142-145 - utilizados no PRINT US1NG 500
- sistema de numeração 37 Caractere! de controle V. Códigos
- Técnicas de uso em BASIC 1378 Caracteres definidos pelo usuário 341-347,
B1NS 814 489-495, 507-512, 526-535. 541-547, 570-575
Binomial, distribuição 780 1 V.t. Caracteres e Sprites)
BIOS 1248 - definição c animação 406^113
Bil
- em Avalanche 815-820
- definição 38 - modificação 373. 406-413
- em padrão de transmissão de dados 1406 - no Apple 534-535
mais e menos significativo 144 Cabo para gravador cassete 54-55 - no MSX 1361-1366
- manipulação de 1335. 1378-1380 Caça-niqueis (programa) 43-45. 855-860, - no Spectrum 122. 341-347. 529
BilPadOne 965 |Kl. Tablete dtgttalizador) 881-887 - no TRS-Color 478-480, 535-536
Blefe. Joros de 1348-1355 CAD V. Desenho Auxiliado por Computador no TRS-80 627, 660. 669
-

BLKOUT 1250 Cadeias V, Cordões programa gerador em Assembler 565-569


-

BLO 219 Caixa postal V, Quadros de avisos técnicas de programação 406-413


-

BLOAD 55. 93-94 Calculadora (programa) Característica (notação cieniirica) 894


Blocos de conlrole (MSX) 179 - MSX 625-626 Cardápio V, Menu
Blocos de informação 879 Cálculo Carregamento
no TRS-Color 1217 - de datas 840. 1279-1280 autocarregiimemo de programas 549-550
-

Bloem, gráficos 86-87 (Kl. Caracteres) - de trajelórias 677-678 - comandos K CLOAD. t.OAD
-animação 341-347. 406-413 V.t. Animação (
- estatístico 1176-1185 cm LOGO 1330
gráfica) - folhas de V. Planilha eletrõnica - rotinas em código de máquina 93-94. 973
- apontadores 528-529 - infinitesimal 772 CARREGUE 1330
-combinação 541-547.570-575 - lógico 302-305, 334-340, 359-360 Carro (desenho) 389-390
-criação 489-495. 507-512, 526-533, matemático 434-440.608-613.1312, Garry 110
541-547. 570-575 1342-1344, 1347 Carias
- criação de sprites 107. 188-191. 808-811, - probabilistico 277. 774-780 - cm processadores de textos 1384-1385
1426-1427 (KJ. Sprites) - sistemas de 1304-1305 - programa de impressão 17-20
- em Avalanche 815-820 Caleidoscópio (programa) 25-26 Cartuchos 911
- no Spectrum 122 Calendário CAS: 1255
-no TRS-80 160.627 660. 669 .
- agenda clctrõnica (programa) 834-840. Casa (desenho) 131-133
- programa gerador cm Assembler 565-569 841-845. 868-871 CASE 1291, 1448
BNE 219-220 - cálculo de datas 840, 1279-1280 Castelo (desenho) 133

BNF 1446 CA IX 220, 240, 503, 1249 CATALOC


Bola. movimento da 670. 678 {V.t, Animação - diferença entre Apple e TK-2000 732 em LOGO
- 1330
gráfica e Simulação) Câmara - no Apple 269. 940
Bolha, ordenação lipo 292-295, 469^171 - CCD 1470 Catástrofes, teoria das 163-1 164 1

Bumba de combustível (simulação) 96-98 - de video 1470 Culódieos. tubo de raios 852
Bomba moto-conlínuu (simulação) 1143-1145 Caminho critico 1451. 1455 CBBS 1404-1407
Bombardeio (eleito visual) 121-127 Campo-chave 468 1 CCD, câmara 1470
Boolcana. variável 1449 Campo de golfe (programa) 233-234 CCm 1405
Borda decorativa (programa) 245-246 Campo minado (programa) 61-67 CEEFAX 563. 1407
(Kl. Tela) Campos 69, 1464. 1468 (Kj, Banco de dados) Cenários, programação de
BORDER 14-115. 556
1
Camundongo V. Mouse cm Avalanche 824-S33
-

- truques de programação (Spectrum) 867 Canal Censura de enlrada 1259-1260


Boião de disparo (joysticks) 287 - área de informação 175 [Kl. Áreas da (Kl. Verificação)
Braços robólicos 1286-1287 memória) Centronics, padrão 525
BRASCII 280 - efeitos sonoros (MSX) 171 Chamas {programação gráfica) 121-127

BR AS LOGO 1316 Canelas ópticas 289, 926-929 CHANS (Spectrum) 175


- conversão para MLOGO
1319, 1344 Caos (simulação) 166 1
Chave de acesso K Senhas
BREAK (tecla) 16. 78-79, 442, 559 Capa e Espada V. Guerra, jogos de Cheeksum 1277-1278
- dcsativaçáo da (TRS-80) 1313 Caracteres (Kl. Gráficos) Cheqoes. preenchi menlo de 1440
BRIGHT 716 - ampliação de (programa) 913-920. 921-925 CHRS 263. 703, 1214
- com impressora 650 - análise de frequência 1092-1093. 1332-1339 - para controle dc DOS (Apple) 269
- por código de controle 269 - comparação 364 - uso com caracteres gráficos
BSAVE em programação Assembler no MSX 553-555
(MSX) 405 no Apple 534-535 no Spectrum 123, 155

Buffer no MSX 1361-1366 no TK-2000 734-737


- de teclado 990 no Spectrum 122.341-347.529 no TRS-80 160, 627. 660. 669
- cm arquivos 690 no TRS-Color 478-480, 535-536 - uso com códigos dc conlrole 260, 367
- em impressoras 525 no TRS-80 627, 660, 669 - uso com códigos de impressora 652,
detecção na 715-720 1442-1445
Burrv 1286-1287 (KJ, Robôs) - tela

Bulletin Boards 562, 1404-1407 - gráficos - uso cm arquivos (Apple) 692, 1254-1256
Busca I . Pesquisa em impressoras 1442-1445 - uso em aulo-execução lApple) 550
no MSX 553-555, 1361-1366 - uso em teclas programáveis (MSX) 622-623

Vol. 1 — pág- l a 300; vol. 2 — pág. 301 a 600; vol. 3 — pig. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500,
IIIIIIIIIIIUMMHHIHnMHIIIIIIIIIII
- uso na manipulação dc bits 1378 de Saint-Cyr 890-891
- cifra Composição musical 1310 (Kl. Música)
- uso na programação de impressora 1442-1445 - cifras de posição 888-891 -programa 1398-1400, 1408-1411. 1421-1425
Cifra» 888-893. 1091-1095 {Vj, Códigos e - cifras multiplicativas 1093-1095 Compressão
Senhas) de barras 892
- - códigos de 1332
Cinemática 670-678.766-773,781-787, 161-1163 1 dc controle 260, 269. 364
-
-de melodias 1201-1207.1430
Cirindão 561, 563. 1406 de arquivos 692 -de programas 536-540
CIRCLE 337, 865 edição dc programas no MSX 425 - dc textos 1332-1339. 1414-1418, 1428-1435
• no MSX 120, 234-235 impressoras 652, 1442-1443 mclodo chinês 1414. 1416-1418
- no Speclrum 115. 232 no Apple e no TK -2000 269 - formatos dc dalas 1279
- no TRS-Color 118-119,234-235 no MSX 367 Comprimento
- uso em gráficos de segmentos 639 no Speclrum 269 - conversão de medidas (programa) 374-380
Circuilos elelrõnicos no TRS-80 260 - de um registro 1464
- digitais 40 uso do CHRS 260. 367 - Tuas magnéticas 876-878
Círculos (Kl, Gráficos) -degenerado 1332 ( V.i. ASCII) - variáveis em BASIC 97
desenho de 15. 1 19. 234-235. 339-340, 865 em compressão
dc texlos 1332-1339, CompuServe 1407
-cm 1329 LOGO 1414-1418, 142B-I435 Conexão
- no Apple e no TK-2000 117-118 - Epson 652. 1442-1443 - compuiador-gravador, cassete S4-J5
- no Speclrum 232 -escape 220, 652. 1442-1445 controle dc dispositivos externos 1321-1325
-noZX-81 116 - gerados pelo joyslick 351 - dircta (modem) 564
Clave musical 741 - gráficos - disquetes ao computador 906-908
CU: 198 impressoras 1442-1445 - cnlrc compuladorcs 561-564
CLEAR 932 no TRS-80 627, 660, 669 - impressoras ao computador 648-652
- função no bistcma operacional 1247 - mnemónicos 196
- no MSX 91-92, 179 - Morse 891-893 musicais 1306-1310
- no TRS-Color 300 - operacionais (Assembler) 2 sistemas de reconhecimento da fala
-
1311
- no TRS-80 90 -secretos 888-893.1091-1095 Conjunlos 192-195
- uso em programarão Assembler 217 - teclado (MSX) 499 - bidimensionais 201-207
CI.EARSCREEN 1318 - utilidade prática 892 Consistência dc dados 1259-1260, 1465 (Kl.
CLOAD 53-55 , 910-911 Coelhos, populações dt- (simulação) 1065-1067 Verificação)
Clock V.Relógio Coleçoes, organização de (programa) 68-75. Contabilidade
CLOSE 691-692. 1254-1256 81-85 doinéslica (programa) 134-140 (Kl.
CLS 12 "Cólela de UM" P/anilha elelrônica)
- conversão do TRS-Color para o TRS-80 52 - em LOGO 1330 - uso de planilhas eletrõnicas 1 1 14-1 1 15
CM 940 II - rotina no TRS-Color 1251 Contador de programa (UCP) 1 10
CMPX 219 < rilisões Contagem V. Frequência
COBOL 1288 -1290 - detecção na tela 715-720 Continua, reconhecimento dc fala 1311
Cohra, jugo da (programa) 514-520 COLOR CONTROL (teclai 260.367.551,624
CODE 263 - no Apple c no TK-2000 116 - no TK-2000 734-737
- no Spectrum 2Í2 - no TRS-Color 118. 393 CONTRO L-BREAK (ledas) 16
- no ZX-81 362, 364 Comandos, criação dc CONTROL-C (teclas) 16. 78-79,551
CODE decla) 553-555 -noSpectrum 1281-1283 Controle
Codificarão (Cf. Códigos) no TRS-Color 597-600 - blocos de (MSX) 179
- decimal cm III. 145 Comandos múltiplos - códigos dc 260. 269. 364
Código dc máquina - incidência dc erros 313 de arquivos 692
Assemblcr
- para o Apple (programa) 238-240 influência sobre velocidade de execução 932 edição de programas no MSX 425
- Assembler para o MSX (programai 401-405 Combinação impressoras 652, 1442-1445
- Assembler para o Speclrum - bits cm BASIC 1378 no Apple e no TK-2000 269
(programa) 248-252 - de blocos gráficos 541-547, 570-575 no MSX 367
- Assemblcr para o TRS-Color - de programas 456-460 no Spcctrun 269
(programai 296-300 Come-come (programa) 46-52 no TRS-80 260
- Assemblcr para o TRS-80 (programa) 679-680 Comentários (em programas) 207 uso do CHRS 260. 367
- cai rega memo de rotinas 93-94, 973 Compactador de programas (TRS-Color) 536-540 comandos em processadores de temos
-
1383
- compactador dc programas Compararão - comandos para impressora 650-652,
(TRS-Color) 536-540 - área dc quadrados (programa) 436-439 1442-1445
- armazenagem em DATA e - dispositivos externos 1321-1325
- entrada 88-95 arquivos 1252-1256 - proporcionais 1323
- gravação de rotinas 93 - BASIC com o PASCAL 1436 - robôs para microcomputadores [284-1287
- indexador de programas 1461-1463 - busca linear com busca binária 1468 - sistemas de 1321-1325
programação com valores negativos 142-145 - dados 487 - uso de teclas múhiplas 988-993
- rotina de INKEYS (TK-2000) 499 - de cordões alfanuméricos 241-242 CONTROL-RESET (ledas) 16
- roiinas do sistema operacional 1246-1251 - discos rígidos c disquetes 1133 COISTROL-STOP (teclas) 16
- roltnas cmbulidas em BASIC 972-973 - entre editores de texto 580 Conversão
MSX 1419-1420 - escalonamento em conversores AD 967 - analógico-digital
291. 967. 1084. 1324. 1470
- rotinas para produção de sons - PEEK e POINT 947 - de ASCII para códigos próprios 1332-1335
(TRS-80) 1032-1033 - televisor versus monitor 851-854 - de bases (programa) 35-37, 1281-1283
- vantagens cm relação ao BASIC 1 - velocidade do BASIC e código de - de binário para heiadccimal 56, 60. 406
Código p 1450 (Kl. PASCAL) máquina 925, 930 - dc BRASLOGO para MLOGO
1319,1344
Código* Compatibilidade em PASCAL 1446 - de coordenadas gráficas e de texto
- ASCII 263. 280. 361-366, 499. 1332 [Kl. Compiladores 607. 925, 1437 (TRS-80) 1312-1313
ASCIt) Complemento binário (programa) 142-145 - de cordões para números 244-245. 900, 1214

Vol. 1 — pág. I a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. S — pág. 1201 a 1500. MBS
ÍNDICE REMISSIVO
IIIMIIIIII
Correção ortográfica 1382 em conjuntos 193-194
- de decima! para binário (programa) .18-39
Corredor (animação gráfica) 6 rotina com INKEYI e GET 49fr499.
de graus em radianos 334-336
1259-1260
-
de hexadecimal para decima) 1281-1283
cuidados no envio de disquetes c fita;
- formatação de registros 1464-1466
- de LOGO em inglês para ponuguês 1320 -

formatação de telas 1396-1397


eleirónico 561. 564. 1407
-
- de medida* (programa) 374-380 -

Correspondência (programa) 1384-1385 - importação e exportação V. Banca de dados


- de minúsculas para maiúsculas 1215
cos - padrões de transmissão 1405
-
de números para cordões 237, 245. 703, 1214
em LOGO 1344 - programação com READ e DATA 128-133
de programai do TRS-Color para o
-
-

-
em modelos cinemáticos 771 - programa para organização 68-75, 81-85,
TRS-80 52
para desenhar circulo 116. 118 70) -706
- formaios de datas 1279-1280 -

359 - redução (sistemas de controle) 1323-1324


- notação cientifica (programa) 894-896 - para desenhar espiral
802 Dado*, jogo de (programa) 79-80. 1234-1240
- labcla de notas musicais (MSX) 1015
gráficos 337-340. 354-360 Dançarinu (animação gráfica) 6-8
Conversor anulógico-digiial 1324 ,

funcionamento 291 Cos-seno V. COS DATA 128-133

- uso em câmaras de video 1470 CP/M (gestão de projetos) 1451-1460 - comparação com armazenagem em
967 CPY 220 arquivos 1252-1256
- uso em tabletes digitali/adores

743 Crescimento, simulação do 1061-1068, 1 166-1 167 - cuidados na programação 860


Contentor digilal-amiltigieo
Criptografia 1091-1095 - edição de linhas no MSX 191
tu ordenadas 131-133
- alteração com POKE (Spectrum) 124S - compressáo dc textos 1338 -
em programação gráfica

677-678 -estatística [092-1093 - organização das linhas em um programa 1 34


- cálculo de irajetórias
programas de computador 1094 - tipos 128-129
- gráficas Conversão
V.
-

- programas no Spectrum 1248 - tipos de erro 312-313


- sistema de (TRS-80) 1312-1313
644-647, - técnicas dc programação 888-893 HO de decimal versus hexadecimal 410
- transformação para perspectiva
Cronometragem 65-66 - uso rotinas cm linguagem de
cm
1391-1395
- no Spectrum 658-659 máquina 1419-1420
- transmissão por lableic 966
CRT B52 -
uso para definição de sprites 188-189
Data recorder 876-878
- comando do DOS 936 CSAVE 54. 910-911
CSAVEM 300 Dalas
- tela para impressora 650. 1441-1445
armazenagem de 1279
- tela para memória (TRS-80) 947 994 ,
CUBO 1342 -

Cubo (animação) 1097-1098 - cálculo em BASIC 840. 1279-1280


COPV 650, 917. 1442
- compressão de formatos 1279
Cordões 99-100 {V.L Funções) Cubo, lei do 1063
- distância entre duas dalas 1280
armazenagem de tela 947. 994
-

- armazenagem cm BASIC 101-1 107 1


- códigos de controle no 367 MSX - em bancos de dados 1465
códigos de controle no TRS-80 260 - operações 1279-1280
- busca em bancos de dados 1469
- ordenação 472
comparação de 241-242
-
1396-1397
pisçante tio TRS-80 1413 - rotina de formatação de entrada
- conversão 237, 244-245, 703. 900. 1214
posicionamento na tela 146-152 - tipos 840
- definição de funções alfanuméricas 612
no TRS-80 1312-1313, 1412-1413 validaçáo 1280. 1401
-
- em LOGO 1344
253-259.
- teclasno comando HDIT 399-400. 425. DalHogrtfia, Professor de (programa)
em variáveis indexadas 194-195
552, 1329 276-280. 281-286. 328-333
- íracionamento 242-244
velocidade de aprendizado 257
-

- função INSTR 624


- aplicações dc parábolas 1 hipérboles 861-866 Duvsvwheel I
margarida ) 523
- linguagens especiais 1291
- manipulação 703 - colocação dc dados em gráficos 481-487 dBASE II 1288. 1291

-operações 1214-1215. 1401-1403 - cónicas R01-807 861-866 ,


DDR 1286

-subcordões, obtenção de 242-245. 1401-1403


- dc distribuição aleatória 777-780, 1 176-1 177 DEC A 199

- substituição de subcordões 245-246 - em balisiii I H Cl! 219


:nw>llo 1161-1167 Decimal
- tamanho 244*
ramílias de 801-807. 861-866. 1167 -codificação do binário em (BCD) MI, 145
- técnicas de programação 241-247, I

V.t. Códigos)
1214-1215, 1401-1403 seno e co-seno 338-339 (

378- 1380 Cúspides 163-1 164 comparação com hexadecimal cm DATA 410
uso em manipulação de bits 1
1

são dc hexadecimal 60
100
para binário (programa) 38-39
i

para hexadecimal >


,ii Eii.i/aKlucm cm uma matr : 798
rotina para o Spectrum 1281-1283
- detecção na leia 715-720
- sislcma de numeração 34
- em monitores e TV 853
Decisões
- influência no despejo de tela 1444
-cmAssembler 196-200,213-219
- jogo de adivinhação de cores
- em BASIC 27. 41-45. 78-80, 222-223. 444,
(programa) 1139-1140
Dados 625-626. 940
no Apple 1250
r de li 577 - acesso remoto 561-564.1404-1407 - em LOGO 1331

arquivos em disquete 687-692 (Kl. uri/uivas cm PASCAL 1448


-
- programa de tesic para video 1257-1258 -

- banco dc 706-71 1. 1464-1469 (Kl. Banca Declarações de tipo 1438

LOGO de dados) DKKEXEC 300


em 1318
no planejamento de telas 501-506
- colocação em gráficos 634-639 DEK EN 106, 608-613
- novas funções matemáticas 1347
no Spectrum 115. 389-390. 424 curvas (programa) 481-487
histogramas (programa) 181-187 Definição
no TRS-Color 87, 118. 393
comparação 487 dc funções cm BASIC 608-613
-

•.iTiiul.kão em video nionoLromãl iai N(KI -


-

- tabela para o MSX 832 - consistência dc 1259-1260.1465


- dc 406 UDG
TRS-Color 87
DEFSTR 97
tabela para o
^comandos em BASIC lfil-167 DEFLISR 973
- uso em wireframes 585

Vol. 1
- pág. 1 a 300; vol. 2 - pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. ' ;. 901 a 1200; vol. 5 - pág '20' »
1

MIIIIIIIIUHHHH^HHMHHIIIIIIIII
Degenerado, código 1332 DIP 652 - conirole em efeilos sot
DEL 128] -1283 D1R 910. 940. 1217 Dutos circulares 807
DEL ikvl.u 425 Dlrelriz 862
DELETE 9M, 940 lli-;i«si-oihlcr 714
Densidade de gravação V. Gravação Disco
Depuração de programas V.Erras e Programas - flexível V, Disquetes
DESAPAREÇATAT 1329 - magnético (Kl. Disquetes)
Desenho Auxiliado por Computador comandos em LOGO 1329
[V.l. Projelo Assistido par Computador) como ulili/ar 906-91
aplicações 521 disco rígido ou fixo 879, 1133
desenho arquitelônico 1367-1371, 1386-1390 programa editor (TRS-Color) 1216-1220 Economia de memória 269. 899. 932-933
- no TRS-Color (programa) 536-540
programação em 3-D 581-585, 628-633. tipos de disposilivos 878
641-647. 693-700, 1097-1098. 1391-1395 utilização de arquivos 687-692, 1252-1256 EDFIG 1427
- programa 414-420, 421-424 Disco voador (animação gráfica) 5 Edição
- mouse 1000 Dispam, hotão de V. Botão de disparo - área dc (memória) 175
- tablete digilalizador 964-968 Disparo de um projétil (simulação) 783 - dc figuras 1427
Desenhos V, Gráficos Disquetes 878 - de programas 412
Desenhos animados V. Animação gráfica - acionadores (Apple) 906-907 em PASCAL 1438-1439
Desenvolvimento de linguagens 1346 - arquivos de dados 687-692 - em tela completa 1313
Deslocamento da leia (programa em - como utilizar 906-911 - linhas DATA no MSX 191
Assembler) 213-219 - compiírLiçáo com discos rígidos 1 1 33 no MSX 425
Despejo de tela 1441 1445 - conexão ao computador 906-908 no TRS-Color e no TRS-80 399-400
Desvios condicionais - cuidados 488 no ZX-81 552
-emAssembler 196-200, 213-219 - formatação 908 - textos (aplicativo) 576-580. 586-591. 614-620
-em BASIC 41-45,78-80.222-223.444. - funções do DOS 936 EDIT
625-626, 940 - rolinadc armazenagem de telas (TRS-80) 994 cm LOGO 1329
- em código de maquina 142-145 Distância - no MSX 425
- em LOGO 1331 - conversão dc medidas 374-380 - no TRS-Color e no TRS-80 399-400
Desvios incondicionais - emre dois ponlos 807 - no ZX-81 552
-
em Assembler 196-200,213-219 - entre duas datas 1280 Editor V.l. Processamento de textos)
I

- cm BASIC 76-80 (K/, GOTO) -


simulação de alavancas e polias 981-987 - de discos (programa) 1216-1220
- em çòdigo de máquina 142-145 Distribuição de probabilidades 777-780. - de lexios (programa) 576-580, 586-591.
Desvios relativos 142-145 1176-1177. 1181-1185 614-620
- bimodal 1454
- de erros binomial 780 ampliador e redutor (programa) 1049-1055
técnica 311-315. 443 - exponencial 1180 para o MSX 811-814
- figuras na tela 7IS-720 -normal 779-78(1, 1179-1180. 1181-1185 para o TK-2OO0 (programa) 846-850
- teclas múltiplas 988-993 em tempos PERT 1454 programa 1367-137], 1386-1390
Determinísticos, modelos 1176 -uniforme 1180 Projeto Assistido por Computador
DEV Divertimentos matemáticos 1301-1305 (programa) 1021-1026
MU
ihsz
220
(variável de sistema
>?i
no ZX-81) 177 DIVIDE 1343
em binário
Divisão 37-39
- musical (programa)
1421-1425
1398-1400. 1408-1411.

Diagnostico cm impressoras 645 DJNZ 198. 215. 558 - spriles 811-814. 1427
Diagnóstico por computador 905 Documentação de programas 207 Educação
Diagrama Doméstica, contabilidade V. Contabilidade programa para alfabetização 390-391
-

- de bloco 222 DOS 879-880 programa para datilografia 253-259,


-

- de sintaxe 1446 -Apple 179 276-280. 281-286, 328-333


- de telas 501-506 - funções 936 Efeito gravilacional (simulação) 766-773. 781-787
DIALOC 1469 -programa assistente 936-940 Efeilos sonoros 168-173,721-727
Dia fio elelrónico (programa) 834-840. - uso do CHRS 269, 692, 1254-1256 i Kl. Música)
841-845, 868-871 Dowuloading 1404 - com POKE 265
Diferenças Finitas 772 Dragão (.imiiKiçãol 474-477 - compressão dc melodias 1201-1207
DHkaMade, níveis de 153-160 DKAW 1(14. 113 - controle de duração 1027
-em Avalanche 941-946, 1228-1233. 1241-1245 - no Apple II 116. 237. 318. 343-344 - em Avalanche 788-795
964(1'./. Tablete digituiizador) no desenho dc letras 236-237 - instruções no MSX 792
DigiPad
Digitação (Kj. Entrada e Erros) - no MSX 234-235 - no Apple 266, 712-714. 1027
44 -noSpcctrum 114,232-233,1248 - no MSX 170-172
-erros
- programas longos 71 -noTK-2000 116,237 318.343-344 .
-noSpectrum 168-170,556-560
- roll-ovei 989 - no TRS-Color 234-235 -noTK-2000 168-170,712-714, 1027
- velocidade 286
257. Drivc V. Disco
'
- no TRS-Color 172-173
jogo (programa) 281-286 DSKIMT 908 - no TRS-80 170. 1032-1033
Digitalização 291 - explosões 1032
- gráfica 964-968 - de memória 60 produção de efeitos naiurais 560
-

-som 1081-1085 - de leia 1441-1445 programação de acordes 1OO9-I015


-

DIM 192 Duodecimal, sistema de numeração 35 programa genérico para o MSX 171
-

Dimensionamenlo de conjuntos 192 Duple\ 1406 - ledado musical 721-727.741-747


Dimensões fracionadas 1356-1360, 1372-1377 Duplicação de linhas 552 Eleitos visuais .t Animação gráfica e Gráficos)
( \

Dinâmica Duração - explosões 121-127


- simulação de trajetórias 670-678. 766-773, - atividades dc um projeto 1454 - incêndios 121-127
781-787. 1161-1163 - controle de noias musicais 726. 745 - listras multicores (Specirum) 867

Vol. I
— pag. I a 300; vol. 2 — pág, 301 a 600; vol. 3 - pag. 601 a 900; vol. 4 - pág. 901 a 1200; vol. S - pág. 1201 a 1500.
IIIIIIIIIHHHHHH^HnHHIIIIIIIIIII
Eletrónicos, circuitos V. Circuitos elelrônicos 300, 403 Evolução das linguagens 1290
Elevador hidráulico (simulação) 986-987 - desenhos fora da leia 31. 632 EXEC 94, 1250
ELIMINE 1330 - digitação 44 Execução de programas
ELIMINEARQ 1330 - dimensionamento excedido 193 - auio-execução 550
(unções dc localização 444 - efeito da REM e dos espaços na
E-L1NE (variável de sistema no ZX-81) 177 -

- laços múltiplos 206 velocidade 932


localização e depuração no Spectrum - em BASIC 11, 940
- desenho 340 -

781-787 (programa) 387 - em código de máquina 94-95


no cálculo de órbitas
ELSE 45 - mensagens 311. 441-446 EXECUTE 1291
- em PASCAL 1448 - nomes de variáveis em IF...THEN 141 EXG 200
- em programação estruturada 221-225 - números de linhas inexistentes 80 Exibição, área de (memória) 175
Lm baralha mento, técnica de 426-433 - ON.. .ERROR 444.940 Explosões
EmbnUel 563, 1406 - operação dc canelas ópticas 929 - no TRS-80 1032
efeitos sonoros
Encadeamento de programas 456-460 - operações numéricas AND, OR e NOT 305 -gráficos de segmentos 639
END 1319 - prevenção em gravações em fita cassele 54 -programação gráfica 121-127
- em Assembler no Spectrum 252 - prevenção cm programas BASIC 441-445 Expoente (notação cientifica) 897
- em PASCAL 1448 - programação com READ e DATA 128-129 Exponencial, alisamento 1349
Endereçamento 196-200 - tabela de códigos de erro em BASIC 312 Exponencial, distribuição 1180
com PEEK e POKE 261-268 [V.t. PEEK e - técnicas de depuração 240, 251-252, 300, Expressões aritméticas (V.i. LET)
POKE) 311-315, 402-403 -em LOGO 1342-1344
-efetivo 793 - técnicas dc detecção 31 1-315, 443 - uso de expressões lógicas 1312
- no 6502 198 - técnicas de indicação 444-446 - uso de funções 434-440
- no 6809 199. 793 ERR-SP (variável de sistema no ZX-81) 177 Expressões lógicas 302
- no Z-80 196 Escada 862 - com números 304-305
Endereços Escala cromática 742 - uso em espri-s.sÕL". rii.iic málicas 1312
- controle de vídeo no Apple 503 Escalamend) 486 (V.t. Gráficos) Extensíveis, linguagens V. Funcionais, linguagens

- identificação de teclas no TRS-80 1413 - gráfico 116, 183, 318


- início de programas BASIC 513 - programa de ampliação gráfica 1049-1055
- notação em código de máquina 144 Escalas musicais 722-724, 742
- organização da memória 174-180 ESCAPE (tecla) 442
- portas de entrada c saída 1286 Escape, sequências de 220, 625, 1442-1445
- tabela do teclado do TRS-Color 267 Escolhas múlliplas 224 {V.t. ON...GOTO e
- variáveis de sistema no Spectrum 1340 ON...GOSUB)
ENTER (leda) 364 Escore V. Placar
Entrada ESCREVA 1342
- área de (memória) 180 Espaçamento 313, 932, 1214 Faixas de números aleatórios 16
-censura de I2S9-I260 Espaço de memória 174-180 Fala
- código de máquina 88-95 Espaço de trabalho V. Areas da memória - reconhecimento da 1311
- de dados Espaços - sintetizadores da 446-448, 963
comandos em BASIC 161-167 - efeilo sobre velocidade de execução 932 Famílias
em conjuntos 193-194 - remoção (rotina) 1214 - de curvas 801-807, 861-866. 1161-1167
GET 164, 496-199.1259-1260 Espalhamento (técnica de ordenação) 739 - de linguagens I2B8-I29I
INKEYS 28-29. 164.496-499. 1259-1260 Espectral, análise V. Análise espectral - de sprites 1427
INPUT 164 Espiral Fatorial (programa) 1223-1225
- formatação de telas 1396-1397 - desenho com o uso dc COS 359 FFT 1083
formatos 162. 1396-1397 Egpirtyfn (programa) 360 Fibonacci. números de 1067-1068
- senhas 166-167. 888-893, 1091-1095. 1260 Esquema (banco de dados) 1464 Fibras ópticas 564
Envoltórias, curvas 1161-1167 Estação Espacial (programa) IOI-I08 - simulação 1 164
EOF 690. 692. 1255 Estatística Figuras geométricas 801-807,861-866, 1194-1199
EOL 1251 - amostragem e previsão 1127-1128 FILES 910-911
EPROM 911 - aplicações Filtro anti-reflexivo 864
Epson, códigos de 652. 1442-1443 em criptografia 1092-1093 FILVRM 1144
Equações em programação de jogos 1349 FIM 1319
- diferenças finitas 772 na compressão de lextos' 1335-1338. Fim de arquivo (EOF) 1255
- lineares 1304-1305 1414-1418, 1428-1435 FIRE (tecla) 498
ERASE 1330 - cálculo de lempos em projetos 1455 FIRST 1345-1346
ERASEFILE 1330 - modelos 1176-1180, 1181-1185
ERL 444 l stot:i>(icos. modelos 1176 - simulação de mecânica 981-987
ERR 444 Esi rapes 652 - simulação de movimentos 670-678,
Errata(programa Assembler do Eslralégia ( V.t. Jogos e Simulação) 766-773, 781-787
TRS-Color) 794 -jogos 756-760,796-800, 1348-1355 Fita
ERROR 444 bar 1181-1185 - cassete 53-55. 876-878
guerra 1016-1020, 1034-1048, 1069-1075, arquivos em 690
- arredondamento de números 899 1086-1090 cuidados 488
- Assembler para o TRS-Color 296-300 mina de ouro 662-668, 681-686 gravação de blocos gráficos 489-495,
- cálculo de raiz quadrada 440 Estruturadas, linguagens 1291. 1436 575-576
- chamadas recursivas de sub-rotinas 1225 (V.t. Linguagens de programação) gravação de dados (Apple c TK-2000) 1254
- depuração de programas -fonte em Estruturas de programação 221-225 rotina de armazenagem de leias
Assembler 251. 402 EVAL 1291 (TRS-80) 994
- depuração de programas longos 240, 252, Eventos 774-780 utilização de arquivos 1252-1256

Vol. 1 — pág. 1 a 300; vol, 2 — pág. 301 a 600; vol. 3 — pág, 601 a 900; vol. 4 - pag. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIIIIIIIHHHHHHnHHIIIIIIIIIIII
- de impressão 645 - V. /NSTR, LEN, LEFTS,
alfanuméricas - (animação) 478-480
bicicleta
- magnética MIDS, RIGHTS, STRS. VAL etc. blocos gráficos 341-347, 406-413
-

tipos 876-878 - de localização de erros 444 criação 489-495, 507-512,526-535,


Flag bils 1380 - de um banco de dados 464 541-547, 570-575
FLASH 47. 716 - DOS 936 em Avalanche 815-820
- com 650
impressora - elaboração de gráficos (programa) 481-487 no Spectrum 122
- no Apple 390, 506 - fórmula de escalamento 486 no TRS-80 627. 660, 669
- no Spectrum 116. 269. 304 - funções definidas pelo usuário 608-613 programa gerador em Assembler 565-569
Flippy 911 - 1NSTR 624 - borda decoraiiva (programa) 245-246
Floppy I . Disquetes - manipulação de cordões 612,624, 1214. 1402 bússola (desenho) 335-337
-

Flu\i)|>rama 222 em LOGO 1345-1346 caleidoscópio (programa) 25-26


-

- PERT 1451 - matemáticas 434 440, 608-613. 1347 campo de golfe 233-234
-

FN 608-613 (Kl. Funções) em LOGO 1344 -carro 389-390


Focos 1163-1164 gráficos 482 -casa 131-133
Fogueie, dispam e animação de 28-33 influência na velocidade de execução 933 - castelo 133
Folha de cálculo V. Planilha eleirõnica raiz quadrada 439-440 - círculos 15, 1 19, 234-235. 337. 339-340. 865
Fonles. criação de 921-925 (V.l. Caracteres) tr.gonomét ricas 334-340. 354-360 no Apple e no TK-2000 117-118
Força, jogo da 701-705,728-733 - remoção de espaços em um cordão 1213 no MSX 120, 234-235
Forças mecânicas 981-987 teclas (MSX) 621-626 no Spectrum 115, 232
FOR... DO 1447-1448 no TRS-Color 118-119,234-235
FORMA T 908 no ZX-81 16 1

Formatação - comandos em LOGO 1318-1320, 1326.


- bancos de dados 1464 1426-1427
-datas 1279-1280 - combinação de blocos gráficos 541-547,
- discos magnélicos 879 570-575
- disquetes 908 - com POKE 265
noTRS-Color 1216-1220 - cópias em impressoras 521-525. 1441-1445
- em processadores de textos 614-620, 1382 - corredor (animação) 6
- telas de entrada 1396-1397 Gabarito de saíd» 500 - criação de blocos gráficos 489-49S.
- telas dc texto 501-506 Galileu 766 307-512, 526-535, 541-547, 570-375
- usando o PR1NT US1NG 500, 1440 Gaussiana, curva 1454 - criação de sprites 808-S14
- valores numéricos 899-900 Generalizáveis, linguagens 1290
Formato Geometria cónicas 801-807. 861-866
- de datas 1279 - aplicações da tartaruga (LOGO) 1287 co-seno 338-339
- dc entrada 162 - curvas cónicas 801-807, 861-866 cúspides 1 161-1 167
- padronizado de dados (SDF) 1.467 - dimensões fracionadas 1356-1360, 1372-1377 distribuições aleatórias 777-780
Formulário continuo 524 - gráficos tridimensionais envoltórias 1 161-1 167

FOR...NEXT 21-27 V, Tridimensionais, gráficos seno 338-339


-sólidos de revolução 1194-1199 -cúspides II6I-II67
- em programarão estruturada 225 Gerações 1065-1067 - dançarino (animação) 6-8
- entrelaçados 206 Gerenciamento de bancos de dados 1464-1469 - de segmentos

(estão de projetos (programa) 1451-1460 explosões 639


- velocidade de execução 932 GET - despejo de tela na impressora 1441-1445
FORTH 1288-1290 - com joysticks 290 - detecção de pomos na tela 715-720
FORTRAN 1288-1290 - entrada de dados 496-499, 1259-1260 - disco voador 5
FORWARD 1287, 1318 no Apple e no TK-2000 164 - dragão (animação) 474-477
Fósforo -uso em gráficos 107, 352, 478-480. 535-536 - editor gráfico
- uso em vídeos 854 -uso cm programa dc desenho livre ampliador 1049-1055
Fourier, transformada de I0N3 na tela 164-165 para o MSX 811-814
FPBASIC 179 -uso em programa de senhas de acesso 166-167 para o TK-2000 846-850
em
Fraçòes hinário 38 Globo (desenho) 693-700 programa 1367-1371, 1386-1390
Fraclais 1356-1360. 1372-1377 Golfe, campo de (desenho) 233-234
FRAMES 1340 GOSUB 79-80 (K.í. ON...GOSUB) explosões 121-127
Fraudes 564 -com sprites no MSX 191 incêndios 121-127
- em redes de computadores 1407 - diminuição de velocidade de execução 931 listras multicores (Spectrum) 867
- uso de códigos 892 GOTO 27. 76-80 (V.t, ON...GOTO) - elaboração de curvas (programa) 481-487
- vantagens dos códigos 1094 - diminuição de velocidade de execução 931 - elaboração de histogramas 634-639
FRE 212, 656 - endereçamento variável (Sinclair) 77 programa 181-187
FRED 1288 GR 116 - elipse 340
Frequência Gradeados - em impressoras 652. 1441-1445
- análise sonora 1081-1085 - definição 582 - entrada de caracteres pelo teclado 1413
Gráficos (Kf. Caracteres, CIRCLE. DRAW, -erros de programação 31
análise criptográfica 1092-1093 LINE, PLOT, PSET, SET ele.) -escada escorregando (animação) 862
na compressão de textos 1335-1338, - abstratos 358-360 -escalamento 116. 183. 318, 486. 1049-1055
1414-1418 - alça de mira 348-353 -espiral 359
-palavras 1416-1418 - aleatórios 23-25 -espirógrafo (programa) 360
- som 722-724 - ampliação 1049-1055 - figuras geométricas 801-807. 861-866
Full-duplex 1406 - animação V. Animação gráfica - figuras tridimensionais V. Tridimensionais,
Funcionais, linguagens 1290 - arcos 232 gráficos
- barras 3-D 637-638 - fractais 1356-1360. 1372-1377

Vol. 1 — pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIIIIIIIIHHH^^MMHHHIIIIIIIIU
- gerador gráfico em Assembler 565-569 - conversão em radianos 334-336
gráficos de segmentos 634-639 Gravação
- grau de resolução 14, 1201
-agenda eletrônica 868-871
TV versus monitor 8SI-8Í4 - análise sonora 1082
- gravação em fila cassete 575-576 - blocos gráficos 489-195. 575-576
- helicóptero 10 - dados em fita cassete (Apple e TK-2000) 1254
-impressão 1441-1445 - densidade de 880
- monstro (animação no ZX-81) 319-320 - rotinas em código de máquina 93 late (piograma) 1234-1240
- motocicleta (animação no Apple) 316-318 Gravador cassete 53-55, 876-878 Icónicos, modelos 1176
- padrões naturais 1161-1167 - arquivos cm 690 IEE-488 525
-paginação gráfica 1096-1100, 1141-1145 - conexão ao computador 54-55 IF...THEN 27. 41-45
porta de saida para efeitos sonoros 1032 - combinação múltipla 44
perspectiva 628-633.641-647.693-700, -

1391-1395 - rotinas de comunicação - efeitos sobre velocidade de execução 932


- polígonos 865 no MSX 1249 - em LOGO 1331
- ponte (programa) 131-132 no TRS-Color 1250 - em PASCAL 1448
- Pôr-do-sol (programa) 25-26 - uso para produção de efeitos sonoros 170 - em programação estruturada 222-223
- processamento de imagens cm GRAVETUDO 1330 - técnicas para economizar memória 141

robôs 1286. 1461 Gravidade (simulação) 766-773. 781-787 - uso do ELSE 45


- programação de caracteres no "Greensleeves" (melodia) 788-795. 1014 Imagens
MSX 1361-1366 Gregoriana, data 840 - armazenagem de 968
processamento de 1286, 1470
programação de sprites no MSX 188-191 Guerra, jogos de 1016-1020, 1034-1048, -
-

programação em 3-D 581-585. 628-633, 1069-1075, 1086-1090 Imperativas, linguagens 1290


641-647. 693-700 Impressão
- cópia de gráficos na impressora 1441-1445
-programação, técnicas de R6-87, 113-120.
- de bancos de dados 83
121-127. 232-237. 388-393. 406-413. 639
- tela (TRS-80) 947 994 .
- programa de criação de sprites 189
- programa de demonstração (TRS-Color) 87 Impressoras
- acentuação em português 280
- programa de desenho livre I64-16Í, 846-850
- programa de testes para video 1257-1258 - Alice 1442-1443
- programa para desenho em tela 414-420, - auioteste 649
421-424, 846-850, 1367-1371, 1386-1390
- buffer 525
- Projeto Assistido por Computador Half-duplex 1406 - códigos de controle 652
(programa) 1021-1026 HALT 5J6 - códigos gráficos 1442-1443
-relógio 354-358 Hanúi, As Torres de (programa) 1226-1227 - conexão ao computador 648-652
elaboração de cartazes c manchetes 917
Hardcopy 521, 1442-1445 -

Harmonia musical 1009 - margarida 523.1385


no Apple e no TK-2000 116
no MSX 119 HCOLOR 116 - matriciais 522, 1385

no TRS-Color 118 Helicóptero (animação gráfica) 10 - programação 1442-1443


- rotinas do sistema operacional Mero I (robô) 1285 - programação interna 652
Heurística 905, 1040, 1086-1087 - sclcção 521-525
no Apple 1249
sclcção para processamento dc textos 1385
no MSX 1249 HEXS 58 -

Hexadecimal térmicas 524


sapo (animação) 344-347
-

1372-1374 aritmética 56-60 - tipos 522-524


stmetria e assimetria
simulação de alta resolução no ZX-81 320 ciiinpariiçãii com decimal mi DATA 410 - utilização 648-652.

simulação de sprites no TRS-80 627, 660, 669 conversão do binário 406 INC 214. 216
conversão para binário (programa) 56-60 Incêndios (programação gráfica) 121-127
sombreamento 115. 1394-1395
conversão para decimal 60 Indexação
sprites 107. 1S8-191, 808-814. 1132, 1426-1427
no TRS-80 627, 660, 669 Spectrum 1281-1283 - de bancos dc dados 1464
submarino (animação no Apple! 316-318 necessidade para programação 60 - de programas 1461-1463
tabelas de forma237 notação de endereços 144 - dc variáveis 192-195 201-207. 101- 107
. 1 1

tabletes digitalizadores 964-968 notação cm BASIC 58 - em código de máquina 196-200


negativos 142-145 - registros da UCP 110
tanque de guerra (animação) 342-347
de numeração 56-57 - sistema (programa) 221-225
textos em tela de alta resolução
(Apple) 534-535 HGR 116 Indicadores 110. 175
- ÓptlCi 926 HGK2 116 rcíõo 1291
H1DETIIRTLE 1329 Infinitesimal, cálculo V. Cálculo
o de funções trigonométricas 334-340.
354-360 Hidráulica 986-987 Infixa, notação 1343

SIN c COS 337-340, 354-360 Hifenaçâo automática 580, 1383 Informação de canal, área de (memória) 175

-uso do comando PCOPY (TRS-Color) 596 HIMEM 180 IN1R 217


- uso do GET 107 Hipérbole 801-807,861-866 IN1T 908
OPEN "GRP:" no MSX 594 Histogramas 181-187.634-639 INK 47. 113, 115, 640, 716
- uso do
- uso do PUT 104, 107 HLIN 116 - por código de controle 269
Grafismos 1197 HOME 12. 116. 1318 IÍNKEYS 28-29
1442 1443 - no MSX
367 - com joysticks 290
Graib., impressora
GraíPad 964 (K/. Tablete digitalizador) Horizontal, movimento 766-773 - entrada de dados 164 496-499, 1259-1260
,

GRAPH (tecla) Horóscopo (programa) 1261-1270 no TRS-80 1413


Holl-OGO 1317, 1426-1427 rotina dc entrada dc dados 1259-1260
no MSX 553-555
-
-

- no Spectrum 640 HPLOT 116 - simulação


- no TK-2000 734-737 HTAB 10. 503 no Apple 167, 266
- com impressora 650 no TK-2000 167. 496-499

Vol. 1 - pág. 1 a 300; vol. 2 - pág. 301 a 600; vol. 3 - pág. 601 a 900; vai. 4 - pãg. 901 a 1200; vol, 5 — pág. 1201 a 1500.
IIIIIIIIIIIHHHHHHHnHHIIIIIIIIIII
- no TRS-Color 352-353, 1251
- no 6502 198 - no ZX-81 350
- no 6809 200 - operação 290
- uso em programa de desenho livre JOGOS - programação 348-353, 368-373
na leia 164- 165 - aplicações da digitalização de sons 1084 - tipos 288
• uso em programa dc senhas de acesso 161 - aplicações dc reconhecimento da fala 131 JOYSTK 353
1NP 1286 - programas JRNZ 197
INPUT 12. 14, 161-167 A Aranha Marciana 955-960. 974-980 JSR 200
INPUTS 62-1 Adivinhação de Palavras 701-705. 728-733 Juliana, data 840. 1280
INPUT* 691-692 A Raposa e os Gansos 872-875,901-905. Juros, cálculo de (função) 612
INS 425
(tecla) 948-954
Inserção (técnica de ordenação) 739-740 Avalanche 748-755, 761-765, 788-795.
INSTR 245.624, 1214 (Kí. Cordões) 815-820. 824-833. 995-999. 1001-1008.
Instrumentos musicais 1306-1310 1028-1031. 1056-1060, 1076-1080,
(Kl. Música) 1116-1120. 1208-1213, 1291-1300
INT

INTEGE8 1438
I
1

LOGO 1344
Bandido de um braço só
Caça-niqueis
V.

Caça-niqueis 43-45. 855-860, 881-887


Campo Minado 61-67
Capa e Espada 1016-1020,1034-1048,
DC
INTEGER BASIC 179 1069-1075, 1086-1090 KBIN 989-990
INTEIRO 1344 Come-come 46-52 KBOUT 989-990
Inteiros II, 13. 932. 1344 da Cobra 514-520 KEY
funções 1347 da Vida 961-963 - programação 622-623
• programa 1222 1223 de adivinhação 12-13,42-43 - utilização em jogos 655
Inteligência Artiririal IW, 905. 11151116 de avenlura V. Aventura, jogo de KEY LIST 622
i.'. içi ( cm i
'. de guerra 1086- 1087 de blefe 1348-1355 KEY OFF 351. 622
- linguagens 1291 de dados 79-80, 1234-1240 KEY ON 622
Inli (Kl lnlerface\) dc guerra 1016-1020, 1034-1048, KILL 911. 940
llll tilllWHllllHl 1404-1407 1069-1075. 1086-1090 KoalaPad 965
Estação Espacial 101-108
'-
conexão compuiadot simeliiadot 1 306- 1 j Labirinto 46-52. 153-160, 170-172
- conirole por computador 1322 Mõdulo Lunar 821-823
- discos magnéticos 880 Otelo 756-760. 796-800
homem máquina 1324 PacMan Come-come

L
- V.
padrões 525
- Papel, Pedra. Tesoura 1348-1355
para impressoras 525
- Pintor Aloprado 1277-1278
1470 Senha 1139-1140
Interpretadores 607. 930, 1247-1248. 1437 Serra Pelada 662-668. 681-686
Interrupção Torres de Hanói, As 1226-1227 Labirinto (programa) 46-52. 153-160. 170-172
- dc um programa BASIC 16 programação
técnicas de
programação de um relógio 658-659
- adaptação de jogos em cores BOO - de corrente 525
- teclado 988 cartas dc baralho 426-433 - em BASIC 21-27, 26
Inversão de vídeo 1249 compressão de textos 1332-1339, - em planilhas eletrõnicas 1156
- caracteres no Spectrum 640, 661 1428-1435
1414-1418. - múltiplos 206
gráfica 320 contagem de pontos 47-52.61-67 LAN 1200, 1407
- rotina para o TRS-Color 597-600 controle de movimentos 28-33 Lápis óptico K Canetas ópticas
- uso em jogos 800 distribuições dc probabilidade 1177 Largura de faixa 854
IN VERSE 390 escolha de ledas de controle 31 Laser, efeitos sonoras (Apple c TK-2000) 1027
com impressora 650 estalistica 1349 LAST 1345-1346
no Apple 1249 estratégia 756-760. 796-800. 1348-135 Layoul do arquivo 75
- no Spectrum 640, 661 explosões e incêndios 121-127 LBEQ 200
- rotina para o TRS-Color 597-600 joyslicks 348-353. 368-373 LD 197, 216
INY 220 labirintos aleatórios 153-160 LDA 196
Irregularidade, matemática da 1356-1360, marcação de recordes 64-66 - no 6502 198. 220
1372-1377 níveis de dificuldade 153-160 - no 6809 200, 219
Isométrica, prnjeção 628-633,641-647 ruídos e explosões 168-173 LDB 219
llaulec LOGO 1317 spriles em Assemblcr 818-820 LDDE 216
programáveis 655
teclas LDDR 216
uso de matrizes 798 LDIR 214
uso do 1NKEYS 28-33 LD1RMV 1144
Jornalismo eletrõnlco 564 LDX 219
Joyslicks 287-291 LDY 220
- analógico 289 LEFT 1287, 1318
aplicações 288, 351-352
- LEFTS 244. 703. 1214
- códigos gerados 351 Lego 1287, 1325
- funcionamento 289 LEN 244, 703. 1214
Janelas de texto 580 . - no Apple 291 LET 13, 96, 933
Jaque para gravadores 54-35 - no MSX 350-351 - com operadores relacionais 302
Jipe (programa) 19-120 1
- no Spectrum 349 - eliminação para encurtar programas 141
JKL (teclas) 1442 - no TK-2000 351-352 - em comparação com DATA 128

Vol. 1 — pis- 1 a 300: vol. 2 — pág. 301 a 600; vol. 3 - pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 - pág. 1201 a 1500. Ml
IIIIIIIIIHHMMH^HHHM§|§lliyii
Leira» {V.i. Caracteres) -procedimentos 1287,1319-1320
- ampliadas (programa» 913420, 921-925 - sprites 1426-1427
- desenho com DRAW
236-237 - uso do COS 1344 BASIC 894-900
LOMEM 180 de programas 513. 1101-1107
frequência (programai 1414

mb
- rotina de desenho (TRS-Color) 760 Ltfcrlá esportiva (simulação) 1 121-1 127 de tela (TRS-80) 947, 994
Ulreiros (programa) 913-920, 921-925 IPRINT 650-652, 917 de variáveis 1215
I.IFO 110
- auxiliar 876-880 ( V.t. Disco e Fita)
Limites de crescimento 1063
- cartuchos 91
' - d e valores 443 - cuidados com fitas e discos 488
LINE - discos rígidos 1133

no MSX 119. 234-235 - disponível em BASIC 212


- no TRS-Color 118, 234-235
- economia 269
Linear, pesquisa 1468 armazenagem de números em BASIC 899
e a velocidade dc execução 932-933
UNEFEED 367
LINE INPUT 163 no TRS-Color (programa) 536-540
- simulação com 1NKEYS 1259-1260 MA 88, 180 - LPROM 911
Linguagem Asscmhler V. Assembler Macintosh 1000, 1291 - exame com PEEK 262. 264

Linguagem macro musical Macro musical, linguagem - Hl MEM e LOMEM 180


- no MSX 170 - no MSX 170 - intermediária 175 {V.t, Buf/er)

-no TRS-Color 172-173 - no TRS-Color 172-173 limitações em


páginas gráficas 1141
Maiúsculas - listagem do Avalanche 1291-1300
1 inguagens de programação 1288-1291
- classificação 1290-1291 - obtenção com POKE (Specirum) 265 - organização 174-180
- compiladores 925, 1437 - Professor de D.il iKiw.r liM.i (programa) 281-286 dc programas BASIC 513

( V. I. Compiladores)
em LOGO 1330
- desenvolvimento 1346 - uso em comandos BASIC 23 no Apple 180-181
-LOGO 1288-1290, 1314-1320. 1326-1331, MA KL 1345-1346 no MSX 179, 808
1341-1346, 1426-1427 Maladiretu 1384-1385 no Specirum 175-177
-
para bancos de dados 1291, 1469 Malha 1". Laços no TK-2000 180-181
- PASCAL 1288-1290. 1436-1439, 1446-1451 Manchetes (programa) 913-920.921-925 no TRS-Color 177-178
LINHAS Manipulação no TRS-80 178-179. 1412
- comandos múltiplos 44 -
de bits 1335, 1378-1380 no ZX-81 177
usodoCHRS 1378 - páginas gráficas 1096-1100. 1141-1145
- duplicação 552
- no Spcctrum 661 - de cordões 703 - ponteiros e indicadores 175
-numeração 16 Mantissa 894 - RAM 174-175
Mapa de memória Memória - reserva no Spcctrum 176
LISA 1000, 1291 I'.

LISP 1288-1290. 1291, 1316, 1436 MapcamenU) - ROM 174-175

LIST 513, 552. 650-652 -de bits 1380


622 -jogos de guerra 1034-1040 endereços no Apple 180
- lisiagem de teclas de função
Menu Mãquina-p 1450 endereços no TK-2000 ISO
Lisla de opções V.
Lista* 1 346 "Marcha dos Santos, A" (melodia) 1010 no MSX 179. 531-533
lista telefónica (programa)' 129 Margarida, impressora 523 no Spectrum 175
Listrada, (ela (Spcctrum) 867 Máscara de tento 614-615 no TRS-Color 178
Livro-códig» 1094-1095 Mascarumento 1379-1385 no TRS-80 178
Livro elelrônico 994 Maslermind (programa) 1139-1140 - virtual 1385

LLIST 513. 650-652 Matemática Mensagens


LOA D 910-911, 1255 - dimensões fracionadas 1356-1360. 1372-1377 - codificação de 888-893
- com gravador cassete 53-55 divertimentos matemáticos 1301-1305
- - de erro 311, 441-446
- efeilo sobre relógio interno 659 • em LOGO 1342-1344 -
dc prontidão 162

-em LOGO 1330 - fraciais 1356-1360. 1372-1377 - desenho com DRAW


236-237

Localização do cursor 1412-1413 -funções 434-440.608-613, 1344. 1347 -secretas 1091-1095 (Kr. Senhas)
ía/w.s.wi^ - úpos de textos em jogos de aventura 1430
LOCATE 10, 150. 503. 553-555, 1366 - operações matemáticas 1 .

LOCK 911.940 aritméticas. Expressões lógicas, LET - uso em programas 441-443

Lógica de programação 41-45. 76-80, 301-305, e Operações Menu 441-443, 504-506, 623-624
522 - assistente para o DOS (programa) 936-940
1291 Matriciais, impressoras
Lógico, cálculo V. Calculo - uso com gráficos 1441 - uso de canelas ópticas 926
LOGO 1288-1290, 1314-1320, 1326-1331, Matriz, gerador de (teclado) 988 - uso de subcordões 1402
1341-1346. 1426-1427 Matrizes 201-207. 1303-1304 MERCÊ 456-460
- arquivos 1329-1330 - aplicações 207 - uso na proteção de programas 551

- atribuição 1345-1346 - aplicações em jogos de tabuleiro 798 MESA 1290


- autocarregamento de programas 549-550 - área de (memória) Mesa digitalizadora V, Tablete digilalizu/ior
MSX Método chinês 1414 [V.t. Compressão)
-CATALOC 1330 179
armazenagem 1101-1107 Métricas, conversões (programa) 374-380
- círculos (desenho) 1329 -

- "coleta de lixo" 1330 programa para cálculo de planilhas


- 108- 1 1 1 1 Microdisquele 880
- velocidade de execução 932 Microdrives 175, 877. 908
- conversão do inglês para português 1320
- conversão entre dialelos 1319-1344 MAXFILES (variável dc sistema do MSX) 179 Micromundo 1342
Mecânica (simulação) 981-987 Míitíi processadores 109-1 12
- expressões aritméticas 1342-1344
Meccano 1287. 1325 - 6502 112. 199. 793
- interpretador (Apple) 1317
- micromundo 1342 Medidas, conversão de (programa) 374-380 - 6809 200. 793
- no controle de robôs 1287 Melodias V. Música -Z-80 111-112
- operações com cadeias 1344-1346 MEM 212 Microscópio elelrônico (simulação) 1164-1165

Vol. 1 — pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág- 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500.
5

IIIIIIIIIIHHI ÍNDICE REMISSIVO

Microsoft 1290-1291 -CIRCLE 120. 234-235 Negativo


MIDS 244. 703, 1214 - CLEAR 91-92. 179 - programação em linguagem de

MIDI 1306-1310 - códigos de controle 367, 425 máquina 142-145


Mini- Assem bler ISO, 714 - comandos de edição 425 Newlon. Isaac 766-784
Minidisqueles V, Disquetes - compilador PASCAL 1438-1439 NEXT V. FOR. ..NEXT
Minski, Marvln 1315-1316 - cursor de texto 367 Nibble 1335
Minúsculas - desenho com DRAW 234-235 Ninhos FOR... NEXT 206
a de 1215 - diferença emre comandos OTIR eOUTl 792 Nitidez de desenhos na tela 700
mdos BASIC 23 - edição de linhas DATA 191 Níveis de dificuldade 153-160
Míssil (animação gráfica) 28-33 - efeitos sonoros 170-172 -em Avalanche 941-946. 1228-1233.
MIT 1287, 1291, 1314 - função CHR$ 553-555.622-623 1241-1245
MLOGO 1317 - interpretador LOGO 1317 N-kcy-roll-over 989
conversão do BRASLOGO 1319. 1344 - joysticks 291 Nodos 1330
Mnemónico* 196 - organização do teclado 989
MO 1330 - organização do video 531-533, 808, 1132, arquivos 689-690. 908-910. 940
-

MOD16 814 1361-1366 conjuntos 194-195


-

Modelos -padrão MIDI 1310 funções definidas pelo usuário 610


-

- bancos de dados 75 prograni.içãi) dc iiiiisk.ís poli Iónicas 1009- (01 tabela de nomes (MSX) 533. 1361-1363
-

-dimensões fracionadas 1359 - rotinas em código de máquina 1419-1420 variáveis


- 126 1

- dinâmicos - símbolos gráficos de teclado 553-555 efeilo sobre velocidade de execução 932
aplicações 677 em BASIC 99-100
simulação 670-678 cm BASIC 808-814 Nonário, sistema de numeração 3?
irajelória de objetos 670-678, 766-773, em LOGO 1426-1427 NOP 558
781-787 - tabela de NORMAL 390, 1249
- distrihuiçôes de probabilidades 1 176-1 180, - tabela de Normal, distribuição 779-780. 1179-1180,
1 181-1 185 - ledas programáveis 621-626 US1-1I85
-óptica 1164 VRAM
- 531. 808. 1132 lempos
- PERT 1454
-padrões gráficos naiurais 161-1 167 1 MUDECL 1319 NOT 224-225. 301-304
-ressonância 165-1 166 L MUDEHG 1427 na manipulação de
- bits 1335, 1378
-simulação 67(1-678, 981-987. 10611068 Mulllplexação 1406 Notação
- sistemas de numeração 36 Multiplicação em binário 37-39 - BNF 1446
- tipos de 176 1 Multiplicativas, cifras (criptografia) 1093-1095 - cientifica 894
Modem 561-564, 1200, 1404 {V.t. Códigos) - de engenharia 894
-acústico 564 Múltiplos 1347 - hexadecimal cm BASIC 58
- características 1406 Múltiplos, comandos V, Comandos múltiplos - musical 741-742, 745
- tipos 1407 Múltiplos eventos (probabilidade) 776-777 - sufixa e infixa 1343
Modo «ranço 1442-1443 Multilonal, video 800 Notas musicais 722-724. 742
MODULA 1288-1290 Música 721-727.741-747, 1009-1015. 1082 - controle de duração 726, 745
Modulo 1341 V. t. Efeitos sonoros) - tabela de conversão para o MSX 1015
(

Modulo lonarnogol 821 823 - acidentes musicais 743-744 Numeração


Morda, lançamento de (simulação) 77J-776 - acordes musicais 1009-1015 - bases de 34^10. 56-60
Mõmca. impressor» 1442 1443 - andamento 744-745 • de linhas 16. 80. 932
Monitor 3. 88. 7|4, 1217 - clave 741 efeito sobre velocidade de execução 932
-
comparação com televisor 851-854 - composição 1310 erro por numeração inexistente 80
-
de video 8SI-8S4 ( V. i Tela) programa 1398-1400. 1408-1411. 14-40
ptogram* 92-93. 1217 1421-1425 hexadecimal para o
- programa de testes para vídeo 1257-1258 - compressão de melodias 1201-1207, 1430 Spectrum 1281-1283
Monocromático, video 800, 854 - edilor musical (programa) 1398-1400, Números
Monstro (animação) 319-320 1408-1411. 1421-1425 - aleatórios 11-16
Montauem (linguagem de máquina) V, Assembler - efeitos em jogos 788-795 em LOGO 1344
Mijrse, código 891-893 - escalas musicais 722-724, 742 especificação de faixas 16
Motocicleta (animação) 316-318 escala cromática 742 intervalo de especificação 13
Molo-conlinua, bomba 1 143-1 145 - instrumentos digitais 1306-1310 uso em simulação 1121-1127. 1176-1180.
MOTOR 1251 - no Spectrum 560 1181-1185
Motores de passo 1324 - notação musical 741-742, 745 - armazenagem em BASIC 894-900
MOTS 1330 - notas musicais 722-726, 742 - de Fibonacci 1067-1068
Mouse 289. 1000, 1291 (Kt Desenho Auxiliado - pauta musical 741 -de linha 16.80,932
por Computador) -sintetizadores 1306-1310.1400 - digitação de (programa de
Movimentação - tabela de conversão para o MSX 1015 aprendizado) 281-286
-de objetos 28-33. 670-678. 766-773, 781-787 - em LOGO 1342-1344
-gráficos V, Animação gráfico - formatação com PRINT USING 899-900,
o aleatório (simulação) 1166 1440
D planetário 786-787 - influência na velocidade de execução 932
- negativos
no cálculo de SQR 440
no sistema binário 142-145
- Assembler (programa) 401-405 no sistema hexadecimal 142-145
- atributos de tela 515, 814 representação em gráficos 484
- calculadora (programa) 625-626 - quebra -cabeças 1305
:s definidos pelo usuário 1361-1366 - randômicos V. Aleatórios, i

Vol. 1 — pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pig. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIIIIIIHHB iNDMKMMO llllllllll
- de coleções (programa) 68-75, 81-85 PARAFRENTE 1318
-memória 174-184 Paralelas, interfaces 525
programas BASIC 513,1101-1107 Parâmetros de uma função 609
- microprocessador 109-112 Parênteses
- vídeo 86-87, 178. 268, 531-533 - uso cm valores monetários 1440
Oleio (jogo) 756-760. 796-800 Paridade, bits de 1406
Otimizaçãu 905 Partículas subalõmicas (simulação) 1 164-1 165

Observação, pontu de 642-644 OTIR 792 Parliluras musicais 744, 1423


numeração 60
Oclal, sistema de OUT 556, 1286 PASCAL 1288-1290, 1314. 1436-1439, 1446-1451
OCTS 60 - cm Assembler 217 - atribuição 1438
orr-*ti 112 - programação de efeitos sonoros no - comparação com o BASIC 1436
OLD 597-600 TRS-80 170 -compatibilidade 1446
ON ERROR... GOSUB 444 OUTI 792 -recursividade 1223
ON ERROR... COTO 940 OUTIR 217 Pascal, triângulo de 277
ON... GOSUB 80 OVER 350 Pascalina 1436
ON...COTO 78-79 - com impressora 650 Pausas
ON KEY...COSUB 625, 655 Overflo» (sinalizador da UCP) 110 em código de máquina 559
ON SPRITE... GOSUB 191 - programação em Assembler 748-755
ON STOP...GOSUB 626 PAUSE 115
- uso na proteção de programas 551 Paula musical 741
Opcodes 2 PC LEA R 90, 237
OPEN 691-692, 1254-1256 PCLS 118, 393
- para saída cm vídeo (MSX) 594
Operacional, sistema V, Sistema operacional
IP PCOPV 596, 1142
PDL 351
PEEK 261-268
Operações
- alfanuméricas 1214-1215. 1401-1403 PAC V. Projeto Assistido por Computador
1'acMan (jogo) 46-52 operacional 1248-1251
em LOGO 1342-1344 Paddles 288, 351
em PASCAL 1438 Padrões no TRS-Color 265
influência na velocidade de execução 933 - Centronics 525 no TRS-80 1313. 1412
por funções definidas pelo usuário 613 - de pomos 164-1165
1
- comparação com POINT 947
programa pata planilhamento 1 108-1 1 15 - de transmissão de dados 1405 - cópia de telas (TRS-80) 947
símbolos 14 - gráficos (programa) 14-1 15 1
- efeitos sonoros no Apple 266,712

sistema binário 37-39 - RS-232C 523 - encadeamento de programas


sistema hexadecimal 56-60 - tabela de (MSX) 830-831. 1362 no Apple 460
-com datas 1279-1280 - teste de monitores 1257-1258 no TRS-Color 458
- lógicas 301-305 Paginação 1096-1100,1141.1145.1385 no TRS-80 460
uso cm expressões matemáticas 1312 Páginas - exame de programas em memória 513
Operadores lógicos 43 V.t. AND, NOT e
( OR) - direta no TRS-Color 178 - localização do cursor (TRS-80) 1313
Operadores relacionais 301-305 -gráficas 1096-1100. 1141-1145 - medida de tempo no Spectrum 65-66, 265
Óptica, simulação 1164 no Apple e no TK-2000 180 - programação em código de máquina 88
Ópticas, canelas V. Canrtas Ópticas no TRS-Color 178, 596 - simulação do [NKEYS
OR 43, 301-304 no TRS-80 947 994 . no Apple 167, 266
- limite pata tamanho dos números 305 - registro (UCP) 1 12 no TK-2000 496-499
- na manipulação de bils 1335, 1378 PAINT 113 - variáveis de sistemano Spectrum 1340
ORACLE 563, 1407 - no MSX 119-120 - varredura do teclado (TRS-80) 1413
Órbitas (simulação) 781-787 -no TRS-Color 119 Peixes, populações de (simulação) 1166-1167
Orçamento PALAVRA 1344 Penas ópticas V. Canetas ópticas
- programa 134-140 Palavras PEIMCOLOR 1318
- uso de planilhas eletrõnicas 1114-1115 - ctuzadas (jogo) 704 PENDOWN 1287, 1318
Ordenação - em LOGO 1344 PENLIP 1287. 1318
- cordões alfanuméricos 242 - frequência 1416-1418 Persistência visual 853
- no processador de textos 614-620 - processamento de V. Processamento de textos Prrspeclíva 628-633.641-647,693-700. 1391-1395
-vazias 1345-1346 - animação gráfica de um cubo 1097-1098
técnicas de 468-173. 738-740
bolha 292-295, 469-471 Paleia elelrõnka (programa) 846-850 PERT (programa) 1451-1460
instantânea 740 Palíndromo 1448 Peso
Pantógrafo 965 - conversão de medidas (programa) 374-380
por espalhamento 739
por inserção 739-740 Papel 645 - simulação de alavancas e polias 981-987
por substituição retardada 738-739 - tcrmossensivel 524 Pesquisa
Quicksort 740 Papel, Pedra, Tesoura (programa) 1348-1355 - binária 873. 934, 1468
recursáo 1225-1226 PAPER 47, 115, 640, 716 - de subcordòcs alfanuméricos 245-246, 1469
Shell 471-473 - com impressora 650 - de valores em um conjunto 195
Shell-Metiner 473 - por código de contiole 269 - em árvore 873
- velocidade de execução 933 Papcrt. Seymour 1287, 1314 - em bancos de dados 1467-1468
ORG Parábolas 803-804 807.861-866, 1161-1163
,
- em conjuntos bidimensionais
- no Apple 240 - em balística 766 (programa) 203-207
- no MSX 405 Parabolóidcs 807 - em um arquivo 81-82
- no Spectrum 251 PA RAC ENTRO 1318 - linear 1468
- no TRS-Color 300 PARADIREITA 1318 - no processador de textos 614-620
Organização P A R A ESQU ERD A 1318 - otimizacão de busca 905

HM Vol. I
— pág. I a 300; vol, 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 - pág. 901 a 1200; vol. 5 — pág. 1201 a 1500.
IIIIIIIIIHHHHHHHHHHHIIIIIIIIIII
- uso cm simulação e previsão I] 27-1 128 Polias 984-986 - uso em simulação 1121-1127, 1176-1180,
- velocidade de execução 933, 1468-1469 Polifonia (música) 1009 1181-1185
Pessimista, tempo 1454 Polígonos, desenho de 865 Problemas, resolução de 873, 1301-1305
Piaget. Jean 1314 Ponle. desenho de (programa) 131-132 Procedimentais, linguagens 1290
Pilha Ponteiros 175 Procedimentos 1223
- no 6809 793 Ponto de fuga 1391 - em LOGO 1287, 1319-1320
- no Apple e no TK-2000 180 Ponto de observação 642-644 - linguagens 1290
- no Spectrum 176 - PASCAL 1436
- no ZX-81 177 -contagem em Assembler 1228-1233 Processador, registro de (UCP) 112
- UCP 110 -contagem em jogos 47-52, 61-67 Processamento de imagens 1286. 1470
I-IIOI i:*s -em Avalanche 1001-1008. 1228-1233 Processamento de textos
1277-1278 715-720 - acentuação em português 280, 1431
Pintor Alopradn (programa) - Tuncões para detecção
- padrões M64-II65 - apresentação de um texto 332
Pixrls 86-87. 114. 1470
Pia» -1
, gráficos 634-639 Pontuação cm PRINT 13, 146-152
PL-1 1288 POP 215 mala direia 1384-1385
Pirar 47-52, 61-67 Populações programa dc impressão 17-20
- em Avalanche 1001-1008.1228-1233 - dc coelhos (simulação) 1065-1067 - comparação entre editores 580
Planejamento - de peixes (simulação) M66'M67 - editor de textos {programa) 576-580,
de projclo (programa) 1451-1460
- Põquer de dados (programa) 1234-1240 586-591, 614-620
formatação de [elas de texto 501-506
- Põr-do-sol (programa) 25-26 - funções 245-246
jogos de aventura 208-212
- Portadora, onda 1407 - pacotes aplicativos 1381-1385
- jogos de guerra 1016-1020 Portas 556 - substituição de palavras 1403
- planilha eletrõnica 1 110 - controle dc dispositivos c\tcrnos 1286 Processos
Planeias - definição 556 - controle dc 1321-1325
- simulação de órbitas 786-787 - no TRS-80 1032 - de Bernoulli 1176
Planilha eletrõnica (programa) 1108-1115, POS 1313 - de Poisson 1177
1 134-1 138,' 11S4-1 160 Pós-byle 793 PRODLICT 1343
Plania Posição, cifras de 888-891 {Kr. Códigos) Professor de Dalilograila {programa) 253-259,
- crescimento (simulação) 1063 Potenciação 434-439 276-280. 281-286. 328-333
PLAV 725-727 Potências binárias59 PROG 175, 1340
- efeito sobre relógio interno 659 Potência sonora 1083 - na proteção de programas 550
- no MSX 170-172. 1010 POTS 1330 PROGRAM 1438
- no TRS-Color 172-173 PPOINT 716-720 Programa, área de (memória) 175-179
PLOT 113 P-RAMT (variável no Spectrum) 176 Programação { Kr. Técnicas de programação)
- no Spectrum 114. 502. 1248 Precisão 1440 - Assembler V. Assembler
- no ZX-81 116 - do relógio interno 67 caraclcristicas da impressora 652
Plotler 968 - erros 899 uso do CHRÍ 1442-1445
Pluguc para gravadores 54-55 - especificação no PRINT USING 500 - cursor no TRS-80 1413
PMODE 86-87. 118, 178. 236. 345, 392, 479, PRESET 265, 392 - de arquivos 687-692. 1252-1256
Pressão - de blocos gráficos 406-413
PO 1330 - conversão dc medidas (programa) 374-380
POINT 716-720, 1312 Preslel 1407 cm Avalanche 824-833
comparação com PEEK 947
- Previsão 1121-1127, IIS1-1I85 - de jogos V. Jogos
conversão do TRS-Color para o TRS-80
- 52 PRIMEIRO I34J-I346 - desenvolvimento de novas linguagens 1346
Poisson, processos 177 1 PRINT - cm código de máquina V. Código de máquina
POKE 261-268 -
com operadores relacionais 302 - estruturada 221-225
- aceno do relógio interno 659 - em LOCO 1342 PASCAL 1436
- melhoria da apresentação Je um texto 332 repercussão sobre velocidade 931
operacional I24B-1251 - pontuação 13 - ferramentas
- alteração da RAMTOP 212 - relação com BASE 1366 extensão do BASIC (Spectrum) 1281-1283
- controle de robôs 1286 - sinais de pontuação 146-152 indexadot de programas (Spectrum)
- cópia de telas (TRS-80) 947 - USING 500, 899-900, 1440 1461-1463
- delimitação da área de tela no Apple 266 PRINT® 4-10. 150. 502. 1312-1313 - gráfica V. C1RCLE, DRA W, Gráficos,
- desativação da tecla BREAK 1313 - com impressora 651 LINE, OT. PL, PSET. SET ele.
no TRS-80 1412-1413 - conversão do TRS-Color para o TRS-80 52 - heurística 905
- encadeamento de programas - cm animação gráfica no TRS-80 160 - linguagens 1288-1291
no Apple 460 - uso em animações gráficas 669 - lógica 301-305
no TRS-Color 458 - uso no TRS-80 160 - LOGO V. LOGO
no TRS-80 460 PRINT AT 114. 148. 502 - PASCAL V. PASCAL
- entrada de código dc máquina 88 - no Spectrum 867 - sintetizadores de voz 448
- modificação da tabela de atributos - uso em animação gráfica 341-342 - técnicas V. Técnicas de programação
{Spectrum) 515 PRINT* 691-692, 917, 1254-1256 top-down 222
- obtenção dc efeitos sonoros 265 - com impressora 651 Programa-fontc 1437
- obtenção de teclas aul o- repetitivas 265 Probabilidades 774-780, 1I76-IIS0, 1181-1185 Programa-objelo 1437
- para alterar a velocidade de processamento - cálculo de 277. 774-780 Programas
- distribuição de 777-780. 1176-1177, - armazenagem em BASIC 1101-1107
(TRS-Color) 266
- programação gráfica 122 1181-1185, 1454 - autocarregamento 549-550
- rotinas em código de máquina 973, 1419-1420 - simulação de uma moeda 775-776 - auto-execução 550
- tela gráfica (TRS-Co!or) 86-87 - triângulo de Pascal 277 - combinação de 456-460
- variáveis de sistema no Spectrum 1340 - uso em previsão 1121-1127 - comentários em 207

Vol. 1 — pág. 1 a 300; vol. 2 — pàg. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pàg. 901 a 1200; vol, 5 — pág. 1201 a 1500.
iniimmiiw—^iiiiiiim
BASIC - conversão de graus em 334-336 Repetição
- compactador para programas
(TRS-Color) 536-540 Ralos catódicos, tubo de 852 - em BASIC 21-27
- documentação dc 207 Raiz quadrada 439-440 - em LOGO 1330-1331
- edição de 412 - em LOGO 1344 - em PASCAL 1447-1448
em programação estruturada. 224-225
encadeamento de 456-460 RAM 174-175 -

- indexador de programas (Spectrum) 1461-1463 RAMTOP REPRODUZA 1344


- melhoria da velocidade de montagem 1244 - no Spectrum 88, 176. 1340 RESET 1312

no Spectrum 240.250-252,300.311-315. -no TRS-Color 112 RESET (tecla) 16, 551


- em programação Assembler 219
381-387. 402-403. 441-445 {V.t. Erros) - no TRS-80 178
- organização em memória 513, 1101-1107 - no ZX-81 90, 177 -no TRS-Color 1251
- vantagens da criptografia 1094 RAN DOM 13 Resistência do ar (simulação) 783
RandAtnicos, arquivos V. Arquivos Resolução de problemas 873, 1301-1305
Projecao 628-633 641-647 .

Randômicos. números V, Aleatórios, Resolução gráfica 114, 120, 851-854


Projeto Assistido por Computador (V.t.
- canetas ópticas 928
Desenho Auxiliado por Computador)
-aplicações 1096, 1367-1371, 13B6-1390 RAnVoMIZE 13. 1344 - no Apple e no TK-2000 116
-editor gráfico (programa) 1021-1026 - com USR (Sinclair) 94. 320, 1248 - no Spectrum 114
-gestão de projetos 1451-1460 Raposa os Gansos, A {jogo)
e 872-875. -no ZX-81 116.320
901-905, 948-954 - programa
de 1257-1258
leste
cálculo esiatíslico de tempos 1455
Raquete cielrònica 288 Ressonância (simulação) 1165-1166
PROLOG 1288. 1291, 1314, 1316
Prontidão, mensagem dl 162 Rastreamento 381-387 RESTO 1344
Proteção Razão de crescimento 1064 R ESTORE 130, 132-133

- alarme anliladrões 1322 REA D 128-133 RESUME 444


- de programas 548-551 -cuidados na digitação de DATA 860 RET 215. 217

Protocolo de comunicação 1406 -em arquivos 692 - no Spectrum 251


em PASCAL 1438 Relas V. Gráficos
PR# 650 -

tipos de erro 312-313 Retroalimentação 1323


PSET 86-87, 118. 265. 345. 391 -

Pseudo-parãmelro 609 Recordes 64-66 RETURN (tecla) 364


PSG 1013 Recursâo 1221-1227 RGB 854

PSHB 219 - em LOGO 1330-1331 Rifle óptico 926

p-Syslem 1438-1439, 1450 - uso em fractais 1358 RIGHT 1318

PULS 219 Rede MIDI 1306-1310 RIGHTS 244, 703, 1214


Rede PERT 1451-1460 Rígido, disco V. Disco
PUSH 214
Redes de computadores 561-564, 1200, 1407 Ritmo 744
PUT
- desenho de sprites 189,373,812 - quadros de avisos 1404-1407 RND ! 1-16, 42-43, 1040, 1126
Redução de dados 1323-1324 - em efeilos gráficos 23-25
- uso em gráficos 104. 107. 353, 478-480.
535-536 Referências cruzadas (programa) 1461-1463 RO 180
Reflexão 673-678 Rohós 1284-1287. 1322
PUT SPRITE 373. 812
Registros Rolamento de tela 442
- banco de dados 69, 1464-1466 programa em Assembler 213-219
-

- de indexação <UCP) 110 Roldanas 984-986


- de página direta 178. 199 Roll-over 989
- internos da UCP 109-110 ROM 174-175
- modificação 82-83 - Autostart (Apple e TK-2000) 1249
- processador 1 12 - gráficos
no MSX 553-555
Regra da mão direita 154 no Spectrum 640. 661
Quadrado, lei do 1063 Regulação 1322-1323 no TK-2000 734-737
Quadrados, comparação dc (programa) 436-439 Relacional, modelo 75, 1468 no TRS-80 1413
Relatórios 1469 - resseleção no TK-2000 180
Quadriculado (gráfico) 345
Quadros de avisos 562, 1200, 1404-1407 Relógio ROT 318
- animação 354-358 Rotação
- caixa postal 1407
- em Assembler 658-659 - curvas cónicas 805-807
Qualidade carta 1385
- interno 67 - geração de gráficos 1194-1199
Quarta geração, linguagem de 1291, 1468
Quebra-csbeçM 1301-1305 efeito dc SAVE e LOAD 659 ROT ATE 116
Queda de objelos - no Spectrum (rotina) 1248 ROT ATE (instrução em código de máquina) 556
439-440 REM Rotinas de máquina V. Código de máquina
- cálculo do tempo (programa)

-como eliminar (programa) 536-540 Rótulos 197


QuickBASIC 1291
Quicksort (técnica de ordenação) 740 -como utilizar 207 KOI Ml 1344

QWERTY 276-280 - efeitos sobre a velocidade de execução 932 RRCA 556


- eliminação para encurtar programas 141 RS-232C, padrão 525. 878, 1200. 1311
- uso com mouse 1000
- uso na depuração de erros em programas 3 1

- uso na programação em código de RTS


- no 6502 220
máquina 90
- no 6809
REMA1NDER 1344 219
RENAME 940 - no Spectrum 251
«enumeração de linhas Ruídos {V.t. Efeilos sonoros)
- e o comando 459 MERGE efeitos no Apple e no TK-2000 1027
- rotina para o Spectrum 1281-1283 - no TRS-80 1032-1033
- técnicas de programação em jogos 168-173
RA 180 REPEAT 1287, 1320
Radiam» REPEAT...UNTIL 225, 1447-1448 RUN 11,940

1% Vol. I
- pág. 1 a 300; vol. 2 - pág. 301 a 600; vol. 3 - pág. 601 a 900; vol. 4 - pág. 901 a 1200; vol. 5 - pág. 1201 a 1500.
IIIIIIIIIIIHHnHHHHHHHIIIIIIIIIII
Servomecanismo 1323 - uso em gráficos 337-340. 354-360
Servomoiores 1286, 1324 Sinalizadores 110

s SET 1312 - fim de arquivo 1256


- conversão do TRS-Color para o TRS-80 52 -UCP 110
Selores 879, 908, 1217 Sintaxe, diagrama de 1446
SGBD V, Banco de dados Sintaxe, erro de 312-313
Shell,ordenação 471-473 Sintetizador de voz 446-448. 963
Saída. Areu de (memória) 180 Shell-Melzner, ordenação 473 - em robôs 1285
Sainl-Cyr. cifra de 890-891 {V.t. Códigos) SHIFT 556 Sintetizador musical 1306-1310,1400
Sapo (animação gráfica) 342-348 SHOWTURTLE 1318, 1329 Sirene (TRS-Color) 173
SAVE 910-911. 1255 Simbólicos, modelos 1176 Sistema binário 37-39
- com gravador cassete 54 Símbolos ( V.t. Caracteres) Sistema de desenvolvimento 1325
- efeito sobre relógio interno 659 gráficas de teclado Sistema de equações lineares 1304-1305
- em LOGO 1329 no MSX 553-555 Sistema gerencíador dc bancos de dados 75.
- programas em Assembler 252 no Speclrum 640, 661 706-71 I, 1464-1469
SC ALE 116. 318 no TK-2000 734-737 Sistema hexadecimal 56-60
SCREEN -operações arilméticas 14 Sistema oclal 60
no MSX 119.
- 268. 808, 1249 Simetria 1372-1374 Sistema operacional 880, 1246-1251
uso com sprites 189 SIMULA 1290 - acesso direto em BASIC 1246-1251
- no TRS-Color 86-87. 118. 392. 506 Simulação 1121-1127 - de discos V. DOS
SCRN 716-720 - alavanca 982-984 - formatação 908, 1217
Scrolling -aleatória 1040. 1166. 1176-1180. 1181-1185 - programa assistente 936-940
- horizontal 828-829, 832 - alunissagem 821-823 - rotinas do 1246-1251
- programa em código de máquina 94-95 -atrito 673 Sistemas de controle 1321-1325
SDE 1467 - balística 766-773, 781-787. 1161-1163 Sistemas de numeração 34-40
SE.. .ENTÃO (LOGO) 1331 -bar 1181-1185 - hexadecimal 56-57
Segmentos, gráficos de 634-639 - bomba de combustível 96-98 - modelos 36
Segurança - bomba moto-contínua 1143-1145 ocial 60
-

- alarme antiladroes 1322 - caos 1 166 Sistema solar (simulação] 786-787


cuidados com fitas e discos 488
- - colónia de bactérias 961-963 SLOW (ZX-81) 111
disquei» 91
- - cores em vídeo monocromático
800 SMALLTALK 1000, 1288-1291
- redes de telecomunicações 564 -crescimento 1061-1068,1166-1167 SNOBOL 1288. 1291. 1316
- técnicas de proteção de programas 548-551 Jogo da Vida 961-963 Snooker 677
Seleção - curvas cnvoltórias 1161-1163 Soft-secloríng 908
- canetas ópticas 928-929 - dinâmica populacional 1061-1068 Sólidos de revolução 1194-1199
- computadores para processamento dc Jogo da Vida 961-963 Som {V.t. BEEP, E/eitos sonoros. Música,
textos 1385 - elevador hidráulico 986-987 Ruídos. SOUND)
- de memória 180 - função INKEYS análise 1081-1085
- dispositivos de memória auxiliar 876-BS0 no Apple 167, 266 -digitalização 1081-1085
- impressoras para processamento de no TK-2000 167 - editor musical (programa) 1398-1400,
textos 1385 - jogos económicos 662-668,681-686 1408-1411, 1421-1425
- vídeos para microcomputadores 854 - lançamentos dc uma moeda 775-776 - presença em monitores de vídeo 854
Selos, o vendedor de (programa) 1303-1304 • LINE INPUT 1259-1260 - produção de efeitos naturais 560
SEM PRIMEI RO 1345-1346 - loteria esportiva 1 121-1 127 - programação em Assembler 788-795
SEMLLTIMO 1345-1346 - mecânica 981-987 Apple e TK-2000 712-714
Seno V. SIN - microscópio eleirõnico 1 164-1 165 no Spectrum 556-560
Senhas 888-893. 1091-1095, 1260 - modelos aleatórios 1176-1180, II8I-II85 - programação em BASIC 32, 168-170, 265,
- entrada (programa) 166-167, 888-893, - movimento aleatório 1166 721-727, 741-747. 1009-1015
1091-1095. 1260 - órbitas 781-787 compressão de melodias 1201-1207
- jogo (programa) 139-1 140 1
- polias 984-986 no Apple c no TK-2000 1027
- por deslocamento dc código - populações de coelhos 1065-1067 no TRS-80 1032-1033
(programa) 363-366 - populações de peixes 1 166-1 167 - som digital 743
Senóides, curvas I 163-1 164 - reflexões ópticas M64 Soma cumulativa 1349
Sensibilidade - relógio 354-358. 658-659 Soma de verificação 1277-1278
- canelas ópticas 926 - reprodução de bactérias 961-963 Soma em binário 37-39
Sensores 967, 1322. 1324 - ressonância 1165-1166 Sombreamenlo 115, 1394-1395
SENTENÇA 1346 - sistemas dinâmicos 772 {V.t. Cinemática) - no Spectrum 388-389
SENTE N CE 1346 - sprites no TRS-80 627, 660, 669
Sequenciais, arquivos V. Seriais - STR1NGS no Spectrum 661 - comandos em BASIC V. Aleatórios, números
Seqiien eia menta1322 - trajetória de objetos 670-678, 766-773, - moedas 775-776
Sequencias alfanuméricas V, Cordões 781-787 SOUND 22, 725-727
Sequencias de escape 1442-1443 -võo V. Simulador de vôo - efeito sobre relógio interno 659
Seriais Simulador de vão (programa) 592-596. 601-607, -no MSX 170-172, 1013
- acesso a fitas 878 653-657 -no Spectrum 168-170. 556-560
- arquivos 687, 1467 SIN - no TK-2000 168-170. 714
- comunicação 1200 - desenha de uma espiral 359 -no TRS-Color 172-173
- interfaces 525 (V.t. RS-2320 -em LOGO 1344 Speclrum
- pesquisa 933, 1465 - em modelos cinemáticos 771 - acionadores de disquetes 907-908
Séries matemáticas 1067-1068 - para desenhar círculo 116. 118 - áreas da memoria 175
Serra Pelada (jogo) 662-668.681-686 - uso cm curvas cónicas 802 - Assembler (programa) 248-252

Vol. 1 — pág. 1 a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol.-4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500. m
IIIIIIIIIIIHMHHHHHHHHIIIIIIIIIII
- atributos de tela 716-720 STRINGS 62, 245. 703, 1214 - organização no TRS-80 1412
- auto- repetição 265. 1248 - emprego no PR1NT US1NG 500 - seleçâo para processamento de lextos 1385
- caractere* definidos pelo usuário 122. - simulação - símbolos gráficos de (K.í, Caracteres)
341-347, 529 no Spectrum 661 no MSX 553-555
- CIRCLE 115, 232 no TK-2000 737 no Spectrum 640, 661
- círculos (desenho) 232 - uso com caracteres gráficas no TK-2000 734-737
- CODE 252 no MSX 553-555 no TRS-80 627 660, 669. 1413
,

- códigos de controle 269 no TRS-80 627 - varredura (programa) 991-993


- compilador PASCAL 1438-1439 - uso com códigos de controle 260 Teclas
- conversão de decimal para - uso em blocos grdricos 669 - auio-repeiicâo 726
hexadecimal 1281-1283 Strlngs V. Cordões no Spectrum 265
-cores US. 389-390. 424 Stub 599 no TRS-Color 265, 1248, 1251
- desenho com DRAW
14. 232-233. 12481 Subcordõcs V. Cordões no TRS-80 1313. 1412-1413
- efeitos sonoros 168-170, S56-560 Submarino (animação) 316-318 -
BREAK 16. 7B-79. 442. 559
- efeitos visuais 867 Sub-rolinas (('./. GOSUB e ON...GOSUB) desativacão (TRS-80) 1313
- extensão do BASIC 1281-1283 acesso aos endereços do sisiema - CODE 553-555
- função CHRS 123. I5S operacional 1248 - códigos de teclado no TK-2000 499
- indexador de programas 1461-1463 - chamadas múltiplas 80 - comando EDIT 399-400. 425. 552. 1329
- interpretador LOGO 1317 - em BASIC 79-B0 - como detectar 28-29
- joysiicks 290 - influência sobre velocidade dc execução 932 - CONTROL 260,267,551,624
- manipulação de cordões 1214 - pilha da UCP 110 no TK-2000 734-737
- organização do teclado 988-989 - pilha no Spectrum 176. -CONTROL-BREAK 16
- rastreamento de programas 381-387 - pilha no ZX-81 177 -CONTROL-C 16.78-79,551
- relógio (programa cm Assemhler) 658-659 - recursivas 1221-1227 controle por pressões múltiplas 988-993
- rotina de apagamento 1281-1283 Subsliluiçã» - CONTROl RESLT 16
- símbolos gráficos de teclado 640. 661 - em processadores de lextos 1382 - CONTROL-STOP 16
- sprites 122 - retardada (ordenação) 738-739 - escolha para um jogo 31
- técnicas de programação 867, 1340 - subcordõcs 245-246. 1403 - identificação por PEEK no TRS-80 1413
- utilização da área reservada da tela 867 Sublração em hinário 37-39 - programáveis 655
- variáveis do sistema 1248 SDBTRACT 1343 MSX 621-626
CHANS 175 Sufixa, nniaçãn 1343 - tabela de endereces iu< RS t olor 267
1

SPRITE OFF 191 Sufixo 908-910 Técnicas de programação


SPRITE ON 191 SUM 1343 - aceleração de entrada dc dados 163-164
Spriles 1132 - aperfeiçoamento de gráficos 639
- bancos de 808-81 -arquivos 687-692, 1252-1256
- como funcionam 1427 - arredondamento 1347
- criação 189. 808-814 - aumento da velocidade dc programas
- definição 107. 188-189 BASIC 930-935
- em Avalanche 818-820 - cálculos com datas 1279-1280
- em LOGO 1426-1427 - caracteres definidos pelo usuário 406-413
- combinação de programas 456-460
- movimentação com joysliek 350-351 TAB 146-152. 501-506 compactação de programas 536
- no MSX 188-191 - 367
tecla - compressão dc textos 1332-1339. 1414-1418,
- programação em Assembler 818-820 - uso com impressora 650-652 1428-1435
- simulação no TRS-80 627. 660. 669 Tabela de códigos ASCII 263 - controle por teclas múltiplas 988-993
- técnica de planejamento 190 Tabela de figuras 316-318 - criptografia 888-893
SPRITE STOP 191 Tahela de nomes (MSX) 268, 1361-1363 - depuração de programas longos 240. 251.
SOR 77. 439-440 Tabelas de forma 237 300, 403
SQRT 1344 Tabelns-verdade 303-304 - depuração no Spectrum (programa) 381-387
Squash 677 Tablcle digitaliiador 289, 964-968 (Cf. - documentação com REM 207
STA 199, 219 - 220 Desenho Auxiliado por Computador) - economia de memória 141. 269
Sian bil 1406 Tabuada (jogo) 14-16 - edição de hnhas 399-100. 412
Status, regido de (UCP) 112 Tabulação - elaboração dc menus 504-506. 623-624
STEP (K,t FOR...NEXT) - com códigos de controle 367 - encurtando programas 141
- definição 22 - na formatação de leias 501-506 - formatação de telas 501-506
- em PASCAL 1448 Tabuleiro, jogos de 756-760, 796-800 - idenlilicaçáo dc arquivos 488
Stepper. mulor 1324 Tanque de guerra (animação) 342-346 - localização c depuração dc erros 311-315
STICK 350-351. 655 Tape-loop 877-878, 908 - manipulação de bits em BASIC 1378-1380
STKBOT TARTARUGA 1318 - no Spectrum 867, 1340
- variável de sistema Ta ri a ruga - no TRS-80 912, 947, 994. 1312-1313.
no Spectrum 176 - LOGO 1316, 1326 1412-1413
no ZX-81 177 - mecânica 1286-1287 - operações com cordões 241-247.
- I kl Mi (variável de sistema) 176-177 Taxas de transmissão 877 1214-1215. 1401-1403
- uso na proteção de programas 551 Teclado - ordenação 468-473. 738-740
STOP (comando) 312-313 - alteração do retardo do teclado - prevenção de erros 441-445
STOP (tecla) 16, 78-79, 442, 551. 624, 626 (Spectrum) 1248 - programação esiruturada 221-225. 292-295
Stop bil 1406 - buffer de 990 - proteção de programas 548-551
STOP OFF 626 - códigos de (MSX) 499 -recursão 1221-1227
STOP ON 626 - inteligente 280 - utilização dc KEY 621-626
STRS 237, 245. 703. 1214 - musical 725-727, 741-747 - utilização do código ASCII 361-366

<9B VoL I
— pág. I a 300; vol. 2 — pág. 301 a 600; vol. 3 — pág. 601 a 900; vol. 4 — pág. 901 a 1200; vol. 5 — pág. 1201 a 1500.
- utilização do GOTO 78-79 Térmicas, impressoras 524 - de arquivos entre computadores 1404
Teta Terminais de dados 1406 - tela 947. 994
- acentuação em português 280 Teste Transformação de coordenadas 3-0 644-647.
armazenagem em cordoes - de gravação (programa) 53 1391-1395
alfanuméricos 947. 994 - programa de leste para vídeo 1257-1258 Transformada de Fourler 1083
- armazenagem em disco ou fita 994 TEXT 116 Transmissão em filas magnéticas 877
- 515,716-720,814
atributos de Tralor 525 (Kr. Impressoras)
- borda decorativa (programa) 24J-246 - acentuação em português 280, 1431 "Três Ratinhos Cegos. Os' (melodia) 744, -

- códigos de controle no TRS-80 260 - apresentação 332 1012-1013


- condições de visualização 864 - arquivos 688 Triângulos
- cópia com PEEK e POKE (TRS-80) 947 - impressão de cartas (programa) 17-20 - relações 337-338
- delimitação com POKE no Apple 266 - processamento de V. Processamento de textos Tridimensionais, gráficos 581-585, 628-633,
- detecção de pontos e caracteres 715-720 TFR 199 637-638.641-647,693-700. 1194-1199, 1391-1395
edição em tela completa 1313 THEN V. IF...THEN Trigonometria
- efeito multicor no Spccirum 867 - uso em gráficos 334-340, 354-360
- endereços no MSX 1249 - modificação no MSX 1013 Trilhas 879, 908, 1217
- escrita com POKE 263-264 TIME 15 TROFF 300, 403
- gráfica TIMER 65-66 TRON 300, 381. 403
colocação de textos no Apple II 237 liny-PASCAI. 1436 TRS-Color
comparação entre TV e monitor 851-854 íipo, declarações de 1438 - acionadores de disquetes 906
conversão de coordenadas 52 Tiro ao Pato (programa) 368-373 - animação gráfica 478-480
cópia na impressora 650, 1441-1445 Tinis (efeitos sonoros) - Assembler (errata) 794
escrita em alta resolução (Apple) 534-535 - no Apple e no TK-2000 1027 - Assembler (programa) 296-300
inversão no ZX-81 319-320 - no TRS-80 1032-1033 auto-repetição
- 265, 1248, 1251
melhorando a nitidez 700 Titulação 639 no leclado musical 726
no Apple e no TK-2000 116 - elaboração de leiras (programa) 913-920. - caracteres definidos pelo usuário 478-480.
no Spccirum 114 921-925 S35-536
no TRS-Color B6-B7. 178 - em planilhas eletrõmcas 1156 - C1RCLE
118-119. 234-235
pontos fora da tela 31, 632 - programação em Assembler 748-755 - CLEAR
300
rotina de desenho de letras (TRS-Color) 760 TK-2MM "Coleta de lixo'" 1251
-

- organização da memória no MSX 531-533 - acionadores dc disquetes 907 COLOR 118. 393
-

- programa de deslocamento 213-219 - áreas da memória 180 comandos de edição 399-400


-

- proteção da última linha iSpectrum) 867 - Autostart ROM


1249 - compactador de programas BASIC
- rolamento 442 - círculos (desenho) 117-118 (programa) 536-540
- códigos de controle 269 -compilador PASCAL 1438-1439
formatação de entrada 1396-1397 - códigos de teclado 499 conversão de programas para o TRS-80
-
52
formatação de saida 501-506 - COLOR 116 -desenho com DRAW
234-235
580
janelas - desenho com DRAW 116, 237, 318, 343-344 - editor de discos (programa) 1216-1220
organização no MSX 268 - diferenças do GALL com Apple 732 - efeitos sonoros 172-173
organização no TRS-Color 178 - Disassemhler 714 - extensão do BASIC 597-600
programação de caracteres 1361-1366 - editor gráfico (programa) 846-850 - interpretador LOGO 1317
totina de preenchimento 973 - efeitos sonoros 168-170. 712-714, 1027 - joysticks 291
rolínas de controle no Apple 503 - função CHRS 734-737 - organização do teclado 989
técnicas de organização 146-152 - gravação de dados em fita cassete 1254 - processador interno (6809) 793
Tclecompras 562 - joysticks 291 - programação gráfica 86-87, 118, 393
Telemática 561564. 1407 - mini- Assembler 714 - rotina de desenho dc leiras 760
sistemas de quadros de avisos 1404-1407
- - monitor 714 - tabela do teclado 267
videotexto 561-562, 1200. 1406-1407
-
organização do teclado 989-990 TRS-80
Tclctex 1407 - símbolos gráficos de teclado 734-737 acionadores de disquetes
-
906
Teletexto 562. 1407 - simulação da função 1NKEYS 496-499 - animação gráfica 160, 669
Televisor V. TV TO - áreas da memória 178
Telex 1407 - em LOGO 1287, 1319 - Assembler (programa) 679-680
Tem peral ura - utilização em funções alfanuméricas 1214 - auio-repeiiçáo 1313, 1412-1413
- conversão de medidas (programa) 374-380 - utilização ein gráficos 661 caracteres definidos pelo usuário
-
627,
Tonalidade 741 660, 669
- comandos de acesso 15, 65-66 Toolkil (programa) 1281-1283 - CLEAR 90
- contagem em jogos 47-52, 61-67 Tnp-riown, programação 222 - códigos de controle 260
- controle 265 Toro 693-700 (V.l. Gráficos) - códigos gráficos 627. 660, 669
- diminuição do tempo de execução de Torres de Hamii, As (programa) 1226-1227 - comandos de edição 399-400
programas 930-935 Touchpad 289-290 - compilador PASCAL 1438-1439
- em projetos PERT 1454 Trabalho, área de (memória) 176-180 - conversão de programas do TRS-Color 52
- limite máximo para marcação 67 Traçador gráfico 968 - cursor de texto 260
- queda de objetos 439-440 T raçadores dr régua 1'. Tablete digitalizador - despejo de leia com JKL 1442
TRACE 381 - efeitos sonoros 170, 1032-1033
alteração no Spccirum 1248 Trackerball 289-290 - função CHRS 160, 627, 660, 669
com laços FOR...
22 NEXT Tradução manual do Assembler 196-200, 213-219 - joysticks 291
programação em Assembler 748-755 TrajelciriHS I . Animação gráfica e Simulação - programação gráfica 120, 160
Tempo de reaçáu (programa) 67 Transcrição musical 1423 - spriles 669
160, 627, 660,
Teorema binomial 780 Transdata 563 - [étnicas dc programação 912. 947, 994,
Teoria das Catástrofes 163-1 164 1 Transferência

Vol. I — píg. 1 a 300: vol. 2 - pág. 301 a 600; vol. 3 - pág. 601 a 900: vol. 4 — pág. 901 a 1200: vol. 5 - pág. 1201 a 1500.
niiiiiiiiiii
Truque* V. Técnicas de programar.

Tubo de raios catódicos 852


Tudo-ou-nada, distribuição 1454
Turbo-PASCAL
1

1438-1439, 1450
w— ;
96
96-97
armazenagem 1 101-1 107
i VARPTR
—miimiiiiiu
972
-

VRAM
VTAB
-

VTRANSF
utilização

10,
em

152, 503
com impressora 650
blocos gráficos
531-533.808.812,1132,

(programa) 947
armazenagem em BASIC 894-900
- número de variáveis definiveis 1126
VARPTR 898, 947. 1378
- uso em rotinas di' código de máquina 972-973
Varredura
- teclado 988, 991-993
- video 852
VARS S75
Vazios, cordões 100
VDP 808, 1249 Wafadrive 877, 908

LART 525 Velocidade WA1T 1286

UCP 109-112 - acesso a discos rígidos 1133 WAN 1200, 1407

UCSD PASCAL 1436. 1450 - como melhorar no simulador de voo 607 WARS (variável de sistema no ZX-81) 177

comparação entre BASIC e código WHII.E. .I)0 224-225. 1447-1448


LTKí V. Caracteres definidos pelo usuário
-

Winchester (discos) V. Disco


ÚLTIMO 1345-1346 de máquina 925. 930
- desenhos em perspectiva 699 Wireframes 581-585. 628-633. 641-647, 693-700
l nidadr algorítmica 1436
- digitação 257. 286 - 582
definição
l nifnrmc. distribuição 1180
do roll-over 989 Wirth. Mklaus 1436
LlNLOCK 911. 940 influência
UMPLOT 114 - montagem de programas longos WORD 1344

Iploading 1404 (Assembler) 1244 Wordmap 1383

L SEBORRAC H A 1319 - no TRS-Color 266 WORKSP (Spectrum) 176

USELÁPIS 1319 - aumento da 930-935


técnicas para WK1TE 1254-1256

ISENADA 1318 efeito da REM 932 - em arquivos 692

U5INC 500, B99.900, 1440 efeito dos espaços 932 WRITELN 1438
- com impressora 65 - trajetória de uma bola 674-677 WYSIWYG 1383

USR 94-95 217 973 , ,


- transmissão entre computadores 1405
- efeitos sonoros no TRS-80 1032 Vendedor de selos 1303-1304
- na extensão da linguagem BASIC 599 Verificação
- no MSX 405 - de dados 1465
-no Spectrum 124B - de datas 1280. 1401
Usuário, área do {mi - de disquetes 55, 910-911, 940
-soma 1277-1278
VERIFY 55. 910-911, 940
Vertical, movimenlo 766-773, 781-787
Vida. Jojjo da (programa) 961-963
Video (Kl, Tela)
câmara de 1470
- composto 853
- programa de teste 1257-1258
- televisor versus monitor 851-854
VAL 244-245. 900.
\ alores monetários uso do fósforo 854
- formatação de 1440 Videotex 1407
VAR 1438 Videotexto 561-562, 1200, 1406-1407
V •Níveis Vidkon 1470
- alfanuméricas 13, 99-100 Vlnle-e-um (programa) 426-433, 449-455, 461-467
armazenagem de 1101-1107. 1213
armazenagem de tela 947, 994 - persistência visual e vídeos 853
194-195 Visuais, efellos V. Efeitos visuais
dimensionadas
-área de (memória) 175-180 \ ÍMi;ili/açio 864
-booleanas 1448 VL1N 116
- de sistema 1248 Volume
175-177. 1340 - conversão de medidas (programa) 374-380 /.-Kl) Imiirnprocc:
no Spectrum
- simulação de crescimento 1063 Zero, sinalizador de 110
noTRS-Color 177-178
Simulador Zodíaco, signos do (programa) 1261-1270
no ZX-81 177 Vôo, simulador de (programa) V.

uso em proteção de programas 550 de vôo Zoom gráfico 1049-1055


- dimensionamento 192 Voi ZX-81
reconhecimento 1311 - áreas da memória 177
-em BASIC 12, 96-100 -

446-448, 963 - Assembler 251


-em LOGO 1326-1329 - sintetizadores
em
robôs 1285 - círculos (desenho) 116
-em PASCAL 1448
- emprego correio 26 Vozes (música) 1009 - CODE 362-364
combinação de programas 458
- e oscomandos READ e DATA 128 VPEEK 179,268.517.531-533, 1132. 1361-1366 -

- na criação de sprites 808-814 - edição de programas 552


. indexadas 192-195. 201-207
armazenagem 1 101-1 107 VPOKE 179. 217, 268, 517. 531-533, 1132,
- joysticks 291
1361-1366 - manipulação de cordões 1214
- influencia na velocidade de execução
na criação de spriles 808-814 - animação gráfica 319-320
técnicas de
- inicialUaeâo em Avalanche 995-999 -

- pág. 1 a 300; vol. 2 - pág. 301 a I; vol. 3 - pág. 601 a 900: vol. 4 - pág. 901 a 1200; vol. 5 - pâg. 1201 a 1500.
IIIIUIIIIIHHHH^HHHMIIIIIIIIH
Pág. 26 - legenda ã esquerda Pág. 398 - 3? col. - 11? parágr. Pág. 908 - 1? col. - 2? parágr.

Onde se lê: No TK-80X o Caleidoscópio Onde se lê: SI$( )


Onde se lê: Sinciari
Leia-se; No TK-90X, o Caleidoscópio Leia-se: S$( Leia-se: Sinclair

Pág. 34 - 1? col. - 4? parágr. Pág. 444 - quadro - 2? parágr. Pág. 924 - 2? col. - último parágr.
Onde se lê: 5 + 10 + 200 + 3000 Onde se lê: Os micros das linhas Onde se lê: TR-Color
Leia-se: 5 + 70 + 200 + 3000 TRS-80, TRS-Color, Apple, TK-2000 Leia-se: TRS-Color
e MSX,
Pág. 53 - 1? col.- 2? parágr. Leia-se:Os micros das linhas TRS-80, Pág. 932 - 3? col. - 2? parágr.
Onde se lê: um conector DID Apple, TK-2000 e MSX, Onde se LET A = VAL"100"
lê:

Leia-se: um conector DIN Leia-se: LET A = VAL("100")


Pág. 501 - 1? col. - 3f parágr.
Pág. 56 - Ululo da matéria Onde se lê: mensagens do tipo "Você Pág. 1014 - 1? col. - 1? parágr.

Onde se lê: ARITMÉTICA tem um canhão disponível". Onde se lê: artigo da página 816.
Leia-se: ARITMÉTICA Leia-se: mensagens do tipo "VOCE Leia-se: artigo da página 794.
TEM CANHÕES
1 DISPONÍVEIS".
Pág. 60 3? col. • quadro
- Pág. 1124 - 2? col. - 3? parágr.
Onde se lê: John von Newman
Onde se O octal tem 8 dígitos: 0, 1,
lê: Pág. 561. 2t col. - 5? parágr.
-

Onde se lê: sistemas telemétricos, Leia-se: John von Neumann


2, 3, 4, 5, 6, 7 e 8.
Leia-se: O
octal tem 8 dígitos: 0, 1,2, Leia-se: sistemas telemáticos,
3, 4, 5, 6 e 7.
Pág. 1180 - 1? col. - fig.

Pág. 564 col. - 2? parágr.


- 2." Onde se lê: Waiting time (secs)
Pág. 87 - inlertítulo - faixa prela Onde se lê: sistemas telemétricos Leia-se: Tempo decorrido (segundos)
EFEITOS DOS BLOCOS GRÁFICOS Leia-se: sistemas telemáticos
Pág. 1260 - 1? col. - 4? parágr.
Pág. 245 - 1? col. - 1? e 4? parágr. Pág. 584 - 2? col. - 2? parágr. Onde se lê: <SCAPE>
Onde se lê: VAL< - A$) e VAL( = B$) Onde se lê: linhas 5000 e 5180 Leia-se: < ESCAPE >
Leia-se: VAL(A$) e VAL(BS) Leia-se: linhas 5000 e 5130
Pág. 1311 - 3? col. - 1? parágr.

Pág. 245 - 1? col. - 4? parágr. Pág. 609 - 1? col. - 1" parágr. Onde se lê: saftware
Onde se lê: BS"45 MARCOS" Onde se lê: Alguns computadores (Apple, Leia-se: software
Leia-se: B$="45 MARCOS" TK-2000, MSX e TRS-80) permitem
dois ou mais parâmetros, enquanto Pág. 1320 - quadro
Pág. 260 - 1? col. - 5?, 6?, 7? parágr. outros (TRS-Color), apenas um. Onde se FORWARD
lê: D:
Pág. 260 - 2? col. - 2? parágr. Leia-se: Alguns computadores (Spectrum, Leia-se: FORWARD :D
Onde se lê: CHRS MSX e TRS-80) permitem dois ou
CHRS mais parâmetros, enquanio outros Pág. 1329 - 3? col. - 1? parágr.
Leia-se:
(Apple, TK-2000 e TRS-Color), ape- Onde se < CIRL >< C
lê:

Pág. 290 - 1." col. - último parágr. nas um. Leia-se: <CTRL><C>
Pág. 291 • 2? col. - último parágr.
GETS Pág. 610 1? col. - 1? parágr. Pág. 1349 - 3? col. - 6? parágr.
Onde se lê: comandos -

Leia-se: comandos GET Onde se If.XxXxX Onde se lê: alistamento


Leia-se: X • X . X Leia-se: alisamento
Pág. 294 - 1? col. - 2? parágr.
B
poderão ser chocados Pág. 634 1? col. 3? parágr. Pág. 1383 - 3. col. - 2? parágr.
Onde se lê:
- -

Onde se lê: Devido à falta de comandos Pág. 1384 - 3? col. - l? parágr.


Leia-se: poderão ser checados
gráficos adequados no ZX-81, não Pág. 1385 - 2? col. - 2? parágr.
Pág. 301 - 3? col. - 1? parágr. apresentamos programas para essa Onde se lê: WYSWYG
Onde se lê: A for menor que o de B máquina. Leia-se: WYSIWYG
Leia-se: A for menor ou igual ao de B Leia-se: Devido à Falta de comandos
gráficos adequados no ZX-81 e no Pág. 1383 - 3? col. - 2? parágr.
Pág. 327 - 2? col. - 61' parágr. TRS-80, não apresentamos progra- Onde se lê: (do inglês What You See
Onde se lê: COSCB mas para essas máquinas. What You Gel)
Leia-se: GOSUB Leia-se: (do inglês What You See Is
Pág. 748 - 1? col. - 2? parágr. What You Gel)
Pág. 364 • 1? col. - 2" parágr. Onde se lê: Keytone Kappers
Onde se lê: comandos de remuneração Leia-se: Keystone Kappers
Leia-se: comandos de renumeração
Pág. 852 - nomenclatura no esquema
2" parágr. de blocos Pág. 7 - 2? col. - 21' parágr.
Pág. 366 2? - col. -

Onde se lê: trará 65, o código de B. Onde se lê: Detector de visão Onde se lê: (só vale para o TK-90X):
Leia-se: Irará 66, o código de B. Leia-se: Detector de vídeo Leia-se: (vale para toda a linha Sinclair):

Pág. 398 - 2f col. - 7? parágr. Pág. 906 2? col. - 2? parágr.


- Pág. 30 - progr.
1? col. -

Onde se lê: SI$ Onde se lê: concectar Na linha 60. substitua a flecha para
Leia-se: SS Leia-se: conectar cima pela letra 1.
IIIIIIIIIIIHHH^HMMHHIIIIIIIIIII
Pág. 32 - 3? col. - progr. Pág. 1214 - 2? col. Pág. 304 - 2f col. - progr.

Na linha 150, substitua a flecha para Onde se lê: X$(LEN XS - N TO + 1) O logotipo não se aplica a este
cima peta letra l. Leia-se: X$(LEN XS-N TO) programa.

Pág. 39-1? col. - progr. Pág. 309 - I? col. - 2? progr.


Para funcionar no ZX-S1, coloque tu- Corrija as linhas 140 e 145:
do em maiúsculas e troque a Unha 130: 140 DATA "NADAR",5:'ESVAZ1AR",6,
130 PRINT,,,, "OUTRO NUMERO (S/N)?" Pág. 30 - 1? col. - progr. "ACENDER",?, "DESISTIR" ,8, "LIS
Na linha 60, substitua a flecha para TAR",9."MATAR", 10, "ATIRAR",
Pág, 41 - 1? col. - progr. cima pela letra I. I0."AJUDAR",11
Para funcionar no ZX-81, coloque 145 DATA "PEGAR",2"APANHAR",
tudo em maiúsculas e faça as seguin- Pág. 32 - 3? col. - progr. 2. "CARREGAR" ,2, "COLOCAR",
tes alterações no programa: Na linha 150, substitua a flecha para 3, "DEIXAR", 3, "LARGAR", 3, "PU
25 LET T = 0 cima pela letra l. XAR",4
26 LET C = 0
40 IF N = -99 THEN GOTO 80 Pág. 46 - 1? col. - progr. Pág. 309 - 2f col. - progr.
80 PRINT "MEDIA = ";T/C Acrescente a linha 90: Acrescente a linha 515:
90 STOP 90 DIM aS(32) 515 GOTO G(I)

Pág. 42 - 2? col. - progr. Pág. 94 - 1? col. • 3? progr. Pág. 366 - 2? col. - \" progr.
Para funcionar no ZX-81, coloque Pág. 100 - 1? col. - 3? progr. O logotipo não se aplica a este
tudo em maiúsculas e faça as seguintes O logotipo não se aplica a este programa.
alteraçõesno programa: programa.
50 IF G = N THEN GOTO 90 Pág. 640 - 2f col. - 4" parágr.
90 PRINT "MUITO BEM" Pág. 136 - 3? col. - progr. Onde se lê: UNK
92 PAUSE 100 Corrija a linha 200: Leia-se: INK
94 GOTO 10 200CLS:PRINT BR1GHT v;PAPER 2;
1NK 6; AT 2,4;"MENU PRINCIPAL" Pág. 824 - 2f col. - progr.
Pág. 43-1? col. - 2? progr. Corrija a linha 750:
Para funcionar no ZX-81, mude tu- Pág. 169 - 1? col. - 2? parágr. 750 REM org 58155
do para maiúsculas e separe as instru- A crescente:
ções da linha 110 em duas linhas: No micro nacional TK-90X, o co- Pág. 825 - 3? col. - progr.

110 LET A$ = INKEYS mando BEEP recebeu o nome de Corrija a linha 40:
115 IF A$< >"S" AND A$o"N" SOUND. Portanto, se você tem um 40 DATA 83, 67, 79, 82, 69, 45, 48.
THEN GOTO 110 TK-90X, substitua todas as ocorrências 48, 48, 48, 48, 48, 76, 73, 86, 69, 83,
do comando BEEP pelo comando 45, 53, 71, 65, 77, 69, 32, 79, 86, 69.
Pág. 77 - 1? col. - 2? progr. SOUND nas linhas 8010 (programas da 82, 32. 33, 33, 33, 35, 35, 33, 35, 35,
Para funcionar no ZX-81, divida a li- página 169, 1? e3f colunas), 8010 e 8015 35, 33, 35, 35, 33, 35, 33, 35, 35. 35,
nha 15 em: (programa da página 170. lf coluna) e 35, 33, 35, 33, 35, 35. 35, 35, 33. 35,
15 INPUT A 400 (página 170, 2? coluna). 35, 33. 35, 35, 35
16 INPUT B
Pág. 213 - 3? col. - 1? parágr. Pág. 867 - 3? col. • progr.

Pág. 78 - 2? col. - progr. Onde se lê: Os comandos Id de, 16384 Corrija a linha 100:
Para funcionar no ZX-81. forme no- c Id hl. 1.16385 100 GOSUB 2
vas linhas com os comandos separados Leia-se: Os comandos Id de, 16384 e Id e, na linha 2, substitua GOTO 10 por
por dois pontos (GOTO 1 70) nas linhas hl, 16385 GOTO 1

130, 140 e 150.


Pág. 248 - 2? col. - progr. Pág. 902 - 2? col. progr.
Pág. 94 - 2? col. - 4!' parágr. Na 4? Unha da linha 5120, Corrija a Unha 2720:
Onde se lê: No ZX-81 a tecla RAMD onde se lê: "ld",64,6, 2720 LET PF = 0:IF I$ = "S" OR I$ =
fornece RAND na tela). leia-se: "ld", 64,22, "s" THEN GOTO 2760
Leia-se: No ZX-81 a tecla RAND pode
ser usada para essa finalidade). Pág. 251 - lf cul. - progr. Pág. 921 - 2." col. - progr.

Acrescente ao final da linha 6110: Corrija a linha 50:


Pág. 244 - 2? col. - 1" progr. :GOSUB 6160 50 FOR M = TO 1 N(N)
O programa também funciona para Na linha 6150,
o ZX-81. Apenas coloque o GOTO 10 onde se lê: GOSUB 6260 Pág. 1042 - 2." col. - progr.
da linha 30 em uma linha separada. leia-se: GOSUB 6160 Corrija a linha 2790:
2790 DATA "cavaleiro" "sargento ,

Pág. 245 - 2? col. - progr. Pág. 251 - 2f col. - progr. " "lanceiros" "lanceiros" "arqu
, , ,

O programa também funciona para Acrescente a linha: eiros" "arqueiros"


,
"camponeses" ,

o ZX-81. 9999 STOP ."camponeses"

Pág. 334 - 3? col. - progr. Pág. 278 - 2? col. - progr. Pág. 1214 - 2? col.
O logotipo não se aplica a este Corrija a linha 1010: Onde se XS(LEN X$ - .N TO +
lê: 1)
programa. 1010 PRINT AT 12,6;S$ Leia-se: X$(LEN X$-N TO)
IIIIIIIIIIMH CRKATA GCRAl mil!

Pág. 612 - 2? col. - progr. Leia-se: ...limitar a memória cm


Acrescente a linha 35: &H3680. que se reserve memória só
. .

35 PRINT FNT$(I$) até &H3680... só poderá usar o


Pág. 6 - 3? col. - quadro CLEAR até &H1E80.
Corrija a 2? linha de códigos Pág. 652 - 1? col. - 2? parágr.
numéricos: Onde se lê: POST (-2) Pág. 219 - 2? col. - 3? parágr.
Onde se lê: 152 131 190 176 128 Leia-se: POS - 2) ( Onde se lê: PSHB armazena tempora-
Leia-se: 151 131 191 176 280 riamente na pilha
Pág. 702 - 3? col. - progr. Leia-se: PSHS armazena temporaria-
Pág. 24 - 3? col. - progr. O logotipo não se aplica ao programa. mente na pilha
Para funcionar no TRS-80, substitua
a linha 8 por: Pág. 932 - quadro - IH' parágr. Pág. 296 - 1? col. - progr.

8 CLS Esta indicação também serve para o Corrija a Unha 10:


TRS-80. 10 PC LEAR
1:CLEAR 3000:CLS:PRIN
Pág. 30 - I? col. progr. - 1!" T@233;'lNlCIALlZANDO":R$ = CHR$(
Corrija a linha 40: Pág. 1122 - 1? col. - progr. 13):POKE 146,1

40 IF K$ = "F" THEN = 374 M ELSE Pág. 1126 - 3? col. - progr.


GOTO 30 Pág. 1127 - 2? col. - progr. Pág. 297 - 2? col. - progr.
Pág. 1177 - 3? col. • progr. Corrija a linha 100:
Pág. 31 - 2? col. - 4" parágr. Pág. 1179 - 2? e 3." col. - progr. 100 DATA COM.115.3.CWAI,108,1,D
Onde se lê: O programa para o TRS-80 Pág. 1180 - 3? col. - progr. AA,25,,ORA,l86,l,TST,125,3,LEAS,
funciona de modo idêntico ao pro- Pág. 1184 - I:' col. - progr. 66,3,LEAU,67,3,LEAX,64.3,LEAY,
grama para o TRS-Color. Pág. 1303 - 1? col. - progr. 65.3, MUL,61„EORA, 184, l.ORB,250,l
Leia-se: O programa para o TRS-80
funciona de modo idêniico ao pro- Pág. 1305 - 1?, 2? e 3? col. - progr. Pág. 299 - 3? col. - progr.
grama para o TRS-Color. As teclas Os programas para o TRS-Color Corrija as linhas 1550 e 1560:
a serem pressionadas, porém, são L também funcionam no TRS-80. 1550 Pl = 1478:P0 = Pl:P2 = 0
e R, que comandam, respectivamen- 1560 PRINT@448 - P2,k:TAB(6)T$<K2):
te, movimentos à esquerda e à direita. P9 = P0 + LEN(T$(K2»
e acrescente a linha 1565:
Pág. 33 - 3? col. - progr. 1565 IF LEN(T$(K2)) + P0> 1503 THEN
Corrija a linha 150: Pág. 19 • 2? col. - progr. P0=P0-32:P2=P2 + 32:Pl = Pl-32:
150 IF PO>
1022 OR PO<0 THEN Corrija a linha 430: GOTO 1565
PO = LP: GOTO 50 N - :READ
430 RESTORE: FOR J = 0 TO l

A$:PRINT#-P,STR1NGÍ(LL-ML," "); Pág. 300 - 1- col. - progr.


Pág. 62 1? col.-progr. - SP$;:PRINT# - P,M1D$(AS,2): Corrija a linha 1950:
O logotipo não se aplica a este CHRS(13t; 1950 IF XS< > "$"OR BD$< "0" OR
programa. BD$>"G" THEN 1980
Pág. 31 2? col. - 3!* parágr.
-

Pág. 63 - 2? col. - 3? parágr. Onde se lê: A linha 60 investiga se "L" Pág. 327 - 3? col. - 2? progr.

Onde se lê: programa para o TRS-80 e foi pressionada... A linha 70 confe- Este programa também pode ser exe-
o TRS-Color, re se "R"
foi pressionada... cutado no TRS-Color.
Leia-se: programa para o TRS-Color, Leia-se: A linha 60 investiga se "E" foi
pressionada. linha 70 confere se
. . A Pág. 495 - 1? col. - 6? parágr.
Pág. 224 - 1? e 2? col. - progr. "D" foi pressionada... Onde se lê: Após digiar C
Acrescente (após o programa): Leia-se: Após digitar C
o
O programa indicado funciona ape- Pág. 45 - 1? col. - 5 parágr.
nas no TRS-Color. Para executá-lo no Onde se lè: apenas os das linhas TRS-80 Pág. 535 • 3? col. - 6? parágr.
TRS-80, faça as seguintes modificações: e MSX Onde se lê: GEI
multiplique por dois todos os números Leia-se: apenas os das linhas TRS-80, Leia-se: GET
depois dos comandos PRINT@, nas li- TRS-Color e MSX
nhas 10, 20, 30, 60. 90 e 1 10; suprima Pág. 607 - 1? col. - progr.

as linhas 15 e 120, e inclua a linha: Pág. 52 • 3." col. - quadro Na linha 2340, corrija IF ABS(OY)
95 TIMER = TIMER + 0.1 Onde se lê: se N for a locução da tela para IF ABS(PY)
Leia-se: se N for a locação da leia
Pág. 270 a 275 Pág. 656 - 1? col. - progr.
Todos os programas indicados para Pág. 65 I? col.
- progr. - Corrija as linhas 3040 e 3050:
o TRS-Color também funcionam no Corrija a linha 420 3040 IF PEEK(342) = 247 THEN PT =
"
TRS-80. 420 LET K$= INKEY$:IF KS = " PT - 1

THEN GOTO 420 3050 IF PEEK(343) = 247 AND RL>


Pág. 322 - 1." col. - 2? progr. -30 THEN
O programa também pode ser execu- Pág. 90 - 3? col. - 4? parágr.
tado no TRS-80. Onde se lê: ...limitar a memória em Pág. 703 - 3.° col. - progr.
§H3680... que se reserve memória Acrescente a linha 950:
Pág. 375 - If eol. progr. só alé §H3680... só poderá usar o 950 FOR DE=1 TO 3000:NEXT:RE
O logotipo não se aplica ao programa. CLEAR até §H1E80. TURN
IIIIIIIIIHIHHIMHHHHHIIIIIIIIII!
Pág. 760 - 3? col. - progr. Pág. 30 - l? col. - progr. Pág. 107 - 2." col. - 6? parágr.
Corrija a linha 9200: Corrija a linha 60: Pág. 119 - 3f col. - 2? parágr.
"""
9200 DIM LE$(27) 60 LOCATE I8,M:PRINT ^crescente:
E possível desenhar letras e gráficos
Pág. 829 - 2? col. • progr. Pág. 32 2? col, - 2? parágr.
- na mesma tela do MSX, porém usamos
Corrija a linha 70: Onde se lê: a Ieda CLEAR
(código 26) o comando DRAW
neste programa, de
70 PSHS X Leia-se: a tecla < CLEAR
> (código 27) modo a compatibilizá-lo com as versões
para outros computadores.
Pág. 830 - 1? col. - progr. Pág. 33 - I." col. - I? parágr.
Corrija a linha 90: Onde se lê: teclas Z e X Pág. 120 - 3? col. - 9? parágr.
90 PULS B Leia-se: teclas com flechas Onde se lê: As cores disponíveis no
PMODE 3,1 são: verde (1), amarelo
Pág. 932 - quadro - II" parágr. Pág. 33 - 1? col, • 1? parágr. (2), azul (3) e vermelho (4).
Esta indicação também serve para o Acrescente: Leia-se: As quatro primeiras cores dis-
TRS-Color. Nos micros da linha MSX, as teclas poníveis para o gráfico no SCREEN
a serem utilizadas para deslocamento da MSX são: preto ( 1 ), verde (2), verde-
Pág. 997 - 3? Col. - progr. base e disparo são, respectivamente, as claro (3) e azul-escuro (4).
Corrija a Unha 130: flechas do cursor e da barra de espaços
130 LDA #5 (correspondentes aos códigos 28, 29 e 32). Pág. 171 - 3? col. - progr.
Acrescente estas linhas:
Pág. 1040 - 2? col. - progr. Pág. 58 - 3? col. - progr. 135 FOR 7. = i TO 15 STEP .05: SOUND 8,Z
Corrija a linha 1280: Corrija a linha 330: 137 NEXT:RETURN
1280 1F NL>30 THEN NL = 30 330 LOCATE 2 + X.3, 1 8: PRINT 140 SOUND l,0:FOR Z = 0 TO T
USING "#";N; STEP .3
Pág. 1044 - 2? col. - progr. 145 SOUND A,Z:SOUND A.255-Z
Na linha 1420, onde se lê SR$(I), co- Pág. 73 - I." col. - progr. 147 NEXT:RETURN
loque STR$(I) Corrija as linhas 20 e 30: 150 FOR Z = 0 TO 10
20CLS:CLEAR I0O0O:R$ = "P RMCAI" 154 FOR ZZ = 0 TO T STEP 5
Pág. 1047 - 3? col. - progr. 30 CLS:LOCATE 5,1:PRINT"M E N U 156 SOUND l,Z:SOUND A,ZZ
Nalinha2490, onde se lê SR$<1), co- PRINCIPAL" 157 NEXT ZZ,Z:RETURN
loque STRS(I) 160 FOR Z= 15 TO T
Pág. 73 - 3? col. - progr. 164 FOR ZZ = 0 TO 15
Pág. 1075 - 2? col. - progr. Corrija a linha 1130: 166 SOUND l,Z:SOUND A.Z-ZZ
Apague a linha 18 e acrescente a 180: 1130 NEXT:R-INT(10000/(TS.3.A)) 167 NEXT ZZ,Z:RETURN
180 GOSUB 2410:CLS:END :PR1NT:PRINT" Número máximo de 170 IF T = 255 THEN T = 80
- >";R
registros 171 SOUND l,0:FOR Z= TO 40 1

Pág. 1118 - 2? col. - progr. 174 FOR ZZ= 10 TO RND (l).T


Corrija a linha 10: Pág. 74 - I." col. - progr. 176 SOUND A,ZZ
10 ORG 19781 Corrija a linha 7070: 177 NEXT ZZ,Z:RETURN
7070 OPEN F$ FOR OUTPUT AS # 1 180 SOUND 1,I:1F T = 255 THEN
Pág. 1236 - 1? col.progr.
-
T=100
Apague a linha 9870. Pág. 84 - 2? col. - progr. 184 FOR Z = 10 TO T STEP 5
Corrija a linha 3020: 186 FOR ZZ = 5 TO Z
Pág. 1236 - 3? col. - progr. 3020 IN$ = INKEY$:IF IN$ = "" 187 SOUND A.Z-ZZ
Onde se lê: 9870 (linha) THEN 3020 188 NEXT ZZ.ZrRETURN
Leia-se: 980 190 IF T = 255 THEN T= I6:A= 1

Pág. 85 - 1" col.


progr. - 191 FOR ZZ= TO 30 I

Pág. 1239 - Zf col. - progr. Corrija a linha 5070: 192 SOUND A,RND(1)*T
Substitua o sinal circunflexo entre as- 5070IFD>NR AND G = THEN G=0: l 195 FOR Z= 1 TO RND(I)«200
pas "'"por "" nas linhas 550 e 580. CH = - ELSE 1F D > NR THEN 5230
1 197 NEXT Z,ZZ:RETURN
200 IF T = 255 THEN T= 16:A= 1

Pág. 1239 - 3? col. - progr. Pág. 93 - 1? col. - progr. 201 FOR ZZ= TO 10 1

Substitua, na linha 950, PRINT@433 Corrija a linha 250: 202 SOUND A,RND(1)*T
por PRINT@432 250 POKE SA,VAL("&HO" + S$) 205 FORZ = TO RND(I).16 STEP 8
1

207 SOUND 8,Z:NEXT Z,ZZ.RETURN


Pág. 95 - 2? col. - 1" parágr.
Onde se lê: o comando RUN: Pág. 189 - 3? col. - 1? parágr.
Leia-se: o comando (defina antes RUN Onde se lê:SPR1TE(0) A$
Pág. 10 3? col. - 3? parágr.
- a área onde está a rotina, digitando Leia-se: SPR1TE(0) = A$
Troque de lugar as linhas: DEFUSR = &HE001):
20 HTAB 18:VTAB I0:PRINT "000" Pág. 262 - I? col. - progr.
<?20 LOCATE 18,I0:PRINT "000" Pág. 95 - 2? col. - 2? parágr. Este programa funciona no MSX.
Onde se lê:
Pág. 16 - 1? col. - progr. §HE001 Pág. 401 - 2? col. - progr.
Corrija a Unha 140: Leia-se: Acrescente a linha 5005:
140 GOTO 80 &HE001 5005 DIM G(1I0)
iiiiiiimiiw^—
Pág. 412
Onde se
• 2? col. - 3? parágr.

lê: O
laço das linhas 70 a 90 co-
loca nesse local
Pág. 793 - 1? col. - progr.
Corrija a linha 10:
lOorg -12197
mim
Pág. 1040 - 1? col. - progr.

1
Corrija a linha 1180:
180 IF'M(T<B,8>,T(B,9)>< >0 THE
Leia-se: O
laço das linhas 60 a 90 colo- e suprima a linha 20. N GH = 223 + M(T(B,8).T(B,9))
ca nesse local
Pág. 794 - 2? col. - progr. Pág. 1042 - 3? col. - progr.
Pág. 429 - I? col. - progr. Corrija as linhas 20 e 120: Apague a linha 200 e acrescente:
Corrija a linha 2030: 20 call - 12213 201 VC = 0:DE = 0
2030 DRAW *'S12BM" + STR$(CX + 3) 120 call - 12210
+ ","+STR$(CY + 2) + S$ Pág. 1131 - 2? col. - progr.
Pág. 831 - 1? col. - progr. Corrija a linha 90:
Pág. 430 - 3? col. - 3? parágr. Corrija a linha 30: 90 cp 0
Onde se lê: A linha 60 dimensiona 30 ld hl, - 15200
Pág. 1186 - 2." col. - progr.
Leia-se: A linha 82 dimensiona
Pág. 916 3? col. • 3? parágr.
- Corrija a linha 350:
Pág. 431 - 2? col. - 2? parágr. Onde se lê: A linha 200 zera C 350 REM ld a,4
Onde se lê: das linhas 70 a 110 Leia-se: A
linha 220 zera C
Leia-se: das linhas 88 a 96 Pág. 1213 - 1? col. - progr.
Pág. 945 - 2? e 3? col. - progr. Corrija a linha 900:
Pág. 452 •
col. progr.
1." - Corrija estas linhas: 900 jp 53850
Acrescente a linha 6505: 10 org 53693
6505 CLOSE#l 80 ld de, 222 Pág. 1232 - 1? col. - progr.
600 ld(-5223),de Corrija a linha 90:
Pág. 464 - 1." col. - progr. 640 ld de,(-5223) 90 ld a,3
Corrija a linha 800: 670 ld( - 5223),de
800 AS=INK£Y$:IF A$ = "N" AND Pág. 1329 - I? col. - úllimo progr.
A$<>"S" THEN 800 Pág. 946 - 1? col. - 2? parágr. Substitua o programa por:
Onde se lê: A sub-rolina hls AP CIRCULO :LADO
Pág. 553 - 3." col. Leia-se: A sub-rotina ho DESAPAREÇA TAT
Onde se lê: Linha 220: <SHIFT> REPITA 72 [PF :LADO PD 5]

<GRAPH> Pág. 946 - 1? col. - 4? parágr. APAREÇATAT


Leia-se: Linha 220: <SHIFT> Onde se lê: a sub-rotina snp, FIM
<GRAPH>\ Leia-se: a sub-rotina sn,
Pág. 1344 - 2? col. - progr.
Pág. 579 2? col. - progr. Pág. 946 - 1?, 2? e 3? col. Onde se lê: TO DADOS
Corrija a tinha 10: Onde se tê: ho Leia-se: AP DADOS
10 CLS:KEYOFF Leia-se: ao
Pág. 1366 - 3? col. - último parágr.
Pág. 612 - 2? col. - progr. Pág. 946 - 2? col. - 3" v 5? parágr. Elimine o trecho final do texto: Vol-
Acrescente a linha 35: Onde se tê: hp taremos a este assunto oportunamente,
35 PR1NT FNT$(1$) Leia-se: pp quando explicarmos os registros do chip
de vídeo - VDP.
Pág. 618 - 3? col. - progr. Pág. 946 - 2? col. • 5? parágr.
Na linha 3400, Onde se lê: as instruções pusch
onde se lê: LPRINT TT$;CHR$(32); Leia-se: as instruções push
leia-se: LPRINT TT$;CHR$(10);
Pág. 18 - 2? col. - 2? parágr.
Pág. 971 - 1? col. - progr.
Pág. 622 - 2? col. - 2? parágr. Corrija a linha 10: Onde se lê: Modifique a linha 30
Onde se lê: F1F2 10 org - 11678 Leia-se: Modifique a linha 120
Leia-se: Fl, F2 e acrescente as linhas:
25 ld a, 88 Pág. 20 - 1.° col. - progr.
Pág. 626 - 2? e 3? progr.
2? col. - 28 ld (- 12162), O programa não funciona no Apple
Troque de posição estes programas. 135 call - 12144 e no TK-2000 sem sistema operacional
de disquete.
Pág. 681 - 2? col. - progr. Pág. 1010 - 3? col. - progr.
Acrescente as linhas 1500 e 1510: Acrescente a linha ISO: Pág. 44 - 3? col. - penúltimo parágr.
1500 SCREEN 1 180 FOR DI = 1 TO T:NEXT Acrescente:
1510 CLS e ordene as linhas 3000 a 3140 e 4000. No Apple II e no TK-2000, são mos-
trados blocos coloridos na tela (coman-
Pág. 692 - 2? col. - 6" parágr. Pág. 1011 - 1? col. • 1? parágr. do VLIN das linhas 85 a 95).
Onde se lê:CCTRL-D Onde se lê: as variáveis K0 a K5
Leia-se: CTRL-D Leia-se: as variáveis Kl a K5 Pág. 45 - 1? col, - 1? parágr.
A crescente:
Pág. 792 • 2? col. - progr. Pág. 1034 - 2? col. - progr. As linhas 220. 230 e 240 dos programas
Corrija a linha 10: Corrija a linha 355: para outros micros correspondem às li-
355 D1M T(17.9) nhas 110. 120 e 130 para o Apple.
IIIIIIIIIIIHHH^HMHMHIIIIIIIII
Pág. 52 • 2." col. - progr. Pág. 344 - 1? col. • 2" parágr. mero máximo para R que você pode
Acrescente a linha 1095: Onde se lê: linha 140, colocar irá depender, logicamente, das
1095 LET TI = TI + l Leia-se: linha 410, coordenadas do centro do circulo. Es-
te não pode exceder os limites da le-
Pág. 52 - 2? col. - 6" parágr. Pág. 344 - 1? col. - 3? parágr. ia, senão ocorrerá um erro no coman-
Onde se tê: em 999999 segundos Onde se lê: linha 420 do HPLOT.
Leia-se: em 99999 segundos Leia-se: linha 490
Pág. 127 - 2? col. - 3? parágr.

Pág. 52 - 3? col. - I" parágr. Pág. 656 - 1" col. - progr. Onde se lê: Para entender melhor, ex-
Onde se lê: dividindo-se FA por 50 Corrija a linha 6210: perimente introduzir a linha:
Leia-se: dividindo-se TI por 50 62I0IFA$<40THEN PRINT "COMO Leia-se: Para entender melhor, experi-
SUA VELOCIDADE ERA BAIXA," mente introduzir a linha (não vale pa-
Pág. 52 - 3." col.- 3? parágr. :PRINT"NADA ACONTECEU": ra o TK-2000):
Onde se tê: A linha 1290 aguarda... e a GOTO 6500
linha 1300 verifica Pág. 161 • 3? col. - progr.

Leia-se: A
linha 1240 aguarda... e a mes- Pág. 692 - 2" col. - 6? parágr. Pág. 162 - 3? col. - progr.

ma linha verifica Onde se lê: CCTRL-I) Estes programas também podem ser
Leia-se: CTRL- executados no TK-2000.
Pág. 66 • 2? col. - progr.
Acrescente a linha 310: Pág. 845 - 3? col. - progr. Pág. 432 - 3? col.
310 LET T = T+ l:GOTO 130 Corrija as linhas: Onde se lê: 1 160 MP:HGR

2060 1F P= l THEN PR# 1 Leia-se: 160 MP:HGR


Pág. 66 - 3? col. - 2" parágr. 2220 NEXT:PRINT
Onde se lê: tempo gasto na linha 320 2230 PRINT # 0:RETURN Pág. 482 - 2? col. - progr.

Leia-se: tempo gasto na linha 310 Pág. 483 - 1? col. - progr.

Pág. 932 - quadro - II? parágr. Pág. 485 - I? col. - progr.

Pág. 80-1? col. - progr. A indicação também é válida para o Pág. 486 - 2? e 3? col. - progr.

Retire a linha 10, para funcionar no Apple II. Pág. 487 - 2? col. - progr.

Apple II e no TK-2000. Pág. 518 - 1." col. - progr.

Pág. 1034 2? col. - progr.


- Estes programas não podem ser exe-
Pág. 117 - 2." col. - 2" parágr. Apague a linha 360 e acrescente: cutados no TK-2000.
Onde se lê: As linhas 80 e 90 361 DIM T{I6,9}
Leia-se: As linhas 120 e 130 Pág. 656 - 1." col. - progr.
Corrija a linha 6210:
Pág. 118 - col. - I" parágr.
I
:'
"COMO
6210 IF A$<40THEN PRINT
Substitua o trecho a partir da S." li- SUA VELOCIDADE ERA BAIXA,"
nha por: Pág. 88 - 2? col. - 1? parágr. :PRINT"NADA ACONTECEU":
tamanho do círculo, entrando diferen- Onde se lê: pelo comando MA. GOTO 6500
tes valores para XC, VC e R. O núme- Leia-se: pelo comando ASS.
ro máximo para R que você pode colo- Pág. 768 - 2? COl.
progr. -

car irá depender, logicamente, das coor- Pág. 116 - 3? col. - progr. Pág. 769 - 3? col.
progr. -

denadas do centro do círculo. Este não Para rodar no TK-2000, substitua as Pág. 771 - progr.
1? col. -

pode exceder os limites da tela, senão linhas 50 e 60: Pág. 773 - progr.
1? col. -

ocorrerá um erro no comando HPLOT. 50 HPLOT 10,75 TO 11,190 Pág. 782 - 2." progr.
col. -

60 HPLOT 10,190 TO 200,190 Pág. 786 2? col. - progr.


-

Pág. 127 - 3? col. - 4? parágr. Pág. 787 2? col. - progr.


-

Onde se lê: <CTPL> e <C>. Pág. 117 - 2? col. - 2? parágr. Pág. 858
- 3? col. - progr.

Leia-se: <CTRL> e <C>. Onde se lê: As linhas 80 e 90 servem pa- Pág. 875
- 1? e 2? col. - progr.

ra desenhar a antena. Estes programas não podem ser exe-


Pág. 167 - 1? col. - 2? parágr. Leia-se: As linhas I20e 130 servem pa- cutados no TK-2000.
Onde se té: o comando GETS ra desenhar a antena.
Leia-se: o comando GET Pág. 932 - quadro - II? parágr.
Pág. 117 - 3? col. - progr. A indicação também é válida para o
Pág. 168 - 2." col. • 2? parágr. Para rodar no TK-2000, acrescente as TK-2000.
Onde se lê:(chamado de hipe linhas:
Leia-se: (chamado de bipe 18 XL= XC:YL = YC + R Pág. 960 - 1? col. - progr.
29 XN = XC + R*SIN(N):YN = YC + R. Pág. 974 - 3? col. - progr.
Pág. 220 - 3? col. - 5" parágr. COS(N) Pág. 976 - 3? col. - progr.
Onde se lê: RTS 30 HPLOT XL,YL TO XN,YN:XL = Pág. 977 - 2? col. - progr.
Leia-se: RTE XN:YI. = YN Pág. 979 - 1? c 3? col. - progr.
Pág. 980 - 2? col. • progr.
Pág. 259 - 1? col. • progr. Pág. 118 - 1* col. - I? parágr. Pág. 1372 - 2? col. - progr.
Pág. 281 - 2? col. - 2" progr. Substitua o trecho a partir da 8." li- Pág. 1374 - 2? col. - progr.
Pág. 283 - 3? col. - 3" progr. nha por: Pág. 1376 - I? col. - progr.
O programa para o TK-2000 tambérn tamanho do círculo, entrando diferen- Estes programas não podem ser exe- M
funciona para o Apple. tes valores para XC, YC e R. O nú- curados no TK-2000.

Você também pode gostar