1 complementos de programacion3

63
Complementos de Programación Preparado por Pedro Contreras F. [email protected] DIICC - UDA

Upload: pedro-contreras-flores

Post on 17-Aug-2015

15 views

Category:

Technology


1 download

TRANSCRIPT

Complementos de Programación

Preparado por Pedro Contreras [email protected]

DIICC - UDA

Agenda Lenguaje I

– Recursividad

– Back Tracking

– Estructura dinámica de datos (Programación en C\C++)• Registros y archivos (tipos de acceso)

• Punteros

– Encriptación

Lenguaje II– Introducción

– Estilos de Programación• Imperativo, Orientado Objeto, Evento, Formato, Funcional, Lógico

– Construcción de sistemas computacionales

Conceptos Básicos vs. Mercado

RESOLUCION DE PROBLEMAS

RESOLUCION DE PROBLEMAS

1. ANALISIS DEL PROBLEMA

2. DISEÑO DEL ALGORITMO

3. RESOLUCIÓN DE ALGORITMOS POR COMPUTADORA

ESTRATEGIA PARA ALGORITMOS Entender el problema.

Leer el enunciando las veces necesarias hasta entenderlo.Aclarar cualquier duda hasta explicarlo de forma distinta.

Definir datos de entrada.Identificar claramente los datos entrada que deben estar disponibles al momento de iniciar el algoritmo.Establecer el tipo de ingreso o inicialización.Establecer tipos, valor de inicio y nombres de las variables.

Definir datos de salida.Definir la información de salida y su presentación.

Definir procesamiento interno.Establecer pasos que se realizarán en forma general.Definir cada uno de los pasos hasta un nivel detallado.Realizar una revisión en los procesos con el objetivo de optimizar (reducir) algunos pasos redundantes.

DE ALGORITMOS A PROGRAMAS TODOS LOS ALGORITMOS, PSEUDOCODIGOS O DIAGRAMAS

PUEDEN CONSTRUIR UN PROGRAMA COMPUTACIONAL MEDIANTE UN LENGUAJES DE PROGRAMACIÓN.

ESTRUCTURA SEGÚN PASCAL

Program nombre_programa;

const

const1: tipo;

var var1: tipo;

var2: tipo;

varn: tipo;

begin

sentencias simples, iterativas o selectivas

end.

MODULARIDAD El método más conveniente para resolver un problema de mediana

complejidad es dividirlo o descomponerlo en subproblemas más simples. Si se tiene un problema P se trata de determinar un conjunto de problemas

más simples P1, P2, ..., Pn, tales que solucionando primero P1, luego P2, ...,etc., resolviendo final% P.

Problema

Subproblema1 Subproblema1 Subproblema1

SubSubproblema 1.1 SubSubproblema 1.2 SubSubproblema 1.3 SubSubproblema 1.4

MODULARIDAD

Existen varios nombres que describen la estrategia anterior:– Divide y vencerás (divide and conquer)

– Diseño descendente (top-down design)

Ventajas de la Modularidad.– Facilita la modificación de los programas, ya que los procesos están separados.

– Facilita la compresión del programa, pues solamente se requiere entender la parte del programa que interesa.

– Mejor organización, esto se refleja en procesos que son efectivamente rutinas claras y diferenciadas.

– Posibilita la programación en grupo, de modo que cada programador pueda desarrollar un módulo

– Facilita la programación misma, al poder tratar cada módulo separadamente.

MODULARIDAD Ejemplo simple de modularidad

– Problema: Calculo de superficie (área) de un rectánguloSubproblema 1: entrada de datos de altura y base

Subproblema 2: cálculo de superficie

Subproblema 3: salida de resultados

– AlgoritmoLeer (datos(altura, base)) \\ entrada de datos

Area base * altura \\ calculo de la superficie

Escribir (base, altura, area) \\ salida de resultados

MODULARIDAD NUEVA SECUENCIA DE CONSTRUCCION DE

ALGORITMO

INICIAR

DIVIDIR DATOS DE ENTRADA

DEFINIR DATOS DE SALIDA

DEFINIR PROCESAMIENTO INTERNO

DIVIDIR EN MODULOSENTENDER EL PROBLEMA

MODULARIDAD PRINCIPALES CARACTERISTICAS DE LOS MODULOS

– Pueden recibir o no valores al momento de ser llamados

– Estos valores son llamados parámetros

– Si el modulo entrega o devuelve valores, estos son llamados parámetros variables

– Los módulos son llamados desde cualquier parte del programa y cuantas veces sea necesario

– Los módulos deben ser declarados previamente a ser utilizados

– Exiten dos clases de módulos: procedimientos y funciones

MODULARIDAD

FUNCIONES– Matemáticamente una función es una operación que toma uno

o más valores llamados argumentos y produce un valor denominado resultado.

f (x)=(a)/(a2 + 1)

f (x,y)=(x+y)/(y3)

– A una función no se le llama explícitamente, sino que se le invoca o referencia mediante un nombre y una lista de parámetros actuales.

– La invocación debe coincidir en la lista de argumentos según la cantidad, tipo y orden con que fue definida.

– La caracteristica principal es que puede retornar un valor directamente en su nombre.

MODULARIDAD

FUNCIONES– Los LP (Pascal) poseen funciones predefinidas, por ejemplo:

Valor:= cos (angulo); \\ cos() calcula el coseno de un valor

– Los LP (Pascal) también ofrecen la posibilidad que cada programador defina sus variables, de acuerdo a la siguiente sintaxis:

<tipo_de_resultado> funcion <nombre_funcion> (lista de parametros)

[declaraciones locales]

inicio

<acciones> \\ cuerpo de la funcion

devolver (<expresion>)

fin_funcion

MODULARIDAD

FUNCIONES– Las funciones deberian ser llamadas desde una sentencia de

asignación cuyo tipo sea el mismo de la funcion declarada

...

Resultado:=nombre_funcion( lista de parametros...);

...

MODULARIDAD FUNCIONES

Algoritmo Elevar_a_potenciaVar

real: a, n, resultado \\ n es numero y a es el exponenteInicioEscribir (‘Ingrese numero positivo:’)Leer (n)Escribir (‘Ingrese exponente:’)Leer (a)Resultado:=potencia(n,a)Escribir (‘N elevado a=‘, resultado)Fin

Real funcion potencia(E real: n, a)InicioDevolver (exp(a*ln(n)))Fin_funcion

MODULARIDAD

PROCEDIMIENTOS– Un procedimiento es un módulo o procedimento que realiza tareas

especificas

– Puede recibir 0 o más valores

– El procedimiento retorna 0 o más valores deacuerdo a los parametros de salida definidos

– Los procedimientos son llamados desde cualquier parte del programa principal.

Procedimiento nombre [(param. entrada: tipo); (param. Salida:tipo)];

<Variables locales>

...

<acciones>

Fin_procedimiento

MODULARIDAD

PROCEDIMIENTOS– Donde se encuentre el nombre será invocado el

procedimiento

– Declaración: Procedimiento dibujaX(posx,posy);

Inicio

...

Fin

– Invocación...

Dibuja(10,20)

...

MODULARIDAD AMBITO DE LAS VARIABLES

– VARIABLE LOCAL: es aquella que está declarada y definida dentro de un subprograma y que solo se utilizara dentro de aquel subprograma. Cualquier otra declarada fuera del subprograma con el mismo nombre es distinta.

– VARIABLES GLOBALES: es aquella declarada para el programa o algoritmo principal, del que dependen todos los subprogramas.

MODULARIDAD

Programa Calculadora

Tipo X1,X2,...

.

.

.

Ambito X

Procedimiento A

Tipo Y1,Y2,...Ambito Y

Procedimiento B

Tipo Z1, Z2, ...

... Ambito Z

Procedimiento A

Tipo W1,W2,...

... Ambito W

MODULARIDAD

CB

A

D

E F

G

VARIABLES DEFINIDAS EN

ACCESIBLES DESDE

A A,B,C,D,E,F,G

B B,C

C C

D D,E,F,G

E E,F,G

F F

G G

MODULARIDAD CLASES DE PARAMETROS

– ENTRADA (E)– SALIDA (S)– ENTRADA\SALIDA (E\S)

INVOCACIONLlamar a Sumar (a,b)Llamar a Sumar (a)Llamar a Sumar (a,b)

DEFINICIONProcedimiento Sumar (E entero:i; E\S entero:j )Procedimiento Sumar (E entero:i)Procedimiento Sumar (E entero:i; S entero:j )

MODULARIDAD EJERCICIOS

– Definir invocación y encabezado de procedimientos para:• 0 entrada y 0 salida• 1 entrada de entero y salida de texto.• 2 entradas de texto• 1 entrada\salida de tipo booleano y 1 salida de tipo entero.

– Implementar pseudocódigo para una aplicación que realice las tareas de una calculadora:

– SUMA– RESTA– MULTIPLICACION– DIVISION– POTENCIA– FACTORIAL– PORCENTAJE– INTERES(iva)– CALCULO DE AREAS‘(cuadrado, triangulo, circulo)– SALIR

MODULARIDAD EJERCICIOS

– Implemente el algoritmo para calcular el máximo común divisor de dos números. Utilice modularidad mediante una función llamada mcd.

– Escribir un algoritmo que permita ordenar (ascendente) tres números mediante un procedimiento de intercambio en dos variables.

– Escribir un algoritmo que llame la función signo y calcule el signo del numero.

ESTRUCTURAS DINAMICAS DE

DATOS

Introducción a los Datos Estructurados

Tipos de datos estructurados– Son colecciones de datos dotados de una estructura

caracterizada por un método usado para acceder a sus componentes individuales.

– Solo se ha trabajado con datos simples

– Existen problemas de difícil solución, como:• Leer secuencia de numero y escribirla en orden inverso

• Almacenar datos relacionados entorno a múltiples opciones

Datos simples Datos estructurados

Introducción a los Datos Estructurados

Estáticas

Arreglos (vectores,matrices)

Registros (record)

Ficheros o archivos (file)

Dinámicas

Lineales

No Lineales

PilasColas

Listas enlazadas

ÁrbolesGrafos

Registros Un registro o record es una estructura de datos que consta de un conjunto de

elementos que pueden ser del mismo tipo o de tipos diferentes. Cada componente de un registro se denomina campo. Cada uno de los componentes tiene un nombre llamado identificador de

campo. Cada campo de un registro se identifica con la combinación del nombre de la

variable de tipo registro y el identificador de campo correspondiente. La sintaxis es:

Tipo registro: fechas

entero: dia

entero: mes

entero: año

Fin registro día mes año

Campos

Un registro

Registros Ejemplo para Pascal

Type album= record

canción, artista: string[40];tipo_música: string[10];fecha: date;tipo_unidad: char;

End;Var

nuevo: album;lista_música: array[1..100] of album;

Referenciasnuevo.canción:=‘Cuando nadie me ve’;nuevo.artista:=`Alejandro Sanz´;Nuevo.fecha:=01-11-2000Lista_música[10].canción:=‘Cuando nadie me ve’;Lista_música[15]:=nuevo;

Archivos Un archivo o file es una colección de información. Esta es almacenada en forma física en una unidad de almacenamiento

secundario(discos, cintas, etc). Los archivos permiten la entrada y salida de datos, y deben ser manejados

mediante una aplicación. El tamaño de los archivos es limitado solo por la cantidad de espacio

disponible en la unidad de almacenamiento. Existen dos tipo de archivos:

– De texto

– Tipificados o de formato.

Existen 2 tipos de accesos a los archivos:– Acceso secuencial(puntero)

– Acceso directo(registro)

Registro 1

Registro 2

. . .

Registro n

EOF

Archivos Operaciones sobre archivos

– Creación– Consulta– Actualización(insertar, eliminar, modificar, consulta)– Clasificación– Reorganización– Destrucción– Fusión– Rotura

Las principales funciones que realizan son los archivos son:– Abrir(identificador,tipo_acceso,nombrearchivo)– Cerrar(nombrearchivo)– Leer(nombrearchivo, tipo_registro.campo)– Escribir(nombre, tipo_registro.campo)

Tipos de acceso al archivo– Lectura L– Escritura E– Lectura\Escritura L\E

Ejercicio Primer Taller

Administrar Compras

RegistrosProveedores(id, nombre, domicilio, ciudad, país, teléfono, fax)

Productos (id, nombre, descripción, stock)

Cotización (id, precio, cantidad , garantías, fecha_envío, fecha_llegada,id_proveedor, fecha _cotización)

Orden de compra (comprador, id_producto, id_cotización)

Recepción de compra (detalle llegada, fecha_llegada, hora_llegada, recepcionista)

Módulos

Sistema Compras

Proveedores Productos Cotización Orden de compra

Recepción de Compra

Informes

PPrincipalProgram ComprasBegin(Declaraciones)While opcion <> “Salir “ do

Despliega menusLeer opcionCase opcionProveedores(id, nombre, domicilio, ciudad, pais, telefono, fax)Productos (id, nombre, descripción, stock)Cotización (id, precio, cantidad , garantias, fecha_envío, fecha_llegada, id_proveedor, fecha _cotización)Orden de compra (comprador, id_producto, id_cotización)Recepcion de compra (detalle llegada, fecha_llegada, hora_llegada, recepcionista)Listados (cotizaciones_activas, stock de productos, ordenes en tramite, detalle de proveedores, numero de compras por proveedor).End case

End while

MódulosProcedimiento MenuMostrar “[1] Proveedores”Mostrar “[2] Cotización”Mostrar “[3] Adjudicación”Mostrar “[4] Orden de compra”Mostrar “[5] Recepcion de

compra”Mostrar “[6] Listados”Mostrar “Seleccione opción [*]”End procedimiento  Procedimiento ProveedoresEnd procedimiento Procedimiento ProductosEnd procedimiento 

Procedimiento CotizaciónEnd procedimiento Procedimiento AdjudicaciónEnd procedimiento Procedimiento Orden de CompraEnd procedimiento

Procedimiento Recepción compraEnd procedimiento Procedimiento ListadosEnd procedimiento

Refinamiento sucesivo

1) Diseñe un algoritmo que llene una matriz de 10 * 10 y determine:– A)    El numero mayor almacenado en la matriz– B)     El numero mayor almacenado en cada renglón– C)    La columna que tuvo la máxima suma– D)    El renglón que tuvo la máxima suma

Diseña una función para cada inciso.

2) Diseñe un algoritmo que lea un numero y mediante unafunción regrese el valor de 1 si el numero es positivo y -1 si es negativo).

Resumen de CCOMENTARIOS /* */

DECLARACION DE VARIABLE

Int numero;

LECTURA Getchar();

LECTURA Scanf(“%d”, &edad)

LECTURA Scanf(“%d %c %f, &a,&c,&x”);

ESCRITURA Putchar(‘texto’);Putchar(variable);Putchar(100);

ESCRITURA Printf (“hola”);Printf(“Tienes %d años.\n”, edad”);Printf(“Tienes %d años y mides %f\n”, edad, altura);

Resumen de CTIPOS DE DATOS D,i,o,u,x,X,f,c,g,E,G,c,s,%,p.

SENTENCIAS IfCaseWhileFor

LIBRERIAS #Include < >#include | |

OTRAS FUNCIONES Gets();Puts();Strcpy();Strlen();Strcat();Strcmp();Strupr();Strlwp();

Ejercicio con archivos, procedimientos y funciones

Realice un algoritmo utilizando archivos, procedimientos y funciones que simule una agenda telefónica, utilice el siguiente menú:

El archivo deberá guardar los siguientes datos: Nombre, teléfono, dirección, ciudad, e_mail.

•El Criterio de búsqueda será por el nombre o teléfono.•El criterio de eliminación será rellenando el campo nombre y teléfono con el carácter “*”

MENU[I].......Ingresar Datos[L]......Listado General ordenado[B]......Buscar telefono y listar[E]......Eliminar Dato[S].......Salir

Juan Iglesias215376Copayapu 485Copiapó[email protected]

RECURSIVIDAD

Recursividad Objetivos del alumno:

  1.       Comprender el concepto de Recursividad 2.       Diferenciar entre la Directa e Indirecta 3.       Conocer el funcionamiento interno 4.       Desarrollar algoritmos recursivos

Recursividad Un objeto es recursivo, si en parte esta

formado por si mismo o se define en función de sí mismo.

Dícese de lo que vuelve a ocurrir o aparecer, especialmente después de un intervalo.

En la vida diaria podemos encontrar procesos o estados recursivos (loops): televisión, acoplamiento o afinamiento musical, ajedrez, dos espejos frente a frente.

Recursividad: Ejemplos

Números naturales   1 es un número natural   El sucesor de un número natural es otro número

natural

Estructuras de árbol   Un nodo vacío es un árbol:

 Si A1 y A2 son árboles, entonces

Nodo vacío

A1 A2

Recursividad: Ejemplos

Función factorial n!   0! =1   Si n>0, entonces n!=n*(n-1)!

n n!0 11 12 23 64 245 120

EL PODER DE LA RECURSIVIDAD ES LA DEFINICIÓN DE UN

CONJUNTO INFINITO DE OBJETOS MEDIANTE UNA PROPOSICIÓN FINITA.

Tipos de recursividad Directa:

 Procedure Directa ( ... );begin...Directa ( ... );...end;

Indirecta: Procedure Indirecta ( ... );begin...A ( ... );...end; Procedure A ( ... );begin ...Indirecta ( ... );...end;

Funcionamiento Interno

. . .

Proced./Func. Proced./Func. Proced./Func.

Llamado recursivo

Puntos importantes en recursividad

  Condición de parada  Parámetros que se pasan en cada

llamada   Marcha atrás (backtracking)  Consumo de memoria

Función factorialFunción Factorial: FormulaciónFunción Factorial ( n! ) para enteros no negativos:0! = 1

si n > 0 entonces n! = n * ( n - 1 )! ProgramaProgram Factorial;Const n = 8; Function Fact ( N: Integer ): Integer;beginif N = 0 then Fact := 1

else Fact := N * Fact ( n - 1 )end;beginwriteln ( Fact ( N ) )end.

Función potencial Función Potencia:   Formulación: Función Potencia ( an ) de exponente no negativo: a0 = 1 si n > 0 entonces an = a * a

n - 1

Pot(10,5)=100000   Programa Program Potencia; Const base = 5; n = 10; Function Pot ( a, N: Integer ); begin if N = 0 then Pot := 1 else Pot := a * Pot ( a, N - 1 ); end; begin writeln( Pot ( base, n ) ) end.

Función Torres de Hanoi Tarea próxima clase - 10 puntos Con tres discos Con 4 discos

Solución Torres de HanoiFunción Torres de Hanoi: Formulación:Nunca una ficha más ancha encima de otra más estrecha!. Program Hanoi;var NFichas, PaloI, PaloF: Integer; Procedure Mover ( NFichas, PaloI, PaloF: Integer);beginif NFichas = 1 then

beginwriteln ( 'Mover de ',nfichas,' ', PaloI, ' a ', PaloF );end

elsebeginMover ( NFichas - 1, PaloI, 6 - PaloI - PaloF );writeln ( 'Mover de ',nfichas,' ', PaloI, ' a ', PaloF );Mover ( NFichas - 1, 6 - PaloI - PaloF, PaloF )end

end; begin (* Hanoi *)repeat

writeln;writeln ( 'Introducir el n£mero de fichas(ingrese 0 para salir): ');read ( NFichas );if nfichas<>0 thenbeginPaloI := 1; PaloF := 3;Mover ( Nfichas, PaloI, PaloF )end

until (NFichas=0);end.

ARBOL DE TORRES DE HANOI CON 3 DISCOS Nfichas=3 (A,B,C)Mover(nficha,PosIniDisco,PosFinDisco)

Diagrama o árbol de llamadas recursivas del procedimiento mover

Mover(3,1,3)

Mover(2,1,2) Mover(2,1,2)

Mover(2,2,3)Mover(1,1,3) Mover(1,3,2) Mover(2,2,3)

PALOS

1 2 3

A BC

   

BC

  A

C B A

C AB

 

  AB

C

    BC

    ABC

ARBOL DE TORRES DE HANOI CON 3 DISCOS Nfichas=4 (A,B,C,D)Mover(nficha,PosIniDisco,PosFinDisco)

Diagrama o árbol de llamadas recursivas del procedimiento mover

Mover(4,1,3)

Mover(3,1,2) Mover(3,2,3)

Mover(2,1,3)Mover(2,1,3) Mover(2,3,2) Mover(2,2,1)

Mover(1,1,2)Mover(1,1,2) Mover(1,2,3) Mover(1,3,1)

Mover(1,2,3)

Mover(1,2,3) Mover(1,3,1)

Mover(1,1,2)

PALOS

1 2 3

A BCD

   

BCD

  A

 

CD

 A

 B

CD

  

AB

 D

 C

AB

AB

 C

 B

AD

BC

 

  D

ABC

 

  ABC

  D

  BC

AD

 B

 C

AD

AB

 C

 D

AB

  CD

B A CD

  A BCD

    ABCD

BACK TRACKING

Back Tracking

El back-tracking permite determinar las soluciones de problemas específicos sin seguir una regla fija de calculo sino que se realiza por medio de una experimentación, ensayo y error.

Back Tracking: Ejemplos Problemas que nos interesa resolverlos, sin

importar cuanto tiempo se tarde Poner n reinas en un tablero de ajedrez de n x n posiciones, sin que se ataquen. Que el caballo de ajedrez recorra todas las

posiciones de un tablero de n x n, sin pasar o ubicarse dos veces o más en una determinada casilla.

Problemas de estabilidad. Solución optima. El juego del solitario.

Las reinas

N reinas en tablero de n*n

http://www.scdi.org/%7eavernet/projects/jaskell/queens/

Problema de las 8 reinas

http://www.pvv.ntnu.no/~hgs/java/queens/simple.html

http://csc.uis.edu/~beamon/csc485/assign1/chess.html

http://perso.club-internet.fr/matuli/matthieu/jeux/eigthqueens/eigthqueens.htm

Pseudo código

program reinas;vari: integerq:booleana: array [1..8] of boolean:b: array [2..16] of boolean;c: array [-7..7] of boolean;x: array [1..8] of integer; procedure posiciones (i:integer;var q: boolean);var j: integer;beginj:=0;repeatj:=j+1;q:=false;if a[j]=true and b[i+j] and c[i-j] then

x[i]:=j;a[j]:=false;

b[i+1]:=false;c[i-j]:=false;if i<8 then

posiciones(i+1,q)if q=false then

a[i]:=true;b[i+j]:=true;

c[i-j]:=trueend

elseq:=trueend

enduntil q or (j=8) beginfor i:=1 to 8 do a[i]:=true end;for i:=2 to 16 do b[i]:=true end;for i:=-7 to 7 do c[i]:=true end;posiciones(1,q);for i:=1 to 8 do writeln (x[i]) end;writeln;end reinas

Para n reinasprogram todasreinas;vari: integer;q:boolean;a: array [1..8] of boolean;b: array [2..16] of boolean;c: array [-7..7] of boolean;x: array [1..8] of integer; procedure imprimir; var k:integer; begin for k:=1 to 8 do write(x[k]); writeln; end; 

procedure posiciones (i:integer);varj: integer;begin for j:=1 to 8 do begin if a[j] and b[i+j] and c[i-j] then begin

x[i] :=j;a[j] :=false;b[i+j]:=false;

c[i-j]:=false; if i<8 then begin posiciones(i+1); end else begin imprimir; end;  a[j] :=true;

b[i+j]:=true; c[i-j]:=true;

x[i] := 0; endendend;

 begin for i:=1 to 8 dobegina[i]:=true;end; for i:=2 to 16 dobeginb[i]:=true;end; for i:=-7 to 7 dobeginc[i]:=true;end; posiciones(1); writeln;end.

Arbol 8 reinas

Pos

icio

nes(

4,tr

ue)

Pos

icio

nes(

1,tr

ue)

Pos

icio

nes(

1,tr

ue)

Pos

icio

nes(

5,tr

ue)

Pos

icio

nes(

8,tr

ue)

Pos

icio

nes(

6,tr

ue)

Pos

icio

nes(

3,tr

ue)

Pos

icio

nes(

7,tr

ue)

Pos

icio

nes(

2,tr

ue)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Links Back Trackinghttp://www.terra.es/personal/gerena/Applets/Caballo/Caballo.html

http://personal2.redestb.es/d-aa/Cap22.html

http://www.sistema.itesm.mx/va/Planes90/Sinteticos/Analiticos/Cb90092.htmlç

http://www.puc.cl/curso_dist/dmw/complem/hitex_c4.html

http://www-azc.uam.mx/enlinea2/num2/2-1.htm

http://eb0.ciateq.mx/~centeno/AnalisisAlgoritmos.html

http://eb0.ciateq.mx/~centeno/Docs/Hi_q.ppt

http://web.jet.es/jqc/progii1.html

http://web.jet.es/jqc/progii5.html

http://www.lemaco.hn/educa/program/recursividad/RECUR1_1.html

Matrimonio Estabilidad

Tarea: Estudiar el caso del matrimonio estable para control próxima clase.