You are on page 1of 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

: Real // Contiene el valor que representa la temperatura en F

tempCelsius

: 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

: Real // Contiene el valor que representa la temperatura en F

tempCelsius

: 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

Introduccion la Programacin
Magister Oscar R. BRUNO

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

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

SEGN c1 ... cn

e1 : a1

e1 : a1

e2 : a2

e2 : a2

...

...

en : an

en : an

FIN_SEGUN

EN_OTRO_CASO : an+1
FIN_SEGUN

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, 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

: FechaValida dia <= 30

mes = 2

: AoBisiesto; FechaValida dia <=28 o (AoBisiesto y dia<=29)

EN_OTRO_CASO

: 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

FIN

Introduccion la Programacin
Magister Oscar R. BRUNO

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)

ALGORITMO

FIN

salarioBruto = salarioBase +
pagoQuinquenios + pagoAos

numeroQuinquenios = antiguedad
DIV 5;

numeroAos = antigedad MOD 5;


pagoQuinquenios =
numeroQuinquenios *
COMPLEMENTO_QUINQUENIO
pagoAos = numeroAos *
COMPLEMENTO_AO

FIN
Introduccion la Programacin
Magister Oscar R. BRUNO

P2

< x, y>
P1

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
129 Transformar elMagister
+ en unOscar
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

TP2

Ejercicios 2, 3 y 5

TP3

Ejercicios 1, 3, 4, 6 y 8

TP4

Ejercicios 8, 9, 10 y 11

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

Ejercicios

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

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
la Programacin
FIN. // Carga sin repetirIntroduccion
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