Está en la página 1de 131

Algoritmos UTN FRBA

Introduccion la Programacin Magister Oscar R. BRUNO

Introduccion la Programacin Magister Oscar R. BRUNO

Introduccion la Programacin Magister Oscar R. BRUNO

Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
PROBLEMA: Calculo de la nota final de una materia : Dadas la nota del parcial y la el trabajo practico, la nota final es el promedio de ambas

LEXICO

NotaParcial : Real;
NotaPractico : Real; NotaFinal : Real

ALGORITMO
Leer (NotaParcial, NotaPractico); NotaFinal <- (NotaParcial + NotaPractico) / 2; Escribir(NotaFinal); FIN
Introduccion la Programacin Magister Oscar R. BRUNO

Apredizaje de programacion
Observar el universo real y trasladarlo al universo computacional requiere un gran esfuerzo de abstraccin. Es por eso que el aprendizaje de programacin se hace tan complejo Se da en etapas pero es recursivo
Introduccion la Programacin Magister Oscar R. BRUNO

Riesgos
La informacin se transforma en una carga indigesta si no se la entiende Aprender es vincular la informacin nueva con elementos previos. Informacin poco clara, desorganizada o carente de sentido afectan al uso de conocimientos previos. Se debe evitar un conocimiento inerte
Introduccion la Programacin Magister Oscar R. BRUNO

Sugerencias
No es suficiente con los conocimientos tericos o con el anlisis de lo que otro escribi, como toda actividad constructiva REQUIERE DE PRACTICA. Pero no se debe transformar en programador compulsivo: adquiera el hbito de pensar la solucin antes de escribir cdigo.

Introduccion la Programacin Magister Oscar R. BRUNO

Algoritmo
Secuencia finita de instucciones, reglas o pasos que describen en forma precisa las operaciones que una computadora debe realizar para llevar a cabo una tarea en tiempo finito [Knuth, 1968]. Descripcin de un esquema de comportamiento expresado mediante un repertorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomina lxico[Scholl, 1988].
Introduccion la Programacin Magister Oscar R. BRUNO

Algoritmo
Esta formado por reglas, pasos e instrucciones. Las reglas especifican operaciones. La computadora es el agente ejecutor. La secuencia de reglas y la duracin de la ejecucin son finitas.

Introduccion la Programacin Magister Oscar R. BRUNO

Algoritmo
Finitud: en longitud y duracin. Precisin: Determinar sin ambigedad las operaciones que se deben ejecutar. Efectividad: las reglas pueden ejecutarse sin el ordenador obtenindose el mismo resultado. Generalidad: Resolver una clase de problema y no un problema particular.
Introduccion la Programacin Magister Oscar R. BRUNO

Programa Tarea Proceso


Programa: Algoritmo escrito en un lenguaje cuyas instrucciones son ejecutables por una computadora y que estn almacenados en un disco. Tarea: Un programa se vuelve tarea a partir del momento que se lo selecciona para su ejecucin y hasta que esta termina. Proceso: programa en ejecucin, se ha iniciado pero an no ha finalizado.
Introduccion la Programacin Magister Oscar R. BRUNO

Lenguajes de programacin
Lenguajes Naturales - Formales. Lenguajes de programacin: Notacion que permite escribir programas a mayor nivel de abstraccin que los lenguajes de mquina. Sus instrucciones deben ser traducidas a lenguaje de mquina. Lenguaje de mquina: Instrucciones que son ejecutables por el hardware de una computadora.
Introduccion la Programacin Magister Oscar R. BRUNO

Paradigmas de programacin
Paradigma: Coleccin de conceptos que guan el proceso de construccion de un programa. Estos conceptos controlan la forma en que se piensan y formulan los programas. Imperativo Procedural Objetos. Declarativo Funcional Lgico.
Introduccion la Programacin Magister Oscar R. BRUNO

Dato Informacin Conocimiento


Dato: <objeto><atributo><valor> sin interpretar. Informacin: aade significado al dato. Conocimiento: Aade propsito y capacidad a la informacin. Potencial para generar acciones.

Introduccion la Programacin Magister Oscar R. BRUNO

Problema
Enunciado con una incgnita, la solucin es encontrar el valor de esa incgnita. Problema computacional o algortmico: tarea ejecutada por una computadora con una especificacin precisa de los datos de entrada y de los resultados requeridos en funcion de estos.
Introduccion la Programacin Magister Oscar R. BRUNO

Clase de problemas
No computables: No existe un algoritmo. Computables
Tratables: Existe un algoritmo eficiente. Intratable: No existe algoritmo eficiente.

Un problema intratable puede convertirse en tratable si se encuentra un algoritmo que lo resuelva.


Introduccion la Programacin Magister Oscar R. BRUNO

Especificacin Implementacin
Especificacin: Es el proceso de analizar los problemas del mundo real y determinar en forma clara y concreta el objetivo que se desea alcanzar. El modelo debe ser interpretado sin errores por un autmata. Implementacin: Traducir a un conjunto de instrucciones permitidas y definidas por sus reglas sintcticas y valor semntico lo que fue especificado.
Introduccion la Programacin Magister Oscar R. BRUNO

Variables Constantes
Variables: Denotan una magnitud o indicador del proceso. Se caracteriza por un nombre, un tipo de dato y el valor que tiene en un momento determinado. Utilizadas para los datos de entrada, intermedios y de salida. Constante: Nombre asociado a un valor que permanece sin modificacin durante todo el proceso
Introduccion la Programacin Magister Oscar R. BRUNO

Tipos de Datos
Identifica o determina un dominio de valores y el conjunto de operaciones aplicables sobre esos valores. Primitivos. Derivados. Abstractos. Concordancia entre valores y operaciones. Baca la vuela Errores sintacticos, errores gramaticales La vaca vuela Error de concordancia entre objeto vaca y operacin volar
Introduccion la Programacin Magister Oscar R. BRUNO

Expresiones Sentencias Lxico


Expresiones: secuencia de operadores y operandos que se reduce a un solo valor. Sentencias: accin produce un efecto, puede ser primitiva o no primitiva. Lxico: Descripcin del conjunto de acciones e informaciones a partir de la cual se expresa el esquema de comportamiento del algoritmo.

Introduccion la Programacin Magister Oscar R. BRUNO

Pasos para resolver un algoritmo


1.
2.

3.

Comprender el problema. Identificar informacin y acciones a incluir en el lexico (constantes, tipos, variables y acciones). Encontrar un camino de secuenciar las acciones para obtener el resultado, es decir para alcanzar la postcondicin a partir del estado inicial que cumple con la precondicin.
Introduccion la Programacin Magister Oscar R. BRUNO

Acciones primitivas y derivadas


Acciones primitivas: Incorporadas por el lenguaje. Acciones derivadas: realizadas mediante la combinacion de acciones primitivas con el objeto de desarrollar una tarea en particular. Son complementarias y pueden ser desarrolladas por el programador.
Introduccion la Programacin Magister Oscar R. BRUNO

Acciones primitivas
Asignacion:
De entrada: permite cambiar el valor de una variable. Ya sea en forma interna o a travs de algun dispositivo de entrada. De salida: Permite mostrar el valor de una variable a travs de algun dispositivo de salida.

Introduccion la Programacin Magister Oscar R. BRUNO

Acciones primitivas
Analisis de casos: Permiten especificar la particin del dominio de datos.
Instruccin segn: Especifica la particin en varios subdominios y asocia acciones a cada uno de ellos. Instruccin si entonces si_no: cuando en un anlisis de casos solo se tienen dos.

Introduccion la Programacin Magister Oscar R. BRUNO

Acciones primitivas
Repeticiones: permiten ejecutar una determinada cantidad de veces una accion o conjunto de acciones.
Exactas: se conoce con precisin la cantidad de veces que las acciones se repetiran. No exactas: la finalizacin del ciclo depende de alguna condicin, pueden ser pre o pos condicionales.

Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
PROBLEMA: Dada una temperatura en grados Fahrenheit, escribir un algoritmo que obtenga la temperatura en grados Celsius.
LEXICO {Nombres significativos para identificadores significativos} tempFahrenheit tempCelsius : Real // Contiene el valor que representa la temperatura en F : Real // Contiene el valor que representa la temperatura en C

CERO_ABSOLUTO = -459.58 // Representa el valor del cero absoluto en F ConvertirFahrenheitCelsius : Accion PRE {TempFahrenheit >= CERO_ABSOLUTO} POS {Convierte a Celsius una temp. En Fahrenheid} tempCelsius = (5.0 / 9.0) * (tempFahrenheit 32.0) FIN ConvertirFahrenheitCelsius ALGORITMO Leer (tempFahrenheit) ConvertirFahrenheitCelsius Escribir(La temp. En Celsius es : , tempCelcius) FIN Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
PROBLEMAS no algoritmicos. AA + BB = CBC DONALD + GERALD = ROBERT El papa de Rebeca tiene 5 hijos chacha, cheche, chichi, chuchu, como se llama el otro hijo Un granjero tenia 20 ovejas, todas menos nueve escaparon. Cuantas le quedaron? Una botella de vino cuesta 10 $, el vino vale 9 $ mas que la botella. Cuanto vale cada cosa? Matriz cuadrada impar N*N colocar N2 dgitos sin repetir 8 1 6 3 5 7 4 9 2 2 + 7 118 = 129
Introduccion la Programacin Magister Oscar R. BRUNO

Problemas
Paramo de posibilidades
Meseta aparente sin indicios

Angosto caon de exploracion


Oasis de falsas promesas

Salto del pensamiento


Larga busqueda
Escaso avance aparente Acontecimiento desencadenante Chasquido cognitivo Transfomacion
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo en Pascal
Program Calculo; var notaTeoria, notaPractica, notaFinal : real; begin writeln; writeln('***** Calculo de la nota final*****'); write('Nota de teoria: '); readln(notaTeoria); write('Nota de practicas: '); notaFinal := (notaTeoria + notaPractica) / 2;

write('La nota final es: , notaFinal:5:2); readln


end.
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo en C
#include <stdio.h> #include <conio.h> int main () { float notaTeoria, notaPractica; float notaFinal; printf(" Calculo de la nota final de una asignatura\n"); printf("Nota de teoria: "); scanf(" %f",&notaTeoria); printf("Nota de practicas: "); scanf(" %f",&notaPractica); notaFinal = (notaTeoria + notaPractica)// 2. 0; printf("La nota final es: %.2f\n", notaFinal); printf("\nPulse enter para continuar"); getchar(); return 0;

}
Introduccion la Programacin Magister Oscar R. BRUNO

Bibliografa
Behrouz Forouzan. Introduccin a la ciencia de la computacin. 2005. Ciencias e Ingenieria. De Giusti. Algoritmos datos y programas. 2001. Prentice Hall Garcia Molina. Una introduccin a la programacin. 2005. Thomson. Kernighan - Ritchie. El lenguaje de programacion C. 1988. Pearson Kerighan Pike. La practica de la programacion. 2000. Pearson Perkins David. La baera de Arquimedes y otras historias del descubrimiento cientifico. Paidos 2004 Iranzo, j. Logica simbolica para informaticos. 2006. Alfaomega. Perez M. Matematica discreta y algoritmos. 2005. Answer. Material didactico disponible en la red

Introduccion la Programacin Magister Oscar R. BRUNO

Contenido Clase 2
Analisis de casos
Instruccin SEGUN Instruccin SI ENTONCES SI_NO

Acciones y funciones
Sin parametros Con parametros

Parametros actuales y formales Parametros valor y variables

Introduccion la Programacin Magister Oscar R. BRUNO

Composicion secuencial
Tecnica de descomposicion algoritmica que disminuye la complejidad de un problema mediante la division en probemas mas pequeos, cuya solucion se puede abordar en forma independiente y la secuenciacion parcial permite alcanzar la solucion final.
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
PROBLEMA: Dada una temperatura en grados Fahrenheit, escribir un algoritmo que obtenga la temperatura en grados Celsius.
LEXICO {Nombres significativos para identificadores significativos} tempFahrenheit tempCelsius : Real // Contiene el valor que representa la temperatura en F : Real // Contiene el valor que representa la temperatura en C

CERO_ABSOLUTO = -459.58 // Representa el valor del cero absoluto en F ConvertirFahrenheitCelsius : Accion PRE {TempFahrenheit >= CERO_ABSOLUTO} POS {Convierte a Celsius una temp. En Fahrenheid} tempCelsius = (5.0 / 9.0) * (tempFahrenheit 32.0) FIN ConvertirFahrenheitCelsius ALGORITMO Leer (tempFahrenheit); ConvertirFahrenheitCelsius; Escribir(La temp. En Celsius es : , tempCelcius); FIN Introduccion la Programacin Magister Oscar R. BRUNO

Analisis de casos
Consiste en descomponer el dominio de los datos en varios subdominios o casos y asociar a cada uno de ellos con una o mas acciones. Cada caso es especificado mediante expresiones logicas mutuamente excluyentes y la union de los casos debe cubrir el dominio inicial de los datos.
Introduccion la Programacin Magister Oscar R. BRUNO

Analisis de casos
Los estados iniciales de cada caso deben cubrir el dominio de los datos de entrada. Debe existir un caso para cualquier posible entrada. Las condiciones de cada caso deben ser mutumente excluyentes.

Introduccion la Programacin Magister Oscar R. BRUNO

Analisis de casos
Ejemplo de posibles descomposiciones de valores entre 1 y 10

1. 0 <= N < 5

2. 0 <= N<=5
3. 0 <= N < 5

5<=N < 7 5<=N<=7 5<N<7

7<=N<=10 7<=N<=10 7 <N<=10

Introduccion la Programacin Magister Oscar R. BRUNO

Instruccin segun
Especifica la particion del dominio de datos en varios subdominios y asocia acciones a cada uno de ellos. SEGN c1 ... cn e1 : a1

SEGN c1 ... cn e1 : a1 e2 : a2 ... en : an EN_OTRO_CASO : an+1


Introduccion la Programacin Magister Oscar R. BRUNO

e2 : a2
... en : an FIN_SEGUN

FIN_SEGUN

PROBLEMA: Desarrollar un programa que simule una calculadoa simple. Que ingrese dos oprandos y un operador. Segn el operador que muestre la suma, resta, multiplicacion o division.

LEXICO Operando1, Operando2 : Entero; Operador : Carcter;

ALGORITMO
Leer (Operando1, Operando2, Operador); SEGN Operador

Operador = + : Escribir (Operando1 + Operando2)


Operador = - : Escribir (Operando1 - Operando2) Operador = * : Escribir (Operando1 * Operando2) Operador = / : Escribir (Operando1 Div Operando2) FIN_SEGUN FIN
Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA: Desarrollar un programa que simule una calculadoa simple. Que ingrese dos oprandos y un operador. Segn el operador que muestre la suma, resta, multiplicacion o division.

LEXICO Operando1, Operando2 : Entero; Operador : Carcter;

ALGORITMO
Leer (Operando1, Oprando, Operador); SEGN Operador

Operador = + : Escribir (Operando1 + Operando2)


Operador = - : Escribir (Operando1 - Operando2) Operador = * : Escribir (Operando1 * Operando2) Operador = / : Escribir (Operando1 Div Operando2) EN_OTRO_CASO : Escribir(Operador no valido) FIN_SEGUN FIN
Introduccion la Programacin Magister Oscar R. BRUNO

Instruccin SI ENTONCES SI_NO


Cuando el analisis de casos solo tiene 2 casos, la instruccin segn se puede simplificar con la instruccin
SI exp ENTONCES a1 SI_NO a2 FIN_SI Si exp ENTONCES a1 FIN_SI

Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA: Obtener el mayor de dos numeros

LEXICO x, z, mayor : Entero; ALGORITMO PRE { ( x = X) y ( z = Z)} POST { (( x>=z) (Mayor = X)) y ((z>x)(Mayor=Z)) } Leer (x, z);

SI x >= z
ENTONCES Mayor x SI_NO Mayor z;

FIN_SI
Escribir(`El mayor es : ,mayor); FIN
Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA: Obtener el mayor de dos numeros

LEXICO x, z, mayor : Entero; Operador : Carcter;

ALGORITMO
PRE { ( x = X) y ( z = Z)} POST { (( x>=z) ->(Mayor = X)) y ((z>x)(Mayor=Z)) }

Leer (x, z);


Mayor x; SI z >= Mayor ENTONCES Mayor z FIN_SI Escribir(`El mayor es : ,mayor); FIN
Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA: Comprobar si una fecha es correcta

LEXICO dia, mes, ao : Entero >0 ; EsBisiesto, FechaValida : Booleano ; AoBisiesto : una accion POST {AoBisiesto V si ao es bisiesto F en caso contrario}

ALGORITMO
EsBisiesto (ao Mod 400 = 0) o ((ao Mod = 0)y(ao mod 100<>0)) FIN AoBisiesto

Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO Leer (dia, mes, ao);

SI (dia < 1 )
ENTONCES FechaValida Falso SI_NO SEGN mes

mes = 1,3,5,7,8,10,12 : FechaValida dia <= 31


mes = 4,6,9,11 mes = 2 EN_OTRO_CASO : FechaValida dia <= 30 : AoBisiesto; FechaValida dia <=28 o (AoBisiesto y dia<=29) : FechaValida Falso

FIN_SEGUN
FIN_SI Escribir (La fecha , dia, /, mes,/.ao, : ); SI FechaValida

ENTONCES Escribir (Es Valida)


SI_NO Escribir(No es valida) FIN_SI
Introduccion la Programacin Magister Oscar R. BRUNO

FIN

Ejercicios
Escriba algoritmos que : 1. Dado un peso en libras calcularlo en Kg. 1 libra = 0.453952 Kg. 2. Dado un numero binario de 4 digitos imprima su valor en base 10. 3. Dado un numero entero en pesos lo desglose segn los billetes legales. 4. Dado un numero entero <= 106 descomponerlo en dd hh mm ss.
Introduccion la Programacin Magister Oscar R. BRUNO

Acciones y Funciones
El concepto de accin est muy ligado al concepto de abstraccin. Se analiza como abstraccin por parametrizacin y abstraccin por especificacin.

Introduccion la Programacin Magister Oscar R. BRUNO

Acciones
El lxico establece el nivel de abstraccin de un algoritmo. Es decir, introduce las variables, las constantes, los tipos de datos y las acciones con que se construye el algoritmo. Ahora se profundizara sobre el estudio de las acciones.
Introduccion la Programacin Magister Oscar R. BRUNO

Utilizacin de acciones
Accin es una secuencia de instrucciones que se identifica por un nombre y que puede ser invocada desde un algoritmo principal o desde otra accin. Una accin debe tener un efecto bien definido, debe ser cohesiva. Entre una accin y el algoritmo que la invoca se debe producir una comunicacin de valores. Los parmetros son el mecanismo que posibilita escribir acciones generales, aplicables a cualquier valor de la entrada, e independientes del lxico del algoritmo.
Introduccion la Programacin Magister Oscar R. BRUNO

CalcularSalarioBruto : una accin

ALGORITMO Leer (salarioBase, antiguedad); CalcularSalarioBruto; CalcularDescuentos; CalcularSalarioNeto; Escribir (El sueldo neto es:, salarioNeto)
FIN

ALGORITMO
numeroQuinquenios = antiguedad DIV 5;

numeroAos = antigedad MOD 5;


pagoQuinquenios = numeroQuinquenios * COMPLEMENTO_QUINQUENIO pagoAos = numeroAos * COMPLEMENTO_AO

salarioBruto = salarioBase + pagoQuinquenios + pagoAos


FIN
Introduccion la Programacin Magister Oscar R. BRUNO

< x, y> P1

P2

P3

P4

Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA:Calcular el permetro de un cuadriltero definido por los cuatro puntos del plano que constituyen sus vrtices

LXICO Coordenada = TIPO Real; Punto = TIPO < X : Coordenada; Y : Coordenada > p1, p2, p3, p4, po, pd : Punto; dist, permetro : Real; Distancia : una accin

PRE { po y pd almacenan dos puntos }


POST { dist es la distancia entre los puntos } ALGORITMO

Dist = RaizCuadrada ( Cuadrado (pd.x po.x) + Cuadrado(pd.y po.y));


FIN
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO Leer (p1, p2, p3, p4) ; perimetro = 0.0 ; // E0 po = p1 ; pd = p2 ; Distancia; permetro = dist; // E1 po = p2 ; pd = p3 ; Distancia; permetro = permetro + dist; Introduccion la Programacin // E2 Magister Oscar R. BRUNO

po = p3 ; pd = p4 ; Distancia; permetro = permetro + dist; // E3 po = p4 ; pd = p1 ; Distancia; permetro = permetro + dist; // Ef : Escribir (El permetro del cuadriltero es: , permetro) FIN
Introduccion la Programacin Magister Oscar R. BRUNO

Parametros
Un parmetro permite la comunicacin entre una accin y el algoritmo que la invoca. A los parmetros que proporcionan un valor de entrada se los llaman Parmetros dato, y a los que, adems de recoger un valor, retornan un resultado, se los llama dato-resultado. Distancia (dato po, pd : punto; datoresultado dist : real) : una accin

Introduccion la Programacin Magister Oscar R. BRUNO

Paso de parametros
Se denomina paso de parmetros al modo en que se establece la comunicacin entre los argumentos pasados a la accin desde el algoritmo y los parmetros de la accin; en la llamada se pasan los datos de entrada, y en el retorno se devuelven los resultados. Cada argumento se liga con el parmetro que ocupa la misma posicin en la declaracin de la accin y ambos deben coincidir en tipo.

Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA:Calcular el permetro de un cuadriltero definido por los cuatro puntos del plano que constituyen sus vrtices Version 2

LXICO Coordenada = TIPO Real; Punto = TIPO < X : Coordenada; Y : Coordenada > p1, p2, p3, p4 : Punto; permetro, d1, d2, d3, d4 : Real; Distancia(dato po, pd : Punto; dato-resultado dist : Real): una accin PRE { po y pd almacenan dos puntos } POST {dist almacena la distancia entre los puntos} ALGORITMO Dist = RaizCuadrada ( Cuadrado (pd.x po.x) + Cuadrado(pd.y po.y)); FIN
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO Leer(p1, p2, p3, p4); Distancia(p1, p2, d1); Distancia(p2, p3, d2); Distancia(p3, p4, d3); Distancia(p4, p1, d4); permetro = d1 + d2 + d3 + d4 Escribir(El permetro del cuadriltero es: , permetro) FIN
Introduccion la Programacin Magister Oscar R. BRUNO

Abstracciones
Abstraccin se refiere a eliminar detalles, como resultado se obtiene un modelo El concepto de accin conjuga dos tcnicas de abstraccin que son la parametrizacin y la especificacin. La parametrizacin es un mecanismo por el cual se generaliza una declaracin para que no sea aplicado a un nico caso, sino que sirva para cualquier valor que pueda tomar cierto parmetro La abstraccin por especificacin es la separacin entre el Qu y el Cmo).
Introduccion la Programacin Magister Oscar R. BRUNO

Beneficios de las acciones


En la actualidad, las clases son los mecanismos mas adecuados para estructurar los programas.. Una accin tiene cuatro propiedades esenciales. Generalidad, Ocultamiento de informacin, Localidad, Modularidad De estas propiedades, se deducen una serie de beneficios: Dominar la complejidad , Evitar repetir cdigo, Mejorar la legibilidad, Facilitar el mantenimiento, Favorecer la correccin y la reutilizacin
Introduccion la Programacin Magister Oscar R. BRUNO

Funciones
Las funciones devuelven un nico valor. La funcin supone extender el conjunto de operadores primitivos. Nombre_funcion (par1 : td1 ; ... ; parn : tdn) : tr : una funcin

Una funcin no debe tener efectos laterales. Es decir, debe limitarse a calcular un valor y no modificar ninguno de los que se describen en el momento de la invocacin. Siempre deben utilizarse dentro de una expresin.
Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA:Calcular el permetro de un cuadriltero definido por los cuatro puntos del plano que constituyen sus vrtices Version 3

LXICO idem anterior Distancia(po, pd : Punto) Real: una funcin ALGORITMO Distancia = RaizCuadrada ( Cuadrado (pd.x po.x) + Cuadrado(pd.y po.y)); FIN ALGORITMO Leer (p1, p2, p3, p4); Perimetro = Distancia (p1, p2) + distancia (p2, p3) + distancia (p3, p4) + distancia (p4, p1) Escribir(El permetro del cuadriltero es:, permetro) FIN
Introduccion la Programacin Magister Oscar R. BRUNO

FUNCION para calcular el Maximo de tres valores

Max2(a, b : Entero) Entero : una funcin ALGORITMO SI a>= b ENTONCES Max2 = a SI_NO

Max2 = b
FIN Max3(a, b ,c: Entero) Entero : una funcin

ALGORITMO
Max3 = Max2(c, Max2(b, a)) FIN
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
PROBLEMAS no algoritmicos. Soluciones propuestas AA + BB = CBC A=9, B=2, C=1 DONALD + GERALD = ROBERT

A 4, B 3, D 5, E 9, G 1, L 8, N 6, O 2, R 7, T 0.
El papa de Rebeca tiene 5 hijos chacha, cheche, chichi, chuchu, como se llama el otro hijo REBECA, lo dice al principio Un granjero tenia 20 ovejas, todas menos nueve escaparon. Cuantas le quedaron?

Quedan 9, no esncesario hacer ninguna cuenta, solo leer correctamente.


Una botella de vino cuesta 10 $, el vino vale 9 $ mas que la botella. Cuanto vale cada cosa? 9.50 y 0.50 Matriz cuadrada impar N*N colocar N2 dgitos sin repetir 8 1 6 3 5 7 4 9 2

2 + 7 118 =

Introduccion la Programacin Oscar 129 Transformar elMagister + en un 4 R. BRUNO

Contenido Clase 3
Iteracin
Composicion MIENTRAS Composicion REPETIR Composicion PARA Composicion ITERAR

Concepto de secuencia Concepto de invariante Coincepto de recursion


Introduccion la Programacin Magister Oscar R. BRUNO

Mquina de acceso secuencial


Una secuencia es una coleccin de elementos del mismo tipo. Pueden representarse de diferentes formas. Para acceder al elemento de la posicin p, hay que recorrer los p-1 elementos anteriores. El recorrido termina cuando se alcanza la marca de fin de secuencia.
Introduccion la Programacin Magister Oscar R. BRUNO

Primitivas para el acceso secuencial


Nombre_Tipo = TIPO Secuencia de Tipo_Base SC = TIPO Secuencia de Carcter SR = TIPO Secuencia de Real

Comenzar (S), Avanzar (S), EA (S), Crear(S), Registrar (S, e), Marcar (S)
Introduccion la Programacin Magister Oscar R. BRUNO

PROBLEMA: Dada una secuencia con solo ceros y unos, calcular el nmero de ceros y unos que contiene. LXICO S: Secuencia de carcter; NumCeros, NumUnos : Entero;

ALGORITMO
NumCeros = 0; NumUnos = 0; Comenzar (S); MIENTRAS EA (S) < > MarcaFin HACER SI EA (S) = 0 ENTONCES numCeros = numCeros + 1 SI_NO numUnos = numUnos + 1 FIN_SI;

AVANZAR (S)
FIN_MIENTRAS; Escribir(Ceros = , numCeros,unos = , numUnos) FIN
Introduccion la Programacin Magister Oscar R. BRUNO

Componentes de una iteracin


Inicializacin: instrucciones que se ejecutan para inicializar las variables que participan de la iteracin. Condicin de terminacin: expresin booleana que determina cuando acaba la iteracin. Cuerpo: conjunto de instrucciones que se ejecutan mientras no se cumple la condicin de terminacin. Finalizacin: conjunto de instrucciones que deben ejecutarse cuando la iteracin termina.
Introduccion la Programacin Magister Oscar R. BRUNO

Composiciones iterativas condicionales


Se presentan tres composiciones iterativas en las que la finalizacin viene determinada por una condicin. Estas son la composicin MIENTRAS, REPETIR, ITERAR. Lo que las diferencia es el lugar donde se comprueba la condicin: al principio, al final, en un punto intermedio del ciclo. Y tambin si es una condicin de terminacin o de continuacin.
Introduccion la Programacin Magister Oscar R. BRUNO

Diseo iterativo: nocin de invariante


El invariante de un ciclo, INV, es una condicin que se cumple al inicio y a cada paso de la iteracin. Cuando finaliza la iteracin, el hecho de que se satisfaga el invariante y la condicin de terminacin implica que se alcanz la solucin.
Introduccion la Programacin Magister Oscar R. BRUNO

Pasos para una solucion iterativa


Dada una especificacin de un problema de recorrido de secuencias, la estrategia de una solucin iterativa consta de los siguientes pasos: 1. Identificar qu variables son necesarias a partir de la poscondicin. 2. Establecer el invariante del ciclo. 3. Aplicar un razonamiento inductivo. 4. Escribir el algoritmo iterativo.
Introduccion la Programacin Magister Oscar R. BRUNO

Composicion MIENTRAS Esquema General


Aini; //E0 MIENTRAS Cc HACER //Ek Acuerpo //Ek+1 FIN_MIENTRAS; //En Afin
Introduccion la Programacin Magister Oscar R. BRUNO

EJERCICIO
Dado un conjunto de valores enteros, calcular e imprimir : promedio de los valores positivos, sumatoria de negativos. El lote termina cuando se ingresa un valor cero.

Introduccion la Programacin Magister Oscar R. BRUNO

LEXICO SumaPos, CanPos, SumaNeg, Numero : Entero; ALGORITMO SumaPos 0; CanPos 0; SumNeg 0; Leer(Numero); MIENTRAS Numero <> 0 HACER SI Numero > 0 ENTONCES Inc(CanPos); SumaPos = SumaPos + Numero; SI_NO SumaNeg = SumaNeg + Numero FIN_SI FIN_MIENTRAS; Escribir(SumaPos, SumaNeg); FIN.
Introduccion la Programacin Magister Oscar R. BRUNO

Otros Ejemplos
Escriba algoritmos que : 1. Dado un numero entero en pesos lo desglose segn los billetes legales. 2. Dado un numero entero <= 106 descomponerlo en dd hh mm ss.

Introduccion la Programacin Magister Oscar R. BRUNO

LEXICO B100, B50, B20, B10, B5, B2, Monedas, Num : Entero; MAXIMO = 65000; Leer(Num) MIENTRAS Numero > 0 HACER
SEGN Num Num 100 .. MAXIMO : B100Num Div 100; NumNum B100*100; Num 50 .. 99 : B50Num Div 50; NumNum B50*50; Num 20 .. 49 : B20Num Div 20; NumNum B20*20; Num 10 .. 19 : B10Num Div 10; NumNum B10*10; Num 5 .. 9 : B5Num Div 5; NumNum B5*5; Num 2 .. 4 : B2Num Div 2; NumNum B2*2; Num 1 : Monedas = 1; Num = 0;

FIN_SEGUN FIN_MIENTRAS
Introduccion la Programacin Magister Oscar R. BRUNO

LEXICO DD, HH, MM, SS; Num : Entero; MAXIMO = 1000000; Leer(Num) MIENTRAS Numero > 0 HACER
SEGN Num Num 86400..MAXIMO Num 3600..86399 Num 60.. 3599 Num 1 .. 59 : DDNum Div 86400; NumNum DD*86400; : HHNum Div 3600; NumNum HH*3600; : MMNum Div 60; NumNum MM*60; : SS = Num; Num = 0;

FIN_SEGUN FIN_MIENTRAS

Introduccion la Programacin Magister Oscar R. BRUNO

Otras Composiciones Iterativas Condicionales


Composicin REPETIR REPETIR S HASTA_QUE COND Composicin ITERAR ITERAR S1 DETENER: cond S2 FIN_ITERAR Introduccion la

Programacin Magister Oscar R. BRUNO

Composicion PARA
Permite expresar el numero de veces que se ejecuta el cuerpo del ciclo. Este numero esta expresado por el recorrido de un intervalo de valores de tipo ordinal.

Introduccion la Programacin Magister Oscar R. BRUNO

Composicion PARA Esquema General


PARA i [j,n]HACER S FIN_PARA;
PARA i [n,j](-)HACER S FIN_PARA;
Introduccion la Programacin Magister Oscar R. BRUNO

I es un ordinal, j y n representan el valor inicial y final del intervalo. CR = n i + 1

PROBLEMA:Calcular Valor medio de una secuencia de numeros

LXICO S : Secuencia de Real; Suma : Real; NumElem : Entero; ALGORITMO Comenzar (S);

Suma = 0;
NumElem = 0; //Eini : suma = 0 y numElem = 0 y ea = Primero (S) y INV = verdadero

Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO MIENTRAS EA (S) < > MarcaFin HACER suma = suma + EA (S) numElem = numElem + 1 Avanzar (S) FIN_MIENTRAS; //Efin : INV y (EA (S) = MarcaFin) SI numElem > 0 ENTONCES Escribir(Valor medio de las notas = , suma/num) SI_NO Escribir(Secuencia Vaca) FIN_SI FIN
Introduccion la Programacin Magister Oscar R. BRUNO

EJERCICIOS
Dado un conjunto de valores enteros, calcular e imprimir : cuantos valores cero hubo, promedio de los valores positivos, sumatoria de negativos Resolver el problema para : 100 valores enteros. N valores, N debe ser ledo previamente. El conjunto termina con un valor igual al anterior. Se dan N valores, pero el proceso deber finalizar si se procesan todos los valores o la cantidad de ceros supera a cuatro.
Introduccion la Programacin Magister Oscar R. BRUNO

Ejercicios
Dado un conjunto de tringulos representados por sus lados L1, L2 y L3 que finaliza con un tringulo con un lado nulo, determinar e imprimir la cantidad de tringulos equilteros, issceles y escalenos. Dados dos valores N y M determinar e imprimir cuantos mltiplos de M hay dentro del conjunto 1 a N. Dados dos valores enteros A y B determinar e imprimir el producto de ambos obtenido por sumas sucesivas. Dado un valor M, determinar e imprimir los M primeros mltiplos de 3 que no lo sean de 5, Introduccion la Programacin dentro del conjunto de nmeros naturales. Magister Oscar R. BRUNO

Trabajo Practico obligtorio


TP1

Ejercicios 2, 3, 10, 11 y 12 Ejercicios 2, 3 y 5 Ejercicios 1, 3, 4, 6 y 8 Ejercicios 8, 9, 10 y 11

TP2

TP3

TP4

La presentacin ser individual, utilizando la notacin algoritmica desarrollada en el curso, debe incluir: Caratula con datos del estudiante y fecha presentacion Enunciado, Lexico y algoritmo.
Introduccion la Programacin Debe enviarse via a correo electronico y antes de la ultima clase. Magister Oscar R. BRUNO

Recursividad
Una funcion con sentencias entre las cuales se encuentra una llamada a si misma se dice que es recursiva. Divide el problema original en subproblemas mas pequeos. Cuando es lo suficientemente chico se resuelve directamente y se combinan soluciones del subproblema hasta que queda resuelto el problema.
Introduccion la Programacin Magister Oscar R. BRUNO

Requerimientos
El flujo de controlde una funcion recursiva requiere tres condiciones para una terminacion normal: 1 Un test para detener o continuar con la recursion. 2 una llamada recursiva para continuar la recursion 3 un caso base para terminar la recursion
Introduccion la Programacin Magister Oscar R. BRUNO

A tener en cuenta
Define el problema en terminos de un problema mas simple de la misma naturaleza. Debe disminuir el espacio del problema en cada llamada recursiva Hay una instancia particular que se conoce como caso base o caso degenerado
Introduccion la Programacin Magister Oscar R. BRUNO

Iteracion vs Recursion
Considerar solucion recursiva solo si una solucion iterativa sencilla no es posible. Solo utilice recursividad dentro de limites aceptables de ejecucion y uso de memoria. Si son posibles las soluciones iterativas y recursivas esta ultima requerira mas tiempo y mas recursos de memoria. En ciertos problemas la recursion produce soluciones mas simples de leer. Los beneficios de la claridad compensan el costo extra Ambas implican repeticion. iteracion explicitamente y recursion con llamadas repetidas. Ambas consideran un test de salida. Iteracion en la condicion, recursividad en el caso base
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
Factorial (dato N : Entero) Entero : Funcion ALGORITMO SI N = 0 Entonces Factorial = 1 SI_NO Factorial = N * Factorial (N 1) FIN_SI FIN.
Introduccion la Programacin Magister Oscar R. BRUNO

Contenido Clase 4
Estructuras
Registros Listas Tablas Archivos

Introduccion la Programacin Magister Oscar R. BRUNO

Datos de tipo estructurado


Hemos trabajado con tipos que definen un dominio de valores simples o atomico. Datos de tipo estructurado.
Compuestos por mas de un dato. Divisible en datos mas elementales. Unico nombre para todo el conjunto. Acceso directo a cada miembro del conjunto.

Introduccion la Programacin Magister Oscar R. BRUNO

Tipo Registro
Compuesto por una enumeracion de otros valores de tipo ya definidos. El termino campo refire a cada elemento del registro. El operador de acceso a cada miembro es el operador . (punto). NombreEstructura.NombreCampo. La cardinalidad de un tipo es el numero de valores de su dominio.
Introduccion la Programacin Magister Oscar R. BRUNO

Definicion de tipos
LEXICO NombreDelTipo = TIPO <c1 : Td1; c2 : Td2; ............. cn : tdn >; Punto = TIPO <abs: Real ; ord: Real>
Introduccion la Programacin Magister Oscar R. BRUNO

Asignacin
Interna:
Campo campo Estructura completa (de igual tipo);

Externa

De entrada - salida
Campo a campo (dispositivo std) Estructura completa (otro dispositivo)

Introduccion la Programacin Magister Oscar R. BRUNO

Tablas
Los lenguajes de programacion usan el termino array para referirse a tablas. Permite almacenar coleccin de valores y asociar un indice a cada valor almacenado. Es posible el acceso indexado. Son posiciones contiguas de datos homogeneos y de tamao fijo. El operador de acceso es [ ]. Cada subordinacion incrementa la dimension. Tamao logico y fisico.
Introduccion la Programacin Magister Oscar R. BRUNO

Declaraciones
NombreTipo = TIPO Tabla [li, lf] de TipoBase TVR = TIPO Tabla [1, 100] de Real La variacion del indice determina la cantidad de elementos, el tipoBase de que tipo es cada componente. TR = TIPO <absc : Real; ord : Real> TVR = TIPO tabla [1, 50] de TR Tabla : TVR
Introduccion la Programacin Magister Oscar R. BRUNO

Operaciones basicas
Asignacion

Interna (por elemento o por estructura) Externa de entrada o salida

Por elemento Por estructura completa

Acceso directo Recorrido Busqueda Secuencial Binaria Directa Ordenamiento


Introduccion la Programacin Magister Oscar R. BRUNO

ESQUEMA DE RECORRIDO
PARA i [li, ls] HACER // INV = V f(i) FIN_PARA

Introduccion la Programacin Magister Oscar R. BRUNO

Tablas vs Registros
Registro permite agrupar datos no homogeneos, la tabla homogeneos. Las tablas permiten el acceo directo a sus miembros por un indice y los registros por el operador punto. En un registro el numero de miembros lo de sus campos en una tabla el intervalo de los indices.
Introduccion la Programacin Magister Oscar R. BRUNO

Ingresar un valor N (< 25). Generar un arreglo de N componentes en el cual las mismas contengan los primeros nmeros naturales pares e imprimirlo. Ingresar un valor entero N (< 30) y a continuacin un conjunto de N elementos. Si el ltimo elemento del conjunto tiene un valor menor que 10 imprimir los negativos y en caso contrario los dems. Ingresar un valor entero N (< 25). A continuacin ingresar un conjunto VEC de N componentes. Si la suma de las componentes resulta mayor que cero imprimir las de ndice par, sino las de ndice impar. Introduccion la Programacin
Magister Oscar R. BRUNO

Ejercicios

Tablas Multidimensionales
Si una tabla representa una funcion de un argumento las tablas multidimensionales representan una funcion de n argumentos, uno por cada dimension. Se utilizan para representar colecciones de objetos de la misma naturaleza a los que se puede acceder mediante un conjunto de indices. La nocion matematica de matriz se puede representar mediante un atabla de dos dimensiones. Introduccion la Programacin
Magister Oscar R. BRUNO

Declaraciones
NombreTipo = TIPO Tabla [fi, fj; ck,cl] de TipoBase TTR = TIPO Tabla [1, 100; 1,10] de Real El producto del intervalo de sus indices determina la cantidad de elementos, el tipoBase de que tipo es cada componente. El tipo puede ser primitivo o derivado.
Introduccion la Programacin Magister Oscar R. BRUNO

ESQUEMA DE RECORRIDO
INV = T PARA i [1, nfilas] HACER INV = T A = f(fila(i)) PARA j [1, ncol] HACER INV = T A = f(fila(i),col(j) FIN_PARA FIN_PARA Introduccion la Programacin
Magister Oscar R. BRUNO

Ejercicios
Ingresar dos valores, M = 30 y N = 25. A continuacin por filas todos los componentes de una matriz MATRIZA de M filas y N columnas. Desarrollar un programa que: Imprima la matriz MATRIZA por columnas. Calcule e imprima el valor promedio de los componentes de la matriz. Genere e imprima un vector VECMAXFIL donde cada componente sea el valor mximo de cada fila.
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
LEXICO FILAS = 30; COLUMNAS = 25; TVM = TIPO Tabla [1, COLUMNAS] de Entero // Vector de maximos TME = TIPO Tabla [1, FILAS; 1,COLUMNAS] de Entero; MATRIZA : TME; VECMAXFIL : TVM; Promedio : Real; CargarMatrizPorFila(Dato Resultado Matriz : TME) : una accion LEXICO i , j : Entero; ALGORITMO PARA i[1,FILAS] HACER PARA j[1,COLUMNAS] HACER Leer(Matriz[i, j]; FIN_PARA FIN_PARA Introduccion la Programacin FIN //accion CargarMatrizPorFila
Magister Oscar R. BRUNO

ImprimirMatrizPorColumna(Dato Matriz : TME) : una accion LEXICO i , j : Entero; ALGORITMO PARA i[1,COLUMNAS HACER PARA j[1,FILAS] HACER Escribir(Matriz[i, j]; FIN_PARA FIN_PARA FIN //accion ImprimirMatrizPorColumna CalcularImprimirPromedio(Dato Matriz : TME) : una accion LEXICO i , j , Total : Entero; ALGORITMO Total = 0; PARA i[1,COLUMNAS HACER PARA j[1,FILAS] HACER Total = Total + Matriz[i, j] ; FIN_PARA FIN_PARA Escribir (El pomedio es : ,Total / Columnas / Filas FIN //accion ImprimirMatrizPorColumna
Introduccion la Programacin Magister Oscar R. BRUNO

CargarVectorMaxFil(Dato Resultado Vector : TVM; Dato Matriz:TME) : una accion LEXICO i , j, : Entero; ALGORITMO PARA i[1,COLUMNAS] HACER Vector[i] = Matriz[i, 1]; PARA j[2,FILAS] HACER SI Matriz[i, j] > Vector[i] ENTONCES Vector[i] = Matriz[i, j] FIN_SI FIN_PARA FIN_PARA FIN //accion CargarVectorMaxFil

Introduccion la Programacin Magister Oscar R. BRUNO

MostrarVectorMaxFil(Dato Vector : TVM) : una accion LEXICO i : Entero; ALGORITMO PARA i[1,COLUMNAS] HACER Escribir(Fila : , i,Valor maximo : ,Vector[i]); FIN_PARA //accion MostrarVectorMaxFil

ALGORITMO // Algoritmo principal CargarMatrizPorFila(MATRIZA); ImprimirMatrizPorColumna(MATRIZA); CalcularImprimirPromedio(MATRIZA); CargarVectorMaxFil(MATRIZA, VECMAXFIL); MostrarVectorMaxFil(VECMAXFIL); Introduccion la Programacin FIN
Magister Oscar R. BRUNO

Ejercicios
Ingresar un valor N = 20 y luego por filas una matriz cuadrada CUADRA de N filas y columnas. Desarrollar un programa que determine e imprima: Todos los elementos de la diagonal principal o secundaria segn de cual resulte mayor la sumatoria de elementos. Los elementos del cuarto (N/2 filas y N/2 columnas) cuya sumatoria resulte mayor (considerando que N es par). Los elementos de la triangular superior o inferior dependiendo de cual tenga mayor sumatoria de elementos.
Introduccion la Programacin Magister Oscar R. BRUNO

ARCHIVOS
Coleccin de datos almacenada en unidad externa, por ejemplo disco que se asocia con un nombre. Puede ser de texto o binario. El acceso puede ser secuencial o indexado.

Introduccion la Programacin Magister Oscar R. BRUNO

Operaciones con archivos


Asignar(a,s) Abrir(a) Crear(a) Cerrar(a) Leer(a,d) Escribir(a,d) CantElemntos(a) PosActual(a) FinArchivo(a) Acceder(a,p)Introduccion la Programacin
Magister Oscar R. BRUNO

Contenido Clase 5
Algoritmos puntuales
Recorridos. Busquedas. Ordenamientos.

Introduccion la Programacin Magister Oscar R. BRUNO

Definiciones de tipos
MAX_FIL Tinfo TinfoC TVector Tinfo; = 100; = TIPO Entero; = TIPO <C1 : Td1, C2 : Td2> = TIPO Tabla [1,MAX_FIL] de

Introduccion la Programacin Magister Oscar R. BRUNO

Busqueda Secuencial
BusqSecEnVector(Dato V: Tvector; Dato N: Entero; Dato Clave:Tinfo; Dato_resultado Posic: Entero): una acccion LEXICO Pre: V: Vector en el que se debe buscar Clave : Valor Buscado N : Tamao logico del vector Pos:Posic: Posicion donde se encuentra la clave, 0 ( Cero) si no esta. j : Entero;
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO Posic = 0; J = 1; MIENTRAS (j <= MAX_FIL y j <= N y V[j] <> Clave) HACER Inc (j) FIN_MIENTRAS; SI (j > N) ENTONCES Posic =0 // No encontro la clave buscada SI_NO Posic = j // Encontro la clave en la posicion de indice j FIN_SI; FIN. // Busqueda secuencial En Vector
Introduccion la Programacin Magister Oscar R. BRUNO

Buscar Mximo
BusqMaxEnVector(Dato V: Tvector; Dato N: Entero; Dato_resultado Maximo :Tinfo; Dato_resultado Posic: Entero): una acccion LEXICO Pre: V: Vector en el que se debe buscar N : Tamao logico del vector Pos: Posic: Posicion donde se encuentra el Maximo : Valor maximo del vector. j : Entero;
Introduccion la Programacin Magister Oscar R. BRUNO

maximo

ALGORITMO Posic = 1; Maximo = V[1]; PARA j [2, MAX_FIL] HACER SI (v[j] > Maximo) ENTONCES Posic = j; Maximo = v[j]; FIN_SI; FIN_PARA; FIN. // Busqueda maximo En Vector
Introduccion la Programacin Magister Oscar R. BRUNO

Carga sin Repeticion


CargaSinRepetirEnVectorV1(Dato_Resultado V: Tvector; Dato_Resultado N: Entero; Dato Clave:Tinfo; Dato_resultado Posic: Entero; Dato_resultado Enc : Booleano): una acccion
LEXICO Pre: V: Vector en el que se debe buscar Clave : Valor Buscado N : Tamao logico del vector Pos: Posic: Posicion donde se encuentra la clave, o donde lo inserta si no esta. Retorna 0 (cero) en caso que el vector esta completo y no encuentra el valor buscado Enc : Retorna True si estaba y False si lo inserto con esta invocacion Carga vector sin orden

LEXICO j : Entero;

Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO Posic = 0; J = 1; MIENTRAS (j <= MAX_FIL y j <= N y V[j] <> Clave) HACER Inc (j) FIN_MIENTRAS; SI j > MAX_FIL ENTONCES Posic = 0 SI_NO Posic = j: SI (j > N) ENTONCES Enc =FALSE; // No encontro la clave buscada Inc(N); V[N] = Clave; SI_NO Enc = True // Encontro la clave en la posicion de indice j FIN_SI; FIN_SI Introduccion la Programacin FIN. // Carga sin repetir en vector Magister Oscar R. BRUNO

Busqueda Binaria
BusquedaBinariaEnVectorV1(Dato V: Tvector; Dato N: Entero; Dato Clave:Tinfo; Dato_resultado Posic: Entero; Dato_resultado Pri : Entero): una acccion LEXICO
Pre: V: Vector en el que se debe buscar con clave sin repetir Clave : Valor Buscado N : Tamao logico del vector Pos: Posic: Posicion donde se encuentra la clave, o 0 (cero) si no esta Pri : Retorna la posicion del limite inferior J,u,m : Entero;
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO Posic = 0; Pri = 1; U = N; MIENTRAS (Pri < = U y Pos = 0) HACER M = (Pri + U ) div 2 SI V[M] = Clave ENTONCES Posic = M; SI_NO SI Clave > V[M] ENTONCES Pri = M+1 SI_NO U=M1 FIN_SI FIN_SI FIN_MIENTRAS; FIN. // Busqueda binaria en vector
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO // Version con clave repetida 1ra ocurrencia de la clave Posic = 0; Pri = 1; U = N; MIENTRAS (Pri < U ) HACER M = (Pri + U ) div 2 SI V[M] = Clave ENTONCES Posic = M; U = M; SI_NO SI Clave > V[M] ENTONCES Pri = M+1 SI_NO U=M1 FIN_SI FIN_SI FIN_MIENTRAS; FIN. // Busqueda binaria enIntroduccion vector
la Programacin Magister Oscar R. BRUNO

Carga Sin repetir V2


ALGORITMO Enc = True; BusquedaBinariaEnVectorV(V; N; Clave; Posic; Pri) SI (Posic = 0) ENTONCES Enc = False ; Posic = Pri; PARA j [N, Pri](-) HACER V[j+1] = V[j]; FIN_PARA; V[Pri] = Clave; Inc(N); FIN_SI Introduccion la Programacin FIN. // Carga sin repetir con vector ordenado
Magister Oscar R. BRUNO

Ordenamiento Vector
OrdenarVectorBurbuja(Dato_Resultado V: Tvector; Dato N: Entero): una acccion LEXICO Pre: V: Vector en el que se debe ordenar N : Tamao logico del vector Pos: Vector ordenado por clave creciente I,J, : Entero; Aux : Tinfo;
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO // Metodo burbuja PARA i [1, N - 1] HACER PARA j [1, N - i] HACER SI (v[j] > v[j + 1]) ENTONCES Aux = v[j]; V[j] = v[j + 1]; V[j + 1] = Aux; FIN_SI; FIN_PARA; FIN_PARA; FIN
Introduccion la Programacin Magister Oscar R. BRUNO

ALGORITMO // Metodo burbuja mejorado j = 0; REPETIR Inc (j); Ord = True: PARA j [1, N - i] HACER SI (v[j] > v[j + 1]) ENTONCES Aux = v[j];V[j] = v[j + 1]; V[j + 1] = Aux; Ord = False; FIN_SI; FIN_PARA; HASTA_QUE ( J = N 1 o Ord); FIN
Introduccion la Programacin Magister Oscar R. BRUNO

N Mejores
ALGORITMO SI (N < MAX-FIL) ENTONCES Inc (N); V[n] = Clave SI_NO BusqMaxEnVector(V,N, Maximo, Posic); SI (Clave > Maximo) ENTONCES V[Posic] = Clave; FIN_SI; FIN_SI; FIN. // Carga los N mejores en vector
Introduccion la Programacin Magister Oscar R. BRUNO

Ejemplo
LEXICO TVE = TIPO Tabla [1, 100] de Entero; Tabla : TVE; i, N : Entero; ALGORITMO REPETIR // leer tamao logico del vector Leer(N); HASTA_QUE (N > 0 y N <= 25); PARA i[1,N] HACER // Cargar vector hasta tamao logico Tabla[i] = 2 * i; FIN_PARA PARA i[1,N] HACER Escribir(Tabla[i]); //Muestra contenido del vector FIN_PARA Introduccion la Programacin FIN
Magister Oscar R. BRUNO

Volver

También podría gustarte