Un Problegrama es un problema que puede ser resuelto mediante un programa (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. 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.

__TOC__

Ejemplos 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

{ "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 É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 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 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 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 web oficial

Referencias

Categoría:Programación Categoría:Solución de problemas