Atariware Wiki: Sección 7 - Grafico mensual de barras en colores

https://www.atariware.cl/wiki     Versión: 2 (01.11.2020 01:58)

Sección 7 - Grafico mensual de barras en colores

https://www.atariware.cl/archivos/compu-util1/barras.png


Los sonidos y gráficos introducen magníficos efectos en los programas de juegos. En este programa verás como pueden usarse estos recursos para desplegar datos.

Datos y resultados son a menudo comparados agrupándolos por períodos mensuales, cuando se debe comparar producciones, ventas o gastos en diversos períodos de tiempo. Generalmente es más significativo y claro ver tablas en forma de gráficos de barra que intentar comparar largas listas de números. Utilizando este programa, el usuario ingresará los totales correspondientes a cada mes y los veré luego convertidos en un hermoso despliegue gráfico.

Como funciona el programa

Comenzaremos DIMensionando una variable de string A$ y 2 arreglos numéricos que aceptarán hasta 12 ítemes. Saltaremos luego a la subrutina 2000 para ingresar los totales correspondientes a cada mes y regresaremos (sentencia RETURN) a la línea 4. Con esta instrucción''activaremos el modo gráfico 6 (GRAPHICS 6), con la ventana de texto al pié de la pantalla.

Fijaremos las posiciones X e Y -dentro de la ventana gráfica- utilizando las variables PX y PY, colocaremos el título del gráfico en la variable A$ y saltaremos a la subrutina 20. Usaremos esta rutina para permitimos colocar textos en la ventana gráfica y luego volver a la línea 8.

Usando el COLOR 1, dibujaremos un gran rectángulo, en donde colocaremos la barra con los datos. En la línea, 100 determinamos cual es la cantidad mayor a usar (MCANT), la que establecerá la escala de nuestro gráfico. La escala es la que dará un significado a las longitudes de las barras. Haciendo J1=MCANT dividido por 65, obtendremos la. longitud de la barra más larga en nuestro rectángulo.

En la línea 130, determinaremos el extremo superior de cada barra. Luego transformaremos el número mayor ( K ) en un número de uno o dos dígitos y calcularemos el número que aparecerá a la largo del lado izquierdo del gráfico.

Colocaremos, después, los márgenes de la pantalla, tan anchos como sea posible y pondremos la letra inicial de cada mes en la ventana de texto, directamente bajo la barra que lo representa. Las barras comenzarán a ser dibujadas a partir de la línea 310.

La linea 360 hará emitir un sonido cada vez que termine de dibujarse una barra. Antes de terminar, colocaremos normales los márgenes -izquierdo y derecho- de la pantalla.

La línea 500 es un ciclo infinito y puedes reemplazarla por una instrucción END o una rutina de salida (con un mensaje de despedida, si así lo deseas).

Listado de instrucciones
1 REM GRAFICO MENSUAL DE BARRAS
2 DIM A$(20),CANT(12),JW(12):GOSUB 2000
4 GRAPHICS 6:SETCOLOR 2,4,4:SETCOLOR 4,4,4:Z=1:SETCOLOR 0,1,10
6 PX=4:PY=0:A$="GRAFICO MENSUAL":GOSUB 20
8 COLOR Z:PLOT 18,9:DRAWTO 158,9:DRAWTO 158,75:DRAWTO 18,75:DRAWTO 18,9
10 GOTO 100
20 DL=PEEK(560)+PEEK(561)*256:D1=PEEK(DL+4)+PEEK(DL+5)*256
22 FOR U=Z TO LEN(A$):D2=57344+((ASC(A$(U,U))-32)*8):D3=D1+PY*20+PX+U-Z:FOR JZ=0 TO 7
24 POKE D3+JZ*20,PEEK(D2+JZ):NEXT JZ:NEXT U:RETURN 
100 FOR MES=Z TO 12:IF CANT(MES)>MCANT THEN MCANT=CANT(MES)
110 NEXT MES
120 J1=MCANT/65
130 FOR MES=Z TO 12:SCANT=75-(CANT(MES)/J1):JW(MES)=INT(SCANT):NEXT MES
140 IF MCANT>=10000 THEN K=INT(MCANT/1000):GOTO 200
150 IF MCANT>=1000 THEN K=INT(MCANT/100):GOTO 200
160 IF MCANT>=100 THEN K=INT(MCANT/10):GOTO 200
170 K=INT(MCANT)
200 KD=K/5:K2=INT(K-KD):K3=INT(K-(KD*2))
220 K4=INT(K-(KD*3)):K5=INT(K-(KD*4))
222 A$=STR$(K):PX=2-LEN(A$):PY=10:GOSUB 20
224 IF K<5 OR K>99 THEN 280
240 A$=STR$(K2):PX=2-LEN(A$):PY=24:GOSUB 20
250 A$=STR$(K3):PX=2-LEN(A$):PY=38:GOSUB 20
260 A$=STR$(K4):PX=2-LEN(A$):PY=52:GOSUB 20
270 A$=STR$(K5):PX=2-LEN(A$):PY=66:GOSUB 20
280 POKE 82,0:POKE 83,40:POKE 752,Z
300 PRINT :PRINT "     E  F  M  A  M  J  J  A  S  O  N  D"
310 FOR MES=Z TO 12:JY=MES-Z
312 PLOT 18+(JY*12),JW(MES)
314 DRAWTO 25+(JY*12),JW(MES)
320 DRAWTO 25+(JY*12),75
330 DRAWTO 18+(JY*12),75
340 POSITION 18+(JY*12),JW(MES)
350 POKE 765,3:XIO 18,#6,0,0,"S:"
360 FOR VOL=10 TO 0 STEP -1:SOUND 0,JW(MES),10,VOL:NEXT VOL:NEXT MES
400 POKE 82,2:POKE 83,39
500 GOTO 500
2000 GRAPHICS 0:SETCOLOR 2,0,0:SETCOLOR 1,0,10:SETCOLOR 4,0,0:POKE 752,1
2080 PRINT :PRINT ,"GRAFICO MENSUAL "
2100 PRINT :PRINT " ESCRIBE LAS CANTIDADES PARA CADA MES: ":PRINT 
2120 PRINT " NO USES CANTIDADES NEGATIVAS ":PRINT 
2200 TRAP 2200:PRINT ,"ENE=";:INPUT ENE:CANT(1)=ENE:TRAP 40000
2210 TRAP 2210:PRINT ,"FEB=";:INPUT FEB:CANT(2)=FEB:TRAP 40000
2220 TRAP 2220:PRINT ,"MAR=";:INPUT MAR:CANT(3)=MAR:TRAP 40000
2230 TRAP 2230:PRINT ,"ABR=";:INPUT ABR:CANT(4)=ABR:TRAP 40000
2240 TRAP 2240:PRINT ,"MAY=";:INPUT MAY:CANT(5)=MAY:TRAP 40000
2250 TRAP 2250:PRINT ,"JUN=";:INPUT JUN:CANT(6)=JUN:TRAP 40000
2260 TRAP 2260:PRINT ,"JUL=";:INPUT JUL:CANT(7)=JUL:TRAP 40000
2270 TRAP 2270:PRINT ,"AGO=";:INPUT AGO:CANT(8)=AGO:TRAP 40000
2280 TRAP 2280:PRINT ,"SEP=";:INPUT SEP:CANT(9)=SEP:TRAP 40000
2290 TRAP 2290:PRINT ,"OCT=";:INPUT OCT:CANT(10)=OCT:TRAP 40000
2300 TRAP 2300:PRINT ,"NOV=";:INPUT NOV:CANT(11)=NOV:TRAP 40000
2310 TRAP 2310:PRINT ,"DIC=";:INPUT DIC:CANT(12)=DIC:TRAP 40000
2400 RETURN