10 REM ============================== 12 REM = REPRESENTACIONES GRAFICAS = 14 REM = Copyright 1986-2007 = 15 REM = Damaso D. Estevez = 16 REM ============================== 18 : 20 REM ----- PROGRAMA PRINCIPAL ----- 22 CLEAR 255:DIM PANTALLA(999):M$="" 24 IK=0:PP=0:FUNCMAT$="s(x)":A=0:B=0 26 GOSUB 64:REM ............... VAR. 28 PRINT CHR$(11);:PRESET(3,0) 30 GOSUB 102:REM ............... MENU 32 ON N GOSUB 142,142,182,232,402 34 IF N>=1 AND N<=6 THEN GOTO 028 35 GOSUB 124:GOTO 32:REM ....... FIN! 36 : 38 REM ---- S/R DE BAJO NIVEL ------ 40 : 42 A=INT((38-LEN(M$))/2) 44 FOR B=1 TO A:M$=" "+M$+" ":NEXT B 46 IF LEN(M$)=37 THEN LET M$=" "+M$ 48 FOR B=12289 TO 12288+LEN(M$) 50 POKE B,ASC(MID$(M$,B-12288,1) 52 POKE B+1024,16*IK+PP:NEXT B 54 A=0:B=0:RETURN 56 : 58 FOR A=14073 TO 14272 STEP 40 60 POKE A,102:NEXT A:A=0:RETURN 62 : 64 OX=0:OY=0:TM=4:DN=.27:BR=6 66 P=3.14159:E=2.71828:RETURN 68 : 70 M$=INSTRUCCIONES / AYUDA":IK=15:PP=12:GOSUB 42:RETURN 72 : 74 REM >>>>>> 1) Mensajeria 76 REM >>>>>> 2) Puff ! (cursor) 78 REM >>>>>> 3) Variables 80 REM >>>>>> 4) Instrucciones 82 : 84 : 100 REM ---------- M E N U ---------- 102 M$="GRAPH-86 "+CHR$(5)+" 1986-2007 AmiSpaTra":IK=1:PP=3 104 GOSUB 43:GOSUB 58 106 PRINT:PRINT:POKE 13312,26:POKE 13351,26 108 PRINT TAB(8);"MENU:":PRINT 110 PRINT TAB(8);"-----":PRINT:PRINT 112 PRINT TAB(8);"1) Cargar grafica.":PRINT 114 PRINT TAB(8);"2) Guardar grafica.":PRINT 116 PRINT TAB(8);"3) Modificar valores.:PRINT 118 PRINT TAB(8);"4) Presentar funcion.":PRINT 120 PRINT TAB(8);"5) Fin de programa.":PRINT:PRINT:PRINT 122 PRINT TAB(11);"! Elija opcion !" 124 M$=INKEY$:IF M$="" THEN GOTO 124 126 IF VAL(M$)>5 THEN GOTO 124 128 IF M$="c" AND PA(1)<>0 THEN 422 130 IF M$="a" THEN GOTO 472 132 N=VAL(M$):SOUND(8,90):RETURN 134 : 136 : 140 REM ---- REC/GRAB CASSETTE ------ 142 PRINT CHR$(11);:PRESET(3,0):GOSUB 70:GOSUB 58 144 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT 146 PRINT TAB(6);"1) Conecte el magnetofon.":PRINT:PRINT 148 PRINT TAB(6);"2) Enchufelo a la toma.":PRINT:PRINT 150 PRINT TAB(6);"3) Posicione la cinta.":PRINT:PRINT 152 PRINT TAB(6);"4) Espere el cambio de color.":PRINT:PRINT 154 FOR A=14032 TO 14311:POKE A,102:NEXT A 156 M$="Pulse PLAY. Pulse .":IK=7:PP=0 158 IF N=2 THEN M$="Pulse PLAY & RECORD. Pulse ." 160 GOSUB 42:POKE 13312,10:POKE 13351,10 162 IF N=1 THE CLOAD *PA:RETURN 164 IF N=2 AND PA(1)<>0 THEN CSAVE *PA:RETURN 166 M$="ERROR: NO HAY GRAFICA PARA GRABAR":GOSUB 42 168 SOUND(200,10):SOUND(10,200) 170 M$=INKEY$:IF M$="" THEN GOTO 168 172 C=0:A=0:RETURN 174 : 176 : 180 REM ------ MODIFICAR VALORES ------ 182 PRINT CHR$(11);:PRESET(3,0) 184 M$="Modificando valores! ('d' defecto)":IK=15:PP=12:GOSUB 42 186 GOSUB 58:PRINT:PRINT:PRINT:PRINT 188 INPUT " - Coordenada X (centro)";M$:PRINT:OX=VAL(M$) 190 INPUT " - Coordenada Y (centro)";M$:PRINT:OY=-VAL(M$) 192 INPUT " + Tamano semiejes x";M$:PRINT:PRINT:TM=VAL(M$) 194 IF VAL(M$)<=0 OR VAL(M$)>500 THEN GOTO 182 196 INPUT " + Densidad (v=e/t)";M$:PIRNT:PRINT:DN=VAL(M$)/1000:M$="" 198 IF DN<0.0001 OR DN>=10 THEN GOTO 182 200 INPUT " + Color de adorno";M$:PRINT:PRINT:BR=(INT(VAL(M$))):PRINT 202 IF VAL(M$)<0 OR VAL(M$)>15 THEN GOTO 182 204 PRINT " Los datos actuales son correctos ?":M$=INKEY$ 206 PRINT:PRINT " (Por defecto: 0/0/4/250/6)" 208 M$=INKEY$:IF M$="" THEN GOTO 208 210 IF M$="n" THEN GOTO 182 212 IF M$="d" THEN GOSUB 64 214 SOUND(80,15):SOUND(20,40) 216 FOR A=0 TO 200:NEXT A:A=0:RETURN 218 : 230 REM ------- REPRESENTAR --------- 232 PRINT CHR$(11);:PRESET(3,0) 234 M$="ENTRADA FUNCION BIDIMENSIONAL:":IK=0:PP=12:GOSUB 42:FUNC$="s(x)" 236 FOR A=1 TO 18:PRINT:NEXT A 238 GOSUB 58:PRINT " FUNCION F(X) (max. 20 car.):":PRINT 240 INPUT FUNC$:PP=0:IK=0:A=0:B=0 242 IF FUNC$="m" THEN RETURN 244 IF FUNC$="#" THEN GOTO 368 246 IF LEN(FUNC$)>20 THEN GOTO 232 248 FOR A=1 TO LEN(M$):IF MID$(FUNC$,A,1)="(" THEN B=B+1 250 IF MID$(FUNC$,A,1)=")" THEN B=B-1 251 NEXT A: REM ... ERROR EN PARENTESIS 252 IF B<>0 THEN LET M$="PARENTESIS MAL COLOCADOS: "+STR$(B) 254 IF B<>0 THEN IK=7:PP=0:GOSUB 42:FOR A=0 TO 800:NEXT A:GOTO 232 256 : 258 M$="":REM . CONVERSION FORMULA 260 FOR B=1 TO LEN(FUNC$):A=ASC(MID$(FUNC$,B,1)) 262 IF A=97 THEN A=180 264 IF A=99 THEN A=189 266 IF A=101 THEN A=69 268 IF A=103 THEN A=178 270 IF A=105 THEN A=179 272 IF A=108 THEN A=187 274 IF A=114 THEN A=186 276 IF A=115 THEN A=190 278 IF A=116 THEN A=191 280 IF A=120 THEN A=88 282 IF A=112 THEN A=80 284 IF A=43 THEN A=168 286 IF A=45 THEN A=169 288 IF A=42 THEN A=170 290 IF A=47 THEN A=171 292 IF A=94 THEN A=172 294 M$=M$+CHR$(A):NEXT B 296 FORA=18465 TO 18800:IF PEEK(A)=89 AND PEEK(A+1)=176 THENB=A:A=19000 298 NEXT A:LET B=B+2 300 FOR A=B TO B-1+LEN(M$):POKE A,ASC(MID$(M$,A-(B-1),1)):NEXT A 302 POKE A,58:POKE A+1,142 304 PRINT CHR$(11);:PRESET(3,0) 306 POKE 13312,BR:POKE 13351,BR 308 M$="TRAZANDO F(X)="+FUNC$:IK=0:PP=12:GOSUB 42 310 : 320 FOR X=OX-TM TO OX+TM STEP DN 322 Y=X^2+3 REM&&&&&&&&&&&&&&&&&&&&&& 324 Y=-Y:A=40-(OX*40/TM)+(X*40/TM):B=36-(OY*36/TM)+(Y*36/TM) 326 IF A>79 OR A<0 OR B>71 OR B<0 THEN GOTO 330 328 PSET(A,B) 330 NEXT X:A=13852:POKE A-1,118:POKE A,118:POKE A-40,118:POKE A-41,118 332 : 334 M$="FIN DE REPRESENTACION":IK=1:GOSUB 42:M$=INKEY$ 336 M$=INKEY$:IF M$=" THEN GOTO 336 338 IF M$="g" THEN GOTO 352 340 IF M$="r" THEN GOTO 304 342 IF M$="m" THEN RETURN 344 IF M$="P" THEN LPRINT:COPY 346 GOTO 232 348 : 350 : 352 M$="Guardando pantalla (20 seg.)":IK=7:PP=0:GOSUB 42 354 FOR A=0 TO 300:NEXT A 356 M$="Y="+FUNC$+" # ("+STR$(OX)+","+STR$(-OY)+")" 358 IK=0:PP=12:GOSUB 42 360 FOR A=12289 TO 13249 STEP 40 362 FOR B=0 TO 38:PANT(A+B-12288)=PEEK(A+B):NEXT B:NEXT A 364 SOUND(8,90):RETURN 366 : 368 PRINT CHR$(11);:PRESET(3,0) 370 M$="VISUALIZANDO PANTALLA":IK=1:PP=12:GOSUB 42:A=13852 371 POKE A,118:POKE A-1,118:POKE A-40,118:POKE A-41,118 372 FOR A=12289 TO 13249 STEP 40 374 FOR B=0 TO 38:POKE A+B,PANT(A+B-12288):NEXT B:NEXT A 376 M$="FIN DE RECUPERACION":GOSUB 42 378 GOTO 336 380 : 382 REM >>>> 1) Guardando pantalla. 384 REM >>>> 2) Recuperando pantalla. 386 : 388 : 400 REM ------ FIN DE PROGRAMA ------ 402 M$="Estas segurno (s/n) ?":IK=7:PP=0:GOSUB 42:M$=INKEY$ 404 M$=INEKY$:IF M$="" THEN GOTO 404 406 IF M$="n" THEN RETURN 408 PRINT CHR$(11); 410 PRINT "Copyright ";CHR$(5);" 1986 by Microsoft, Inc.":PRINT:END 412 : 414 : 420 REM -- VOLCADO EN IMPRESORA --- 422 PRINT CHR$(11);:PRESET(3,0):GOSUB 70:GOSUB 58 424 PRINT:PRINT:PRINT:PRINT:PRINT 426 PRINT TAB(8);"1) Conecte la impresora.":PRINT:PRINT 428 PRINT TAB(8);"2) Seleccione el modo.":PRINT:PRINT 430 PRINT TAB(8);"3) Enciendala (ON).":PRINT:PRINT 432 PRINT TAB(8);"4) !! Pulse UNA TECLA !!":PRINT:PRINT 434 PRINT:PRINT:PRINT:PRINT:PRINT:M$=INKEY$ 436 M$=INKEY$:IF M$="" THEN GOTO 436 438 PRINT CHR$(11);:PRESET(3,0) 440 M$="I M P R I M I E N D O (15 seg.)":IK=7:PP=0:GOSUB 42:LPRINT 442 : 444 LPRINT "-----------------------------------------" 448 FOR A=1 TO 999 STEP 40:M$="" 450 FOR B=A TO A+38:M$=M$+CHR$(PANT(B)):NEXT B:LPRINT M$:NEXT A 452 LPRINT "-----------------------------------------" 454 SOUND(10,60):SOUND(30,50):GOSUB 368:N=6:RETURN 456 : 458 : 470 REM ----- PAGINAS DE AYUDA ------ 472 PRINT CHR$(11);:PRESET(3,0) 474 GOSUB 70:PRINT:N=6 476 PRINT TAB(10);"PANTALLA DE AYUDA (1/3)" 478 PRINT:PRINT " Este programa permite representar " 480 PRINT:PRINT "funciones matematicas bidimensionales" 482 PRINT:PRINT "de la forma f(x). Los valores por de-" 484 PRINT:PRINT "fecto son (-4,4) y la densidad 270." 486 PRINT:PRINT "-------------------------------------" 488 PRINT:PRINT " OPERADORES: + - * / ^" 490 PRINT:PRINT " VARIABLES : x CTES: p e" 492 PRINT:PRINT " FUNCIONES :":PRINT 494 PRINT " s(eno)/c(oseno)/t(angente)/a(bsoluto)" 496 PRINT " - - - -" 498 PRINT " l(og. neperiano)/i(entero)/g(signo)" 500 PRINT " - - -" 502 PRINT TAB(14);"r(aleatorio)"; 504 PRESET(54,71):M$=INKEY$ 506 M$=INKEY$:IF M$="" THEN GOTO 506 508 IF M$="m" THEN RETURN 510 PRINT CHR$(11);:PRESET(3,0) 512 GOSUB 70:PRINT 514 PRINT TAB(8);"PANTALLA DE AYUDA (2/3)":PRINT 516 PRINT "OPC. 1: Cargar grafica desde cassette":PRINT 518 PRINT " Esta rutina es ya autoexplicativa. ":PRINT 520 PRINT "OPC. 2: Grabar grafica en cassette ":PRINT 522 PRINT " Tambien es autoexplicativa, pero no " 524 PRINT "funciona si no hay graf. en memoria. ":PRINT 526 PRINT "OPC. 3: Cambiar valores para trazado":PRINT 528 PRINT " Permite mover la graf. (en realidad " 530 PRINT "mueve el pto (0,0)), aumentarla o re-" 532 PRINT "ducirla (tamano semieje), modificar " 534 PRINT "la densidad (y por tanto la vel. de " 536 PRINT "representacion) y cambiar el color " 538 PRINT "del borde (?). Despues de contestar " 540 PRINT "todas las preguntas debe pulsar 'd' " 540 PRINT "o 'n' o cualquier tecla." 544 PRESET(3,68):M$=INKEY$ 546 M$=INKEY$:IF M$="" THEN GOTO 546 548 IF M$="m" THEN RETURN 550 PRINT CH$(11);:PRESET(3,0) 552 GOSUB 70:PRINT 554 PRINT TAB(8);"PANTALLA DE AYUDA (3/3)":PRINT 556 PRINT "OPC. 4: Representar la funcion":PRINT 558 PRINT " En esta opcion puede introducir una " 560 PRINT "funcion, tal como se le pide, visua-" 562 PRINT "lizar una grabada en memoria ('#') o " 564 PRINT "volver al menu ('m')." 566 PRINT " Ya representada la funcion puede op-" 568 PRINT "tar por contemplarla (?), repetirla " 570 PRINT "('r'), aunque no es recomendable si " 572 PRINT "antes tuvo que esperar media hora, " 574 PRINT "guardarla ('g', algo imprescindible " 576 PRINT "para poder grabar la grf. en cassette" 578 PRINT "o para imprimirla o para volverla a " 580 PRINT "ver (!argghh!), volver al menu ('m') o" 582 PRINT "introducir una nueva funcion ('cual-" 584 PRINT "quier tecla, excepto las ya dichas').":PRINT 586 PRINT "OPC. 5: Fin ## a(yuda)/c(copia papel) " 588 PRESET(3,65):M$=INKEY$ 590 M$=INKEY$:IF M$="" THEN GOTO 590 592 SOUND(40,50):SOUND(50,40):RETURN 598 : 600 REM >>>>>>>>> F I N <<<<<<<<<<<<