Problegrama

De Wikipedia, la enciclopedia libre

Un Problegrama es un problema que puede ser resuelto mediante un programa[1]​ (de ahí su nombre: acrónimo formado por "problema" y "programa"). En la práctica, cualquier problema que implique un cómputo es un problegrama, ya que el programa que lo resuelve expresa dicho cálculo. Un problegrama puede encapsular, además del propio enunciado del problema (que lo define), metadatos para ayudar en su resolución.[2]​ Este concepto ha sido utilizado en el entorno de programación ToolboX, diseñado por la Universidad de Málaga, donde fue definido originalmente. Por su representación en formato informático, los problegramas tienen una clara aplicación para la creación de aplicaciones educativas.

Ejemplos[editar]

Las estructuras que siguen son ejemplos en formato JSON de problegramas en diferentes áreas de conocimiento, así como programas que los resuelven, en el lenguaje de programación GNU Octave.

Matemáticas[editar]

{
  "tipo":             "wordproblem",
  "enunciado":        "Calcular el mínimo común múltiplo de 8 y 10.",
  "solucion":         [ 40 ],
  "mensajeayuda":     [ "Un múltiplo de un número es divisible por él.", "Utiliza la función que calcula el resto de una división." ],
  "mensajeexito ":    "Ya has aprendido a calcular el MCM."
}

El problegrama anterior podría ser resuelto por este programa:

r = 0;              # inicializar contador
do                  # repetir hasta encontrar
  r = r + 1;        # el primer natural divisible por 8 y 10
until rem(r, 8) == 0 && rem(r, 10) == 0

La naturaleza del problema debe implicar procesamiento de información alfanumérica, aunque puede pertenecer a una disciplina diferente de la matemática. Los siguientes son ejemplos de problegramas de física, química, biología y lengua.

Física[editar]

Éste es un problegrama de cinética de gases.

{
  "tipo":             "wordproblem",
  "enunciado":        "Una masa de gas ocupa un volumen de 4 litros a una presión de 780 mm de Hg y 20°C. Calcula el volumen del gas si aumentamos la presión a 2 atm, manteniendo constante la temperatura.",
  "solucion":         [ (780 * 1 / 760) * 4 / 2 ],
  "mensajeayuda":     [ "Utiliza la ley de Boyle." ],
  "mensajeexito ":    "En efecto, a T constante, presión y volumen son inversamente proporcionales."
}
# Estado inicial
P1 = 780;              # mm Hg
T1 =  20;              # °C
V1 =   4;              # L

# Estado final
P2 =   2;              # atm
T2 =  20;              # °C

P1 = 780 * 1 / 760;    # de mm Hg a atm 

V2 = P1 * V1 / P2;     # volumen en L aplicando ley de Boyle

Química[editar]

Este problegrama plantea un problema de formulación en el que el resultado es alfanumérico.

{
  "tipo":             "wordproblem",
  "enunciado":        "Dado un compuesto con 0.9 at-g de Carbono, 1.445E24 átomos de Hidrógeno (H2) y 4.8 g de Oxígeno (O2), determinar su fórmula empírica.",
  "solucion":         [ "C3H8O1" ],
  "mensajeayuda":     [ "Expresa las concentraciones en at-g.", "Divide las concentraciones entre la menor." ],
  "mensajeexito ":    "Has resuelto un problema de formulación."
}
# Concentraciones expresadas en at-g
cnC = 0.9;                                         # at-g de C
cnH = 1.445E24 / 6.022E23;                         # at-g de H (cte. Avogadro)
cnO = 4.8 / 16;                                    # at-g de O

# Número de átomos
menor = min ([cnC, cnH, cnO]);                     # menos presente
atC   = num2str (round (cnC / menor));             # átomos de C
atH   = num2str (round (cnH / menor));             # átomos de H
atO   = num2str (round (cnO / menor));             # átomos de O

formula = strcat ('C', atC, 'H', atH, 'O', atO);   # fórmula empírica

Biología[editar]

El problegrama que sigue plantea una cuestión de herencia mendeliana.

{
  "tipo":             "wordproblem",
  "enunciado":        "Si una planta homocigótica de tallo alto (AA) se cruza con una homocigótica de tallo enano (aa), y el tallo alto es dominante, ¿qué porcentaje de plantas con tallo alto habrá en la segunda generación?",
  "solucion":         [ 75 ],
  "mensajeayuda":     [ "Calcula los genotipos de los individuos de la primera generación.", "Calcula la segunda generación a partir de la primera.", "Cuenta los genotipos que contienen 'A'." ],
  "mensajeexito ":    "Muy bien. Tu solución verifica las dos primeras leyes de Mendel."
}
function g = cruzar (G1, G2)     # cruzamiento de dos genotipos
  g = {[G1(1) G2(1)], [G1(1) G2(2)], [G1(2) G2(1)], [G1(2) G2(2)]};
endfunction

G1 = 'AA';                       # genotipo de la primera planta
G2 = 'aa';                       # genotipo de la segunda planta

F1 = cruzar (G1, G2);            # primera generación
                                 # segunda generación
F2 = [cruzar(F1{1}, F1{2}), cruzar(F1{1}, F1{3}),
      cruzar(F1{1}, F1{4}), cruzar(F1{2}, F1{3}),
      cruzar(F1{2}, F1{4}), cruzar(F1{3}, F1{4})];

                                 # calculo del porcentaje
pct_tallo_alto = 100 * sum (ismember (F2, ['AA';'Aa';'aA'])) / numel (F2);

Lengua[editar]

También pueden aplicarse a análisis de texto, como en este problema de ortografía, cuyo resultado es una lista de palabras.

{
  "tipo":             "wordproblem",
  "enunciado":        "De las palabras: obvio, avsoluto, amable, ovni, avdicar y bravo; ¿cuáles no cumplen la regla de la B antes de consonante?",
  "solucion":         [ "avsoluto", "avdicar" ],
  "mensajeayuda":     [ "Debes analizar la palabra letra a letra, encontrar las 'v' y comprobar que no le sigue una consonante.", "La palabra 'ovni' es una excepción a la regla." ],
  "mensajeexito ":    "Ahora sabes dónde colocar la letra 'b'."
}
lista = {'obvio', 'avsoluto', 'amable', 'ovni', 'bravo', 'avdicar'};

erronea = {};
for k = lista
  palabra = k{};                              # seleccionar una palabra
  v = find (palabra == 'v');                  # encontrar las v

  if ~ismember (palabra(v+1), 'aeiou') &&\    # si no sigue vocal
     ~strcmp (palabra, 'ovni')                # y no es excepción
    erronea{end+1} = palabra;                 # incumple la regla
  endif
endfor

Enlaces externos[editar]

Referencias[editar]

  1. Vico, Francisco (2017). «ToolboX: Una estrategia transversal para la enseñanza de la programación en entornos educativos». ReVisión 10 (2): 53-68. ISSN 1989-1199. Archivado desde el original el 15 de agosto de 2018. Consultado el 31 de agosto de 2018. 
  2. Vico, Francisco (2016). Proyecto ToolboX. Workshop Educación en Informática sub-18 (ei<18). V Congreso Español de Informática. Salamanca. pp. pp. 2. Archivado desde el original el 15 de agosto de 2018. Consultado el 10 de septiembre de 2016.