Paradigmas de Programación Programación Procedural. TAD s.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Paradigmas de Programación Programación Procedural. TAD s."

Transcripción

1 Paradigmas de Programación Programación Procedural. TAD s. Repaso de las principales características de la programación procedural. Características de los lenguajes imperativos: Son los lenguajes orientados a sentencias. La unidad de trabajo es la sentencia. Los efectos de las sentencias individuales se combinan en un programa para obtener los resultados deseados. Todos estos lenguajes se basan fundamentalmente en la arquitectura tradicional de la computadora. Esto se puede ver en tres características principales: variables: La componente principal de la arquitectura es la memoria, que consta de un gran número de celdas. Es el lugar donde se almacenan los datos. Los valores se almacenan en las celdas y se puede acceder a ellas dando un nombre a dichas celdas. Esto está representado por el concepto de variable. operación de asignación: Estrechamente ligado a la arquitectura de la memoria se encuentra la idea de que el valor calculado debe ser almacenado, es decir, asignado a una celda. Esta es la razón de la importancia de la sentencia de asignación. repetición: un programa en un lenguaje imperativo, normalmente realiza su tarea ejecutando repetidamente una secuencia de pasos elementales. Esto es una consecuencia de la arquitectura, en la cual las instrucciones se almacenan en memoria y la única manera de llevar a cabo algo complicado es repitiendo una secuencia de instrucciones. El papel de la abstracción Como cualquier modelo, un programa es una abstracción de la realidad. recordamos que, la abstracción es el proceso de identificación de las propiedades importantes del problema que se está modelando, ignorando los detalles irrelevantes. La abstracción es el concepto clave en la teoría de la programación. En concreto, tiene una doble relación con los lenguajes de programación. Por un lado, los lenguajes son las herramientas con las que los diseñadores pueden implementar los modelos abstractos ( los programas ). Por el otro, ellos mismos son abstracciones del procesador sobre el cual se implementa el modelo. Sin embargo, los primeros lenguajes no reconocían el papel crucial que la abstracción juega en la programación. Por ejemplo, a comienzos de la década del 50, el único mecanismo de abstracción proporcionado por los lenguajes (ensambladores) sobre los lenguajes de máquina era la denominación simbólica: se utilizaban mnemotécnicos o términos relativamente autoexplicativos para denominar códigos de operación y posiciones de memoria. TADs - Página 1

2 Los subprogramas fueron también introducidos en los lenguajes de tipo ensamblador como un mecanismo para denominar una actividad descrita por un grupo de acciones y considerarla como una única acción. Los subprogramas son mecanismos útiles para la construcción de abstracciones. Un subprograma es la implementación de una abstracción mientras que la llamada a un subprograma representa el uso de la abstracción. Cuando el programador implementa un subprograma se encuentra en el cómo trabaja dicho subprograma. Cuando se invoque este subprograma, ya no nos interesa el cómo sino el qué hace. Esto se conoce como abstracción procedural. También es posible definir abstracciones de datos. Las abstracciones de datos modelan los datos manipulados por el programa. Abstracciones de datos. Cómo aparecen en los lenguajes. Los lenguajes a nivel de la máquina veían a los datos almacenados como cadenas de bits que podían ser manipulados por las instrucciones de la máquina. El repertorio de instrucciones incluía operaciones de desplazamientos, lógicas, aritméticas en pto. flotante, etc. Fortran, Cobol y Algol 60 dieron su primer paso hacia la introducción a la abstracción de datos. En estos lenguajes, la información almacenada en determinadas posiciones de memoria no se ve como una secuencia de bits anónimos, sino como un valor entero, real, lógico, etc. Cada lenguaje tenia un propósito fijo y de acuerdo a esto proveía los tipos adecuados. Como resultado, ninguno de estos lenguajes resulto apropiado para TODAS las aplicaciones, ya que el programador estaba limitado por la rigidez del conjunto fijo de abstracciones proporcionado por el lenguaje. El objetivo perseguido por los lenguajes de la siguiente generación (Simula 67, Algol 68, Pascal) era incorporar mecanismos flexibles y fáciles de usar por medio de los cuales el programador pueda definir nuevas abstracciones. Algol 68 y Pascal permiten al programador usar tipos de datos incorporados y constructores de nuevos tipos (matrices, registros). Ejemplo: En Pascal: type var estudiante=record nombre:string[30]; legajo:integer; curso=array[1..60] of estudiante; grupo_a:curso; El tipo estudiante es una estructura de datos que consta de dos componentes utilizado para guardar una identificación de un estudiante. El tipo curso se define como una colección (arreglo) de estudiantes. TADs - Página 2

3 Si quiero manipular los estudiantes de un curso, podría definir procedimientos tales como: Insertar(grupo_A, unestud); Eliminar(grupo_A, unestud); Imprimir(grupo_A); etc. Estos procedimientos están fuertemente relacionados con el tipo curso. En concreto, son las operaciones que manipulan los objetos del tipo curso. Sin embargo, esta relación lógica no queda evidente en el programa: Ejemplo: program demo; type... // se mezclan con otros tipos var... // se mezclan con otras variables Proc, // se mezclan con otros procedimientos... end. Hay semejanzas entre los tipos definidos por el usuario de Pascal y los tipos predefinidos. Por ejemplo, consideremos el tipo predefinido integer y el tipo definido por el usuario curso. Los dos tipos son abstracciones construidas sobre una representación interna: una cadena de bits para los integer y un arreglo de registros para curso. Los dos tipos tienen asociados un conjunto de operaciones: operaciones aritméticas y de comparación para los integer e Insertar(..), Eliminar(..), Imprimir(..), etc. para curso. Sin embargo, los tipos predefinidos y los tipos definidos por el usuario difieren uno del otro en un aspecto muy importante. Los tipos predefinidos ocultan al programador la representación interna: ésta no puede ser manipulada directamente. Por ejemplo, el programador no puede acceder a un bit en particular de la cadena de bits que representan al integer (si no dispone de operaciones provistas para tal fin, obviamente). Por otra parte, los procedimientos Insertar(..), Eliminar(..), Imprimir(..), etc., no son los únicos medios para manipular un objeto de tipo curso. El programador puede operar directamente sobre cada registro que compone el arreglo, sin estar obligado a utilizar exclusivamente las operaciones definidas para el nuevo tipo. Ejemplo: grupo_a[15].legajo:=12345; En otras palabras, desde el punto de vista del lenguaje, no hay distinción entre dos niveles de abstracción: el nivel en el que se pueden utilizar cursos como objetos nuevos y el nivel en el que se puede considerar la representación de los cursos en términos de las abstracciones de mas bajo nivel. TADs - Página 3

4 Esta confusión entre niveles de abstracción puede conducir a la producción de programas difíciles de leer y lo que es más importante, reduce la modificabilidad de los mismos. Por ejemplo, si cambiamos la representación interna de los cursos a listas encadenadas necesitaríamos cambiar todos los accesos directo a la representación interna (como la sentencia anterior) a los largo de todo el programa. En conclusión, si queremos definir nuevos tipos de datos en un programa, seria deseable que el lenguaje me permitiera asociar una representación con las operaciones para manipularla en una unidad adecuada del lenguaje ( separada del programa) y ocultar la representación interna del nuevo tipo a las unidades que la usa. Los tipos definidos por el usuario que satisfacen estas dos propiedades se denominan tipos abstractos de datos (TAD). La primer propiedad hace que la versión final del programa refleje las abstracciones descubiertas durante la fase de diseño. La segunda propiedad enfatiza la distinción entre los niveles de abstracción y favorece la modificabilidad de los programas. Pascal, en su definición original, no proveía ningún mecanismo para la construcción de TAD s. Turbo Pascal tiene herramientas para cubrir la primer propiedad (encapsular la definición del tipo con las operaciones para manipularlo en una unit ) pero no para ocultar la estructura interna del tipo. Más adelante vamos a ver otro lenguaje (ADA) que provee mecanismos que cubren las dos propiedades. Ahora vamos a ver cómo se diseña utilizando TAD s, cómo se identifica un TAD en un problema. Antes vamos a recordar algunos principios de la abstracción procedural o la técnica de diseño por refinamientos sucesivos.. REPASO: Abstracción de procedimientos (refinamientos sucesivos) Es el principio subyacente de la programación utilizando el diseño topdown (refinamientos sucesivos). Las ventajas de este estilo de programación ya las vimos en el semestre pasado (en la materia Sintaxis y..), pero vamos a recordarlos: es un método que hace que la complejidad de un programa grande sea manejable, controlando sistemáticamente la interacción entre sus componentes. Esto es, un programa modular es más fácil de escribir, ya que enfocamos nuestra atención en una tarea (procedimiento o función) a la vez. La idea es que sabe qué es lo que hace un módulo y no cómo lo hace. O sea, desde afuera NO PUEDO (no interesa) ver detalles de implementación de ese módulo. Es como si estaría rodeado de paredes (walls) que impiden que otros módulos sepan (vean) cómo fue implementado. Para poder utilizar los módulos debemos especificar la forma en que se interactúa con ellos, es decir debemos establecer un contrato en el cual se especifica cómo se lo debe TADs - Página 4

5 invocar (con qué parámetros, de qué tipo, etc.) y qué se obtendrá como resultado luego de ejecutar el módulo. Todo esto no es nuevo. Es lo que vimos anteriormente sobre refinamientos sucesivos, solo que ahora formalizamos un poquito más el concepto. Programa que usa una tarea request retorno de la op. Implementa ción de la tarea La abstracción procedural particiona un programa en algoritmos independientes, los cuales ejecutan tareas más pequeñas. Se piensa en términos de qué es lo que un algoritmo hace, independientemente de cómo lo hace. En la abstracción de datos se piensa qué puedo hacer con una colección de datos independientemente de cómo lo voy a hacer. La abstracción de datos es una herramienta que nos permite desarrollar las estructuras de datos en una forma relativamente independiente del resto de la solución. Los otros módulos de la solución conocerán qué operaciones pueden hacer con los datos pero no cómo están almacenados ni cómo se ejecutarán las operaciones. Ya vimos qué era un TAD: una colección de datos, más el conjunto de operaciones para manipularlos. La definición de las operaciones debe ser rigurosa, para especificar completamente el efecto que tiene sobre los datos, pero no se especificará si los datos se almacenarán en posiciones consecutivas de memoria, o en posiciones disjuntas, ni nada. Cuando se implementa el TAD se elige una representación particular, una estructura de datos (recordemos que son construcciones que provee el lenguaje para guardar datos, por ejemplo, un array en Pascal). Un TAD no es lo mismo que una estructura de datos. Por ejemplo, la estructura de datos curso definida anteriormente no es un TAD. Cuando un programa debe ejecutar operaciones sobre sus datos que no están soportadas directamente por el lenguaje, se debe construir la estructura de datos. Primero debería diseñar el TAD y entonces cuidadosamente especificar las operaciones (el contrato ). Entonces (y sólo entonces), debería implementar las operaciones con una estructura de datos. Si se implementan las operaciones apropiadamente, el resto del programa será capaz de ejecutar las operaciones según fueron especificadas. TADs - Página 5

6 En resumen, se usa el mismo concepto que para la abstracción procedural: hay paredes ( walls ) entre un programa y sus estructuras de datos. El contrato define qué operaciones puedo realizar con la estructura de datos y qué resultados obtengo luego de ejecutar esas operaciones. Programa que usa la estructura de datos request return Implementa ción de la estructura de datos Ejemplo: TAD lista ordenada Consideremos una lista cualquiera (la lista del super, por ejemplo). harina arroz gaseosas huevos yerba azúcar... El orden está dado por el orden en el cual se me fueron ocurriendo las cosas (no necesariamente es un orden alfabético, sólo que un ítem tiene un anterior y un siguiente) Ahora pensemos, qué cosas podría hacer con la lista? contar los ítems para saber cuántas cosas tengo que comprar (la longitud de la lista); agregar un elemento en la pos. i de la lista; eliminar el elemento de la posición i; ver el ítem que está en la posición i. Cómo especificamos estas operaciones? Procedure Crear(L) { Crea una lista ordenada L vacía} Function Longitud(L) : integer TADs - Página 6

7 { Retorna el numero de ítems que están en la lista ordenada L} Procedure Insertar(L, i, nuevo-item) { Inserta el nuevo-item en la posición i de la lista. El valor de i debe estar en el rango de 1 a Longitud(L)+1. Si i<=longitud(l), los ítems son desplazados como sigue: el ítem de la posición i pasa a la posición i+1, el de la posición i+1 a la i+2, etc. y el de la posición Longitud(L), pasa a la posición Longitud(L)+1. } Procedure Eliminar(L,i) { Elimina el ítem de la posición i de la lista ordenada L. El valor de i debe estar en el rango de 1 a Longitud(L). Si i<longitud(l), los ítems son desplazados como sigue: el ítem de la posición i+1 pasa a la posición i, el de la posición i+2 a la i+1, etc. y el de la posición Longitud(L), pasa a la posición Longitud(L)-1. } Function Recuperar(L, i) : <tipo correspondiente a los ítems> { Retorna el ítem que se encuentra en la posición i de la lista ordenada L. El valor de i debe estar en el rango de 1 a Longitud(L). La lista no cambia luego de esta operación (esta operación no altera la lista)} Las especificaciones de estas 5 operaciones son los términos del contrato para el TAD lista ordenada. Notemos que estas especificaciones no mencionan cómo se almacena la lista ordenada ni cómo se implementan las operaciones. La definición del TAD únicamente dice lo que se puede hacer con una lista ordenada. Ejemplo: Si queremos hacer una pequeña aplicación que intercambie dos elementos de la lista que se encuentran en las posiciones i y j respectivamente: Procedure Cambiar(L, i, j) { cambia el i mo. y el j mo. elemento de la lista ordenada L} primero:= Recuperar(L, i); {Copia el i mo. ítem} segundo:= Recuperar(L, j); {Copia el j mo. ítem} Eliminar(L.i); { Reemplaza el i mo. ítem con el j mo. } Insertar(L, i, segundo); Eliminar(L.j); { Reemplaza el j mo. ítem con el i mo. } Insertar(L, j, primero); Notar que esta aplicación NO necesita saber cómo está implementada la lista. TADs - Página 7

8 Diseñando un TAD El diseño de un TAD surge naturalmente durante el proceso de la resolución del problema. Cuando Pascal (o el lenguaje que se va a utilizar) no provee los tipos convenientes y un tipo definido por el usuario no es suficiente, ya que no se puede definir las operaciones y las restricciones, entonces se piensa en un TAD. Ejemplo: Supongamos que queremos imprimir todas las fechas que sean feriados del almanaque de un determinado año. Una posible solución sería: tomar la fecha correspondiente al primer día del año while la fecha no corresponda con el último dia del año do if la fecha corresponde a un día feriado then Imprimirla tomar la siguiente fecha En este problema aparace un tipo no provisto por Pascal: el tipo fecha. Una fecha contiene dia, mes y año. Qué operaciones serían necesarias? determinar la fecha correspondiente al 1er. día del año. determinar si una fecha corresponde al último día del año. determinar si una fecha es o no feriado. dado una fecha, determinar la fecha siguiente. Cómo las especificamos? Function PrimerDia(): fecha {Retorna la fecha correspondiente al primer dia del año} Function EsUltimoDia(unaFecha): boolean {Retorna verdadero si unafecha corresponde al último día del año} Function EsFeriado(unaFecha): boolean {Retorna verdadero si unafecha corresponde a un día feriado} Function SiguienteFecha(unaFecha): fecha {Retorna la fecha del dia siguiente al la fcha dada} Cómo quedaría la solución a nuestro problema en función del TAD fecha? dia:= PrimerDia(); while not EsUltimoDia(dia) do if EsFeriado(dia) then Imprimir(dia) (***) dia:= SiguienteFecha(dia) TADs - Página 8

9 (***) En realidad, en este punto, nos damos cuenta que no podemos imprimir un dato tipo fecha (porque no conocemos nada de él). Por lo tanto, necesitamos definir más operaciones al TAD que no devuelvan el dia, mes y año de una fecha dada y luego imprimir estos valores. Function Dia(unaFecha): integer { Retorna el día de la fecha dada. El día estará en el rango de 1 a 31} Function Mes(unaFecha): integer { Retorna el mes de la fecha dada. El mes estará en el rango de 1 a 12} Function Anio(unaFecha): integer { Retorna el año de la fecha dada. El año estará en el rango de 0 a 2500} Anteriormente diseñamos el TAD en función del problema/aplicación a resolver. También podemos disñar el TAD y luego utilizarlo en alguna aplicación (hacer el proceso inverso) Ejemplo: Vamos a diseñar el TAD Agenda. Qué operaciones necesitamos proveer para manejar una agenda? Las más obvias: agendar una actividad en un dia y hora determinado desagendar una acctividad previamente agendado en un dia y hora determinado Podemos pensar en otras dos operaciones que complementan las anteriores. ver si hay una actividad agendad en un horario y dia determinado ver qué actividad está agendada en un horario y dia determinado Estas dos operaciones podríamos combinarlas y especificarlas como una sola operación. Especificaciones: Function CrearAgenda(): agenda { Retorna una agenda vacía} Procedure Agendar(unaAgenda, fecha, hora, actividad) { Agrega en la agenda la actividad en el dia y hora dado asumiendo que ese horario está libre} Procedure Desagendar(unaAgenda, fecha, hora) { Borra la actividad agendada en la fecha y hora dada} Procedure VerActividad(unaAgenda, fecha, hora, hayactividad, unaactividad) {determina si existe o una actividad agendada en la fecha y hora dada. Si hay, setea hayact en true y retorna la actividad agendad en unaactividad. Si no hay nada agendado setea hayact en false} Aplicación: TADs - Página 9

10 Supongamos que queremos cambiar el día y hora de una actividad particular (esto que lo hagan ellos - a lo sumo en la práctica) Leer(diaAnt, horaant, dianuevo, horanueva,); VerActividad(agenda, diaant, horaant, hayact, acti); if hayact { verifico que verdaderamente estaba algo agendado} then VerActividad(agenda, dianuevo, horanueva, hayact, acti); if hayact { si ya tengo algo agendado en ese horario} then write( Ud. ya tiene agendada otra actividad en el nuevo horario ) else { el horario está libre} Agendar(agenda, dianuevo, horanueva, acti); Desagendar(agenda, diaant, horaant); else write( Ud. no tiene agendada ninguna actividad en ese horario ); Al diseñar TAD s nos podemos encontrar con otros TAD s. por ejemplo, en el TAD anterior (agenda) hacemos referencia a fechas, y éstas podrían ser datos abstractos. Esto es, se puede utilizar un TAD para implementar otro TAD. Otro Ejemplo: queremos armar una base de datos de recetas (un recetario). Las operaciones para manipularlo sería: Procedure Crear(recetario) {Crea un recetario vacío} Procedure Insertar(recetario, receta) {Agrega la receta al recetario. Se asume que la receta NO está en el recetario} Procedure Eliminar(recetario, receta) {Elimina la receta del recetario. Asume que la receta está en el recetario} Function Recuperar(recetario, nombrereceta): Receta {Retorna la receta del recetario cuyo nombre coincide con nombrereceta} Function Esta(recetario, nombrereceta):boolean { Retorna true si la receta cuyo nombre es nombrereceta está en el recetario y false en caso contrario} En este caso, podríamos pensar en definir otro TAD: Receta que contengan la información de una receta, con operaciones como: Function Nombre(receta): string[50] {Retorna el nombre de la receta} Esta función sería utilizada por las operaciones Recuperar y Esta para obtener el nombre de las recetas y compararlos con el nombrereceta recibido como parámetro en el momento de implementar el TAD recetario. TADs - Página 10

11 Implementación de TAD s Tenemos que ver cómo guardar los datos y cómo realizar las operaciones especificadas anteriormente. TAD Lista Ordenada. Tenemos dos opciones para almacenar los datos: utilizar arreglos utilizar punteros (listas encadenadas) Recordamos la especificación del TAD: Procedure Crear(L) { Crea una lista ordenada L vacía} Function Longitud(L) : integer { Retorna el numero de ítems que están en la lista ordenada L} Procedure Insertar(L, i, nuevo-item) { Inserta el nuevo-item en la posición i de la lista. El valor de i debe estar en el rango de 1 a Longitud(L)+1. Si i<=longitud(l), los ítems son desplazados como sigue: el ítem de la posición i pasa a la posición i+1, el de la posición i+1 a la i+2, etc. y el de la posición Longitud(L), pasa a la posición Longitud(L)+1. } Procedure Eliminar(L,i) { Elimina el ítem de la posición i de la lista ordenada L. El valor de i debe estar en el rango de 1 a Longitud(L). Si i<longitud(l), los ítems son desplazados como sigue: el ítem de la posición i+1 pasa a la posición i, el de la posición i+2 a la i+1, etc. y el de la posición Longitud(L), pasa a la posición Longitud(L)-1. } Function Recuperar(L, i) : <tipo correspondiente a los ítems> { Retorna el ítem que se encuentra en la posición i de la lista ordenada L. El valor de i debe estar en el rango de 1 a Longitud(L). La lista no cambia luego de esta operación (esta operación no altera la lista)} Implementación basada en arreglos..... Longitud Items Podría definir la lista como un registro con dos campos:la longitud de la lista y los ítems en sí. const type maxlen=100; itemtype=<tipo de los items de la lista> listaordenada=record long:integer; TADs - Página 11

12 items:array[1..maxlen] of itemtype; var L:listaOrdenada; algunas de las operaciones quedarían: Procedure Crear (var L: listaordenada) { Crea una lista ordenada L vacía} L.Long:=0; Function Longitud(L:listaOrdenada): integer; { Retorna el numero de ítems que están en la lista ordenada L} Longitud:=L.long; Procedure Insertar(var L: listaordenada; i:integer; nuevoitem:itemtype) { Inserta el nuevo-item en la posición i de la lista. El valor de i debe estar en el rango de 1 a Longitud(L)+1. Si i<=longitud(l), los ítems son desplazados como sigue: el ítem de la posición i pasa a la posición i+1, el de la posición i+1 a la i+2, etc. y el de la posición Longitud(L), pasa a la posición Longitud(L)+1. } if ((i<1) and i>longitud(l)+1) or (Longitud(L)=maxlen) then Indicar que hay un ERROR else {desplazar los ítems} for j:= Longitud(L) downto i do L.items[j+1]:=L.items[j]; { Insertar el nuevo item} L.items[i]:= nuevoitem; L.long:=L.long+1; Implementación basada en punteros (listas encadenadas) long head item sgte Para no tener la restricción del tamaño fijo del arreglo. type itemtype=<tipo de los items de la lista> ptr =.. nodo; nodo =record item: itemtype; sigte:ptr; TADs - Página 12

13 listaordenada=record long:integer; head:ptr; var L:listaOrdenada; las operaciones quedarían: Procedure Crear (var L: listaordenada) { Crea una lista ordenada L vacía} L.long:=0; L.head:=nil; Function Longitud(L:listaOrdenada): integer; { Retorna el numero de ítems que están en la lista ordenada L} Longitud:=L.long; Para implementar las otras operaciones necesitamos acceder a la posición i de la lista, cosa qu la estructura elegida no me lo provee (las listas enganchadas no tienen acceso directo a sus componenetes). Por lo tanto, podríamos pensar en definir una operación propia del TAD llamasda SetPtr, que retorna el puntero al nodo que se encuentra en una posición especificada. Otra vez, esta operación NO estaría disponible para las aplicaciones que usen la lista ordenada, sino que la es privada del TAD, me sirve para implementar las operaciones restantes. Function SetPtr(L: listaordenada; i:integer):ptr {Retorna un puntero al nodo que se encuentra en la posición i. Si i<1 o i>longitud(l), retorna un puentero nulo} if (i<1) or (i>longitud(l)) then SetPtr:= nil else p:=l.head; for j:=1 to i-1 do p:=p..sigte; SetPtr:=p; algunas de las operaciones quedarían: TADs - Página 13

14 Function Recuperar (L: listaordenada; i:integer) { Retorna el ítem que se encuentra en la posición i de la lista ordenada L. El valor de i debe estar en el rango de 1 a Longitud(L). La lista no cambia luego de esta operación (esta operación no altera la lista)} if (i<1) or i>longitud(l) then Indicar que hay un ERROR else p:=setptr(i); Recuperar := p..item; { No testeo por p<>nil porque ya lo testee al ppio.} TADs - Página 14

Introducción a los tipos de datos abstractos (TAD)

Introducción a los tipos de datos abstractos (TAD) Introducción a los tipos de datos abstractos (TAD) SINTAXIS Y SEMÁNTICA DEL LENGUAJE Prof. Lic. Ma. Gabriela Cerra Definición de abstracción Abstracción: idea general que se concentra sobre las cualidades

Más detalles

Departamento de Informática Universidad de Valladolid Campus de Segovia. TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs)

Departamento de Informática Universidad de Valladolid Campus de Segovia. TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs) Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs) TIPOS ABSTRACTOS DE DATOS (TADs) Introducción Un contraejemplo completo Metodología de la

Más detalles

1.2.4 Listas enlazadas

1.2.4 Listas enlazadas 1.2.4 Listas enlazadas Las listas enlazadas son tipos de datos dinámicos que se construyen con nodos. Un nodo es un registro con al menos, dos campos, uno de ellos contiene las componentes y se le denomina

Más detalles

TIPO DE DATO ABSTRACTO (TAD)

TIPO DE DATO ABSTRACTO (TAD) TIPO DE DATO ABSTRACTO (TAD) Tipos Abstractos de Datos (TAD) Sabemos que: Los tipos de datos son necesarios para identificar valores y operaciones posibles para variables y expresiones. Las nociones de

Más detalles

Manual de turbo pascal

Manual de turbo pascal Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de

Más detalles

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Apunte Laboratorio ALPI - El lenguaje de programación Pascal Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................

Más detalles

ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACIÓN

ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACIÓN ESTRUCTURA DE LOS LENGUAES DE PROGRAMACIÓN DEFINICION DE LOS LENGUAES SINTAIS (BNF + EBNF + DIAGRAMAS DE SINTAIS) + SEMÁNTICA OPERACIONAL (APROIMACIÓN UTULIZADA AQUÍ) FORMAL (A TRAVÉS DE MECANÍSMOS RIGUROSOS

Más detalles

Tipo de dato Abstracto (Tad) PILAS COLAS

Tipo de dato Abstracto (Tad) PILAS COLAS Tipo de dato Abstracto (Tad) PILAS COLAS Tipos Abstractos de Datos - PILA Tope Poner Sacar Tipos Abstractos de Datos - PILA El tipo de Dato PILA (stack) es una estructura de datos que organiza los datos

Más detalles

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.

Más detalles

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES TEMAS Recorrido de un árbol Máximo y mínimo Búsqueda de un elemento Borrado de un nodo 3 Características ARBOLES - CONCEPTOS Cada elemento del árbol

Más detalles

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente: ASIGNATURA TITULACIÓN APELLIDOS ESTRUCTURA DE DATOS Y DE LA INFORMACIÓN EJERCICIO 1 (3 PUNTOS) GRUPO CURSO CONVOCATORIA NOMBRE 23 / 24 EXTRAORDINARIA- SEPTIEMBRE CALIFICACIÓN Dado el tipo abstracto de

Más detalles

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27 ÍNDICE Prefacio 25 Organización de la Unidad Didáctica.................... 25 Cómo utilizar el libro............................. 26 Objetivos docentes.............................. 27 1 Fundamentos de

Más detalles

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Prof. Montserrat Serrano Montero ÍNDICE Tipos de datos El tipo abstracto

Más detalles

Unidad 1. Análisis de Algoritmos. Ing. Leonardo R. L. Estructura de datos - Generalidades Unidad I Pág 1

Unidad 1. Análisis de Algoritmos. Ing. Leonardo R. L. Estructura de datos - Generalidades Unidad I Pág 1 Unidad 1 Análisis de Algoritmos Ing. Leonardo R. L. Estructura de datos - Generalidades Unidad I Pág 1 GENERALIDADES Qué se necesita para escribir un programa eficiente? Para diseñar programas eficientes

Más detalles

Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN

Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN ccoello@cs.cinvestav.mx Sentencia para Casos Es muy común al escribir programas, el descomponer un problema en dos o más subproblemas.

Más detalles

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR Tema 1. Programación de un computador TEMA 1. CIÓN DE UN COMPUTADOR 1. CONCEPTO DE 2. LENGUAJES DE CIÓN 2.1. LENGUAJE MÁQUINA 2.2. LENGUAJE ENSAMBLADOR 2.3. LENGUAJE DE ALTO NIVEL 3. ALGORITMOS. REPRESENTACIÓN

Más detalles

Tipos Abstractos de Datos (TAD) Lección 1

Tipos Abstractos de Datos (TAD) Lección 1 Tipos Abstractos de Datos (TAD) Lección 1 Esquema Paradigmas de programación Definición de TAD Programación con TAD Ventajas de la programación con TAD Lectura recomendada: secciones 1.1 y 1.2 del libro

Más detalles

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS Programación en Fortran Valentín Moreno ÍNDICE 1. Subprogramas 2. Funciones 3. Subrutinas 2 3 1. SUBPROGRAMAS 1. SUBPROGRAMAS Si necesitamos usar con frecuencia

Más detalles

Práctica 2. TAD pila

Práctica 2. TAD pila Objetivos. Práctica. TAD pila Se trata de construir el TAD PILA con dos implementaciones (una acotada y otra no acotada sin cabecera) que compartirán el mismo módulo de definición. Haciendo importación

Más detalles

Introducción a la Programación en C

Introducción a la Programación en C Christopher Expósito-Izquierdo cexposit@ull.edu.es Airam Expósito-Márquez aexposim@ull.edu.es Israel López-Plata ilopezpl@ull.edu.es Belén Melián-Batista mbmelian@ull.edu.es José Marcos Moreno-Vega jmmoreno@ull.edu.es

Más detalles

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura: 1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura: PROGRAM Nombre_del_programa; ZONA de DECLARACIONES ZONA de INSTRUCCIONES

Más detalles

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos RECURSION Temario Concepto de Recursión Características de algoritmos recursivos Ejemplos RECURSION Metodologías para resolver problemas: 1. Diseño Top Down 2. Recursión 3. Abstracción de Datos 4. Diseño

Más detalles

Prof. María Alejandra Quintero. Informática Año

Prof. María Alejandra Quintero. Informática Año Prof. María Alejandra Quintero Informática Año 2014-2015 Es la acción de escribir programas de computación con el objetivo de resolver un determinado problema. Implica escribir instrucciones para indicarle

Más detalles

Array con tope y Registros variantes

Array con tope y Registros variantes Array con tope y Registros variantes Programación 1 InCo - FING Programación 1 Array con tope y Registros variantes InCo - FING 1 / 18 Array con tope Programación 1 Array con tope y Registros variantes

Más detalles

Arreglos y Subrangos

Arreglos y Subrangos Arreglos y Subrangos Programación 1 InCo - FING Contents 1 Tipo subrango 2 1.1 Subrangos de enteros......................... 2 1.2 Subrangos de caracteres....................... 2 1.3 Operaciones con subrangos.....................

Más detalles

Examen de Programación 2 Diciembre de 2012

Examen de Programación 2 Diciembre de 2012 Ejercicio 1 ( puntos) Examen de Programación 2 Diciembre de 2012 La Administración Nacional de Puertos (ANP) quiere sistematizar la inspección de contenedores en tránsito en el puerto de Montevideo. El

Más detalles

Práctica 4. TAD lista posicional

Práctica 4. TAD lista posicional Objetivos. Práctica 4. TAD lista posicional Se trata de construir el TAD lista posicional con una implementación acotada. Haciendo uso de este TAD, se implementará una biblioteca de cálculos estadísticos

Más detalles

Tema 5. Soporte lógico de computadoras.

Tema 5. Soporte lógico de computadoras. Tema 5. Soporte lógico de computadoras. 5.1 Conceptos generales Como se ha visto previamente, un ordenador consta de dos partes, una la parte física, conocida como "Hardware" y otra, la parte lógica denominada

Más detalles

Algorítmica y Lenguajes de Programación. Punteros Introducción a estructuras dinámicas

Algorítmica y Lenguajes de Programación. Punteros Introducción a estructuras dinámicas Algorítmica Lenguajes de Programación Punteros Introducción a estructuras dinámicas Punteros estructuras dinámicas. Introducción! Las variables globales pertenecen al programa princil eisten desde que

Más detalles

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down).

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down). PLANTEMAIENTO DEL PROBLEMA Identificación de entradas y salidas Un algoritmo puede ser definido como la secuencia ordenada de pasos, sin ambigüedades, que conducen a la resolución de un problema dado y

Más detalles

Arreglos y Subrangos

Arreglos y Subrangos Arreglos y Subrangos Programación 1 InCo - FING Programación 1 Arreglos y Subrangos InCo - FING 1 / 27 Tipos de datos definidos por el programador Programación 1 Arreglos y Subrangos InCo - FING 2 / 27

Más detalles

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año - Trabajo práctico Nº 7 (Resolución de problemas Estructura: pila y cola). Realiza el programa de cada situación problemática. 1- Cargar en una pila n letras del abecedario.(n debe ser menor a 30) 2- En

Más detalles

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas Programación 2 8 - TADs Colecciones Conjuntos, Diccionarios y Tablas 1 El TAD SET (Conjunto) En el diseño de algoritmos, la noción de conjunto es usada como base para la formulación de tipos de datos abstractos

Más detalles

EXAMENES RESUELTOS DE PROGRAMACION I

EXAMENES RESUELTOS DE PROGRAMACION I EXAMENES RESUELTOS DE PROGRAMACION I Comentarios por Jose Antonio Vaqué EXAMEN DE septiembre 1994, Reserva Soluciones no oficiales 1.- Determinar los valores reales válidos en Modula-2: a) 56.2F-54 y 2.2

Más detalles

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño variable y uso de ciclos en otros contextos

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño variable y uso de ciclos en otros contextos Algoritmos y Programación Orientada a Objetos I y uso de ciclos en otros contextos Agenda Motivación Uso de ciclos en otros contextos Agenda Motivación Uso de ciclos en otros contextos Motivación En muchos

Más detalles

Datos Elementales y formato de un programa en Java

Datos Elementales y formato de un programa en Java Datos Elementales y formato de un programa en Java PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Datos, variables y mi primer programa 1 Introducción a la programación o Programa:

Más detalles

Ficheros. Introducción. Apertura y cierre de ficheros

Ficheros. Introducción. Apertura y cierre de ficheros s Introducción Podemos deir un fichero o archivo como una unidad de información almacenada en memoria secundaria, un disco, a la que se asigna un identificador único; los ficheros nos ofrecen la posibilidad

Más detalles

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje. Modulo 1. Introducción a los lenguajes de programación La solución de problemas mediante en uso de un computador nos lleva a desarrollar programas o aplicaciones, la construcción de estos programas debe

Más detalles

Unidades en PASCAL (Units)

Unidades en PASCAL (Units) Programación II - Prof. Alejandro H. Gonzalez - 1 Unidades en PASCAL (Units) Aquellos que quieran probar los ejercicios de TAD en Pc pueden utilizar las UNITS de Pascal. En este documento se explican los

Más detalles

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica. EQUIVALENCIAS BÁSICAS ENTRE PASCAL Y C A continuación se presentan algunas equivalencias básicas entre estos lenguajes de programación : Operadores en lenguaje C: Operador Descripción % Módulo = Asignación

Más detalles

METODOLOGÍA DE LA PROGRAMACIÓN

METODOLOGÍA DE LA PROGRAMACIÓN IV.1.- PROGRAMACIÓN PROCEDIMENTAL. UNIVERSIDAD DE MALAGA DPTO. DE LENGUAJES Y C. DE LA COMPUTACION E.T.S. DE INGENIERIA INFORMATICA INGENIERIA INFORMATICA METODOLOGÍA DE LA PROGRAMACIÓN (CURSO 2006-2007)

Más detalles

Estructuras de control

Estructuras de control Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando

Más detalles

Los Tipos Abstractos de Datos. Estructuras de Datos y Algoritmos 03/04

Los Tipos Abstractos de Datos. Estructuras de Datos y Algoritmos 03/04 Los Tipos Abstractos de Datos Estructuras de Datos y Algoritmos 03/04 Qué son los TAD s? Metodología de programación con TAD s Especificación Algebraica de TAD s Qué son los TAD s? Con los lenguajes de

Más detalles

Tipo de Datos Abstractos y Programación Orientada a Objetos

Tipo de Datos Abstractos y Programación Orientada a Objetos Tipo de Datos Abstractos y Programación Orientada a Objetos DISEÑO Y PARADIGMAS DE LENGUAJES ING. EN INFORMÁTICA/ING. EN COMPUTACIÓN DEPARTAMENTO DE INFORMÁTICA UNIVERSIDAD NACIONAL DE SAN LUIS ARGENTINA

Más detalles

Programación Introducción al curso

Programación Introducción al curso Programación 2 1 - Introducción al curso Objetivos del curso Presentar y analizar las estructuras de datos y algoritmos que forman la base para la resolución de problemas en computación; Introducir nociones

Más detalles

La Máquina de Acceso Aleatorio (Random Access Machine)

La Máquina de Acceso Aleatorio (Random Access Machine) La Máquina de Acceso Aleatorio (Random Access Machine) Nuestro modelo de cómputo secuencial es la máquina de acceso aleatorio (RAM, Random Access Machine) mostrada en la Figura 2.1, y que consiste de:

Más detalles

Un. VIII. Generación de Código Objeto

Un. VIII. Generación de Código Objeto Un. VIII. Generación de Código Objeto 8.1 Lenguaje Máquina Es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. El lenguaje máquina solo es entendible por las computadoras.

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II)

Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II) Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II) Por Pablo Reyes Grupo Danysoft mayo de 2001 - (902) 123146 www.danysoft.com Segunda parte Este artículo es el segundo de una

Más detalles

Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones)

Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones) Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones) Dr. Sergio A. Gómez http://cs.uns.edu.ar/~sag Departamento de Ciencias e Ingeniería de la

Más detalles

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de

Más detalles

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE) Repaso Lenguaje C OBJETOS Variables Constantes Variable: objeto del ambiente cuyo contenido puede cambiar. Constante: objeto cuyo contenido no puede cambiar. Variables: - un nombre que la identifica. Deben

Más detalles

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3: 3 - Paradigmas de Programación

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3: 3 - Paradigmas de Programación 3 - Paradigmas de Programación En los inicios los lenguajes de programación imitaron y abstrajeron las operaciones de una computadora, lo cual trajo aparejado que el tipo de computadora para el cual fueron

Más detalles

Estructuras dinámicas lineales (i)

Estructuras dinámicas lineales (i) Estructuras dinámicas lineales (i) Introducción En la lección anterior se explicaron los conceptos de dinámicas y puntero; vimos la forma en que se implementan dichas tanto en la notación algorítmica como

Más detalles

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles.

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles. 26. Representación de números. Conversiones 26.1. Representación y conversión. Los números son representados internamente, en un computador digital, en sistema binario. Externamente se representan mediante

Más detalles

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Cuando la complejidad de los problemas aumenta, la tarea de hallar una solución

Más detalles

Lenguajes de Programación Programación funcional

Lenguajes de Programación Programación funcional Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una

Más detalles

Introducción a Python Qué es Python?

Introducción a Python Qué es Python? Introducción a Python Qué es Python? Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Se trata de un lenguaje de programación

Más detalles

Segundo Parcial de Programación 2 7 de junio de 2017

Segundo Parcial de Programación 2 7 de junio de 2017 Instituto de Computación. Facultad de Ingeniería. Universidad de la República Segundo Parcial de Programación 2 7 de junio de 2017 Problema 1 (30 puntos) Considere un TAD T que permita almacenar a lo sumo

Más detalles

Ingeniería del software I 9 - Diseño detallado

Ingeniería del software I 9 - Diseño detallado Diseño detallado Ingeniería del software I 9 - Diseño detallado El diseño de alto nivel no especifica la lógica. Esto es incumbencia del diseño detallado. En este sentido, una notación textual provee mejor

Más detalles

Programación Orientada o Objetos

Programación Orientada o Objetos Programación Orientada o Objetos Programación digital II Escuela de Sistemas Facultad de Ingeniería Profesor: Gilberto Diaz Programación Orientada a Objetos En 1970 Dennis Ritchie y Brian Kernigan crearon

Más detalles

Definición de Memoria

Definición de Memoria Arquitectura de Ordenadores Representación de Datos en Memoria Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Definición de Memoria DRM-1 La memoria

Más detalles

3.2. Programación estructurada. Principal. Modulo 1 Modulo 2 Modulo 3 Modulo 4. Modulo Modulo Modulo 3 1 Modulo 4 1 Modulo 4 2. Pág.

3.2. Programación estructurada. Principal. Modulo 1 Modulo 2 Modulo 3 Modulo 4. Modulo Modulo Modulo 3 1 Modulo 4 1 Modulo 4 2. Pág. CAP. 3. PROGRAMACION ESTRUCTURADA 3.1. Técnicas de programación Las herramientas de programación fundamentalmente los diagramas de flujo, son las representaciones gráficas utilizada para el diseño de algoritmos

Más detalles

Tema 2.- Ordenación (Parte I)

Tema 2.- Ordenación (Parte I) En la elaboración de estos apuntes han participado los siguientes alumnos: Helena Hernández Obregón (Curso 200/2002), Eduardo Quevedo, Raquel González y Aarón Asencio (Curso 2003/200). Actualizado por

Más detalles

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS A.- ASPECTOS FUNDAMENTALES DEL CÓDIGO ORIENTADO A OBJETOS MÓDULOS DE CÓDIGO: El código en Visual Basic se almacena en módulos. Hay tres tipos de módulos: de formulario,

Más detalles

Este es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura.

Este es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura. Arreglos en Pascal 1.- Introducción a los Arreglos. Algunos de los tipos de datos que vimos eran los tipos INTEGER, CHAR, BOOLEAN, etc.. Un arreglo, mas que un tipo de dato es una estructura que nos permite

Más detalles

PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88

PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88 PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88 REPASO CONCEPTO DE PROGRAMA ANTES se tenían sistemas cableados Datos Secuencia de funciones aritmético/lógicas Resultados Programación en hardware: cuando cambiamos

Más detalles

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal. LENGUAJE DE PROGRAMACIÓN TURBO PASCAL El lenguaje de programación de alto nivel Pascal fue diseñado el 1968 por Niklaus Wirth con una finalidad eminentemente pedagógica El 1983, el Pascal fue estandarizado

Más detalles

EXAMENES RESUELTOS DE PROGRAMACION I

EXAMENES RESUELTOS DE PROGRAMACION I EXAMENES RESUELTOS DE PROGRAMACION I Comentarios por Jose Antonio Vaqué EXAMEN DE septiembre 1994 Soluciones no oficiales 1.- Cuál de las siguientes sentencias es incorrecta?: VAR A : ARRAY [0..3] OF ARRAY

Más detalles

Examen de Lenguajes de Alto Nivel

Examen de Lenguajes de Alto Nivel Cuestiones (4 cuestiones, 4 puntos en total) Examen de Lenguajes de Alto Nivel Febrero 2005 1) Escribir el cuerpo del paquete cuya especificación se muestra debajo, de modo que el procedimiento Abre abra

Más detalles

FUNDAMENTOS DE OBJECT PASCAL

FUNDAMENTOS DE OBJECT PASCAL FUNDAMENTOS DE OBJECT PASCAL 1. ASPECTOS GENERALES DE LA SINTAXIS Los bloques de código quedan delimitados por y end. Se usa punto y coma como separador de sentencias de código. Comentarios: - ias líneas:

Más detalles

Lenguaje de Programación: C++ Repaso de Material C++

Lenguaje de Programación: C++ Repaso de Material C++ UG Lenguaje de Programación: C++ Repaso de Material C++ Universidad de Guanajuato Octubre 2010 Variables Tipos de Variables Operadores Variable Para poder leer algo, necesitamos un lugar donde poner lo

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 1 Problemas, Soluciones y Programas Marcela Hernández Hoyos Solucionar un Problema = Construir un Programa Problema Programador Herramientas y Lenguajes Análisis

Más detalles

Introducción a la Computación (Matemática)

Introducción a la Computación (Matemática) Introducción a la Computación (Matemática) Primer Cuatrimestre de 2016 Tipos Abstractos de Datos 1 Problema: Agenda Queremos programar una agenda de contactos. De cada persona nos interesa guardar: Nombre

Más detalles

Estructura de Datos y de la Información. Tema 1: Introducción a los tipos abstractos de datos

Estructura de Datos y de la Información. Tema 1: Introducción a los tipos abstractos de datos Estructura de Datos y de la Información Tema 1: Introducción a los tipos abstractos de datos Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade

Más detalles

Segundo parcial de Programación 2

Segundo parcial de Programación 2 Generalidades: Segundo parcial de Programación 2 a. La prueba es individual y sin material. b. La duración es 3hs. c. Sólo se contestan dudas acerca de la letra. 8 de Julio de 2016 d. Escriba las hojas

Más detalles

Práctica 2 - Manejo de estructuras de datos y punteros

Práctica 2 - Manejo de estructuras de datos y punteros Práctica 2 - Manejo de estructuras de datos y punteros Organización del Computador 2 1er Cuatrimestre 2017 1. Estructuras estáticas: Vectores y Matrices Ejercicio 1 Para cada uno de los siguientes ítems,

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

Unidad I: Introducción a las estructuras de datos

Unidad I: Introducción a las estructuras de datos Unidad I: Introducción a las estructuras de datos 1.1 Tipos de datos abstractos (TDA) Los tipos de datos abstractos (TDA) encapsulan datos y funciones que trabajan con estos datos. Los datos no son visibles

Más detalles

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. Indíce Algoritmo Elementos de un algoritmo: Variables, Constantes, Expresiones Datos: Definición y

Más detalles

TEMA 2 Estructuras de datos lineales

TEMA 2 Estructuras de datos lineales TEMA 2 Estructuras de datos lineales 1 Objetivos Conocer la especificación algebraica de las principales estructuras de datos lineales: Lista, pila y cola Conocer diferentes alternativas sobre el diseño

Más detalles

GUIA 24: REPERTORIO DE INSTRUCCIONES

GUIA 24: REPERTORIO DE INSTRUCCIONES Prof Sandro Costantini GUIA 24: INSTRUCCIONES Las instrucciones maquinas son las acciones elementales que puede ejecutar un computador Una acción compleja deberá codificarse como una secuencia de instrucciones

Más detalles

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año - Trabajo práctico Nº 7 (Resolución de problemas Estructura: pila y cola). Realiza el programa de cada situación problemática. 1- Cargar en una pila n letras del abecedario.(n debe ser menor a 30) 2- En

Más detalles

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador Ejercicios del Tema 3. Fundamentos de la programación en ensamblador Ejercicio 1. Dada la siguiente expresión de un lenguaje de alto nivel int a = 6; int b = 7; int c = 3; int d; d = (a+b) * (a+b); Indique

Más detalles

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL.

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL. 8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL. PROCEDIMIENTOS. CONCEPTO Un procedimiento es un programa que realiza una tarea específica. Puede recibir cero o más valores del

Más detalles

Tipos Recursivos de Datos

Tipos Recursivos de Datos 1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),

Más detalles

Introducción al Lenguaje de Programación Ada

Introducción al Lenguaje de Programación Ada Instrumentación de Tiempo Real Introducción al Lenguaje de Programación Ada Mario Aldea Rivas Departamento de Electrónica y Computadores Universidad de Cantabria GRUPO DE COMPUTADORES Y TIEMPO REAL Mario

Más detalles

Estructura de Datos y de la Información. Tema 1: Gestión dinámica de la memoria. Departamento de Computación Universidade da Coruña, España.

Estructura de Datos y de la Información. Tema 1: Gestión dinámica de la memoria. Departamento de Computación Universidade da Coruña, España. Estructura de Datos y de la Información Tema 1: Gestión dinámica de la memoria Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Más detalles

Estructuras Dinámicas de datos.

Estructuras Dinámicas de datos. Estructuras Dinámicas de datos. Las estructuras dinámicas de datos son estructuras que crecen a medida que ejecuta un programa. Una estructura dinámica de datos es una colección de elementos llamadas nodos

Más detalles

Paso de parámetros. Universidad Europea de Madrid. Todos los derechos reservados.

Paso de parámetros. Universidad Europea de Madrid. Todos los derechos reservados. Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

6. Listas Generalizadas

6. Listas Generalizadas 6. Listas Generalizadas Una lista enlazada es una estructura de datos en la cual los objetos están organizados linealmente. Listas enlazadas proveen una forma simple de estructuar conjuntos dinámicos de

Más detalles

TEMA 0 Gestión de Memoria Dinámica

TEMA 0 Gestión de Memoria Dinámica TEMA 0 Gestión de Memoria Dinámica ESTRUCTURAS DE DATOS 1 Objetivos Tema preliminar para entender el uso de la herramienta básica en la gestión de memoria dinámica: punteros Objetivos: Conocer el concepto

Más detalles

Programación en Visual Basic Ricardo Rodríguez García

Programación en Visual Basic Ricardo Rodríguez García Manual Básico de Programación en Visual Basic 1.- Estructura de un proyecto Visual Basic Los programas o aplicaciones desarrolladas en Visual Basic van a constituir un único paquete que denominaremos proyecto.

Más detalles

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características

Más detalles

Teoría 7. Lenguaje C. Int. a la Computación- Int. a la Programación Fund. De la Informática

Teoría 7. Lenguaje C. Int. a la Computación- Int. a la Programación Fund. De la Informática Teoría 7 Primer Cuatrimestre - 2017 1 Etapas en el proceso de resolver un problema: 1- Comprender el problema: lograr una abstracción 4 Descomposición del problema. 2- Bosquejar una solución: 4 Determinar

Más detalles

TIPOS DE DATOS ABSTRACTOS

TIPOS DE DATOS ABSTRACTOS TIPOS DE DATOS ABSTRACTOS PROGRAMACIÓN I ARISTIDES DASSO, ANA FUNES Área de Programación y Metodologías de Desarrollo del Software Departamento de Informática Facultad de Ciencias Físico-Matemáticas y

Más detalles