SlideShare una empresa de Scribd logo
Complementos de
Programación
Preparado por Pedro Contreras F.
pcontreras@informatica.uda.cl
DIICC - UDA
Agenda
♦ Lenguaje I
– Recursividad
– Back Tracking
– Estructura dinámica de datos (Programación en CC++)
• 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ángulo
Subproblema 1: entrada de datos de altura y base
Subproblema 2: cálculo de superficie
Subproblema 3: salida de resultados
– Algoritmo
Leer (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_potencia
Var
real: a, n, resultado  n es numero y a es el exponente
Inicio
Escribir (‘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)
Inicio
Devolver (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
C
B
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)
– ENTRADASALIDA (ES)
♦ INVOCACION
Llamar a Sumar (a,b)
Llamar a Sumar (a)
Llamar a Sumar (a,b)
♦ DEFINICION
Procedimiento Sumar (E entero:i; ES 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 entradasalida 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
Pilas
Colas
Listas enlazadas
Árboles
Grafos
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;
♦ Referencias
nuevo.canción:=‘Cuando nadie me ve’;
nuevo.artista:=`Alejandro Sanz´;
Nuevo.fecha:=01-11-2000
Lista_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
– LecturaEscritura LE
Ejercicio Primer Taller
♦ Administrar Compras
Registros
Proveedores(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
PPrincipal
Program Compras
Begin
(Declaraciones)
While opcion <> “Salir “ do
Despliega menus
Leer opcion
Case opcion
Proveedores(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ódulos
Procedimiento Menu
Mostrar “[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 Proveedores
End procedimiento
 
Procedimiento Productos
End procedimiento
 
Procedimiento Cotización
End procedimiento
 
Procedimiento Adjudicación
End procedimiento
 
Procedimiento Orden de Compra
End procedimiento
Procedimiento Recepción compra
End procedimiento
 
Procedimiento Listados
End 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 una
función regrese el valor de 1 si el numero es positivo y -1
si es negativo).
Resumen de C
COMENTARIOS /* */
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
Resumen de C
TIPOS DE DATOS D,i,o,u,x,X,f,c,g,E,G,c,s,%,p.
SENTENCIAS If
Case
While
For
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 Iglesias
215376
Copayapu 485
Copiapó
Jigle@pegasus.uda.cl
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 1
1 1
2 2
3 6
4 24
5 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 factorial
Función Factorial:
 
Formulación
Función Factorial ( n! ) para enteros no negativos:
0! = 1
si n > 0 entonces n! = n *
( n - 1 )!
 
Programa
Program Factorial;
Const n = 8;
 
Function Fact ( N: Integer ): Integer;
begin
if N = 0 then Fact := 1
else Fact := N *
Fact ( n - 1 )
end;
begin
writeln ( 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 *
an - 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 Hanoi
Funció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);
begin
if NFichas = 1 then
begin
writeln ( 'Mover de ',nfichas,' ', PaloI, ' a ', PaloF );
end
else
begin
Mover ( 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 then
begin
PaloI := 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
B
C
   
B
C
  A
C B A
C A
B
 
  A
B
C
    B
C
    A
B
C
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
B
C
D
   
B
C
D
 
 
A
 
C
D
 
A
 
B
C
D
 
 
A
B
 
D
 
C
A
B
A
B
 
C
 
B
A
D
B
C
 
 
 
D
A
B
C
 
  A
B
C
 
 
D
  B
C
A
D
 
B
 
C
A
D
A
B
 
C
 
D
A
B
  C
D
B A C
D
  A B
C
D
    A
B
C
D
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;
var
i: 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 posiciones (i:integer;var q: boolean);
var
j: integer;
begin
j:=0;
repeat
j:=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]:=true
end
else
q:=true
end
end
until q or (j=8)
begin
for 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 reinas
program todasreinas;
var
i: 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);
var
j: 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;
end
end
end;
 begin
 
for i:=1 to 8 do
begin
a[i]:=true;
end;
 
for i:=2 to 16 do
begin
b[i]:=true;
end;
 
for i:=-7 to 7 do
begin
c[i]:=true;
end;
 
posiciones(1);
 
writeln;
end.
Arbol 8 reinas
Posiciones(4,true)
Posiciones(1,true)
Posiciones(1,true)
Posiciones(5,true)
Posiciones(8,true)
Posiciones(6,true)
Posiciones(3,true)
Posiciones(7,true)
Posiciones(2,true)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Links Back Tracking
http://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.

Más contenido relacionado

PDF
Tema 1: Introducción a la programación funcional.
PPT
Clase 12, 3/10/2007
PPTX
PL SQL Diplomado Oracle
PPT
PPTX
Estadística con Lenguaje R: Sesión Introductoria
PPTX
Programación funcional
PPTX
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
PDF
Diagramas flujo
Tema 1: Introducción a la programación funcional.
Clase 12, 3/10/2007
PL SQL Diplomado Oracle
Estadística con Lenguaje R: Sesión Introductoria
Programación funcional
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Diagramas flujo

La actualidad más candente (19)

PDF
TABLA DE SÍMBOLOS
PPTX
Deber n° 09 lenguajes de programación.
PPTX
Estadística con Lenguaje R: Sesión 1
DOC
Guía no. 1 grado 7
PPT
Clases 2 dfd y basico 2011
PPT
TABLA DE SIMBOLOS
PPT
Conceptos básicos sobre algortimia
PPS
Programacion Estructurada
PPTX
Introduccion a la programacion
PPTX
Apun5algol
PPT
Unidad 2 Principios de programación
PDF
Algoritmica
PPTX
Unmsm03 2008
PPTX
Conceptos fundmentales
PPTX
Datos y algoritmos
PPTX
Estructura general de un programa
PPTX
Compiladores, Analisis Lexico, Tabla de Transiciones
PPTX
PPTX
Power point
TABLA DE SÍMBOLOS
Deber n° 09 lenguajes de programación.
Estadística con Lenguaje R: Sesión 1
Guía no. 1 grado 7
Clases 2 dfd y basico 2011
TABLA DE SIMBOLOS
Conceptos básicos sobre algortimia
Programacion Estructurada
Introduccion a la programacion
Apun5algol
Unidad 2 Principios de programación
Algoritmica
Unmsm03 2008
Conceptos fundmentales
Datos y algoritmos
Estructura general de un programa
Compiladores, Analisis Lexico, Tabla de Transiciones
Power point
Publicidad

Similar a Complementos de programación (20)

PDF
Programación Modular
DOCX
M o d_u_l_a_r_i_d_a_d
PPT
DOCX
M O D U L A R I D A D
PPTX
Clase 1 - Repaso de Programacion Orientada a Objetos.pptx
PPT
Dce0 fundamentos deprogramacion
PPTX
Pseudocodigo 2 am2
PPTX
Pseudocodigo 2 am
PPT
D5E-E0: Fundamentos de la programacion
PPT
Dce0 Fundamentos De Programacion1
PPT
Dce0 Fundamentos De Programacion
PPT
Fundamentos de Programacion
PPT
Dce0 Fundamentos De Programacion
PPT
Fundamentos deprogramacion
PPTX
Resumen asignatura de Introducción a la Programación
PPTX
Dce0 Fundamentos De Programacion
PDF
Programación Modular - Subprogramas o funciones
PPT
METODOLOGIA Y TECNOLOGIA DE LA PROGRAMACION I
PPT
Segundo Bimestre
DOCX
Desarrollo del trabajo de tecnología Excel avanzado
Programación Modular
M o d_u_l_a_r_i_d_a_d
M O D U L A R I D A D
Clase 1 - Repaso de Programacion Orientada a Objetos.pptx
Dce0 fundamentos deprogramacion
Pseudocodigo 2 am2
Pseudocodigo 2 am
D5E-E0: Fundamentos de la programacion
Dce0 Fundamentos De Programacion1
Dce0 Fundamentos De Programacion
Fundamentos de Programacion
Dce0 Fundamentos De Programacion
Fundamentos deprogramacion
Resumen asignatura de Introducción a la Programación
Dce0 Fundamentos De Programacion
Programación Modular - Subprogramas o funciones
METODOLOGIA Y TECNOLOGIA DE LA PROGRAMACION I
Segundo Bimestre
Desarrollo del trabajo de tecnología Excel avanzado
Publicidad

Más de Pedro Contreras Flores (20)

PPTX
El dilema de las redes sociales
PDF
Tipos de sistemas de información
PDF
Text Analytics - JCC2014 Kimelfeld
PPTX
Servicio de información para bibliotecas
PPTX
Gestión del conocimiento
PPTX
Business intelligence (bi) y big data0
PPTX
Bibliotecas moviles y calidad
PDF
Sistemas y servicios de informacion intro
PPTX
Plataforma de Digitalización
PPT
Red de transporte urbano
PPT
Hormigas arfificiales - Mauro San Martín
PPT
Tecnologías de la información
PPT
Modelamiento y simulación
PPT
4 memoria dinamica
PPT
3 recursividad
PPT
2 punteros y lenguaje c
PPT
Programación grafica en lenguaje c
PPT
El dilema de las redes sociales
Tipos de sistemas de información
Text Analytics - JCC2014 Kimelfeld
Servicio de información para bibliotecas
Gestión del conocimiento
Business intelligence (bi) y big data0
Bibliotecas moviles y calidad
Sistemas y servicios de informacion intro
Plataforma de Digitalización
Red de transporte urbano
Hormigas arfificiales - Mauro San Martín
Tecnologías de la información
Modelamiento y simulación
4 memoria dinamica
3 recursividad
2 punteros y lenguaje c
Programación grafica en lenguaje c

Último (20)

PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Calidad desde el Docente y la mejora continua .pdf
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
clase auditoria informatica 2025.........
PPT
Que son las redes de computadores y sus partes
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
taller de informática - LEY DE OHM
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Estrategia de apoyo tecnología miguel angel solis
Diapositiva proyecto de vida, materia catedra
Presentación PASANTIAS AuditorioOO..pptx
Sesion 1 de microsoft power point - Clase 1
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Calidad desde el Docente y la mejora continua .pdf
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Estrategia de apoyo tecnología grado 9-3
clase auditoria informatica 2025.........
Que son las redes de computadores y sus partes
introduccion a las_web en el 2025_mejoras.ppt
Power Point Nicolás Carrasco (disertación Roblox).pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
REDES INFORMATICAS REDES INFORMATICAS.pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
taller de informática - LEY DE OHM
SAP Transportation Management para LSP, TM140 Col18
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Estrategia de apoyo tecnología miguel angel solis

Complementos de programación

  • 1. Complementos de Programación Preparado por Pedro Contreras F. pcontreras@informatica.uda.cl DIICC - UDA
  • 2. Agenda ♦ Lenguaje I – Recursividad – Back Tracking – Estructura dinámica de datos (Programación en CC++) • 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
  • 5. RESOLUCION DE PROBLEMAS 1. ANALISIS DEL PROBLEMA 2. DISEÑO DEL ALGORITMO 3. RESOLUCIÓN DE ALGORITMOS POR COMPUTADORA
  • 6. 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.
  • 7. 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.
  • 8. 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
  • 9. 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.
  • 10. MODULARIDAD ♦ Ejemplo simple de modularidad – Problema: Calculo de superficie (área) de un rectángulo Subproblema 1: entrada de datos de altura y base Subproblema 2: cálculo de superficie Subproblema 3: salida de resultados – Algoritmo Leer (datos(altura, base)) entrada de datos Area  base * altura calculo de la superficie Escribir (base, altura, area) salida de resultados
  • 11. MODULARIDAD ♦ NUEVA SECUENCIA DE CONSTRUCCION DE ALGORITMO INICIAR DIVIDIR DATOS DE ENTRADA DEFINIR DATOS DE SALIDA DEFINIR PROCESAMIENTO INTERNO DIVIDIR EN MODULOSENTENDER EL PROBLEMA
  • 12. 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
  • 13. 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.
  • 14. 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
  • 15. 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...); ...
  • 16. MODULARIDAD ♦ FUNCIONES Algoritmo Elevar_a_potencia Var real: a, n, resultado n es numero y a es el exponente Inicio Escribir (‘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) Inicio Devolver (exp(a*ln(n))) Fin_funcion
  • 17. 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
  • 18. MODULARIDAD ♦ PROCEDIMIENTOS – Donde se encuentre el nombre será invocado el procedimiento – Declaración: Procedimiento dibujaX(posx,posy); Inicio ... Fin – Invocación ... Dibuja(10,20) ...
  • 19. 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.
  • 20. 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
  • 22. MODULARIDAD ♦ CLASES DE PARAMETROS – ENTRADA (E) – SALIDA (S) – ENTRADASALIDA (ES) ♦ INVOCACION Llamar a Sumar (a,b) Llamar a Sumar (a) Llamar a Sumar (a,b) ♦ DEFINICION Procedimiento Sumar (E entero:i; ES entero:j ) Procedimiento Sumar (E entero:i) Procedimiento Sumar (E entero:i; S entero:j )
  • 23. 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 entradasalida 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
  • 24. 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.
  • 26. 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
  • 27. Introducción a los Datos Estructurados Estáticas Arreglos (vectores,matrices) Registros (record) Ficheros o archivos (file) Dinámicas Lineales No Lineales Pilas Colas Listas enlazadas Árboles Grafos
  • 28. 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
  • 29. 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; ♦ Referencias nuevo.canción:=‘Cuando nadie me ve’; nuevo.artista:=`Alejandro Sanz´; Nuevo.fecha:=01-11-2000 Lista_música[10].canción:=‘Cuando nadie me ve’; Lista_música[15]:=nuevo;
  • 30. 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
  • 31. 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 – LecturaEscritura LE
  • 32. Ejercicio Primer Taller ♦ Administrar Compras
  • 33. Registros Proveedores(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)
  • 34. Módulos Sistema Compras Proveedores Productos Cotización Orden de compra Recepción de Compra Informes
  • 35. PPrincipal Program Compras Begin (Declaraciones) While opcion <> “Salir “ do Despliega menus Leer opcion Case opcion Proveedores(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
  • 36. Módulos Procedimiento Menu Mostrar “[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 Proveedores End procedimiento   Procedimiento Productos End procedimiento   Procedimiento Cotización End procedimiento   Procedimiento Adjudicación End procedimiento   Procedimiento Orden de Compra End procedimiento Procedimiento Recepción compra End procedimiento   Procedimiento Listados End procedimiento
  • 37. 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 una función regrese el valor de 1 si el numero es positivo y -1 si es negativo).
  • 38. Resumen de C COMENTARIOS /* */ 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
  • 39. Resumen de C TIPOS DE DATOS D,i,o,u,x,X,f,c,g,E,G,c,s,%,p. SENTENCIAS If Case While For LIBRERIAS #Include < > #include | | OTRAS FUNCIONES Gets(); Puts(); Strcpy(); Strlen(); Strcat(); Strcmp(); Strupr(); Strlwp();
  • 40. 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 Iglesias 215376 Copayapu 485 Copiapó Jigle@pegasus.uda.cl
  • 42. 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
  • 43. 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.
  • 44. 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
  • 45. Recursividad: Ejemplos ♦ Función factorial n! ♦ • 0! =1 ♦ • Si n>0, entonces n!=n*(n-1)! n n! 0 1 1 1 2 2 3 6 4 24 5 120 EL PODER DE LA RECURSIVIDAD ES LA DEFINICIÓN DE UN CONJUNTO INFINITO DE OBJETOS MEDIANTE UNA PROPOSICIÓN FINITA.
  • 46. Tipos de recursividad ♦ Directa:  Procedure Directa ( ... ); begin . . . Directa ( ... ); . . . end; ♦ Indirecta:  Procedure Indirecta ( ... ); begin . . . A ( ... ); . . . end;   Procedure A ( ... ); begin . . . Indirecta ( ... ); . . . end;
  • 47. Funcionamiento Interno . . . Proced./Func. Proced./Func. Proced./Func. Llamado recursivo
  • 48. Puntos importantes en recursividad • Condición de parada • Parámetros que se pasan en cada llamada • Marcha atrás (backtracking) • Consumo de memoria
  • 49. Función factorial Función Factorial:   Formulación Función Factorial ( n! ) para enteros no negativos: 0! = 1 si n > 0 entonces n! = n * ( n - 1 )!   Programa Program Factorial; Const n = 8;   Function Fact ( N: Integer ): Integer; begin if N = 0 then Fact := 1 else Fact := N * Fact ( n - 1 ) end; begin writeln ( Fact ( N ) ) end.
  • 50. Función potencial ♦ Función Potencia: ♦   ♦ Formulación: ♦ Función Potencia ( an ) de exponente no negativo: ♦ a0 = 1 ♦ si n > 0 entonces an = a * an - 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.
  • 51. Función Torres de Hanoi ♦ Tarea próxima clase - 10 puntos ♦ Con tres discos ♦ Con 4 discos
  • 52. Solución Torres de Hanoi Funció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); begin if NFichas = 1 then begin writeln ( 'Mover de ',nfichas,' ', PaloI, ' a ', PaloF ); end else begin Mover ( 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 then begin PaloI := 1; PaloF := 3; Mover ( Nfichas, PaloI, PaloF ) end until (NFichas=0); end.
  • 53. 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 B C     B C   A C B A C A B     A B C     B C     A B C
  • 54. 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 B C D     B C D     A   C D   A   B C D     A B   D   C A B A B   C   B A D B C       D A B C     A B C     D   B C A D   B   C A D A B   C   D A B   C D B A C D   A B C D     A B C D
  • 56. 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.
  • 57. 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.
  • 58. 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
  • 59. Pseudo código program reinas; var i: 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 posiciones (i:integer;var q: boolean); var j: integer; begin j:=0; repeat j:=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]:=true end else q:=true end end until q or (j=8) begin for 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
  • 60. Para n reinas program todasreinas; var i: 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); var j: 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; end end end;  begin   for i:=1 to 8 do begin a[i]:=true; end;   for i:=2 to 16 do begin b[i]:=true; end;   for i:=-7 to 7 do begin c[i]:=true; end;   posiciones(1);   writeln; end.
  • 63. Matrimonio Estabilidad ♦ Tarea: Estudiar el caso del matrimonio estable para control próxima clase.