1 complementos de programacion3
TRANSCRIPT
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
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.
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
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 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;
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.
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
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