You are on page 1of 48

UNIVERSIDAD NACIONAL DE INGENIERIA

Facultad de Ingeniera Industrial y de Sistemas

Area de Sistemas Computacin e Informtica

ALGORITMOS Y ESTRUCTURAS DE DATOS


PARTE II Profesora: Ing. Irma Inga Serrano 2012

Universidad Nacional de Ingeniera FIIS

IV. SUBPROGRAMAS Y RECURSIVIDAD

FIIS

SUBPROGRAMAS
Para resolver un problema complejo se debe descomponerlo en subproblemas (programacin modular).
Para solucionar un subproblema se disea un subprograma. Subprograma: programa que realiza una tarea especfica. Existe un programa principal que enlaza a los subprogramas y les transfiere el control para que se ejecuten Caractersticas de un subprograma 1.- Tiene un nombre para invocarlo 2.- El subprograma invocado recibe el control y se ejecuta. Cuando termina su tarea devuelve el control a quien lo invoc. 3.- La cabecera del subprograma le permite comunicarse con los programas o subprogramas que lo invoquen.

Universidad Nacional de Ingeniera

FIIS

VARIABLES GLOBALES: son variables declaradas en el programa principal y son reconocidas por todos los subprogramas. VARIABLES LOCALES: son variables declaradas dentro de los subprogramas y solo es reconocida por sta. TIPOS DE SUBPROGRAMAS 1.- Funciones 2.- Procedimientos

Universidad Nacional de Ingeniera

Ubicacin: Generalmente los subprogramas se escriben despus del programa principal.

FIIS

FUNCIONES
Caractersticas: Subprograma que recibe uno o mas datos de entrada y devuelve un solo resultado ( un dato entero, real, lgico, carcter o cadena) Su nombre est asociado al resultado que devuelve
Formato General de una Funcin: tipo-de-dato Funcin nombre-funcin (lista de parmetros) (declaracin de constantes y variables locales) Inicio acciones de la funcin devolver (variable o expresin) Fin-funcin Lista de parmetros (formales): lista de variables (tipo de dato y nombre) para datos de entrada.

Universidad Nacional de Ingeniera

FIIS

Cmo funcionan?

1.- Un programa o subprograma invoca a la funcin de esta manera:


nombre-funcin (lista de argumentos) Lista de argumentos: lista de datos de entrada (constantes, variables, expresiones) que se le entrega a la funcin para que entregue un resultado. 2.- La funcin recibe los datos de entrada (argumentos) y los asigna a los parmetros formales uno a uno de izquierda a derecha. Entonces: Debe haber correspondencia entre parmetros formales y argumentos tanto en el tipo de dato como en el nmero de ellos.

Universidad Nacional de Ingeniera

3.- La funcin ejecuta sus acciones y devuelve el resultado a quien lo invoc

FIIS

PROBLEMAS DE FUNCIONES 1.- Disee un algoritmo que reciba los nmeros enteros positivos n y m (nm) y calcule la combinacin de n en m 2.-Se tienen los conjuntos A y B de n y m elementos respectivamente (n 20, m 20) . Disee un algoritmo que almacene los datos de A y B y luego verifique si A est contenido en B . 3.- Disee un subprograma que reciba un nmero hexadecimal de maximo 15 caracteres y devuelva su equivalente en el sistema decimal 4.- Disee un subprograma que reciba una lnea de texto y nos retorne el nmero de palabras que tienen por lo menos 3 vocales diferentes.

Universidad Nacional de Ingeniera

FIIS

PROCEDIMIENTOS
Procedimiento es un subprograma que: puede recibir cero, uno o mas datos de entrada y puede devolver cero, uno o mas datos de salida Su nombre solo es utilizado para invocarlo
Formato General de un Procedimiento: Procedimiento nombre-procedimiento (lista de parmetros) (declaracin de constantes y variables locales) Inicio acciones del procedimiento Fin-procedimiento Lista de parmetros (formales): lista de variables (tipo de dato y nombre) para entrada y/o salida de datos.

Universidad Nacional de Ingeniera

FIIS

Parmetros de valor y de referencia


Los parmetros de un subprograma que permiten el ingreso de datos , pueden ser de dos tipos: Parmetros de valor Parmetros de referencia Parmetro de valor: Es la variable en la que se copia el dato del argumento Parmetro de referencia: Es la variable que hace referencia a la misma direccin del argumento. Esto significa que el argumento y el parmetro son dos nombres de un mismo espacio en la memoria (tienen la misma direccin).

Universidad Nacional de Ingeniera

FIIS

PROBLEMAS 1.- Disee un algoritmo que almacene los pesos de n alumnos (n<=100) en un vector A, luego verifique si la suma de los pesos de la primera mitad de A es igual a la suma de los pesos de la segunda mitad. Si la verificacin resulta verdadera, el algoritmo debe mostrar el mensaje pesos balanceados de lo contrario debe mostrar el mensaje pesos no balanceados. Nota: a) considere que n es par impar. Si es impar no debe tomar en cuenta el elemento del centro. b) Utilice dos o mas subprogramas con los parmetros que considere necesarios.

Universidad Nacional de Ingeniera

FIIS

Universidad Nacional de Ingeniera

2.- Disee un subprograma que reciba en una cadena una fecha del ao 2005 en el formato dd/mm/aaaa y luego presente dicha fecha escrita tal como se muestra en el siguiente ejemplo: El subprograma recibe: 12/12/2005 Salida: Lunes 12 de Diciembre de 2005 Nota: a) Tenga presente que el 01/01/2005 fue sbado. b) Los meses 1, 3, 5, 7, 8, 10 y 12 tienen 31 das. Los meses 4, 6, 9 y 11 tienen 30 das y el mes 2 tiene 28 das.

FIIS

Universidad Nacional de Ingeniera

3.- Una tienda comercial cuenta con el cdigo (cadena) y la venta del mes (en soles) de n productos (n200). Nota: el cdigo es una cadena de 5 caracteres de los cuales los 4 primeros son dgitos y el ltimo es una letra (A, B, C, D, E) que indica el grupo al que pertenece el producto. Disee un algoritmo que utilizando subprogramas: a) Almacene los datos (cdigo y venta) validndolos b) Presente un listado que muestre la venta total por grupo.

FIIS

RECURSIVIDAD

Universidad Nacional de Ingeniera

Se dice que un objeto es recursivo si forma parte de si mismo Se dice que un problema es recursivo (directo) si puede ser expresado en funcin de otro(s) problema(s) del mismo tipo pero de menor nivel de complejidad. Caractersticas de un subprograma recursivo directo: 1.- Dentro de sus acciones se invoca a si mismo. 2.- Existe una condicin de alto y retorno que es dato. 3.- Es alternativo a una estructura repetitiva.

FIIS

PROBLEMAS
Funciones recursivas Disee un subprograma recursivo para cada uno de los siguientes casos: 1.- Factorial Entrada: un nmero entero mayor o igual a 0 Salida: el factorial del nmero. 2.- MCD de dos nmeros Entrada: dos nmero enteros positivos Salida: mximo comn divisor de ambos 3.- Bsqueda de un elemento en un arreglo Entrada: un arreglo de cdigos (entero positivo de 4 cifras) de n alumnos (n 100) y un cdigo dado, Salida: si el cdigo dado se encuentra o no en el arreglo .

Universidad Nacional de Ingeniera

FIIS

Universidad Nacional de Ingeniera

4.- Problema (3ra PC 2006-1 ) Crear un subprograma recursivo que reciba un valor de n (entero positivo) y un valor de X(real) y nos entregue el valor de la siguiente suma: S = (X/1! ) (X3/3!) + (X5/5!) + (-1) n+1 (X2n-1)/(2n-1)! ; n1
5.- Problema Disee un subprograma recursivo que reciba a los conjuntos A y B de n y m elementos (letras) respectivamente (n,m 20) y muestre los elementos de A-B 6.- Problema (3ra PC 2005-1) Crear una funcin recursiva que reciba un nmero hexadecimal (como cadena) y luego nos retorne su equivalente en el sistema decimal.

Universidad Nacional de Ingeniera FIIS

V. REGISTROS Y ARCHIVOS

FIIS

REGISTRO
Es la unidad bsica de la base de datos de una entidad.
Registros Archivos BASE DE DATOS

Universidad Nacional de Ingeniera

Es la estructura que permite almacenar datos (de una entidad u objeto) que pueden ser de diferentes tipos Ejemplo: Se tiene los siguientes datos del alumno Juan Prez: nombre completo (cadena), promedio ponderado (real), total crditos aprobados (entero). Almacenar dichos datos.
Alumno
Nombre PromPond TCred

FIIS

Caractersticas de los registros


El registro tiene un nombre general y se comporta como una unidad Est compuesto por elementos que se denominan campos Cada campo tiene un nombre. En cada campo se pueden almacenar datos de tipo: bsico, arreglos o registros Para acceder a los datos de un campo: nombre-registro.nombre-campo.nombre-subcampo. Ejemplo: nombre, fecha de nacimiento (dia, mes, ao), PP

Universidad Nacional de Ingeniera

FIIS

Universidad Nacional de Ingeniera

Declaracin de la estructura del registro tipo nombre de la estructura= registro tipo de dato: nombre campo 1 tipo de dato: nombre campo 2 .. fin registro Declaracin de la variable tipo registro variable nombre de la estructura: nombre de la variable

FIIS

Operaciones con registros


Universidad Nacional de Ingeniera

Asignacin nombre-variable tipo registro.nombre-campo dato Lectura/escritura leer(nombre-variable tipo registro.nombre-campo) Copia de un registro en otro nombre registro1 nombre registro2

FIIS

Universidad Nacional de Ingeniera

EJEMPLOS 1.- Se cuenta con los siguientes datos de un alumno de ST221: nombre, notas de 4 PC , EP, EF. Disee un algoritmo que almacene dichos datos y muestre el PF. 2.- Se cuenta con los siguientes datos de un alumno FIIS: nombre, ao de ingreso (mes, ao) promedio ponderado. Se cuenta con los siguientes datos de un docente FIIS: nombre, ao de ingreso a la docencia, condicin (N/C), sueldo. Disee un algoritmo para almacenar los datos de ambas personas y muestre el nmero de aos (al 31 DIC 2011) cumplidos que permanece en la FIIS

FIIS

ARREGLOS DE REGISTROS
Son vectores cuyos elementos son registros Declaracin: arreglo(tamao) de nombre-estructura: nombre-arreglo Ejemplo: Se cuenta con los siguientes datos de un conjunto de n alumnos FIIS (n100): nombre, especialidad, crditos aprobados, promedio ponderado. Disee un algoritmo que almacene dichos datos y luego muestre un listado de alumnos por especialidad y dentro de ella ordenados por orden de mrito segn el promedio ponderado.

Universidad Nacional de Ingeniera

FIIS

Solucin:

ALU
Universidad Nacional de Ingeniera

nombre
ALU(1) -- ALU(2) --

Esp

cred

prom

ALU(n) --

FIIS

PROBLEMA
Universidad Nacional de Ingeniera

En un arreglo de registros se desea almacenar la informacin de n (n200) alumnos de un curso consistente en: cdigo de alumno (7c), nombre completo (35c), seccin (una letra), promedio de prcticas, examen parcial, y examen final. Con estos datos se desea: a) Presentar por cada seccin el promedio general y los alumnos con mayor promedio final. (Nota: PF = (EP+2EF+PP)/4 b) Presente el % total de alumnos que desaprobaron el curso. Disee el algoritmo que realice esta tarea.

FIIS

ARCHIVOS
ARCHIVOS DE DATOS: Conjunto de registros relacionados entre si que se encuentran almacenados en medios de almacenamiento externo (disco). Es el archivo fsico. BASE DE DATOS: Conjunto de archivos que contienen datos relacionados. Los archivos se relacionan entre si a travs del campo clave (un campo del registro que lo identifica diferencindolo de los dems. Ejm de campo clave: cdigo de alumno, DNI, apellidos, etc.

Universidad Nacional de Ingeniera

FIIS

Archivos Directos o Aleatorios


Caractersticas: 1.- Los registros se encuentran almacenados en el disco en forma consecutiva (archivo fsico). 2.- Para transferir datos desde o hacia el archivo fsico, se utiliza una variable tipo archivo (archivo lgico) con la misma estructura del archivo fsico. 3.- Cualquier registro es directamente accesible mediante la especificacin de un ndice que da la posicin del registro con respecto al origen del archivo Nota: la posicin de los registros empiezan en cero.

Universidad Nacional de Ingeniera

Archivos de acceso directo (..)


FIIS

Universidad Nacional de Ingeniera

4.- Para acceder a un registro, se utiliza un elemento llamado puntero de registro el cual identifica el registro sobre el cual se va a realizar una operacin de lectura o escritura. 5.- Todas las operaciones de lectura/escritura de datos en un archivo se realiza utilizando una variable auxiliar tipo registro con la misma estructura que los registros del archivo.

FIIS

DECLARACION DE LA VARIABLE TIPO ARCHIVO Y DE LA VARIABLE AUXILIAR tipo nombre- tipo-reg: registro tipo de dato1: nombre-campo1 tipo de dato2: nombre-campo2 etc. fin-registro

Universidad Nacional de Ingeniera

Variable archivo de nombre-tipo-reg : nombre-variable tipo archivo nombre-tipo-reg : nombre-variable de trabajo

FIIS

OPERACIONES CON ARCHIVOS Se realizan utilizando comandos


1.- CREACION DE ARCHIVO NUEVO crear (nombre-archivo-fsico) 2.- ELIMINACION DE ARCHIVO : elimina un archivo fsico borrar ( nombre de archivo fsico)

Universidad Nacional de Ingeniera

3.- APERTURA DE ARCHIVO EXISTENTE Asigna o enlaza el archivo fsico con el archivo lgico permitiendo la comunicacin entre ellos abrir (nombre-arch-lgico , modo, nombre-arch-fsico)
El archivo se puede abrir en modo:
l: lectura de datos solamente. e: escritura de datos solamente l/e: lectura y escritura de datos

OPERACIONES CON ARCHIVOS (..)


FIIS

4- CIERRE DE ARCHIVO Cierra la conexin entre el archivo lgico y el archivo fsico cerrar (nombre-archivo-lgico)
Universidad Nacional de Ingeniera

5.- LECTURA DE DATOS Copia el registro seleccionado en la variable auxiliar leer ( nombre-arch-lgico, nombre-variable-auxiliar) 6- ESCRITURA DE DATOS Copia los datos del registro de trabajo en el archivo escribir ( nombre-arch-lgico, nombre-variable-auxiliar)

Operaciones para el manejo de archivos


FIIS

1.- Tamao del archivo (nmero de registros de un archivo): tamao (nombre del archivo lgico 2.- Fin de archivo : La funcin eof devuelve V si lleg al final del archivo y F si aun no eof (nombre-arch-lgico) 3- Renombra archivo: Cambia el nombre del archivo fsico renombrar (nombre-arch-antiguo, nombre-arch-nuevo)

Universidad Nacional de Ingeniera

4.- Seleccionar un registro utilizando el puntero Si el archivo se apertura en modo l/e, antes de una lectura o escritura: ubicar-p (nombre-arch-lgico, posicin) Nota: para ubicar el puntero al final de un archivo: ubicar-p (nombre-arch-lgico, tamao(nombre-arch-lgico)

FIIS

Ejemplo
Prob 1 Existe un archivo fsico llamado PLANILLA.DAT que almacena la informacin de un grupo de empleados la cual consiste en Nombre del empleado (30c), nombre del Departamento donde labora (15c) y el sueldo (real).
Disee un algoritmo que: a) dado el nombre de un empleado, muestre el departamento en que labora y su sueldo b) adicione al archivo los datos de 20 nuevos empleados. c) Presente un reporte mostrando por cada departamento los siguientes datos: nombre del departamento, nmero de empleados y sueldo promedio de los empleados.

Universidad Nacional de Ingeniera

FIIS

OTRAS OPERACIONES CON ARCHIVOS


1.- Ordenamiento de archivos . Por seleccin (los registros cambian de posicin) . Con archivo ndice (los registros no cambian de posicin) 2.- Eliminacin fsica de registros Se utiliza un nuevo archivo en el que ya no se graban los registros que se desean eliminar 3.- Insercin de un registro en un archivo ordenado Se utiliza un nuevo archivo en el que se van grabando los registros hasta que se encuentra la ubicacin del registro que se desea insertar y se graba ste.

Universidad Nacional de Ingeniera

FIIS

Ejemplos
Prob.1 Se tiene el archivo EMPLEADO.DAT que almacena los siguientes datos: cdigo (9c), categora (1c) y sueldo (real). Disee un algoritmo que en base al archivo realice lo siguiente: a) Dada a una categora ingresada por el usuario, presente un reporte que contenga el cdigo y el sueldo de los empleados que pertenecen a dicha categora, ordenados por sueldo en forma descendente. b) Elimine del archivo a los empleados que tengan sueldo menor a S/. 550.00 Nota: Todo ordenamiento debe ser sin modificar las ubicaciones actuales de los registros.

Universidad Nacional de Ingeniera

FIIS

PROB.2 (4ta PC 2008-1)


Universidad Nacional de Ingeniera

Se tienen los siguientes archivos fsicos: ALUMNOS.DAT (cdigo-alumno (3dig), nombre-completo) NOTAS.DAT (cdigo-alumno, nombre-curso, nota, crditos) Se pide disear un algoritmo para: a) Por cada alumno, presentar cdigo, nombre, nmero de crditos que ha llevado y el promedio ponderado de notas. b) Presentar el nombre del curso o cursos con el mayor nmero de desaprobados.

FIIS

Prob 3. Se tiene el archivo fsico ALUMNOS.DAT cuyos datos son registros que tienen la siguiente estructura: cdigo (9), nombre (40c), nmero de crditos aprobados, promedio ponderado.

Universidad Nacional de Ingeniera

Disee un algoritmo que reciba el cdigo de un alumno y luego utilizando un subprograma muestre el nmero de crditos aprobados y el promedio ponderado del alumno.

FIIS

Prob 4. (4ta PC 2003-2) Se tiene el archivo fsico ALUMNOS FIIS.DAT cuyos datos son registros que tienen la siguiente estructura: cdigo (7 caracteres: los 2 primeros dgitos son el ao de ingreso), nombre (40c), nmero de crditos aprobados, promedio ponderado. Disee un subprograma que elimine del archivo a todos los alumnos que hayan ingresado antes de 1990 , tengan menos de 140 crditos aprobados y promedio ponderado menor a 09

Universidad Nacional de Ingeniera

Universidad Nacional de Ingeniera FIIS

VI. PROGRAMACION DINAMICA

FIIS

Programacin dinmica: Utiliza variables dinmicas


Universidad Nacional de Ingeniera

Variable dinmica: Es un espacio en la RAM que no tiene nombre La direccin de este espacio se encuentra almacenado en una variable tipo puntero. Entonces, para acceder a una variable dinmica se necesita de un puntero. Nota
p

Variable esttica

Variable dinmica

FIIS

Universidad Nacional de Ingeniera

Puntero: Es una variable que almacena la direccin de una variable dinmica Indica el tipo de dato que almacena la variable dinmica Declaracin de punteros: Variables *tipo de dato de la variable dinmica: nombre del puntero Ejemplo: *entero: p p es un puntero que guarda la direccin de un dato entero Se ha declarado la variable dinmica apuntado por p

FIIS

Universidad Nacional de Ingeniera

Operaciones con punteros a) Asignacin p nulo (inicializacin) pq b) Comparacin p=q p q

FIIS

Operaciones con la variable dinmica


Universidad Nacional de Ingeniera

Creacin de una variable dinmica: Reservar (p) (solicita la direccin de un espacio en memoria para la variable dinmica) Eliminacin de la variable dinmica: liberar (p) (libera espacio en memoria) Acceso a la variable dinmica: Para almacenar datos o sacar datos de la variable dinmica: Leer/escribir (nombre del puntero*) Ejm . Leer (p*)

FIIS

ESTRUCTURAS DINAMICAS
Universidad Nacional de Ingeniera

Lineales Listas enlazadas Pilas Colas


No lineales Arboles Grafos

FIIS

LISTAS ENLAZADAS
Universidad Nacional de Ingeniera

Caractersticas
Almacenan en la RAM datos del mismo tipo Se encuentran en posiciones no necesariamente contiguas. Sus elementos se denominan nodos Cada nodo de la Lista es un registro que tiene dos campos: INFO : almacena los datos que se desea almacenar DIR: es un puntero que almacena la direccin del elemento que le sigue. Tiene un puntero de lista que guarda la direccin del primero.

FIIS

PROBLEMA 1 (Listas-Listas) Se cuenta con los siguientes datos de n operaciones comerciales: tipo (C (compra) V (venta)),cdigo-producto, monto de la operacin. Disee un algoritmo que almacene estos datos y luego muestre el monto total de cada producto vendido, ordenado en forma descendente segn el monto total. PROBLEMA 2 (4ta PC 2005-2) Para un experimento se tiene una muestra de 100 puados de maz. Crear una LISTA para almacenar el nmero de granos de maz que hay en cada puado. Luego debe presentar el nmero de granos de maz que mas se repiten.

Universidad Nacional de Ingeniera

FIIS

PROB 3 (Archivos - listas )


Universidad Nacional de Ingeniera

Se tiene el archivo fsico ALUMNO.DAT que contiene los siguientes datos: codigo-alumno (9c), nombre-alumno, especialidad (2c), promedio ponderado acumulado, nmero de crditos aprobados. Dada una especialidad, se desea mostrar los datos (cdigoalumno, promedio ponderado acumulado) de aquellos alumnos que cumplan con las siguientes condiciones: tengan promedio ponderado mayo a 13 y tengan mas de 100 crditos aprobados. Este reporte debe estar ordenado por orden de mrito.

FIIS

PROB 4 (Listas como parm. de subprograma: ef-2002-2)


Universidad Nacional de Ingeniera

En los nodos de una LISTA L se han almacenado los datos de un grupo de empleados: cdigo (entero), nombre completo, seccin (A, B, C) y sueldo (real). Se pide disear un subprograma que reciba a esta lista L y nos presente un reporte en donde figuren por cada seccin, los datos de los empleados ordenados en forma decreciente respecto al sueldo y en caso de sueldos iguales ordenados en forma alfabtica. (6P)

FIIS

PROBLEMA 5 ( listas que contienen listas: EF- 2007-2)


Universidad Nacional de Ingeniera

Disee un algoritmo que permita almacenar en una lista (Pila o Cola) los siguientes datos de un conjunto de n alumnos: (cdigo, nombre completo, y los cursos que lleva (por cada curso almacene: nombre del curso y la nota final). Luego: a) Dado el nombre de un curso, muestre el nmero de aprobados y desaprobados en dicho curso. b) Muestre un listado de todos los alumnos indicando: cdigo, nombre completo y el promedio de notas de los cursos llevados. Este listado debe estar en orden de mrito.
(7P)

You might also like