Prof. Dr. Paul Bustamante



Documentos relacionados
Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Plantillas: un mecanismo de polimorfismo

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

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

1. Introducción. 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.) Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.)...

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Tema: Sobrecarga de Operadores.

Clases y funciones amigas: friend

Tema: Arreglos de Objetos en C++.

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Índice ÍNDICE EJERCICIO 1: CÁLCULO FINANCIERO (5 PTOS.) EJERCICIO 2: AGENCIA DE COLOCACIONES (5 PTOS.)...4

Prof. Dr. Paul Bustamante

Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:

Vectores. 27/05/05 Programación Digital I 1

Introducción a la programación orientada a objetos

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

7.- Seleccionando funciones friend o funciones miembro para sobrecarga de operadores.

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Clases y Objetos. Informática II Ingeniería Electrónica

Capítulo 6. Introducción a la POO

Preliminares. Tipos de variables y Expresiones

Introducción al tipo de dato ARRAY

Examen escrito de Programación 1

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

CURSO 2º GRUPO Junio 2011

APUNTES PROII 2º PARCIAL.

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Contenidos. Archivos en C++ Archivos en C++ Introducción

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Entrada y salida de datos en C y C++

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Programación en C++/Funciones

8.1 Un primer bucle FOR Varias formas de utilizar el bucle FOR Calcular el factorial de un número mediante un bucle FOR...

Tema 2: La clase string

Introducción al lenguaje de programación java

Se guardan en archivos con extencion c y los cabezales con extension h

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Estructuras de repetición hacer-mientras y repita hasta

Modulo 1 El lenguaje Java

Esquema de un programa en C: bloques básicos

Constructores y Destructores

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

FRACCIONES. Una fracción tiene dos términos, numerador y denominador, separados por una raya horizontal.

MANUAL DE REFERENCIA DE C++

Informática FACULTAD DE FÍSICAS

El lenguaje de Programación C. Fernando J. Pereda

Programación 1 Tema 7. Desarrollo modular y descendente de programas

Prof. Dr.Paul Bustamante

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

1 Estructura básica de un programa C++

Programación Orientada a Objetos con Java

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

Elementos léxicos del lenguaje de programación Java

Prof. Dr. Paul Bustamante

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

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

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Fundamentos de Programción (I)

Hoja de problemas Estructuras de Control

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Lenguaje C Bucles, Condicionales, operadores y Algoritmos.

Prof. Dr. Paul Bustamante

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Arreglos. // Incluir E/S y Librerías Standard #include <stdlib.h> #include <stdio.h>

Java Inicial (20 horas)

Práctica 3: Programación con subrutinas

Titulo: Suma de N primeros números

Estructura de datos tipo vector.

Tema: Herencia Simple y Múltiple en C++.

TEMA 4 FRACCIONES MATEMÁTICAS 1º ESO

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

Prof. Dr. Paul Bustamante

Ejercicio 1 (3 puntos).-

Clase adicional 3. Métodos. Temas

Ejercicios del tema 7: Clases y objetos

Tema 04:Fracciones. Primero de Educación Secundaria Obligatoria. I.e.s Fuentesaúco.

Práctica 2 Gráficos Vectoriales con SVG (versión )

Programación en C+ +/ Funciones

Ejemplos de conversión de reales a enteros

Pruebas de unidad con JUnit

Ecuaciones de primer grado con dos incógnitas

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Transcripción:

Prácticas de C++ Practica Nº 6 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante

Practica Nº 6 Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1. Introducción... 1 1.1 Ejercicio 1: Clase Complejo, versión 1.1... 1 1.2 Ejercicio 2: Clase Fraccion v1.1... 2 1.3 Ejercicio 3: Clase Vector... 3 1.4 Ejercicio 5: Mi clase MiString, versión 1.0... 4 1. Introducción. En esta práctica nos introduciremos en la sobrecarga de operadores, un concepto nuevo visto esta semana en las clases de teoría. 1.1 Ejercicio 1: Clase Complejo, versión 1.1 Este ejercicio consiste en sobrecargar todos los operadores (+,-,*,/,>>,<<) que intervengan en el programa que se describe a continuación. Puede utilizar las versiones anteriores de la clase Complejo, dadas en clase o en la práctica anterior. Sólo se da a modo de ejemplo cómo se sobrecarga el operador +. class Complejo double r,i; public: Complejo( double r1, double i1); ~Complejo(); Complejo operator+(complejo &c) Complejo tmp; tmp.r = r + c.r; tmp.i = i + c.i; return tmp; ; //principal.cpp #include <iostream.h> Complejo c1(2.5,3),c2; cin >> c2; //pedir datos para c2 Complejo c3 = c1 + c2; // c1.operator+(c2) cout << c1 << " + " << c2 << " = " << c3 <<endl; c3 = c1 * c2; cout << c1 << " * " << c2 << " = " << c3 <<endl; c1==c2? cout << c1 << " y " << c2 << " son Iguales\n": cout << c1 << " y " << c2 << " son Diferentes\n"; if ( c1 > c2 ) cout << c1 << " es > que " << c2; else cout << c1 << " es < que " << c2; cout << "\nhe terminado.." << endl;

Practica Nº 6 Programación en C++ Pág. 2 1.2 Ejercicio 2: Clase Fraccion v1.1 Para recordar, la clase Fraccion tiene dos variables miembro privadas (long num, den), para almacenar el numerador y denominador respectivamente. Debe crear un proyecto Ejer1 y los ficheros respectivos para la clase Fraccion, en los cuales va a escribir el código: 1. Debe crear una función miembro privada, llamada simplificar( ), que permita expresar la fracción en su forma más simplificada posible, manteniendo que tanto el numerador como el denominador sean enteros. Por ejemplo, al simplificar la fracción 2/4 se debe obtener 1/2. La simplificación se basa en la división por el máximo común divisor del numerador y denominador. Para ello se puede seguir el algoritmo de Euclides presentado en las transparencias de clase de Algoritmos de búsqueda y ordenación. void Fraccion::simplificar() long m, n, r; if (num<den) m=den; n=num; else m=num; n=den; while ((r=m%n)!= 0) //r=resto de m/n m=n; n=r; //n es el m.c.d num /= n; den /= n; Se trata de una función privada, lo que significa que sólo puede ser llamada desde las funciones miembro o funciones friend. Se pide utilizarla desde todas las funciones y operadores que modifiquen el valor del denominador o del numerador (incluidos los constructores). Esto significa que si por ejemplo inicializáramos a 4/8, el valor almacenado debería ser 1/2. 2. Trate de crear una serie de funciones friend que permitan pre/post-multiplicar y pre/post-dividir una fracción por un número entero (int). Los prototipos de estas funciones para las variables de tipo int son los siguientes: //Pre multiplicar y dividir: friend Fraccion operator* (int, const Fraccion&); friend Fraccion operator/ (int, const Fraccion&); //Post multiplicar y dividir: friend Fraccion operator* (const Fraccion&, int); friend Fraccion operator/ (const Fraccion&, int); 3. Sobrecargar el operador de extracción >> para poder pedir el valor de la fracción de la forma 2/6 directamente y que a su vez simplifique y guarde 1/3. También sobrecargar el operador de inserción << para poder sacar directamente por consola los valores de las fracciones. 4. Finalmente, deben sobrecargar los operadores de suma y multiplicación para que permitan sumar y multiplicar dos fracciones, tal como se puede apreciar en el código de la función principal main. A continuación se da el código que debe ir en main():

Practica Nº 6 Programación en C++ Pág. 3 Fraccion f1(1,4); Fraccion f2(1,2); Fraccion f3; cin >> f3; //pide datos para f3 Fraccion fr = f1 + f2; cout << f1 << " + " << f2 << " = " << fr << endl; Fraccion fm = f1 * f2; cout << f1 << " * " << f2 << " = " << fm << endl; int k=4; fr = k * f1; //Pre-multip cout << k << " * "<<f1<<" = "<< fr << endl; fr = k / f3; //Pre-division cout << k << " / "<<f3<<" = "<< fr << endl; k=2; fr = f2 * k; //Post-multip cout << f2 << " * "<<k<<" = "<< fr << endl; fr = f3 / k; //Post-division cout << f3 << " / "<<k<<" = "<< fr << endl; Fraccion f4; cin >> f4; cout << f4; 1.3 Ejercicio 3: Clase Vector Este ejercicio consiste en hacer una clase Vector que permita crear vectores de una forma más intuitiva. Aunque el vector es de enteros, se puede extender a cualquier tipo (double, float). El código es el mismo que el que está en los apuntes de las transparencias de clases. Tiene una función miembro (Ordena) añadida que permitirá ordenar el vector de forma ascendente o descendente, según el argumento que se le pase. A continuación puede ver la definición de la clase, //vector.h class Vector int *pv; int num; //numero de elementos public: Vector(int); ~Vector(); int& operator[](int index); void Ordena(bool ord); //true=asc. false=desc ; Y el código del programa principal: //principal.cpp int num; cout << "Num:"; cin >> num; Vector v(num); //crear vector for (int i=0;i<num;i++) cin >> v[i]; //imprimir vector cout << "El vector es:\n";

Practica Nº 6 Programación en C++ Pág. 4 for (i=0;i<num;i++) cout << v[i] << endl; //ordenar char orden; cout << "Como lo quiere ordenar (A=asc D=desc):?"; cin >> orden; cout << "\nel vector es ordenado es:\n"; if ( orden=='a' orden=='a') v.ordena(true); else v.ordena(false); for (i=0;i<num;i++) cout << v[i] << endl; cout << "Adios.."<<endl; //asc 1.4 Ejercicio 5: Mi clase MiString, versión 1.0 En este ejercicio vamos a crear la clase MiString, la cual permite utilizar de manera más intuitiva las cadenas. Ahora sólo se dará la definición de la clase y el código de la función principal main, desde dónde se deben crear los objetos de la clase MiString. El resto debe tratar de implementarlo Ud. solo. //MiString.h class MiString char *str; //cadena public: MiString(); MiString(char *t); ~MiString() delete [] str; //destructor ; friend istream &operator>>(istream &ci, MiString &s); friend ostream &operator<<(ostream &co, MiString &s); char operator[](int i); bool operator==(char*t); void operator=(char *t); //sobrecarga int GetLen() return strlen(str); Se deben sobrecargar los siguientes operadores: De inserción << y de extracción >> para poder pedir el texto e imprimirlo. Operador = = para comparar con una cadena de texto. El operador [ ] para poder acceder directamente a un elemento de la cadena. //main.cpp MiString cs; while(1) cout << "\ndar una frase:?"; cin >> cs; cout << "La frase al reves es:"; for (int i=cs.getlen()-1; i>=0;i--) cout<<cs[i]; cout << "\ndesea Salir? SI o NO:?"; MiString cs1; cin >> cs1; if (cs1 == "SI") break; cout << "\nadios.."<<endl; Compile el proyecto y ejecútelo, observando el resultado.