Advertisement
Pendrag00n

Menú final de Curso (Julio)

May 10th, 2021
1,762
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 11.27 KB | None | 0 0
  1. 'Codificado por Julio Felipe Martín.
  2. SCREEN 12
  3. 'Declaracion de variables:
  4. VIEW SCREEN(30, 50)-(610, 425), 0, 1
  5. Color 3: LOCATE 7, 32: PRINT "Menu de Programas"
  6. Color 2: LOCATE 12, 12: PRINT "1 - Calculo de Areas"
  7. Color 2: LOCATE 16, 12: PRINT "2 - Ecuacion 2 grado"
  8. Color 2: LOCATE 20, 12: PRINT "3 - Sistema 3x3"
  9. Color 2: LOCATE 12, 50: PRINT "4 - Estadistica"
  10. Color 2: LOCATE 16, 50: PRINT "5 - Circulo"
  11. Color 6: LOCATE 20, 45: PRINT "Escoja un Programa"
  12.  
  13. DO
  14.     Color 3: LOCATE 25, 50: PRINT TIME$
  15.     c$ = INKEY$
  16. LOOP UNTIL c$ = "x" OR c$ = "1" OR c$ = "2" OR c$ = "3" OR c$ = "4" OR c$ = "5"
  17.  
  18. SELECT CASE c$
  19.     CASE "1"
  20.         CLS
  21.         CALL areas
  22.     CASE "2"
  23.         CLS
  24.         CALL ec2
  25.     CASE "3"
  26.         CLS
  27.         CALL sistema3x3
  28.     CASE "4"
  29.         CLS
  30.         CALL est
  31.     CASE "5"
  32.         CLS
  33.         CALL circl
  34. END SELECT
  35.  
  36. 'S U B P R O G R A M A S ////////////////////////////////////////////////////////////////////////////////////////////////
  37.  
  38. SUB areas
  39.     'Script que calcula el area y el perimetro de ciertas figuras geometricas
  40.     'Codificado por Julio Felipe Martin
  41.     DIM X AS INTEGER
  42.     DIM r, BT, HT, LT1, LT2, BC, AC, LP, AP AS _Unsigned INTEGER
  43.     PI = 3.1415926535897
  44.  
  45.     DO
  46.         CLS
  47.         LOCATE 6, 12: PRINT "1 CIRCULO        2 TRIANGULO"
  48.         LOCATE 8, 12: PRINT "3 RECTANGULO     4 PENTAGONO"
  49.         LOCATE 12, 12: PRINT "(Introduzca las medidas en centimetros)"
  50.         LOCATE 16, 14: INPUT "SELECCIONE LA FIGURA = ", X
  51.     LOOP UNTIL X = 1 OR X = 2 OR X = 3 OR X = 4
  52.     SELECT CASE X
  53.         CASE 1
  54.  
  55.             CLS
  56.             LINE (350, 20)-(350, 600), 1
  57.             LOCATE 6, 8: INPUT "Radio de la circunferencia = ", r
  58.             CALL carga
  59.             ACI = PI * r * r
  60.             PCI = 2 * PI * r
  61.             LOCATE 13, 49: PRINT "Area = "; ACI; "cm2"
  62.             LOCATE 16, 49: PRINT "Perimeto = "; PCI; "cm"
  63.  
  64.         CASE 2
  65.             DO
  66.                 CLS
  67.                 LINE (350, 20)-(350, 600), 1
  68.                 LOCATE 6, 8: INPUT "Base = ", BT
  69.                 LOCATE 8, 8: INPUT "Altura = ", HT
  70.                 LOCATE 10, 8: INPUT "Primer Lado = ", LT1
  71.                 LOCATE 12, 8: INPUT "Segundo Lado = ", LT2
  72.             LOOP UNTIL BT > 0 AND HT > 0 AND LT1 > 0 AND LT2 > 0
  73.             AT = (BT * HT) / 2
  74.             PT = BT + LT1 + LT2
  75.             CALL carga
  76.             LOCATE 13, 49: PRINT "Area = "; AT; "cm2"
  77.             LOCATE 16, 49: PRINT "Perimetro = "; PT; "cm"
  78.  
  79.         CASE 3
  80.             DO
  81.                 CLS
  82.                 LINE (350, 20)-(350, 600), 1
  83.                 LOCATE 6, 8: INPUT "Primer Lado = ", BC
  84.                 LOCATE 8, 8: INPUT "Segundo Lado = ", AC
  85.             LOOP UNTIL BC > 0 AND AC > 0
  86.             ArC = BC * AC
  87.             PeC = 2 * BC + 2 * AC
  88.             CALL carga
  89.             LOCATE 13, 49: PRINT "Area = "; ArC; "cm2"
  90.             LOCATE 16, 49: PRINT "Perimetro = "; PeC; "cm"
  91.  
  92.         CASE 4
  93.             DO
  94.                 CLS
  95.                 LINE (350, 20)-(350, 600), 1
  96.                 LOCATE 6, 8: INPUT "Lado = ", LP
  97.                 LOCATE 8, 8: INPUT "Apotema = ", AP
  98.             LOOP UNTIL LP > 0 AND AP > 0
  99.             PP = LP * 5
  100.             ArP = (PP * AP) / 2
  101.             CALL carga
  102.             LOCATE 13, 49: PRINT "Area = "; ArP; "cm2"
  103.             LOCATE 16, 49: PRINT "Perimetro = "; PP; "cm"
  104.  
  105.     END SELECT
  106.     END
  107. END SUB
  108.  
  109. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  110.  
  111. SUB ec2
  112.     LINE (350, 20)-(350, 600), 1
  113.     LOCATE 6, 8: PRINT "Introduce los valores de A, B y C"
  114.     LOCATE 9, 8: INPUT "Introduce el valor de A = ", A
  115.     LOCATE 11, 8: INPUT "Introduce el valor de B = ", B
  116.     LOCATE 13, 8: INPUT "Introduce el valor de C = ", C
  117.     D = B * B - 4 * A * C
  118.     X1 = (-B + SQR(D)) / 2 * A
  119.     X2 = (-B - SQR(D)) / 2 * A
  120.     IF D < 0 THEN
  121.         CALL carga
  122.         LOCATE 13, 50: PRINT "N/A solucion real!"
  123.         LOCATE 17, 50: PRINT "X1 equivale a "; X1 + X2; "I"
  124.         LOCATE 20, 50: PRINT "X2 equivale a "; X1 - X2; "I"
  125.     ELSE
  126.         CALL carga
  127.         LOCATE 17, 50: PRINT "X1 equivale a "; X1
  128.         LOCATE 20, 50: PRINT "X2 equivale a "; X2
  129.     END IF
  130.     END
  131. END SUB
  132.  
  133. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  134.  
  135. SUB sistema3x3
  136.     LINE (350, 20)-(350, 600), 1
  137.     LOCATE 12, 8: PRINT "La ecuacion debe tener este formato:"
  138.     LOCATE 14, 8: PRINT "a11 X + a12 Y + a13 Z = A1"
  139.     LOCATE 15, 8: PRINT "a21 X + a22 Y + a23 Z = A2"
  140.     LOCATE 16, 8: PRINT "a31 X + a32 Y + a33 Z = A3"
  141.     LOCATE 20, 8: INPUT "Introudzca el valor de a11: ", a11
  142.     LOCATE 20, 8: INPUT "Introudzca el valor de a12: ", a12
  143.     LOCATE 20, 8: INPUT "Introudzca el valor de a13: ", a13
  144.     LOCATE 20, 8: INPUT "Valor de la primera ecuacion: ", a1
  145.     CLS
  146.     LINE (350, 20)-(350, 600), 1
  147.     LOCATE 12, 8: PRINT "La ecuacion debe tener este formato:"
  148.     LOCATE 14, 8: PRINT "a11 X + a12 Y + a13 Z = A1"
  149.     LOCATE 15, 8: PRINT "a21 X + a22 Y + a23 Z = A2"
  150.     LOCATE 16, 8: PRINT "a31 X + a32 Y + a33 Z = A3"
  151.     LOCATE 20, 8: INPUT "Introudzca el valor de a21: ", a21
  152.     LOCATE 20, 8: INPUT "Introudzca el valor de a22: ", a22
  153.     LOCATE 20, 8: INPUT "Introudzca el valor de a23: ", a23
  154.     LOCATE 20, 8: INPUT "Valor de la segunda ecuacion: ", A2
  155.     CLS
  156.     LINE (350, 20)-(350, 600), 1
  157.     LOCATE 12, 8: PRINT "La ecuacion debe tener este formato:"
  158.     LOCATE 14, 8: PRINT "a11 X + a12 Y + a13 Z = A1"
  159.     LOCATE 15, 8: PRINT "a21 X + a22 Y + a23 Z = A2"
  160.     LOCATE 16, 8: PRINT "a31 X + a32 Y + a33 Z = A3"
  161.     LOCATE 20, 8: INPUT "Introudzca el valor de a31: ", a31
  162.     LOCATE 20, 8: INPUT "Introudzca el valor de a32: ", a32
  163.     LOCATE 20, 8: INPUT "Introudzca el valor de a33: ", a33
  164.     LOCATE 20, 8: INPUT "Valor de la tercera ecuacion: ", A3
  165.     CLS
  166.     LINE (350, 20)-(350, 600), 1
  167.  
  168.     D = (a11 * a22 * a33) + (a12 * a23 * a31) + (a32 * a21 * a13) - (a13 * a22 * a31) - (a11 * a23 * a32) - (a12 * a21 * a33)
  169.     LINE (350, 20)-(350, 600), 1
  170.     IF D = 0 THEN
  171.         CALL carga
  172.         LOCATE 13, 49: PRINT "El Determinante es 0"
  173.         LOCATE 14, 49: PRINT "No tiene Solucion"
  174.     ELSE
  175.         CALL carga
  176.         LOCATE 13, 47: PRINT "El Determinante es "; D
  177.         X = ((a1 * a22 * a33) + (a13 * A2 * a32) + (a12 * a23 * A3) - (a1 * a32 * a23) - (a12 * A2 * a33) - (a13 * a22 * A3)) / D
  178.         Y = ((a11 * A2 * a33) + (a1 * a23 * a31) + (a13 * a21 * A3) - (a13 * A2 * a31) - (a1 * a21 * a33) - (a11 * a23 * A3)) / D
  179.        4
  180.         Z = ((a11 * a22 * A3) + (a12 * A2 * a31) + (a1 * a21 * a32) - (a1 * a22 * a31) - (a11 * A2 * a32) - (a12 * a21 * A3)) / D
  181.         LOCATE 15, 49: PRINT "X Equivale a "; X
  182.         LOCATE 16, 49: PRINT "Y Equivale a "; Y
  183.         LOCATE 17, 49: PRINT "Z Equivale a "; Z
  184.     END IF
  185.     END
  186. END SUB
  187.  
  188. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  189. SUB est
  190.     DIM t AS DOUBLE
  191.     DIM I, x(1000), f(1000), Moda, Modaa, Mediana, Desv1, Sumo AS SINGLE
  192.     LINE (350, 20)-(350, 600), 1
  193.     LOCATE 8, 7: INPUT "Introduzca numero total de datos: ", N
  194.     CLS
  195.     LINE (350, 20)-(350, 600), 1
  196.     LOCATE 8, 7: PRINT "Introduzca datos en orden creciente"
  197.  
  198.     FOR I = 1 TO N
  199.         LOCATE 10, 7: INPUT "Dato= "; x(I)
  200.         LOCATE 11, 7: INPUT "Veces que se repite = "; f(I)
  201.     NEXT I
  202.  
  203.     Moda = 0
  204.  
  205.     FOR I = 0 TO N
  206.         IF Modaa < f(I) THEN
  207.             Modaa = f(I)
  208.             Moda = x(I)
  209.         ELSE
  210.             Moda = Moda
  211.         END IF
  212.  
  213.     NEXT I
  214.  
  215.     FOR j = 0 TO N
  216.         t = t + x(j) * f(j)
  217.  
  218.     NEXT j
  219.  
  220.     FOR l = 0 TO N
  221.         ff = ff + f(l)
  222.  
  223.     NEXT l
  224.     media = t / ff
  225.  
  226.     FOR I = 0 TO N
  227.         Sumo = Sumo + (((x(I) - media) ^ 2) * f(I))
  228.     NEXT I
  229.     Desv1 = Sumo / (ff - 1)
  230.     desv2 = Desv1 ^ 0.5
  231.  
  232.  
  233.     medianaa = ff / 2
  234.     medianaaa = ff \ 2
  235.  
  236.     IF medianaa = medianaa THEN
  237.  
  238.         Mediana = x(medianaa - 1) + 0.5
  239.     ELSE
  240.         Mediana = x(medianaa - 1)
  241.  
  242.     END IF
  243.     LINE (350, 20)-(350, 600), 1
  244.     CALL carga
  245.     LOCATE 15, 48: PRINT "Total ="; t
  246.     LOCATE 16, 48: PRINT "Moda ="; Moda
  247.     LOCATE 17, 48: PRINT "Media ="; media
  248.     LOCATE 18, 48: PRINT "Mediana ="; Mediana
  249.     LOCATE 19, 48: PRINT "Desviacion ="; desv2
  250.     END
  251. END SUB
  252.  
  253. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  254.  
  255. SUB circl
  256.     DIM PULSADO AS STRING
  257.     DIM Y AS INTEGER
  258.     DIM X AS INTEGER
  259.  
  260.     'Al anadir fullscreen cambiamos la resolucion de la ventana sin perder las propiedades de la Screen 12
  261.  
  262.     'Declaracion de variables:
  263.     X = 300
  264.     Y = 210
  265.     V = 5
  266.     a$ = DATE$
  267.     day$ = MID$(a$, 4, 2)
  268.     month$ = MID$(a$, 1, 2)
  269.     year$ = MID$(a$, 9, 2)
  270.  
  271.     'Portada del programa: (Los prints seguidos se podrían haber puesto en una sola linea
  272.     CLS
  273.     PRINT
  274.     PRINT
  275.     PRINT
  276.     PRINT
  277.     PRINT
  278.     PRINT
  279.     PRINT
  280.     Color 2: PRINT "                 Puedes mover el circulo con las teclas W A S D"
  281.     PRINT
  282.     Color 2: PRINT "                Puedes cambiar la velocidad con las teclas + y -"
  283.     PRINT
  284.     PRINT
  285.     PRINT
  286.     Color 2: PRINT "            1 = AZUL   2 = VERDE   3 = CYAN   4 = ROJO   5 = VIOLETA"
  287.     PRINT
  288.     Color 2: INPUT "                      De que color quieres tu circulo"; c
  289.     CLS
  290.     SCREEN 0
  291.     SCREEN 12
  292.     'Codigo para el correcto funcionamiento del los elemento decorativos y el movimiento del circulo:
  293.     CLS
  294.  
  295.     DO
  296.  
  297.         LOCATE 25, 13: PRINT "Velocidad = "; V; "Px/s"
  298.         LOCATE 25, 60: PRINT TIME$
  299.         LOCATE 25, 50: PRINT day$; "/"; month$; "/"; year$
  300.         'El movimiento del circulo no rompe ningun print
  301.         LINE (600, 425)-(40, 60), 15, B
  302.         PULSADO = UCASE$(INKEY$)
  303.         IF PULSADO = "W" AND Y > 115 THEN
  304.             CLS
  305.             Y = Y - V
  306.         ELSEIF PULSADO = "S" AND Y < 425 - 55 THEN
  307.             CLS
  308.             Y = Y + V
  309.         ELSEIF PULSADO = "A" AND X > 95 THEN
  310.             CLS
  311.             X = X - V
  312.         ELSEIF PULSADO = "D" AND X < 600 - 55 THEN
  313.             CLS
  314.             X = X + V
  315.         END IF
  316.         'El programa no permite el movimiento mas alla de la direccion de cada borde al estar todo definido en multiplos de 5
  317.         IF PULSADO = "+" THEN
  318.             V = V + 5
  319.         ELSEIF PULSADO = "-" THEN
  320.             V = V - 5
  321.         END IF
  322.         'Si la velocidad no va de 5 en 5 el circulo puede saltarse los bordes
  323.  
  324.         CIRCLE (X, Y), 50, c
  325.         CIRCLE (X, Y), 51, c
  326.         CIRCLE (X, Y), 52, c
  327.         CIRCLE (X, Y), 53, c
  328.         CIRCLE (X, Y), 54, c
  329.         CIRCLE (X, Y), 55, c
  330.         'Varios circulos sucesivos crean la ilusion de un circulo mas grueso que da un mejor aspecto al programa
  331.     LOOP UNTIL INKEY$ = "x"
  332.     END
  333.     'El comando para salir del programa no siempre responde correctamente, aun no se a que se debe, sucede de forma pseudoaleatoria
  334. END SUB
  335.  
  336. SUB carga
  337.     linea = 400
  338.     LINE (linea, 380)-(560, 400), 3, B
  339.     DO
  340.         linea = linea + 1
  341.         LINE (linea, 380)-(560, 400), 3, B
  342.         _Delay 0.005
  343.     LOOP UNTIL linea >= 560
  344.     CLS
  345.     LINE (350, 20)-(350, 600), 1
  346. END SUB
  347.  
  348.  
  349.  
  350.  
  351.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement