Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
INTRODUCCION
1- Analisis del enunciado o especificacion del ambiente: lectura comprensiva del enunciado para
determinar cuales son los datos conocidos (datos de entrada), si faltan datos para resolver el
problema, si hay datos poco claros o ambiguos y ademas determinar los objetivos o resultados del
problema. Tambien se hace un analisis de la relacion existente entre los datos de entrada y los
objetivos para saber si es necesaria mas info que nos permita resolver el problema. El resultado de
esta etapa es modelo simplificado de la realidad y especifica QUE debemos resolver.
2- Diseño del algoritmo: se detallan una a una las acciones que deben llevarse a cabo para resolver el
problema. Dichas acciones deben estar escritas una a continuacion de la otra y en el orden logico en
el que se llevaran a cabo. El conjunto de dichas acciones conforma el algoritmo y constituye COMO
se resuelve el problema.
Llamamos algoritmo al conjunto ordenado y finito de acciones primitivas que resuelven un problema
determinado en un intervalo de tiempo limitado.
Existen diversas tecnicas de diseño de algoritmos, siendo la elegida la tecnica del diseño descendente
o de refinamientos sucesivos o top down. De acuerdo a esta tecnica, dado un problema complejo P,
se lo divide en subproblemas o tareas mas sencillas, y se aplica nuevamente la misma tecnica de
division sobre cada subproblema. Las descomposiciones sucesivas terminan cuando se llega a una
tarea indivisible o accion primitiva y elemental capaz de ser ejecutada por una pc. El conj final de
acciones asi obtenidas constituyen el algoritmo.
Caracteristicas de un algoritmo: FINITO (tener una cantidad limitada de acciones de manera tal de
ejecutarse en un intervalo de tiempo limitado), PRECISO (indicar el orden de ejecucion de sus
acciones), DEFINIDO (siempre que se ejecute debe producir la misma salida).
1
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Paradigma: conjunto de patrones conceptuales que proveen herramientas para analizar problemas y
desarrollas programas. Existen 4 tipos: imperativo, logico, funcional y orientado a objetos. En el
imperativo, el programa es un conjunto de ordenes a la pc. Los programas se desarrollan sobre
computadoras basadas en la arquitectura van neumman, las cuales tienen 3 caracteristicas
fundamentales: los datos se almacenan en memoria, las acciones se ejecutan una a una
consecutivamente, los rdos y los datos se almacenan en memoria a traves de una operación de
asignacion de valor.
Una vez elegido el paradigma se presentan 2 cuestiones a resolver como rdo de las primeras 2 etapas
del proceso de resolucion de problemas:
1- Como representar los datos del problema (obtenidos en la etapa de analisis). Se representan con
estructuras de datos.
2- Como expresar las acciones (obtenidas en la etapa de diseño). Se representan con estructuras de
control.
Conocidas estas 2 herramientas se escribe el algoritmo en pseudocodigo respetando el formato de un
programa.
PARTES DE UN PROGRAMA
2
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
ESTRUCTURAS DE DATOS
RAM: miles de celdas o unidades individuales de almacenamiento. Cada celda ocupa una posicion o
direccion particular de la memoria. Se guardan datos simples, uno por celda. Entre celda y celda lo
unico que las distingue es la posicion que ocupa.
CONSTANTE: es una variable cuyo contenido no puede ser modificado durante la ejecucion de un
programa.
ESTRUCTURAS DE CONTROL
Permiten determinar el orden en que se ejecutan las acciones de un programa (flujo de control). Se
clasifican en secuencia, decision y repeticion. El flujo normal de un programa es el secuencial, que
permite indicar acciones consecutivas que se llevan acabo de a una por vez y en forma sucesiva. Para
modificar el flujo normal se utilizan las estructuras de control de repeticion y de decision.
3
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Las decisiones se clasifican en simples y multiples. En las simples, mediante la evaluacion
de una condicion, se puede elegir entre dos caminos alternativos disjuntos.
SI (condicion) ENTONCES SI (condicion) ENTONCES
accion 1 rama accion1
accion 2 verdadera accion2
------- --------
SI NO FIN SI
accion 3 rama
accion 4 falsa
--------
FIN SI
En la rama verdadera de la decision se escriben 1 o mas acciones validas del lenguaje, que
seran ejecutadas solo en el caso de que la condicion evaluada sea V. Si la condicion es F, se
saltean las acciones de la rama V y se llevan a cabo las de la rama F (que es opcional).
La ejecucion de una rama excluye la ejecucion de la otra, y las acciones especificadas en cada
rama deben ser distintas entre si.
Llamamos decisiones encadenadas cuando aparece una decision dentro de alguna rama
de otra decision.
Decisiones multiples: se utiliza para elegir entre varios caminos alternativos cuando una
variable toma multiples valores distintos, solo se aplica para variables enteras,
booleanas o cadenas de un caracter. La decision multiple se utiliza cuando se tienen 3 o
mas decisiones encadenadas. Tiene una rama verdadera para cada valor posible y la
rama F es opcional. Las acciones de cada rama son distintas y excluyentes entre si. Cuando
evalua las condiciones empieza de la 1º rama hasta la ultima, y si encuentra que se cumple
alguna condicion entra a esa rama, ejecuta las acciones correspondientes y saltea el resto del
caso. Si ninguna condicion se cumple, ejecuta la rama F. Cada rama puede contener una o
mas acciones validas del programa, es decir, dentro de una rama puede haber decisiones
simples y multiples.
CASO (nombre_variable)
(nombre_variable=valor1): accion1
accion2
-----
(nombre_variable=valor2): accion3
accion4
--------
EN OTRO CASO: accion5
------
FIN CASO
Estructuras de repeticion: se utilizan para ejecutar varias veces sucesivas el mismo conjunto
de acciones.
- incondicionales: se utilizan cuando se conoce la cantidad de veces que se repite el
conjunto de acciones. Condiciones: el bucle puede contener una o más acciones validas
(secuencia, decision o repeticiones). La variable de control debe estar declarada y ser de
tipo entera. El valor inicial, final y el paso son valores enteros expresados a traves de
constantes o de variables. La variable de control se encarga de controlar que el bucle se
ejecute un numero de veces determinado, la cantidad de veces que se repite el bucle esta dado
por la formula
4
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
CANT= ENT [(VALORFINAL – VALORINICIAL + PASO) / PASO]
Para la ejecucion de esta instrucción la variable de control se inicializa con el valor inicial
y se ejecuta el cuerpo de la repeticion; al finalizar la ejecucion de dichas acciones la variable de
control se incrementa con el valor del paso y se verifica que este nuevo valor sea menor o igual
que el valor final. Si esto se cumple, repite las acciones del bucle, y asi sucesivamente hasta
alcanzar el valor final establecido.
RP: variable_control:= valor inicial, valor final, paso
accion1 bucle o
accion2 cuerpo de repeticion
---------
FRP
-condicionales: se usan cuando no se conoce la cantidad de veces que deben repetirse las
acciones y es necesario evaluar una condicion para saberlo. Esta debe tener un valor de verdad, es
decir, deben existir acciones previas que le den valor a las variables que aparecen en estas
condiciones. Estas variables pueden contener valores de lectura, contadores, acumuladores,
marcas.
. Precondicional: primero se evalua la condicion. Si la misma es V se
ejecuta el bucle y al finalizar dicha ejecucion se vuelve a testear la
condicion y se sigue repitiendo siempre que esta sea V.
RM (condicion)
accion1
accion2
---------
FRM
.post condicional: primero se ejecuta el bucle y despues se evalua la
condicion, si es F se sigue repitiendo el bucle.
REPETIR
accion1
accion2
--------
HASTA (condicion)
PROGRAMACIÓN MODULAR
Es una metodologia de resolucion de problemas que utiliza como tecnica de diseño de algoritmos los
refinamientos sucesivos, el diseño descendente o top down, que consiste en dividir el problema
general P en subproblemas mas sencillos. La descomposicion o division se vuelve a aplicar sobre
cada subproblema hasta obtener un conjunto de acciones elementales capaces de ser ejecutadas por
una computadora.
Modulo: cada subproblema o subtarea resultante de dicha descomposicion. Cada modulo se resuelve
mediante un subprograma, que es una unidad de programa que ejecuta una tarea especifica. Contiene
las mismas partes que un programa principal: encabezamiento (donde figura su nombre y tipo de
subprograma), zona de declaracion de datos, cuerpo de instrucciones ejecutables (que son las que
llevan a cabo dicha tarea especifica) y un conjunto de comentarios que explican para que sirve el sp.
5
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Un problema resuelto con esta metodoogia consta de un programa principal, que es quien resuelve el
problema original, y un conjunto de subprogramas que resuelven cada modulo.
Diferencias: los sp se diferencian de un pp en su puesta en ejecucion. Para que un sp se ejecute, debe
existir una invocacion desde un programa (esto es un llamado a traves de una instrucción para que un
sp se active). Los sp deben estar declarados y definidos dentro del p y deben ser invocados para su
ejecucion.
Clasificacion:
-procedimientos: unidad de programa que recibe cero o mas datos desde el p llamador y
devuelve cero o mas resultados. Cuando se invoca un procedimiento, el SO detiene la ejecucion
del pp, busca la declaracion del procedimiento, crea en la memoria las variables que este
necesita e inicia su ejecucion. Al terminar retorna el control al pp a partir de la linea siguiente a la
invocacion.
- funciones: unidad de programa que recibe cero o mas datos del p llamador y devuelve
siempre un solo resultado de tipo estandar, guardado en el nombre de la funcion. Cuando se
invoca a una funcion es necesario hacerlo dentro de una expresion logica o aritmetica o en una
impresión, de forma tal de no perder el rdo devuelto. Se detiene la ejecucion del pp del modo
antes explicado, pero el retorno es en la misma linea de la invocacion.
Pasaje de parametros: para que un programa comparta info o datos con un sp, es indispensable
utilizar parametros, que son medios de transferencia de datos entre unidades de programa. Los
parametros se especifican tanto en la invocacion al sp como en el encabezamiento del mismo.
- parametros actuales: se especifican en la invocacion. Son los datos que el pp le envia al sp
para que este los use y/o modifique. Pueden ser constantes, variables o expresiones aritmetico
logicas escritos en la lista separados por comas.
- parametros formales: son las variables en las que el sp recibe y/o devuelve los datos
de/hacia el pp. Se especifica el nombre y tipo de cada uno, separados por punto y coma.
En el momento de la invocacion el SO relaciona univocamente cada PA con su correspondiente PF.
Por esta razon deben coincidir en cantidad, tipo de datos y orden de aparicion.
Clasificacion:
de entrada, cuando solo llevan info al sp pero no traen rdos (P unidireccional)
de salida, cuando solo traen el rdo desde el sp (P unidireccional)
de E-S, cuando llevan datos al sp y lo devuelven modificado como rdo (P bidireccional)
En funcion del tipo de parametro utilizado se determina el pasaje de parametro. Esto es la forma
en que se transfieren los datos. Tipos:
- pasaje por copia: el SO crea en el momento de la invocacion al parametro formal
asignandole como valor el del PA correspondiente. De esta forma el PF es una copia del PA y
todo cambio que se haga sobre el no afecta al PA. Este pasaje se usa para parametros de
E.
- pasaje por referencia: el SO en el momento de la invocacion crea el PF, asignandole como
valor la dir de memo del PA, es decir que el PF se convierte en un puntero o alias del PA. De
esta manera todas las modificaciones que se hacen sobre el PF quedan reflejadas directamente
en el PA correspondiente. Este pasaje se utiliza para P e S y de E-S.
6
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Tiempo de vida: intervalo o lapso de tiempo durante el cual dicha variable esta asignada en la
memo.
Alcance: indica el lugar donde dicha variable puede ser utilizada y es reconocida (donde esta
declarada).
- variables globales: son aquellas declaradas en el PP. Su tiempo de vida comprende
desde la compilacion del PP (momento en que se crean) hasta la finalizacion de la ejecucion
del mismo (momento en que se liberan). Su alcance es en el PP y todos los SP internos
excepto que exista una var local con el mismo nombre, en cuyo caso tiene prioridad de uso la
local.
- variables locales: son aquellas declaradas dentro de un SP, ya sea en la zona de
declaracion o como parametro local. Su tiempo de vida es desde que inicia hasta que termina la
ejecucion del SP. Su alcance es limitado al SP que las declara.
EFECTO LATERAL: modificacion indebida del contenido de una variable global dentro de un
SP, produciendo como consecuencia un valor inesperado o erroneo para dicha variable. Siempre
que se utiliza programacion modular es indispensable intercambiar datos mediante pasaje de
parametros evitando de esta forma producir efectos laterales indeseables.
Nos permiten definir nuevos tipos para representar aquellos objetos de la vida real que no tienen
forma de ser representados mediante los tipos de datos estandar.
Un tipo de dato definido por el usuario se construye como combinacion de datos estandares y/u
otros datos definidos por el usuario. Para definir estos nuevos tipos de datos se utiliza la seccion
de tipos estructurados de la zona de declaracion de un PP. Por cada tipo nuevo se especifica
nombre_tipo=plantilla_o_molde, donde dicho molde detalla la organización y almacenamiento
de los datos correspondientes al nuevo tipo de dato.
ESTRUCTURAS DE DATOS
- lugar de almacenam
de datos: * temporales: RAM. Poco tiempo
* permanentes: memo auxiliar. cd, dvd, etc
7
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
ED compuesta: conjunto de elementos almacenados bajo un nombre unico y generico, con una
cierta org particular.
Homogeneas: conjunto de elementos del mismo tipo de datos, ordenados uno a continuacion del
otro en RAM. Estan almacenados en posiciones consecutivas de la memo, donde a cada elemento
se accede por su posicion dentro del conjunto. Es una ED estatica. Se clasifican en
unidimensionales (vectores), bidimensionales (matrices), tridimensionales (tensores) o
enedimensionales (para n>4), de acuerdo a la cantidad de indices o posiciones que se necesitan
para identificar un elemento.
Operaciones de los arreglos como conjunto:
- inicializacion y carga
- muestra o impresión de contenido
- operación de recorrido (tomar y procesar cada elemento consecutivamente)
- ordenamiento
- busqueda
- intercalacion
VECTORES
Son arreglos a cuyos elementos se accede por un solo indice que es su posicion o ubicación dentro
del conjunto.
Para poder trabajar con un vector es necesario declararlos conociendo la cantidad total de elementos
y de tipos de datos. Llamamos dimension o tamaño del vector a la cantidad total de elementos del
mismo. Para denominar un elemento del vector se utiliza un nombre generico del mismo seguido de
un indice o posicion del elemento encerrado entre parentesis. Dicho indice puede ser una cte o una
variable entera. Las operaciones sobre cada elemento individual de un vector son las ya dadas para
variables simples (asignacion. impresión, operaciones aritmetico-logicas)
Operaciones como conjunto:
- inicializacion: con un RP y una asignacion.
- carga: con un RP, un imprimir y un leer.
- muestra o impresión de contenido: un RP y un imprimir.
- operación de recorrido (tomar y procesar cada elemento consecutivamente)
- ordenamiento
- busqueda
- intercalacion
Declaracion:
Tipos estructurados
VECTOR= ARREGLO (40): real 5,2
Variables:
V: VECTOR
8
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
MATRIZ
Arreglo bidimensional cuyos elementos estan dispuestos en forma de tabla de doble entrada, por lo
cual se los accede por medio de dos indices: un indice de fila o posicion horizontal y un indice de
columna o posicion vertical.
Se almacenan en RAM (estructura temporal), en posiciones consecutivas de la misma. Para utilizar
una matriz debe conocerse la cantidad total de filas y de columnas, que es invariable durante la
ejecucion de un programa. Para referenciar un elemento de una matriz se utiliza el nombre generico
de la misma acompañado del indice de fila y de columna encerrados entre parentesis. La cantidad de
elementos es: cant_filas*cant_columnas.
Operaciones como conjunto:
- inicializacion y carga: con dos RP anidados y una asignacion.
- carga: con dos RP anidados, un imprimir y un leer.
- muestra o impresión de contenido: dos RP y un imprimir.
- operación de recorrido (tomar y procesar cada elemento consecutivamente)
- ordenamiento
- busqueda
- intercalacion
ED HETEROGENEAS
Registros: permite almacenar un conjunto de datos de distinto tipo bajo un nombre unico en
posiciones consecutivas de la memoria y donde a cada elemento se accede por su nombre y no por su
posicion. Los elementos de un registro se denominan campos. Cada campo tiene un nombre y un tipo
de datos, y se lo expresa mediante el nombre generico del registro, seguido de un punto u el nombre
del campo. Todas las operaciones sobre registro se realizan en forma individual sobre cada campo.
No hay limite en cantidad de campos ni en el tipo de datos. Uso tantos calificadores como registros
anidados tenga.
declaracion:
tipos estructurados
reg= registro
cod: entero 3
stock: entero 3
nombre: caracter 30
fin registro
Variables
r1, r2, r3: reg
carga:
leer: R1.cod, R1.stock
9
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
METODOS DE BUSQUEDA
Se utilizan para recuperar informacion sobre conjuntos de datos, y los mismos no proporcionan
informacion sobre existencia, cantidad de apariciones, posiciones o info asociada de un dato
determinado.
Clasificacion:
- secuencial: se puede aplicar sobre cualquier conjunto de datos y consiste en comparar un dato
dado contra cada elemento del conjunto consecutivamente.
* Incondicional: compara cada posicion y sigue hasta el final.
FUNCION BUSQ_INC (V: vector; dato: entero2; N: entero2): booleano
Variables
I: entero 2
HACER
BUSQ_INC:= falso
RP: I:=1,N
SI (V(I)=dato) ENTONCES
BUSQ_INC:= verdadero
FIN SI
FIN RP
FIN HACER
FIN FUNCION
10
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
FUNCION DICO (V: vector; dato: entero2; N: entero2): booleano
VARIABLES
LI, LS, M: entero2
esta: booleano
HACER
LI:=1
LS:=N
esta:= falso
RM (LI≤LS) ^ (esta= falso)
M:= ENT [(LI+LS)/2]
SI ( V(M)= dato) ENTONCES
esta:= verdadero
SI NO
SI ( V(M)<dato) ENTONCES
LI:= M+1
SI NO
LS:= M-1
FIN SI
FIN SI
FIN RM
DICO:= esta
FIN HACER
FIN FUNCION
11
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
METODOS DE ORDENAMIENTO
Se utilizan para clasificar u organizar bajo algun criterio los datos de un conjunto, de manera de
facilitar el proceso de recuperacion.
Clasificacion:
* cantidad de memoria: - usan memo auxiliar
- in situ (sobre el original)
* lugar de residencia
de datos - interno: RAM
- externo: memo auxiliar
* logica - simples: sencillas, lentas
- avanzados: complejas, rapidas, recursivas
- selección, in situ o directo: dado un vector de N elementos, el metodo realiza N-1 recorridos
para ordenarlo. En cada pasada fija una posicion cuyo contenido quiere ordenar y compara dicho
elemento contra todos los elementos posteriores a el, intercambiandolos si los encuentra
desordenados. De esta manera deja los elementos ya ordenados en las primeras posiciones del
vector.
- burbuja: dado un vector de N elementos, el metodo realiza N-1 pasadas para ordenarlo,
utilizando una variable auxiliar como marca para detectar si el conjunto se ordena en menos
pasadas y de esa forma detener su aplicación. En cada pasada compara pares de elementos
consecutivos, intercambiandolos si estan desordenados, de manera de llevar hacia las ultimas
posiciones del vector los elementos ya ordenados. Si en una pasada no intercambia ningun
elemento, usa la marca para detener el proceso.
12
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
aux: entero2 //intercambio de elementos
marca: booleano //controla si el arreglo se ordeno
HACER
I:= 1
marca:= falso //supone vector desordenado, controla N-1 pasadas
RM (I≤N-1) ^ (marca:= falso)
marca:= true
RP: J:= 1, N-1 //compara elem consecutivos
SI [V(J) > V(J+1)] ENTONCES
aux:= V(J)
V(J):= V(J+1)
V(J+1):= aux
marca:= falso //avisa q sigue desordenado
FIN SI
FIN RP
I:= I+1
FIN RM
FIN HACER
FIN PROCEDIMIENTO
- insercion: dado un vector de N elementos, el metodo realiza N-1 pasadas para ordenarlo. En
cada pasada compara el elemento a ordenar con los elementos anteriores, desplazandolos una
posicion hacia el final del vector si estan desordenados. Estos desplazamientos liberan la posicion
del vector donde debe insertarse el elemento a ordenar. La busqueda del lugar de insercion se
termina al llegar al primer elemento o bien al encontrar un elemento interior ordenado.
13
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
ARCHIVO
Conjunto de datos homogeneos relacionados logicamente entre si, que se encuentran almacenados en
un dispositivo de memo auxiliar con una organización particular. Se utilizan principalmente para
almacenar grandes volumenes de info de uso frecuente en dispositivos de memo permanente. Son
ED compusestas, homogeneas, dinamicas y permanentes.
Los elementos de un archivo reciben el nombre de registros (o ficheros y fichas) que es quien le da
formato e almacenamiento a los datos en la memo auxiliar. Un archivo puede contener cero o mas
registros. El registro es la minima unidad de informacion que se puede transferir desde/hacia un
archivo.
Clasificacion según organizacion:
- de org secuencial, en el cual los registros estan almacenados en posiciones consecutivas de la
memo. sobre el original de este tipo de archivos no se puede aplicar operaciones de
modificacion, agregado ni borrado de registros.
- de org directa, en el cual los reg se almacenan al azar
- de org particionada, si los reg se agrupan en particiones o grupos, donde cada particion se
almacena al azar y los reg de cada particion en forma secuencial.
Acceso según organización:
- acceso secuencial, que permite acceder a los reg consecutivamente sin saltear ninguno.
Aplicable a los 3 tipos de archivos.
- acceso directo: permite procesar solo el registro buscado, accediendo por su posicion o clave.
Aplicable a los archivos de org directa y particionada.
- acceso particionado: permite acceder a una particion determinada y procesar secuencialmente
los reg de la misma.
Operaciones sobre archivos de org secuencial:
- asignacion fisica, que permite relacionar el nombre logico del archivo con su correspondiente
nombre fisico. ASIGNAR (nbre_logico, nbre_fisico)
- apertura, que permite poner en actividad un archivo, colocando el puntero de
direccionamiento en el primer registro. ABRIR (nbre_logico) MODO. Hay dos modos o
formas de abrir un archivo: * de entrada, para consultarlo
* de salida, para crearlo
- cierre, que saca de actividad el archivo, deshabilitando el puntero de direccionamiento.
CERRAR (nbre_logico)
- testeo de datos, que verifica que el puntero de direccionamiento no este apuntando a la
marca de fin de archivo. EOF (nbre_logico)
- grabacion, que permite guardar un registro en el archivo fisico en la posicion corriente del
puntero de direccionamiento. Una vez finalizada la grabacion corre automaticamente el puntero
al registro siguiente.
GRABAR (nbre_logico, var_reg)
- lectura, que permite recuperar el registro del archivo que esta apuntado por el puntero. Una
vez leido un reg pasa automaticamente el puntero al reg siguiente. LEER (nbro_logico, var_reg)
Archivos de org directa: permiten acceder y procesar un determinado registro a traves del numero
de registro o bien de un campo clave por el cual se encuentre ordenado o indexado el archivo.
Operaciones: las igual que los archivos secuenciales: asignacion fisica, cierre, testeo de datos,
grabacion, lectura, y apertura, agregando el modo E-S, para modificar, agregar o borrar un
registro. Ademas, tienen operaciones especificas:
14
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
- acceso directo a un reg determinado: posiciona el puntero de direccionamiento en un registro
determinado. IR (nbre_logico, nro_reg).
- cantidad total de registros del archivo. TAMAÑO (nbre_logico)
- retorno del numero de registro al que apunta actualmente el puntero de direccionamiento.
POSICION (nbre_logico)
CORRECCION Y EFICIENCIA
Algoritmo correcto: si satisface las especificaciones del problema, es decir que cumple con los
requerimientos del mismo.
Algoritmo eficiente: si utiliza poca memoria y poco tiempo de ejecucion, es decir, realiza una buena
administracion de los recursos del sistema.
Corrección: errores mas frecuentes:
- declaracion de datos:
* si estan declaradas todas las variables
* si son correctos los tipos de datos y la precision
* si estan declarados los indices de los arreglos como enteros
* si las dimensiones de los arreglos son adecuadas.
* si estan declarados y definidos los sp, etc
- referencia de datos:
* si se verifica que no se usen variables globales, etc
* si los indices de los arreglos estan en el rango
* si esta creada la var apuntada por un puntero
* si intento hacer operaciones de lectura/impresión con punteros
* si hay correspondencia entre parametros formales y actuales
* si los archivos estan asignados, etc
- calculo:
* si las operaciones aritmeticas se realizan entre numeros
* si los resultados son almacenados en una variable adecuada al tipo y precision de los datos
a guardar.
* si las operaciones entre cadenas aseguran el almacenamiento del rdo en una variable con
tamaño adecuado para evitar ser truncadas.
* si evita underflow y overflow
* si se verifica que no haya division por cero, etc
- comparacion:
* si las condiciones estan bien expresadas
* si se comparan variables del mismo tipo
* si en las condiciones compuestas estan bien usados los conectores logicos
* si tiene en cuenta todas las posibilidades ante la negacion de una condicion compuesta,
etc
- control de procesos:
* si las estructuras de control fueron cerradas
* si el anidamiento de EdC es adecuado
* si se evitan los bucles infinitos
* si se verifica que las variables de las condiciones de los lazos iterativos tienen valor
* si el programa tiene un unico punto de inicio y un unico punto de finalizacion (que no se
use exit, jump, go to, etc)
15
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
* si se usa recursion, que exista al menos un caso base y un llamado recursivo que achique
el problema, etc
- interfase:
* si es correcto el tipo de pasaje de parametros usado
* si el archivo usado esta abierto
* si hay demasiados archivos abiertos
* si el modo de apertura del archivo es correcto
* si los archivos fueron pasados por referencia
* si los archivos se asignaron mas de una vez, etc
- entrada/ salida:
* si el uso de variables de lectura es adecuado (tipo y precision)
* si se verifica que existan mensajes de salida para todas las alternativas posibles
(evitar impresiones mudas)
* si la lectura de archivos es correcta
* si los datos se graban en los archivos
* si se verifica la existencia de los archivos
Eficiencia:
uso de memo: - estructuras de datos: *estaticas
(se suma el espacio *dinamicas
que ocupa cada variable)
- recursion (ocupa mas tiempo y espacio)
- cantidad de codigo
tiempo de ejecucion:
- tecnica practica o empirica: consiste en probar el algoritmo con distintos conjuntos de datos,
cronometrando el tiempo de ejecucion o que tarda en dar el resultado. Otra alternativa es
agregar al programa una instrucción inicial y una final de impresión de la hora del sistema,
con lo cual se puede estimar el tiempo de ejecucion. ambas alternativas se ven distorsionadas
por factores como velocidad del procesador, habilidad del programador, datos de entrada, etc.
- tecnica teorica o a priori: es una tecnica formal de base matematica, que intenta medir la
cantidad de trabajo llevado a cabo por el algoritmo y usar esa info para estimar el tiempo de
ejecucion. Para ello contabiliza el total de operaciones basicas ejecutadas pro el algoritmo y
las expresa mediante una funcion matematica, considerada como cota de tiempo de ejecucion,
de la cual se estudia su comportamiento y tasa de crecimiento.
Tiempo de ejecución: dado un algoritmo que procesa N datos, llamamos T(N) a su tiempo de
ejecucion.
Orden de complejidad: el tiempo de ejecucion T(N) de un algoritmo es de ORDEN f(N) [O/f(N)] si
existe una funcion matematica f(N) que es una cota de dicho tiempo en un intervalo dado.
El orden de complejidad de T(N) es f(N) y solo si existe f(N) y constantes c, k no nulas tal que
T(N)≤ c f(N) V c,k ≠ 0, c ≥ k
Funciones de complejidad mas frecuentes, por orden de eficiencia:
- constante
- logaritmica
- lineal
- cuadratica
- cubica
- polinomial (xn)
- exponencial (2n)
- factorial
16
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Tengo que tomar el caso en el que se realiza la mayor cantidad de pasadas, es decir, el peor caso.
* Ordenamiento directo y burbuja: dado un vector de N elementos, se hacen N-1 pasadas. En
cada pasada hay:
1º pasada: (N-1) comparaciones
2º pasada: (N-2) comparaciones
3º pasada: (N-3) comparaciones
…
(N-1)º pasada: [N-(N-1)]= 1 comparacion
sumo: (N-1) + (N-2) + (N-3) + … + 1= ∑ (N-i) = ½ N (N-1) = ½ N2 – ½ N
.·. f(N)= ½ N2 / T(N) ≤ ½ N2
.·. O (½ N2)
17