'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        es.geocities.com/jm00092
'
'______________________________________________________________________
'                                            MULTIPLICACION DE MATRICES                     

DECLARE FUNCTION entrada! (v!, h!)
RANDOMIZE TIMER

SCREEN 0
PALETTE 2, 16
PALETTE 3, 63
PALETTE 4, 36
PALETTE 6, 62

dimmax = 5
sonido = 1

DIM SHARED MATRIZ1(1 TO 5, 1 TO 5)
DIM SHARED matriz2(1 TO 5, 1 TO 5)
DIM SHARED respuesta(1 TO 5, 1 TO 5)
DIM SHARED resultado(1 TO 5, 1 TO 5)

DO

COLOR 0, 15: CLS

COLOR 15, 1: LOCATE 1, 1: PRINT "                  PROGRAMA BASIC PARA MULTIPLICACI˘N MATRICIAL                  "



f1 = INT(RND * dimmax) + 1
c1 = INT(RND * dimmax) + 1
f2 = c1
c2 = INT(RND * dimmax) + 1



FOR v = 1 TO f1
   FOR h = 1 TO c1
      n = INT(RND * 19) - 9
      MATRIZ1(v, h) = n
   NEXT
NEXT

COLOR 0, 7
FOR v = 1 TO f1
   FOR h = 1 TO c1
      LOCATE v + 4, (h * 3) + 4
      PRINT MATRIZ1(v, h)
      LOCATE v + 14, (h * 3) + 4
      PRINT MATRIZ1(v, h)
   NEXT
NEXT


FOR v = 1 TO f2
   FOR h = 1 TO c2
      n = INT(RND * 19) - 9
      matriz2(v, h) = n
   NEXT
NEXT

FOR v = 1 TO f2
   FOR h = 1 TO c2
      LOCATE v + 4, (h * 3) + 14 + (c1 * 3)
      PRINT matriz2(v, h)
      LOCATE v + 14, (h * 3) + 14 + (c1 * 3)
      PRINT matriz2(v, h)
   NEXT
NEXT

COLOR 11, 7
FOR v = 1 TO f1
   FOR h = 1 TO c2
      ve = v + 4
      he = (h * 4) + (c1 * 3) + (c2 * 3) + 20
      LOCATE ve, he: PRINT "*"
   NEXT
NEXT

FOR v = 1 TO f1
   FOR h = 1 TO c2
      ve = v + 4
      he = (h * 4) + (c1 * 3) + (c2 * 3) + 20
      respuesta(v, h) = entrada(ve, he)
   NEXT
NEXT

FOR v = 1 TO f1
   FOR h = 1 TO c2
      res = 0
      LOCATE 23, 4
      pac = 4
      

'----------------
COLOR 0, 7
FOR vv = 1 TO f1
   FOR hh = 1 TO c1
      LOCATE vv + 14, (hh * 3) + 4
      PRINT MATRIZ1(vv, hh)
   NEXT
NEXT

FOR vv = 1 TO f2
   FOR hh = 1 TO c2
      LOCATE vv + 14, (hh * 3) + 14 + (c1 * 3)
      PRINT matriz2(vv, hh)
   NEXT
NEXT
'-------------


      FOR a = 1 TO c1
         cal = MATRIZ1(v, a) * matriz2(a, h)
         res = res + cal
         COLOR 2, 7: LOCATE 23, pac: PRINT "("; MATRIZ1(v, a); "x "; matriz2(a, h); ") + ";
         pac = POS(0)
         COLOR 15, 4: LOCATE v + 14, (a * 3) + 4: PRINT MATRIZ1(v, a)
         LOCATE a + 14, (h * 3) + 14 + (c1 * 3): PRINT matriz2(a, h)
      NEXT
      resultado(v, h) = res
      COLOR 2, 7
      LOCATE 23, pac - 2: PRINT "="; resultado(v, h)
      IF sonido THEN : SOUND (h * 100) + (v * 200) + 100, 5
      ve = v + 14
      he = (h * 4) + (c1 * 3) + (c2 * 3) + 20
      LOCATE ve, he: PRINT resultado(v, h)
      IF resultado(v, h) <> respuesta(v, h) THEN
         LOCATE ve - 10, he: COLOR 4: PRINT respuesta(v, h)
         IF sonido THEN : SOUND 1100, 5
      END IF
      LOCATE 23, 1: PRINT SPACE$(80)
   NEXT
NEXT

'----------------
COLOR 0, 7
FOR vv = 1 TO f1
   FOR hh = 1 TO c1
      LOCATE vv + 14, (hh * 3) + 4
      PRINT MATRIZ1(vv, hh)
   NEXT
NEXT

FOR vv = 1 TO f2
   FOR hh = 1 TO c2
      LOCATE vv + 14, (hh * 3) + 14 + (c1 * 3)
      PRINT matriz2(vv, hh)
   NEXT
NEXT
'-------------

DO
   KBD$ = INKEY$
LOOP WHILE KBD$ = ""

COLOR 15, 4
LOOP WHILE KBD$ <> CHR$(27)



'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...    www.jm-web.tk     ::    es.geocities.com/jm00092
'
'______________________________________________________________________
'                                                
FUNCTION entrada (v, h)

DO

  COLOR 7, 7: LOCATE v, h: PRINT SPACE$(LEN(KBD$))
  COLOR 4, 3: LOCATE v, h: PRINT " "
  LOCATE v, h: INPUT "", KBD$

  IF MID$(KBD$, 1, 1) = "-" THEN :  n = 5:  ELSE : n = 4
  IF VAL(KBD$) = 0 THEN : KBD$ = "0"

LOOP UNTIL LEN(KBD$) < n AND VAL(KBD$) < 999 AND VAL(KBD$) > -999



COLOR 1, 7: LOCATE v, h: PRINT VAL(KBD$)

entrada = VAL(KBD$)

END FUNCTION

