Programación II. Relación de Ejercicios. Sonido e Imagen. Tema 1: Almacenamiento en Memoria Secundaria. Ficheros 2

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

Download "Programación II. Relación de Ejercicios. Sonido e Imagen. Tema 1: Almacenamiento en Memoria Secundaria. Ficheros 2"

Transcripción

1 Programación II Relación de Ejercicios UNIVERSIDAD DE MÁLAGA Dpto. Lenguajes y CC. Computación E.T.S.I. Telecomunicación Sonido e Imagen Contenido Tema : Almacenamiento en Memoria Secundaria. Ficheros Tema : Tipos Abstractos de Datos 3 Tema.: Programacion Modular Tema.: Tipos Abstractos de Datos Tema 3: Gestión de Memoria Dinámica 8 Tema 3.: Listas Enlazadas Tema 3.: Abstracción en la Gestión de Memoria Dinámica Tema 4: Introducción a la Programación Orientada a Objetos 5 Tema 5: Colecciones 9 Prácticas de Laboratorio Práctica : Almacenamiento Persistente de Datos Práctica : Tipos Abstractos de Datos (I) Práctica 3: Tipos Abstractos de Datos (II) Práctica 4: Tipos Abstractos de Datos (III) Práctica 5: Gestión de Memoria Dinámica Práctica 6: Abstracción en la Gestión de Memoria Dinámica (I) Práctica 7: Abstracción en la Gestión de Memoria Dinámica (II) Práctica 8: Introducción a la Programación Orientada a Objetos Práctica 9: La Clase Vector de la Biblioteca Estándar Prácticas de Autoevaluación 4 Gestión de Factoría de Androides Gestión de Tareas Periódicas cc Esta obra se encuentra bajo una licencia Reconocimiento-NoComercial-CompartirIgual 4. Internacional (CC BY-NC-SA 4.) de Creative Commons. Véase

2 Tema : Almacenamiento en Memoria Secundaria. Ficheros. Escribir un programa que cuente el número de letras minúsculas, de letras mayúsculas y de dígitos de un fichero.. Escribir un programa con la opción de encriptar y de desencriptar un fichero de texto, dependiendo de la extensión del fichero de entrada. La encriptación (codificación) consiste en que dado un fichero de texto de entrada (extensión txt) genere otro fichero de salida encriptado (extensión cod). Esta codificación consiste reemplazar cada letra por la tercera siguiente de forma circular (ej. a d, b e,, w z, x a, y b, z c). La opción de desencriptado consiste en leer un fichero codificado (extensión cod) y recuperar la información original en un fichero de texto (extensión txt). 3. Escribir un programa para procesar información sobre los clientes de una agencia matrimonial. El programa debe crear un fichero de texto (cuyo nombre se leerá por teclado) en el que se guarde la información de un número indeterminado de personas. La información que se guardará por cada persona será: Nombre: Edad Género Arte Deporte Libros Música Cadena de caracteres. int. char (M/F). char (S/N). char (S/N). char (S/N). char (S/N). La información correspondiente a cada persona se leerá del teclado. El proceso finalizará cuando se teclee un campo Nombre que esté vacío. 4. Ampliar el programa que procesa clientes de una agencia matrimonial para que tome los datos de todos los candidatos a estudiar del fichero del ejercicio anterior, lea el cliente del teclado y finalmente genere como resultado un fichero (cuyo nombre será leído desde teclado) con toda la información correspondiente a los candidatos aceptados. Una persona del fichero de entrada se considerará aceptable como candidato si tiene diferente género y por lo menos tres aficiones comunes con respecto al aspirante introducido por pantalla. (El programa debe ser capaz de trabajar con cualquier número de personas en el fichero de entrada). 5. Codifique un programa que cree un fichero para contener los datos relativos a los artículos de un almacén. Para cada artículo habrá de guardar la siguiente información: Código del artículo Nombre del artículo Existencias Precio Numérico Cadena de caracteres Numérico Numérico Se deberá pedir datos de cada artículo por teclado hasta que se teclee (cero) como código de artículo. 6. Escriba un programa que tome como entrada el fichero del ejercicio anterior y una condición sobre los campos existencias o precio. La condición podrá ser: <campo> [<,<=,>,>=, ==,! =] <número> Este programa debe generar como salida un fichero que contenga todos aquellos artículos para los que se cumple la condición de entrada.

3 Tema : Tipos Abstractos de Datos Tema.: Programacion Modular Diseñe e implemente los siguientes Módulos, dentro del espacio de nombres umalcc, así como programas de utilización que permitan comprobar su funcionamiento.. Diseñe un módulo que proporcione soporte adecuado a la arímetica con números complejos. El módulo deberá definir el tipo Complejo, así como los siguientes subprogramas: void sumar ( Complejo & r, const Complejo & a, const Complejo & b) ; // Devuelve un numero complejo ( r ) que c o n t i e n e e l r e s u l t a d o de // sumar l o s numeros complejos ( a ) y ( b ). void restar ( Complejo & r, const Complejo & a, const Complejo & b) ; // Devuelve un numero complejo ( r ) que c o n t i e n e e l r e s u l t a d o de // r e s t a r l o s numeros complejos ( a ) y ( b ). void multiplicar ( Complejo & r, const Complejo & a, const Complejo & b) ; // Devuelve un numero complejo ( r ) que c o n t i e n e e l r e s u l t a d o de // m u l t i p l i c a r l o s numeros complejos ( a ) y ( b ). void dividir ( Complejo & r, const Complejo & a, const Complejo & b) ; // Devuelve un numero complejo ( r ) que c o n t i e n e e l r e s u l t a d o de // d i v i d i r l o s numeros complejos ( a ) y ( b ). bool iguales ( const Complejo & a, const Complejo & b) ; // Devuelve t r u e s i l o s numeros complejos ( a ) y ( b ) son i g u a l e s. void escribir ( const Complejo & a) ; // Muestra en p a n t a l l a e l numero complejo ( a ) void leer ( Complejo & a) ; // Lee de t e c l a d o e l v a l o r d e l numero complejo ( a ). // Lee l a p a r t e r e a l y l a p a r t e imaginaria d e l numero. Diseñe un módulo que proporcione soporte adecuado a la arímetica con números racionales. El módulo deberá definir el tipo Racional, así como los subprogramas adecuados teniendo en cuenta las siguientes consideraciones: Los números racionales se representan mediante fracciones, donde tanto el numerador como denominador son de tipo int). Las fracciones se representarán en todo momento normalizadas (simplificadas): Es recomendable implementar un subprograma privado de simplificación de la fracción mediante el cálculo del máximo común divisor (m.c.d.) del numerador y el denominador y su posterior división por dicho m.c.d. Para calcular el máximo común divisor de dos numeros enteros positivos n y m, el algoritmo de Euclides funciona como se indica a continuación: a) Si n < m, entonces se intercambian los valores de n y m (para asegurarnos que n siempre sea mayor o igual que m). b) Si el valor de m es distinto de, entonces sea r el resto de la división entera entre n y m; después modificamos los valores de n y m de la siguiente forma: n toma ahora el valor de m y m toma ahora el valor de r (el resto de la división entera entre n y m calculado anteriormente), y se repite este proceso especificado hasta que el valor de m sea igual a. c) Finalmente, cuando el proceso iterativo acaba, el valor de n es el máximo común divisor de ambos números. Para simplificar la determinación del signo de la fracción puede asumirse que el denominador de la fracción es siempre positivo (por lo que una fracción de signo negativo tendrá un numerador de signo negativo y un denominador de signo positivo). El número cero se guardará siempre en su forma canónica /. Debe evitarse en todo momento la asignación de cero a un denominador. Debe proporcionar subprogramas para leer, escribir, sumar, restar, multiplicar y dividir fracciones. Pueden también suministrarse métodos para comparación de números racionales (iguales, menor, etc). void sumar ( Racional & r, const Racional & r, const Racional & r ); // Asigna a l numero r a c i o n a l ( r ) e l r e s u l t a d o de // sumar l o s numeros r a c i o n a l e s ( r ) y ( r ) void restar ( Racional & r, const Racional & r, const Racional & r ); 3

4 // Asigna a l numero r a c i o n a l ( r ) e l r e s u l t a d o de // r e s t a r l o s numeros r a c i o n a l e s ( r ) y ( r ) void multiplicar ( Racional & r, const Racional & r, const Racional & r ); // Asigna a l numero r a c i o n a l ( r ) e l r e s u l t a d o de // m u l t i p l i c a r l o s numeros r a c i o n a l e s ( r ) y ( r ) void dividir ( Racional & r, const Racional & r, const Racional & r ); // Asigna a l numero r a c i o n a l ( r ) e l r e s u l t a d o de // d i v i d i r l o s numeros r a c i o n a l e s ( r ) y ( r ) void escribir ( const Racional & r); // Muestra en p a n t a l l a e l v a l o r d e l numero r a c i o n a l ( r ) void leer ( Racional & r); // Lee de t e c l a d o e l v a l o r d e l numero r a c i o n a l ( r ) bool igual ( const Racional & r, const Racional & r ); // Devuelve t r u e s i e l numero r a c i o n a l ( r ) es i g u a l a ( r ) bool menor ( const Racional & r, const Racional & r ); // Devuelve t r u e s i e l numero r a c i o n a l ( r ) es menor que ( r ) 3. Diseñe un módulo que proporcione soporte adecuado a la manipulación de polinomios de grados positivos menores que. El módulo deberá definir el tipo Polinomio, así como las siguientes operaciones: double evaluar ( const Polinomio & a, double x); // Devuelve e l r e s u l t a d o de e v a l u a r e l polinomio ( a ) // para un v a l o r de ( x ) e s p e c i f i c a d o como parametro void derivar ( Polinomio & r, const Polinomio & a); // PRECOND: (&r!= &a ) // Devuelve un polinomio ( r ) que c o n t i e n e e l r e s u l t a d o de // c a l c u l a r l a d e r i v a d a d e l polinomio ( a ) void sumar ( Polinomio & r, const Polinomio & a, const Polinomio & b); // PRECOND: ((& r!= &a)&&(&r!= &b ) ) // Devuelve un polinomio ( r ) que c o n t i e n e e l r e s u l t a d o de // sumar l o s polinomios ( a ) y ( b ) void escribir ( const Polinomio & a) ; // Muestra en p a n t a l l a e l contenido d e l polinomio ( a ) void leer ( Polinomio & a) ; // Lee de t e c l a d o e l v a l o r d e l polinomio ( a ) // Lee pares de c o e f i c i e n t e y grado hasta que e l c o e f i c i e n t e sea cero Tema.: Tipos Abstractos de Datos Diseñe e implemente los siguientes TADs, dentro del espacio de nombres umalcc, así como programas de utilización que permitan comprobar su funcionamiento.. TAD número complejo que defina los siguientes métodos públicos: class Complejo { public : Complejo () ; // Constructor por Defecto Complejo ( double parte_real, double parte_imag ) ; // Constructor e s p e c i f i c o double parte_real () const ; // Devuelve l a p a r t e r e a l d e l numero complejo double parte_imag () const ; // Devuelve l a p a r t e imaginaria d e l numero complejo void sumar ( const Complejo & a, const Complejo & b) ; // Asigna a l numero complejo ( a c t u a l ) e l r e s u l t a d o de // sumar l o s numeros complejos ( a ) y ( b ). void restar ( const Complejo & a, const Complejo & b) ; // Asigna a l numero complejo ( a c t u a l ) e l r e s u l t a d o de // r e s t a r l o s numeros complejos ( a ) y ( b ). void multiplicar ( const Complejo & a, const Complejo & b) ; // Asigna a l numero complejo ( a c t u a l ) e l r e s u l t a d o de // m u l t i p l i c a r l o s numeros complejos ( a ) y ( b ). void dividir ( const Complejo & a, const Complejo & b) ; // Asigna a l numero complejo ( a c t u a l ) e l r e s u l t a d o de // d i v i d i r l o s numeros complejos ( a ) y ( b ). bool igual ( const Complejo & b) const ; // Devuelve t r u e s i e l numero complejo ( a c t u a l ) es // i g u a l a l numero complejo ( b ) void escribir () const ; // Muestra en p a n t a l l a e l numero complejo ( a c t u a l ) 4

5 } ; void leer () ; // Lee de t e c l a d o e l v a l o r d e l numero complejo ( a c t u a l ). // Lee l a p a r t e r e a l y l a p a r t e imaginaria d e l numero. TAD polinomio de grados positivos menores que que defina los siguientes métodos públicos: class Polinomio { public : Polinomio (); // D e s t r u c t o r Polinomio (); // Constructor por Defecto Polinomio ( const Polinomio & p); // Constructor de copia Polinomio & operator =( const Polinomio & p); // Operador de Asignacion int max_grado () const ; // Devuelve e l mayor grado d e l polinomio a c t u a l // cuyo c o e f i c i e n t e es d i s t i n t o de cero void poner ( int e, double c); // Asigna e l c o e f i c i e n t e ( c ) a l termino de grado ( e ) // d e l polinomio a c t u a l double obtener ( int e) const ; // Devuelve e l c o e f i c i e n t e c o r r e s p o n d i e n t e a l // termino de grado ( e ) d e l polinomio a c t u a l double evaluar ( double x) const ; // Devuelve e l r e s u l t a d o de e v a l u a r e l polinomio a c t u a l // para un v a l o r de ( x ) e s p e c i f i c a d o como parametro void derivar ( const Polinomio & a); // PRECOND: ( t h i s!= &a ) // Asigna a l polinomio a c t u a l e l r e s u l t a d o de // c a l c u l a r l a d e r i v a d a d e l polinomio ( a ) void sumar ( const Polinomio & a, const Polinomio & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) // Asigna a l polinomio a c t u a l e l r e s u l t a d o de // sumar l o s polinomios ( a ) y ( b ) void escribir () const ; // Muestra en p a n t a l l a e l contenido d e l polinomio a c t u a l void leer (); // Lee de t e c l a d o e l v a l o r d e l polinomio a c t u a l // Lee pares de c o e f i c i e n t e y grado hasta que e l c o e f i c i e n t e sea cero }; 3. Un conjunto de números enteros es una colección de elementos homogéneos (números enteros) sin repetición y ninguna relación de orden entre ellos (no ordenados y sin repetición). Defina un TAD Conjunto de números enteros que defina los siguientes métodos públicos: class Conjunto { public : Conjunto (); // D e s t r u c t o r Conjunto (); // Constructor por Defecto : conjunto v a c i o Conjunto ( const Conjunto & c); // Constructor de copia Conjunto & operator =( const Conjunto & c); // Operador de Asignacion void clear (); // Elimina todos l o s elementos d e l conjunto a c t u a l ( queda v a c i o ) bool es_vacio () const ; // Devuelve t r u e s i e l conjunto a c t u a l e s t a v a c i o void incluir ( int e); // I n c l u y e e l elemento ( e ) en e l conjunto a c t u a l ( s i n r e p e t i c i o n ) void eliminar ( int e); // Elimina e l elemento ( e ) d e l conjunto a c t u a l bool pertenece ( int e) const ; // Devuelve t r u e s i e l elemento ( e ) p e r t e n e c e a l conjunto a c t u a l bool es_subconjunto ( const Conjunto & a) const ; // Devuelve t r u e s i e l conjunto a c t u a l es subconjunto d e l conjunto ( a ) void union_conj ( const Conjunto & a, const Conjunto & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) 5

6 }; // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a union de l o s conjuntos ( a ) y ( b ) void interseccion ( const Conjunto & a, const Conjunto & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a i n t e r s e c c i o n de l o s conjuntos ( a ) y ( b ) void diferencia ( const Conjunto & a, const Conjunto & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a d i f e r e n c i a de l o s conjuntos ( a ) y ( b ) void diferencia_simetrica ( const Conjunto & a, const Conjunto & b); // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a d i f e r e n c i a s i m e t r i c a de l o s conjuntos ( a ) y ( b ) void escribir () const ; // Muestra en p a n t a l l a e l contenido d e l conjunto a c t u a l void leer (); // Lee de t e c l a d o e l v a l o r d e l conjunto a c t u a l, 4. TAD matriz matemática de números reales (de dimensiones menores de N N) que defina los siguientes métodos públicos: class Matriz { public : Matriz (); // D e s t r u c t o r Matriz (); // Constructor por Defecto : matriz v a c i a Matriz ( int nfils, int ncols ); // Constructor e s p e c i f i c o : crea matriz de ( n f i l s ) x ( n c o l s ) con v a l o r e s Matriz ( const Matriz & m); // Constructor de copia Matriz & operator =( const Matriz & m); // Operador de Asignacion void clear ( int nfils, int ncols ); // Elimina todos l o s elementos de l a matriz a c t u a l, y asigna // a l a matriz a c t u a l una matriz de ( n f i l s ) x ( n c o l s ) con v a l o r e s int nfils () const ; // Devuelve e l numero de f i l a s de l a matriz a c t u a l int ncols () const ; // Devuelve e l numero de columnas de l a matriz a c t u a l void poner ( int f, int c, double val ); // PRECOND: ( <= f && f < n f i l s ( ) && <= c && c < n c o l s ( ) ) // Asigna e l v a l o r ( v a l ) a l elemento de l a f i l a ( f ) // y columna ( c ) de l a matriz a c t u a l double obtener ( int f, int c) const ; // PRECOND: ( f < n f i l s ( ) && c < n c o l s ( ) ) // Devuelve e l v a l o r d e l elemento de l a f i l a ( f ) // y columna ( c ) de l a matriz a c t u a l void sumar ( const Matriz & a, const Matriz & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) // Asigna a l a matriz a c t u a l e l r e s u l t a d o de // sumar l a s matrices ( a ) y ( b ) void restar ( const Matriz & a, const Matriz & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) // Asigna a l a matriz a c t u a l e l r e s u l t a d o de // r e s t a r l a s matrices ( a ) y ( b ) void multiplicar ( const Matriz & a, const Matriz & b); // PRECOND: ( ( t h i s!= &a)&&( t h i s!= &b ) ) // Asigna a l a matriz a c t u a l e l r e s u l t a d o de // m u l t i p l i c a r l a s matrices ( a ) y ( b ) void escribir () const ; // Muestra en p a n t a l l a e l contenido de l a matriz a c t u a l void leer (); // Lee de t e c l a d o e l v a l o r de l a matriz a c t u a l, // Lee n f i l s, n c o l s y l o s v a l o r e s de l o s elementos }; 5. Un TAD Lista de números enteros es una secuencia de elementos homogéneos (números enteros), donde cada elemento ocupa una determinada posición dentro de la secuencia, de tal forma que se puede acceder a cada elemento por la posición donde se encuentra. Así mismo, también es posible insertar y eliminar 6

7 elementos de la secuencia en la posición indicada, manteniendo el mismo orden posicional de los elementos en la secuencia. Diseñe e implemente el TAD que proporcione los siguientes métodos públicos: class ListaInt { public : ListaInt () ; // D e s t r u c t o r ListaInt () ; // Constructor por Defecto ListaInt ( const ListaInt & o) ; // Constructor de copia ListaInt & operator = ( const ListaInt & o) ; // Operador de Asignacion bool llena () const ; // Devuelve t r u e s i e l numero de elementos almacenados // al c a nz a l a capacidad maxima de almacenamiento int size () const ; // Devuelve e l numero de elementos almacenados void clear () ; // Elimina todos l o s elementos de l a l i s t a a c t u a l ( queda v a c i a ) void insertar ( int pos, int dato ) ; // PRECOND: (! l l e n a ( ) && <= pos && pos <= s i z e ( ) ) // I n s e r t a ( dato ) en l a l i s t a a c t u a l en l a p o s i c i o n ( pos ) void eliminar ( int pos ) ; // PRECOND: ( <= pos && pos < s i z e ( ) ) // Elimina de l a l i s t a a c t u a l e l elemento que ocupa l a p o s i c i o n ( pos ) int acceder ( int pos ) const ; // PRECOND: ( <= pos && pos < s i z e ( ) ) // Devuelve e l elemento de l a l i s t a a c t u a l que ocupa l a p o s i c i o n ( pos ) void modificar ( int pos, int dato ); // PRECOND: ( <= pos && pos < s i z e ( ) ) // Asigna ( dato ) a l elemento de l a l i s t a a c t u a l que ocupa l a p o s i c i o n ( pos ) } ; 7

8 Tema 3: Gestión de Memoria Dinámica Tema 3.: Listas Enlazadas. Diseñe un módulo (programación modular) que proporcione soporte adecuado a la manipulación de listas enlazadas en memoria dinámica (véase siguiente figura). El módulo deberá definir el tipo PNodo como un puntero a un registro en memoria dinámica de tipo Nodo que contiene un enlace al siguiente nodo, así como un dato de tipo int. Además, el módulo deberá definir los siguientes subprogramas. Diseñe también un módulo principal que permita comprobar la corrección del módulo lista implementado. lista: void inicializa ( PNodo & lista ) ; // I n i c i a l i z a ( l i s t a ) a una l i s t a v a c i a void destruir ( PNodo & lista ) ; // Destruye todos l o s elementos de l a l i s t a, l i b e r a n d o // todos l o s nodos de memoria dinamica. ( l i s t a ) queda v a c i a void escribir ( PNodo lista ) ; // Muestra en p a n t a l l a e l contenido de ( l i s t a ) PNodo buscar ( PNodo lista, int dt) ; // Devuelve un puntero a l nodo que c o n t i e n e e l elemento // i g u a l a ( dt ). Si no se encuentra, entonces d e v u e l v e NULL void insertar_principio ( PNodo & lista, int dt) ; // I n s e r t a un elemento a l p r i n c i p i o de ( l i s t a ) void insertar_final ( PNodo & lista, int dt) ; // I n s e r t a un elemento a l f i n a l de ( l i s t a ) void insertar_ord ( PNodo & lista, int dt) ; // I n s e r t a un elemento de forma ordenada en ( l i s t a ), que debe e s t a r ordenada void eliminar_primero ( PNodo & lista ) ; // Elimina e l primer elemento de ( l i s t a ), s i e x i s t e void eliminar_ultimo ( PNodo & lista ) ; // Elimina e l ultimo elemento de ( l i s t a ), s i e x i s t e void eliminar_elem ( PNodo & lista, int dt) ; // Elimina de ( l i s t a ) e l primer elemento i g u a l a ( dt ), s i e x i s t e PNodo situar ( PNodo lista, int pos ) ; // Devuelve un puntero a l nodo que se encuentra en l a p o s i c i o n // i n d i c a d a por ( pos ). La p o s i c i o n cero () i n d i c a e l primer nodo. // Si e l nodo no e x i s t e, entonces d e v u e l v e NULL void insertar ( PNodo & lista, int pos, int dt) ; // I n s e r t a en ( l i s t a ) un elemento en l a p o s i c i o n i n d i c a d a por ( pos ) void eliminar ( PNodo & lista, int pos ) ; // Elimina de ( l i s t a ) e l elemento de l a p o s i c i o n i n d i c a d a por ( pos ), s i e x i s t e PNodo duplicar ( PNodo lista ) ; // Devuelve un puntero a una nueva l i s t a r e s u l t a d o de d u p l i c a r en // memoria dinamica l a l i s t a r e c i b i d a como parametro PNodo leer () ; // Devuelve una l i s t a con l o s numeros l e i d o s de t e c l a d o ( en e l mismo // orden que son i n t r o d u c i d o s ) h asta que l e a e l numero ( que no es // i n t r o d u c i d o ) void eliminar_mayor ( PNodo & lista ) ; // Elimina e l mayor elemento de ( l i s t a ), s i e x i s t e void purgar ( PNodo & lista, int dt) ; // Elimina de ( l i s t a ) todos l o s elementos que sean i g u a l e s a ( dt ), s i e x i s t e n. Un conjunto de números enteros es una colección de elementos homogéneos (números enteros) sin repetición y ninguna relación de orden entre ellos (no ordenados y sin repetición). Un conjunto de elementos se puede representar mediante una lista enlazada, donde cada nodo contiene un elemento del conjunto. Por ejemplo el conjunto con los elementos {,, 3} puede ser representado por la siguiente lista enlazada: lista: 3 8

9 Diseñe un módulo (programación modular) que proporcione soporte adecuado a la manipulación de conjuntos de números enteros implementados mediante listas enlazadas en memoria dinámica (véase figura anterior). El módulo deberá definir el tipo Conjunto como un registro con un campo de tipo PNodo, que se define como un tipo puntero a un registro en memoria dinámica de tipo Nodo que contiene un enlace al siguiente nodo, así como un dato de tipo int. Además, el módulo deberá definir los siguientes subprogramas. Diseñe también un módulo principal que permita comprobar la corrección del módulo implementado. void inicializar ( Conjunto & c); // I n i c i a l i z a ( c ) a un conjunto v a c i o void destruir ( Conjunto & c); // Destruye todos l o s elementos d e l conjunto, l i b e r a n d o // todos l o s nodos de memoria dinamica. ( c ) queda v a c i o bool es_vacio ( const Conjunto & c) ; // Devuelve t r u e s i e l conjunto ( c ) e s t a v a c i o void incluir ( Conjunto & c, int e); // I n c l u y e e l elemento ( e ) en e l conjunto ( c ) ( s i n r e p e t i c i o n ) void eliminar ( Conjunto & c, int e); // Elimina e l elemento ( e ) d e l conjunto ( c ) bool pertenece ( const Conjunto & c, int e) ; // Devuelve t r u e s i e l elemento ( e ) p e r t e n e c e a l conjunto ( c ) void escribir ( const Conjunto & c) ; // Muestra en p a n t a l l a e l contenido d e l conjunto ( c ) void leer ( Conjunto & c); // Lee de t e c l a d o e l v a l o r d e l conjunto ( c ) bool es_subconjunto ( const Conjunto & a, const Conjunto & b) ; // Devuelve t r u e s i e l conjunto ( a ) es subconjunto d e l conjunto ( b ) void union_conj ( Conjunto & c, const Conjunto & a, const Conjunto & b); // Asigna a l conjunto ( c ) e l r e s u l t a d o de // l a union de l o s conjuntos ( a ) y ( b ) ( d u p l i c a l o s nodos ) void interseccion ( Conjunto & c, const Conjunto & a, const Conjunto & b); // Asigna a l conjunto ( c ) e l r e s u l t a d o de // l a i n t e r s e c c i o n de l o s conjuntos ( a ) y ( b ) ( d u p l i c a l o s nodos ) void diferencia ( Conjunto & c, const Conjunto & a, const Conjunto & b); // Asigna a l conjunto ( c ) e l r e s u l t a d o de // l a d i f e r e n c i a de l o s conjuntos ( a ) y ( b ) ( d u p l i c a l o s nodos ) void diferencia_simetrica ( Conjunto & c, const Conjunto & a, const Conjunto & b); // Asigna a l conjunto ( c ) e l r e s u l t a d o de // l a d i f e r e n c i a s i m e t r i c a de l o s conjuntos ( a ) y ( b ) ( d u p l i c a l o s nodos ) void copiar ( Conjunto & d, const Conjunto & o) ; // Copia ( d u p l i c a ) e l conjunto ( o ) en e l conjunto ( d ) Nota: aunque el orden en el que se encuentran los elementos en el conjunto no es importante, y por lo tanto, la opción más simple para incluir elementos en él podría ser insertar siempre los elementos por el principio, con objeto de prácticar los conceptos de listas enlazadas, en esta práctica, los elementos del conjunto serán insertados (sin repetición) ordenados en la lista enlazada donde se encuentran almacenados. 3. Diseñe un módulo (programación modular) que proporcione soporte adecuado a la manipulación de listas doblemente enlazadas en memoria dinámica (véase siguiente figura). El módulo deberá definir el tipo PNodo como un puntero a un registro en memoria dinámica de tipo Nodo que contiene un enlace al siguiente nodo, un enlace al nodo anterior, así como un dato de tipo int. Además, el módulo deberá definir los siguientes subprogramas. Diseñe también un módulo principal que permita comprobar la corrección del módulo lista implementado. lista: void inicializa ( PNodo & lista ) ; // I n i c i a l i z a ( l i s t a ) a una l i s t a v a c i a void destruir ( PNodo & lista ) ; // Destruye todos l o s elementos de l a l i s t a, l i b e r a n d o // todos l o s nodos de memoria dinamica. ( l i s t a ) queda v a c i a void escribir ( PNodo lista ) ; // Muestra en p a n t a l l a e l contenido de ( l i s t a ) PNodo buscar ( PNodo lista, int dt) ; // Devuelve un puntero a l nodo que c o n t i e n e e l elemento // i g u a l a ( dt ). Si no se encuentra, entonces d e v u e l v e NULL 9

10 void insertar_principio ( PNodo & lista, int dt) ; // I n s e r t a un elemento a l p r i n c i p i o de ( l i s t a ) void insertar_final ( PNodo & lista, int dt) ; // I n s e r t a un elemento a l f i n a l de ( l i s t a ) void insertar_ord ( PNodo & lista, int dt) ; // I n s e r t a un elemento de forma ordenada en ( l i s t a ), que debe e s t a r ordenada void eliminar_primero ( PNodo & lista ) ; // Elimina e l primer elemento de ( l i s t a ), s i e x i s t e void eliminar_ultimo ( PNodo & lista ) ; // Elimina e l ultimo elemento de ( l i s t a ), s i e x i s t e void eliminar_elem ( PNodo & lista, int dt) ; // Elimina de ( l i s t a ) e l primer elemento i g u a l a ( dt ), s i e x i s t e PNodo situar ( PNodo lista, int pos ) ; // Devuelve un puntero a l nodo que se encuentra en l a p o s i c i o n // i n d i c a d a por ( pos ). La p o s i c i o n cero () i n d i c a e l primer nodo. // Si e l nodo no e x i s t e, entonces d e v u e l v e NULL void insertar ( PNodo & lista, int pos, int dt) ; // I n s e r t a en ( l i s t a ) un elemento en l a p o s i c i o n i n d i c a d a por ( pos ) void eliminar ( PNodo & lista, int pos ) ; // Elimina de ( l i s t a ) e l elemento de l a p o s i c i o n i n d i c a d a por ( pos ), s i e x i s t e PNodo duplicar ( PNodo lista ) ; // Devuelve un puntero a una nueva l i s t a r e s u l t a d o de d u p l i c a r en // memoria dinamica l a l i s t a r e c i b i d a como parametro PNodo leer () ; // Devuelve una l i s t a con l o s numeros l e i d o s de t e c l a d o ( en e l mismo // orden que son i n t r o d u c i d o s ) h asta que l e a e l numero ( que no es // i n t r o d u c i d o ) void eliminar_mayor ( PNodo & lista ) ; // Elimina e l mayor elemento de ( l i s t a ), s i e x i s t e void purgar ( PNodo & lista, int dt) ; // Elimina de ( l i s t a ) todos l o s elementos que sean i g u a l e s a ( dt ), s i e x i s t e n Tema 3.: Abstracción en la Gestión de Memoria Dinámica. Un polinomio en x de grado arbitrario se puede representar mediante una lista enlazada, donde cada nodo contiene el coeficiente y el exponente de un término del polinomio, y donde los coeficientes con valor cero () no serán almacenados. Por ejemplo el polinomio 5x 4x 5 puede ser representado por la siguiente lista enlazada: lista: Diseñe e implemente el TAD polinomio que defina los siguientes métodos públicos, así como un programa para comprobar su funcionamiento: class Polinomio { public : Polinomio (); // D e s t r u c t o r Polinomio (); // Constructor por Defecto Polinomio ( const Polinomio & p); // Constructor de copia Polinomio & operator =( const Polinomio & p); // Operador de Asignacion int max_grado () const ; // Devuelve e l mayor grado d e l polinomio a c t u a l // cuyo c o e f i c i e n t e es d i s t i n t o de cero void poner ( int e, double c); // Asigna e l c o e f i c i e n t e ( c ) a l termino de grado ( e ) // d e l polinomio a c t u a l double obtener ( int e) const ; // Devuelve e l c o e f i c i e n t e c o r r e s p o n d i e n t e a l // termino de grado ( e ) d e l polinomio a c t u a l double evaluar ( double x) const ; // Devuelve e l r e s u l t a d o de e v a l u a r e l polinomio a c t u a l // para un v a l o r de ( x ) e s p e c i f i c a d o como parametro void derivar ( const Polinomio & a);

11 }; // Asigna a l polinomio a c t u a l e l r e s u l t a d o de // c a l c u l a r l a d e r i v a d a d e l polinomio ( a ) void sumar ( const Polinomio & a, const Polinomio & b); // Asigna a l polinomio a c t u a l e l r e s u l t a d o de // sumar l o s polinomios ( a ) y ( b ) void escribir () const ; // Muestra en p a n t a l l a e l contenido d e l polinomio a c t u a l void leer (); // Lee de t e c l a d o e l v a l o r d e l polinomio a c t u a l // Lee pares de c o e f i c i e n t e y grado hasta que e l c o e f i c i e n t e sea cero. Un conjunto de números enteros es una colección de elementos homogéneos (números enteros) sin repetición y ninguna relación de orden entre ellos (no ordenados y sin repetición). Un conjunto de elementos se puede representar mediante una lista enlazada, donde cada nodo contiene un elemento del conjunto. Por ejemplo el conjunto con los elementos {,, 3} puede ser representado por la siguiente lista enlazada: lista: 3 Diseñe e implemente el siguiente TAD conjunto de números enteros que defina los siguientes métodos públicos, así como un programa para comprobar su funcionamiento: class Conjunto { public : Conjunto (); // D e s t r u c t o r Conjunto (); // Constructor por Defecto : conjunto v a c i o Conjunto ( const Conjunto & c); // Constructor de copia Conjunto & operator =( const Conjunto & c); // Operador de Asignacion void clear (); // Elimina todos l o s elementos d e l conjunto a c t u a l ( queda v a c i o ) bool es_vacio () const ; // Devuelve t r u e s i e l conjunto a c t u a l e s t a v a c i o void incluir ( int e); // I n c l u y e e l elemento ( e ) en e l conjunto a c t u a l ( s i n r e p e t i c i o n ) void eliminar ( int e); // Elimina e l elemento ( e ) d e l conjunto a c t u a l bool pertenece ( int e) const ; // Devuelve t r u e s i e l elemento ( e ) p e r t e n e c e a l conjunto a c t u a l bool es_subconjunto ( const Conjunto & a) const ; // Devuelve t r u e s i e l conjunto a c t u a l es subconjunto d e l conjunto ( a ) void union_conj ( const Conjunto & a, const Conjunto & b); // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a union de l o s conjuntos ( a ) y ( b ) void interseccion ( const Conjunto & a, const Conjunto & b); // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a i n t e r s e c c i o n de l o s conjuntos ( a ) y ( b ) void diferencia ( const Conjunto & a, const Conjunto & b); // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a d i f e r e n c i a de l o s conjuntos ( a ) y ( b ) void diferencia_simetrica ( const Conjunto & a, const Conjunto & b); // Asigna a l conjunto a c t u a l e l r e s u l t a d o de // l a d i f e r e n c i a s i m e t r i c a de l o s conjuntos ( a ) y ( b ) void escribir () const ; // Muestra en p a n t a l l a e l contenido d e l conjunto a c t u a l void leer (); // Lee de t e c l a d o e l v a l o r d e l conjunto a c t u a l, }; 3. Se dispone de un procesador con varias etapas, y de unas determinadas tareas que se ejecutarán pasando sucesivamente por todas las etapas del procesador, desde la primera hasta la última. Como el procesador dispone de varias etapas, es posible que esté procesando simultáneamente diferentes tareas. Por tanto,

12 una tarea sólo podrá pasar a la siguiente etapa si ésta se encuentra libre. La siguiente figura muestra un procesador con cuatro etapas y dos tareas, la tarea T va ejecutándose por la etapa e y la tarea T va ejecutándose por la etapa e4. procesador t t e e e3 e4 Se debe diseñar la estructura de datos necesaria para representar la información del estado del procesador en cada momento. Para ello, se sigue el esquema mostrado en la siguiente figura. Como se puede observar cada etapa se representa con dos elementos, una lista de nodos intermedios con tantos nodos como réplicas (véase más adelante) haya de la etapa (en el ejemplo sólo se muestra una réplica por cada etapa) y los correspondientes nodos de etapa. Cada nodo de etapa contendrá su identificador, el número de la tarea que está ejecutando (un número cero indica que está libre, es decir, no está ejecutando ninguna tarea), y un puntero al primer nodo de la lista de nodos intermedios de la siguiente etapa. También se puede observar que la tarea T se está ejecutando en la etapa y la tarea T se está ejecutando en la etapa 4. procesador 3 4 Es posible que en un determinado momento interese ampliar la potencia de una determinada etapa. Para ello, se replicará dicha etapa haciendo tantos duplicados de la misma como se desee. Así mismo, es posible que interese reducir la potencia de una determinada etapa, para ello se eliminarán réplicas de la misma. Defina el TAD Procesador que implemente la estructura de datos especificada anteriormente, y que proporcione los siguientes métodos públicos, así mismo, también se deberá implementar un programa principal que permita su utilización: a) El Constructor recibe el número de etapas que tiene un determinado procesador, y crea la estructura base de étapas sin replicación y todas en estado inicial libre, como se muestra en la siguiente figura para un procesador de 4 etapas: procesador 3 4 b) El Destructor libera todos los recursos asociados al objeto que está siendo destruido. c) El método Mostrar muestra en pantalla la estructura interna de un procesador. Por ejemplo, para la figura anterior: Etapa: Replica: libre Replica: libre Etapa: Replica: tarea Replica: tarea Etapa: 3 Replica: libre Etapa: 4 Replica: libre d) Un método Replicar, que se usará para ampliar la potencia de una determinada etapa del procesador actual. Recibe como parámetros el identificador de la etapa a replicar y el número de réplicas que deseamos añadir. Las réplicas añadidas tendrán el estado inicial libre (no tienen asignadas la ejecución de ninguna tarea). Las réplicas se añadirán a la estructura añadiendo (en cualquier posición SALVO AL PRINCIPIO) nodos a la lista de nodos intermedios correspondiente a la etapa y nodos de etapa apuntados desde los nodos intermedios añadidos. Como se puede observar, todas las réplicas añadidas deben apuntar al primer nodo intermedio de la etapa siguiente (salvo en la última etapa). La siguiente figura muestra el resultado de añadir dos réplicas de la etapa a la figura anterior:

13 procesador 3 4 La siguiente figura muestra el resultado de añadir una réplica de la etapa a la figura anterior: procesador 3 4 e) Un método para Compactar que se usará para disminuir el número de réplicas de una etapa del procesador actual. Para ello, recibe como parámetro el identificador de la etapa a compactar y elimina todas las réplicas de dicha etapa cuyo estado sea libre (no esté ejecutando ninguna tarea). Al compactar etapas habrá que tener en cuenta que: De cada etapa deberá quedar al menos una réplica. Las réplicas que estén ejecutando alguna tarea no pueden ser eliminadas. No se podrá liberar la memoria ocupada por el primer nodo de la lista de nodos intermedios de una etapa (pues sirve de enlace entre una etapa y la siguiente). En caso de que la compactación requiera eliminar la primera réplica de una etapa (porque esté libre), el puntero al nodo de etapa del primer nodo de la lista de nodos intermedios pasará a apuntar a un nodo de etapa que permanezca tras la compactación. Por ejemplo, para la siguiente figura: procesador 3 4 la siguiente figura es el resultado de compactar la etapa de la figura anterior: procesador 3 4 f ) El método AvanzarEvaluacion intenta avanzar una tarea de una determinada etapa a la siguiente. Para ello, recibe como parámetro el número de tarea (distinto de cero) que pretende avanzar a la siguiente etapa. Si la tarea es nueva, buscará una réplica libre de la primera etapa del procesador. Si no hay réplicas libres en esta primera etapa, entonces lanzará una excepción. Si la tarea se está ejecutando en la última etapa del procesador, entonces la tarea habrá terminado su ejecución, y su número desaparecerá de la estructura. En otro caso, intenta avanzar la tarea desde la réplica de la etapa en que se encuentra ejecutándose hasta alguna réplica libre de la siguiente etapa. Si no hay ninguna réplica libre de la siguiente etapa, entonces lanzará una excepción. 3

14 g) Así mismo, también deberá ser posible realizar la copia y asignación (duplicación) de la estructura de datos que representa a un determinado procesador. 4. Diseñe un programa que permita utilizar el TAD especificado en el ejercicio anterior. 4

15 Tema 4: Introducción a la Programación Orientada a Objetos. Para calcular los sueldos de cada empleado de una factoría, se diseña la siguiente jerarquía de clases polimórficas: Empleado Factoria AgVentas Directivo AgVentas_A AgVentas_B Directivo_A Directivo_B La clase polimórfica Empleado representa un empleado general de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. sueldo(): calcula y devuelve el sueldo del empleado. En caso de no tener información suficiente para calcular el sueldo, entonces devolverá. nombre(): devuelve el nombre del objeto empleado actual. La clase polimórfica AgVentas representa un agente de ventas general, empleado de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. borrar_ventas(): reinicia a cero la cantidad total de ventas que acumula este agente de ventas. anyadir_ventas(x): permite añadir una cantidad de euros recibida como parámetro a la cantidad total de ventas que acumula este agente de ventas. ventas(): devuelve la cantidad total de ventas que acumula este agente de ventas. La clase polimórfica AgVentas_A representa un agente de ventas de clase A, empleado de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. sueldo(): redefine este método para calcular y devolver el sueldo de este tipo de agente de ventas, según la siguiente ecuación: sueldo =. +. total_ventas. La clase polimórfica AgVentas_B representa un agente de ventas de clase B, empleado de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. sueldo(): redefine este método para calcular y devolver el sueldo de este tipo de agente de ventas, según la siguiente ecuación: sueldo = total_ventas. La clase polimórfica Directivo representa un directivo general, empleado de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. La clase polimórfica Directivo_A representa un directivo de clase A, empleado de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: 5

16 clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. sueldo(): redefine este método para calcular y devolver el sueldo de este tipo de directivos, según la siguiente ecuación: sueldo = 5. La clase polimórfica Directivo_B representa un directivo de clase B, empleado de una factoría, tiene un constructor que permite crear un objeto con el nombre (string) del empleado recibido como parámetro, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. sueldo(): redefine este método para calcular y devolver el sueldo de este tipo de directivos, según la siguiente ecuación: sueldo = 3. La clase polimórfica Factoria representa una factoría con un máximo de empleados, su constructor por defecto permite crear un nuevo objeto de clase Factoria sin ningún empleado, y proporciona los siguientes métodos públicos virtuales: clone(): devuelve un puntero a un nuevo objeto creado como copia del objeto actual. anyadir_empleado(e, ok): intenta añadir el empleado que recibe como primer parámetro (de entrada) a la lista de empleados de la factoría actual. Si la operación es posible o no, entonces devuelve true o false, respectivamente, en el segundo parámetro (de salida). sueldos(): muestra en pantalla tanto el nombre como el sueldo de cada empleado de la factoría. Finalmente, el programa principal creará un objeto de la clase Factoria, le añadirá empleados (Directivo_A, Directivo_B, AgVentas_A y AgVentas_B) y ventas acumuladas a los agentes de ventas, y calculará sus sueldos. Así mismo, tambien probará que la clonación de la factoría funciona adecuadamente.. Se desea simular el comportamiento de una serie de vehículos, por lo que se establece la siguiente jerarquía de clases: Vehiculo Automovil Bicicleta Todo objeto de la clase base polimórfica Vehiculo debe guardar en su estado la siguiente información y definir el siguiente constructor: ident: identificador del vehículo (cadena de caracteres). distancia: la distancia recorrida por el vehículo con respecto al punto de partida (origen) del mismo (unsigned). Vehiculo(i): inicializa el identificador del vehículo con i y su distancia a cero. Además, el comportamiento de los objetos Vehículo queda definido por los siguientes métodos públicos virtuales: id(): devuelve el indentificador del vehículo consultar_dist(): devuelve un unsigned con la distancia recorrida por el vehículo estacionar(): establece la distancia recorrida por el vehículo en (origen) tiene_energia(): indica si el vehículo tiene energía (función lógica). Debe devolver siempre true mover(): incrementa en el valor de la distancia recorrida por el vehículo. clone(): devuelve un puntero a un objeto Vehiculo, copia del vehículo actual Además, la clase Vehículo proporciona a sus clases derivadas los siguientes métodos protected, para poder manipular adecuadamente su estado interno: mover(x): incrementa en x el valor de la distancia recorrida por el vehículo. 6

17 La clase derivada polimórfica Automovil añade los siguientes atributos y define el siguiente constructor: DPL: constante simbólica static, de tipo unsigned, que indica la distancia que el automóvil recorre por litro de combustible (= 5). deposito: atributo unsigned que guarda el número de litros de combustible del depósito del automóvil. Automovil(i): inicializa el identificador del automóvil a i, su distancia a y su deposito a. Además, el comportamiento de los objetos Automovil queda definido por los siguientes métodos públicos virtuales: tiene_energia(): redefine el método de la clase base, devolviendo true si la cantidad almacenada en el deposito es mayor que. mover(): redefine el método de la clase base, de tal forma que si el automóvil tiene energía, entonces se mueve una distancia igual al valor de DPL, es decir, se incrementa la distancia recorrida actual sumándole a la misma el valor almacenado en la constante miembro DPL. repostar(ltr): incrementa la cantidad de combustible almacenada en el deposito del automóvil en ltr litros. clone(): devuelve un puntero a un objeto Automovil, copia del automóvil actual. La clase derivada polimórfica Bicicleta añade los siguientes atributos y define el siguiente constructor: NUM_PLATOS: constante simbólica static, de tipo unsigned, indicando el número de platos que tiene la bicicleta. plato: un unsigned que indica el plato que tiene puesto en este momento la bicicleta (a mayor tamaño de plato, mayor será su desplazamiento cuando la bicicleta se mueva). Bicicleta(i): inicializa el identificador de la bicicleta a i, su distancia a y su plato a. Además, el comportamiento de los objetos Bicicleta queda definido por los siguientes métodos públicos virtuales: mover(): redefine el método de la clase base, de tal forma que la bicicleta se mueve una distancia igual al valor de plato +, es decir, se incrementa la distancia recorrida actual sumándole a la misma el valor de plato +. cambiar(): cambia el valor del plato, sumándole y aplicando posteriormente % NUM_PLATOS (el valor del plato siempre estará entre y NUM_PLATOS - ). clone(): devuelve un puntero a un objeto Bicicleta, copia de la bicicleta actual. El programa principal debe definir el tipo Vehiculos como un tipo array de NUM_VEHICULOS = 4 punteros a objetos de la clase Vehiculo. Implementar el procedimiento viajar(v, d, t), que recibe un puntero a un objeto de la clase Vehiculo, un unsigned con la distancia total a recorrer por el vehículo, y devuelve, a través de un parámetro de salida el tiempo ( minutos ) que el vehículo ha tardado en llegar a su destino (si ha tenido energía suficiente para llegar). Este algoritmo debe proceder de la siguiente manera: a) Estacionar el vehículo (es decir, inicializar la distancia recorrida a ). b) Inicializar el tiempo a. c) Mientras que el vehículo tenga energía y su distancia recorrida sea menor que la distancia solicitada, el vehículo debe moverse (para ello, el procedimiento debe invocar la función miembro mover() del objeto Vehiculo) y tiempo se incrementa en. Implementar el programa principal (main), con las siguientes características: Declara un array mis_vehiculos de tipo Vehiculos. Crea un objeto Automovil, con identificador "5555JJJ" y 5 litros de gasolina y pone mis_vehiculos[] apuntando a él. Crea un objeto Bicicleta, con identificador "6666JJJ" y pone mis_vehiculos[] apuntando a él. Crea un objeto Bicicleta, con identificador "7777JJJ", cambia su plato y pone mis_vehiculos[] apuntando a él. Crea un objeto Bicicleta, con identificador "8888JJJ", cambia su plato dos veces y pone mis_vehiculos[3] apuntando a él. 7

18 Para todos los vehiculos que se encuentran en mis_vehiculos, debe calcular el tiempo de duración del viaje para una distancia recorrida de destino invocando al procedimiento viajar y, en caso de que el vehículo tuviera energía suficiente, escribe ese tiempo por pantalla (en caso contrario, se indica con un mensaje por pantalla: El vehículo x no ha podido llegar a su destino por falta de energía) Un ejemplo de ejecución podría ser: El vehículo 5555JJJ no ha podido llegar a su destino por falta de energía Tiempo vehículo 6666JJJ: minutos Tiempo vehículo 7777JJJ: 5 minutos Tiempo vehículo 8888JJJ: 334 minutos 3. Dada la jerarquía de clases de Vehiculo del ejercicio anterior, se debe desarrollar la clase no-polimórfica Parking para gestionar un parking con un máximo de MAX = vehículos (de cualquier tipo) estacionados en él. Los objetos de la clase Parking deben almacenar en su estado la siguiente información: MAX: constante simbólica static con el máximo (= ) de vehículos que pueden estacionarse en el parking. parking: un array de MAX punteros a objetos de la clase Vehiculo. n_v: número de vehículos estacionados en el parking. Además, la clase Parking debe suministrar los siguientes métodos, constructores, etc. públicos: Parking(): inicializa el número de vehículos estacionados en el parking a. Parking(otro_parking): constructor de copia de la clase: copia (clona) todos los vehículos estacionados en otro_parking al parking actual. ~Parking(): destructor de la clase: libera todos los vehículos almacenados en el parking (los destruye). operator=(otro_parking): operador de asignación para la clase Parking. anyadir(v, ok): recibe como parámetro de entrada v, un puntero a un objeto de la clase Vehiculo. Si hay espacio en el parking para estacionar un nuevo vehículo, entonces v se añade al final de la lista de vehículos estacionados en el parking y el número de vehículos estacionados se incrementa en ; finalmente, se debe invocar al método de estacionar sobre este nuevo vehículo estacionado (para que su distancia recorrida se ponga a ); ok debe ponerse a true en ese caso. Si no hay espacio para estacionar en el parking, se devuelve false a través de ok. mostrar(): muestra por pantalla los identificadores de todos los vehículos estacionados en el parking. extraer(id): busca en la lista de vehículos almacenados en el parking el vehículo con idenfificador id. Si lo encuentra, debe extraer el vehículo del parking y devolver un puntero al objeto vehículo extraído. Si no lo encuentra, entonces devuelve NULL. Se aconseja, además, implementar los siguientes métodos privados de la clase Parking: buscar(id): devuelve la posición del array parking que contiene un puntero apuntando al vehículo con identificador id, si éste está estacionado en el parking. Si no, devuelve una posición fuera de rango (por ejemplo, el n_v). copiar(otro_parking): copia todo el estado de otro_parking (esto es, clona todos los vehículos almacenados en él y copia su n_v) en el objeto actual. Nota: deben clonarse todos los vehículos del objeto otro_parking para que el parking actual trabaje con copias de los mismos. destruir(): destruye todos los vehículos almacenados en el parking. Debe implementarse un programa principal que declare un objeto de la clase Parking y pruebe toda su funcionalidad: añada vehículos de distinto tipo (vehículos genéricos, automóviles y bicicletas) al parking, los muestre, los extraiga, haga una copia completa del parking, etc. 8

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso 2013-2014. 1º Grado en Informática Práctica 2: Memoria dinámica y Bibliotecas Objetivos Practicar conceptos

Más detalles

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola) Objetivos de la sesión Entender el tipo de programas que se pueden realizar con aplicaciones de consola. Conocer el concepto de variable, la forma en que se declaran y su utilización. Conocer la forma

Más detalles

Tema 6. Gestión dinámica de memoria

Tema 6. Gestión dinámica de memoria Tema 6. Gestión dinámica de memoria http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la

Más detalles

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Tema 7.- Fundamentos de la Programación Orientada a Objetos Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).

Más detalles

Algoritmos y Programación I

Algoritmos y Programación I Algoritmos y Programación I ARREGLOS Y ESTRUCTURAS EN C Arreglos Un arreglo o vector es un conjunto de datos del mismo tipo, almacenados de forma contigua (es decir uno al lado del otro) en memoria principal.

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF ESCUELA POLITÉCNICA SUPERIOR GRADO EN DISEÑO IND. INFORMÁTICA CURSO 2012-13 PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF HASTA AHORA... En prácticas anteriores se ha aprendido: La estructura principal de un

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º 5 (Resolución de problemas Arreglos bidimensionales ). Realiza el programa en Lenguaje C correspondiente. 1- Qué hay de incorrecto en los siguientes códigos? int main() { int x,y; int

Más detalles

Introducción al tipo Vector Cómo guardar una colección de datos conceptualmente relacionados? - almacenar los 100 primeros números primos, - al

Introducción al tipo Vector Cómo guardar una colección de datos conceptualmente relacionados? - almacenar los 100 primeros números primos, - al Tema 6. Vectores 1. Introducción y Definiciones 2. Operaciones elementales con vectores 3. Definición y manejo de vectores (arrays arrays) en C 4. Operación de Recorrido secuencial de un vector 5. Operación

Más detalles

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso 2013-2014. 1º Grado en Informática Práctica 1: Punteros Objetivos Se hará hincapié en la aritmética de punteros

Más detalles

Programación en java. Estructuras algorítmicas

Programación en java. Estructuras algorítmicas Programación en java Estructuras algorítmicas Estructuras algoritmicas 1. Conceptos basicos 1. Dato 2. Tipos de datos 3. Operadores 2. dsd Conceptos Basicos DATO: se considera una representación simbólica

Más detalles

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C Laboratorio de Arquitectura de Redes Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones con punteros Operaciones

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1 Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos

Más detalles

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero TEMA 7: Ficheros 7.1.-Concepto de fichero Todas las estructuras de datos que hemos visto hasta ahora utilizan memoria principal. Esto tiene dos limitaciones importantes: 1. Los datos desaparecen cuando

Más detalles

Ficha de Aprendizaje N 13

Ficha de Aprendizaje N 13 Ficha de Aprendizaje N 13 Curso: Lógica y lenguaje de programación Tema: Fundamentos de programación Duración: 2 horas pedagógicas Logros de aprendizaje Identifica los diferentes tipos de operadores que

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas Unidad II Fundamentos de programación en Java Ing. José Luis Llamas Cárdenas En java para poder escribir se emplea el objeto System.out, t pero para leer del teclado es necesario emplear System.in Et Este

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

Ejercicio 1. Ejercicio 2

Ejercicio 1. Ejercicio 2 Todos los ejercicios incluyen una parte opcional de mayor dificultad, indicada con una serie de asteriscos en función del grado de dificultad. Ejercicio 1 Este ejercicio servirá para practicar la declaración

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo) . Sobrecarga de operadores. unarios Operador de incremento (prefijo). Devolución de objetos en los métodos. Retorno por referencia Sobrecarga de operadores Los operadores aceptan uno o varios operandos

Más detalles

Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011

Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011 Módulo 2. Fundamentos de Programación Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011 1 CONTENIDO Tema 1. Conceptos generales de algorítmica Tema 2. Sentencias

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

Boletín 7 Herencia. String Titular; Nombre del dueño de la cuenta double Saldo: Dinero disponible en la cuenta

Boletín 7 Herencia. String Titular; Nombre del dueño de la cuenta double Saldo: Dinero disponible en la cuenta Boletín 7 Herencia Ejercicio 1: Dentro de un sistema bancario que ya está funcionando disponemos de una clase CUENTA, los datos que guarda dicha clase son los siguientes: String Titular; Nombre del dueño

Más detalles

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,

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

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen Fundamentos de Informática. Dpto. de ATC - Página 1 de 8 conceptos Manejo de ficheros en C Contienen los datos que se almacenan en dispositivos de almacenamiento masivo: disquetes, discos duros, DROM,

Más detalles

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos Contenido Introducción...1 Objeto...2 Atributo...2 Métodos...2 Clase...3

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Fracciones. Contenidos. Objetivos. 1. Fracciones Fracciones Equivalentes Simplificación de Fracciones

Fracciones. Contenidos. Objetivos. 1. Fracciones Fracciones Equivalentes Simplificación de Fracciones Fracciones Contenidos 1. Fracciones Fracciones Equivalentes Simplificación de Fracciones 2. Fracciones con igual denominador Reducción a común denominador Comparación de fracciones 3. Operaciones con fracciones

Más detalles

Funciones. Parámetros por valor

Funciones. Parámetros por valor Funciones I Parámetros por valor Fundamentos de Programación Fundamentos de Programación I Llamada a la función definición subprograma Subprogramas en C++ Funciones 1 Una función es un subprograma que

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

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

FICHAS REPASO 3º ESO. Para restar números enteros, se suma al minuendo el opuesto del sustraendo y después se aplican las reglas de la suma.

FICHAS REPASO 3º ESO. Para restar números enteros, se suma al minuendo el opuesto del sustraendo y después se aplican las reglas de la suma. FICHAS REPASO º ESO OPERACIONES CON NÚMEROS ENTEROS El valor absoluto de un número entero es el número natural que resulta al prescindir del signo. Por ejemplo, el valor absoluto de es y el valor absoluto

Más detalles

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO 1.- Objetivos del laboratorio Diseño de clases en C++ Comprensión y uso del TAD Árbol Binario de Búsqueda

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Programación Orientada a Objetos Ejercicios: Clases y Objetos 1. Crea una clase Complejo que permita trabajar con números complejos (parte real y parte imaginaria). Incluye los siguientes métodos: constructores

Más detalles

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores. TEMA 6: ESTRUCTURAS DE DATOS (Arrays). CONTENIDO: 6.1.- Introducción a las estructuras de datos. 6.1.1.- Tipos de datos. 6.2.- Arrays unidimensionales: los vectores. 6.3.- Operaciones con vectores. 6.4.-

Más detalles

Las clases como tipos de datos definidos por el usuario

Las clases como tipos de datos definidos por el usuario . La clase Fraccional. Representación en UML de los niveles de acceso 3. Categorías de los objetos que aparecen en los métodos 4. El puntero this. Métodos operadores La clase Fraccional Vamos a diseñar

Más detalles

ESCUELA DE INFORMÁTICA

ESCUELA DE INFORMÁTICA TÉCNICO EN SISTEMAS LABORAL SUBMODULO TEMA 1 (Visual Basic for Application) Microsoft VBA (Visual Basic for Applications) es el lenguaje de macros de Microsoft Visual Basic que se utiliza para programar

Más detalles

PILAS Fundamentos

PILAS Fundamentos Alg. y Estr. Datos-I / Fund. Progr.-II (R. Ferrís, J. Albert) 11 PILAS 11.1 Fundamentos En este tema y en el siguiente se analizarán las estructuras de datos lineales pilas y colas. Las pilas y las colas

Más detalles

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva: 1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el a) Problema: pedir la base y la altura de un triángulo y escribir su superficie. b) Problema: pedir cuatro números enteros

Más detalles

Operaciones de números racionales

Operaciones de números racionales Operaciones de números racionales Yuitza T. Humarán Martínez Adapatado por Caroline Rodriguez Departamento de Matemáticas Universidad de Puerto Rico en Arecibo El conjunto de los números racionales consiste

Más detalles

Tema: Clases y Objetos en C#. Parte II.

Tema: Clases y Objetos en C#. Parte II. Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y

Más detalles

Computación II. Introducción a Visual Basic

Computación II. Introducción a Visual Basic Computación II Introducción a Visual Basic Introducción a Visual Basic Microsoft Visual Basic es un conjunto de herramientas que posibilitan el desarrollo de aplicaciones para Windows de una manera rápida

Más detalles

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

Más detalles

Definición y Conversión de datos. Agustín J. González ELO-329

Definición y Conversión de datos. Agustín J. González ELO-329 Definición y Conversión de datos Agustín J. González ELO-329 1 Calificador Const El calificador const previene que un objeto sea modificado con posterioridad a su definición. El objeto calificado como

Más detalles

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos Tema 2 Memoria Dinámica 2.1 Datos estáticos y dinámicos Datos estáticos: su tamaño y forma es constante durante la ejecución de un programa y por tanto se determinan en tiempo de compilación. El ejemplo

Más detalles

Tema: Entorno a C# y Estructuras Secuenciales.

Tema: Entorno a C# y Estructuras Secuenciales. Tema: Entorno a C# y Estructuras Secuenciales. Programación I, Guía 3 1 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Objetivos Utilizar el entorno de programación

Más detalles

PROGRAMACION ORIENTADA A OBJETOS EN C++

PROGRAMACION ORIENTADA A OBJETOS EN C++ PROGRAMACION ORIENTADA A OBJETOS EN C++ 1- INTRODUCCIÓN El lenguaje C++ representa el resultado de los esfuerzos realizados para proporcionar las ventajas de la programación Orientada a Objetos a un lenguaje

Más detalles

Guía - Taller # 2 (JAVA)

Guía - Taller # 2 (JAVA) CEET - Distrito Capital Programa de Formación: ADSI 150752 TRIMESTRE VI Conocimiento de Conocimiento: Aplicar diversos estilos de Programación usando herramientas para Desarrollo Web Instructor: Ing. Espec.

Más detalles

Llamamos potencia a todo producto de factores iguales. Por ejemplo: 3 4 =

Llamamos potencia a todo producto de factores iguales. Por ejemplo: 3 4 = 1. NÚMEROS NATURALES POTENCIAS DE UN NÚMERO NATURAL Llamamos potencia a todo producto de factores iguales. Por ejemplo: 3 4 = 3 3 3 3 El factor que se repite es la base, y el número de veces que se repite

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Laboratorio de Arquitectura de Redes. Entrada y salida estándar Laboratorio de Arquitectura de Redes Entrada y salida estándar Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato: scanf() El buffer de teclado Entrada

Más detalles

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * / undamentos de sintaxis en algunas instrucciones de C#.Net Dr. Ramón Roque Hernández Identificadores Un identificador le da nombre único a un elemento en un programa (ariables, procedimientos, etc.). No

Más detalles

Introducción a la programación

Introducción a la programación Introducción a la programación Resolución de Problemas El objetivo principal para que las personas aprendan a programar en algún lenguaje de programación en particular es utilizar el computador como una

Más detalles

Representación de la información

Representación de la información Laboratorio de Introducción a las Ciencias de la Computación Página 1 UNIERSIDAD CATÓLICA DE SANTA MARÍA PROGRAMA PROESIONAL DE INGENIERÍA DE SISTEMAS SESIÓN 2: Representación de la información OBJETIOS

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C. El primer objetivo de un programa informático es el manejo de datos. Un dato es toda aquella información que se puede tratar en un programa informático. En este artículo vamos a conocer los tipos de datos

Más detalles

EXAMEN EXTRAORDINARIO Informática y Computación IV

EXAMEN EXTRAORDINARIO Informática y Computación IV Nombre del alumno: EXAMEN EXTRAORDINARIO Informática y Computación IV Lee cada una de las preguntas y contesta con una V para verdedero o una F en caso de que sea falso lo que se propone. Una base de datos

Más detalles

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Constantes y variables Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. pi = 3.1416 Variable: Es un espacio en la memoria de la computadora que

Más detalles

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 Introducción Java es un lenguaje basado en la programación orientada a objetos (POO), este tipo de programación va más allá del tipo de programación

Más detalles

Hoja de ejercicios del Tema 3

Hoja de ejercicios del Tema 3 Facultad de Informática Universidad Complutense Fundamentos de la programación Curso 2013 2014 Hoja de ejercicios del Tema 3 1. Conversiones de tipos: Prueba el siguiente programa en tu compilador (copia

Más detalles

Utilización de Funciones en OpenOffice.org Calc

Utilización de Funciones en OpenOffice.org Calc Utilización de Funciones en OpenOffice.org Calc Una función es un conjunto de instrucciones reunidas bajo un nombre que calculan un resultado o llevan a cabo una acción específica. Las funciones pueden

Más detalles

Programación En Lenguaje C

Programación En Lenguaje C Programación En Lenguaje C Introducción Básica para Primero de Bachillerato TECNOLOGÍA DE LA INFORMACIÓN IES PALAS ATENEA Lenguaje C Estructurado Secuencial De alto Nivel Altamente portable Necesita un

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos. 1 Programación II, Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos. Objetivos Utilizar la sintaxis de las funciones

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Entrada y salida estándar V1.3 Autores Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato:

Más detalles

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa PROGRAMACIÓN 10. Prof. Dolores Cuiñas H. Recuerde que estos son apuntes muy simplificados que deberá completar con la bibliografía recomendada APUNTES Nº 4 ESTRUCTURA SECUENCIAL GENERAL La estructura secuencial

Más detalles

Programación estructurada (Introducción a lenguaje C)

Programación estructurada (Introducción a lenguaje C) Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada

Más detalles

TAD: Pila. TALLER: TAD Pila

TAD: Pila. TALLER: TAD Pila TALLER: TAD Una pila (stack) es un conjunto de elementos del mismo tipo que solamente puede crecer o decrecer por uno de sus extremos. Una pila también se la conoce con el nombre de estructura de tipo

Más detalles

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

Java Avanzado Facultad de Ingeniería. Escuela de computación. 2 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 5 3 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo de sus prácticas

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA Objetivo: Identificar los concentos principales en java POO, que es una clase, un objeto así como sus características principales abstracción, modularidad, encapsulamiento, herencia, polimorfismo. INTRODUCCIÓN

Más detalles

2. EXPRESIONES ALGEBRAICAS

2. EXPRESIONES ALGEBRAICAS 2. EXPRESIONES ALGEBRAICAS Tales como, 2X 2 3X + 4 ax + b Se obtienen a partir de variables como X, Y y Z, constantes como -2, 3, a, b, c, d y cobinadas utilizando la suma, resta, multiplicación, división

Más detalles

SISTEMAS ELECTRÓNICOS DIGITALES

SISTEMAS ELECTRÓNICOS DIGITALES SISTEMAS ELECTRÓNICOS DIGITALES PRÁCTICA 6 SISTEMA DE ENCRIPTACIÓN 1. Objetivos - Estudio del funcionamiento de memorias RAM y CAM. - Estudio de métodos de encriptación y compresión de datos. 2. Enunciado

Más detalles

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Convertidor Dec->Hex y Hex->Dec (5.0 ptos.)... 1 1.1.1 Apartado A (4.0 ptos.)... 1 1.1.2 Apartado B (1.0

Más detalles

MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5

MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5 MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5 TEMARIO MODULO I. EL LENGUAJE C# 5 Introducción al desarrollo de soluciones informáticas. El Framework.NET. o Descripción de la plataforma. o Las especificaciones

Más detalles

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Tipos de datos. Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Valores Constantes: Es un dato que se introduce directamente en

Más detalles

WorkManager E.D. Manual guía de usuario Diseñador de formularios

WorkManager E.D. Manual guía de usuario Diseñador de formularios WorkManager E.D. Manual guía de usuario Diseñador de formularios En esta sección se crean y diseñan formularios. Para ingresar, clic en el menú Configuración/ Diseñador de formularios. Lista de formularios

Más detalles

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc. Tutorial de C# Delegados y Eventos Por: Óscar López, M.Sc. olopez@uniandino.com.co DELEGADOS Delegados Son unos objetos que implícitamente extienden de System.Delegate y definen un tipo referencia soportado

Más detalles

Laboratorio de MTP-I. Curso 2008-2009 Proyecto: Sistema de reserva y gestión de vuelos Noviembre 2008

Laboratorio de MTP-I. Curso 2008-2009 Proyecto: Sistema de reserva y gestión de vuelos Noviembre 2008 Laboratorio de MTP-I. Curso 2008-2009 Proyecto: Sistema de reserva y gestión de vuelos Noviembre 2008 1 OBJETIVO El objetivo del proyecto a implementar es desarrollar un sistema informático de reserva

Más detalles

1

1 Curso: BORLAN DELPHI 5 Curso de desarrollo de aplicaciones Windows utilizando el entorno de programación Borland Delphi 5. Se estudian las particularidades del lenguaje Delphi, así como su sintaxis; sus

Más detalles

Estructura de datos y de la información Boletín de problemas - Tema 2

Estructura de datos y de la información Boletín de problemas - Tema 2 Estructura de datos y de la información Boletín de problemas - Tema 2 1. Definir un tipo de datos diassemana capaz de contener cualquier día de la semana y las operaciones diasiguiente, diaanterior y escribedia.

Más detalles

Estructuras de Repetición (Repita para)

Estructuras de Repetición (Repita para) Estructuras de Repetición (Repita para) Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Programación Digital I 1 REPITA PARA Fijar

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles

Números Racionales. Repaso para la prueba. Profesora: Jennipher Ferreira Curso: 7 B

Números Racionales. Repaso para la prueba. Profesora: Jennipher Ferreira Curso: 7 B Números Racionales Repaso para la prueba Profesora: Jennipher Ferreira Curso: 7 B Tipos de Fracciones Fracciones propias: Son aquellas en las que el denominador es mayor al numerador, y su valor es menor

Más detalles

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el

Más detalles

Tema: Introducción al IDE de Microsoft Visual C#.

Tema: Introducción al IDE de Microsoft Visual C#. Tema: Introducción al IDE de Microsoft Visual C#. Objetivos: El propósito de este tema es que el alumno se familiarice con el entorno de desarrollo de Visual C# Express mientras crea el formulario más

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

lasmatemáticas.eu Pedro Castro Ortega materiales de matemáticas

lasmatemáticas.eu Pedro Castro Ortega materiales de matemáticas 1. Fracciones Una fracción es una expresión del tipo a b, donde a y b son números naturales llamados numerador y denominador, respectivamente. 1.1. Interpretación de una fracción a) Fracción como parte

Más detalles

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación 1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles