Prácticas de C++

Anuncio
Prácticas de C++
Practica Nº 5
Informática II
Fundamentos de Programación
Prof. Dr. Paul Bustamante
Practica Nº 5 Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ........................................................................................................................................ 1
1. Introducción...................................................................................................................... 1
1.1
Ejercicio 1: Mi clase Menu ........................................................................................ 1
1.2
Ejercicio 2: Mi clase Point. ........................................................................................ 2
1.3
Ejercicio 3: Base de datos de Alumnos...................................................................... 2
1.4
Ejercicio 4: Mi clase String, versión 1.0 .................................................................... 3
1. Introducción.
En esta práctica afianzaremos un poco más nuestros conceptos de las clases, seguiremos
creando objetos, y comprendiendo mejor la encapsulación y abstracción de datos, es decir,
todo lo relacionado con la Programación Orientada a Objetos.
1.1 Ejercicio 1: Mi clase Menu
En la mayoría de programas siempre debe haber una interacción entre el usuario y el
programa. Dicha interacción se realiza por medio de los “menús”, los cuales permiten
presentarle al usuario varios opciones y él debe elegir una de ellas.
Este ejercicio consiste en desarrollar una clase Menu, la cual podrá utilizar a partir de ahora
en todos los programas. Verá cómo con esta clase es más fácil agregar opciones al menú y
que ésta se encargue de gestionarlas.
La clase Menu es la siguiente:
class Menu
{
char Titulo[40];
char texto[40][40];
int cont;
public:
Menu(char *tit){
strcpy(Titulo,tit);
cont=0;
}
void Add(char *t);
int Show();
};
Los métodos son Add() y Show() son:
void Menu::Add(char *t){
strcpy(texto[cont],t);
cont++;
}
int Menu::Show(){
int opc;
do{
cout << "*** "<<Titulo <<" ***"<<endl;
for (int i=0;i<cont;i++)
cout << i+1<<"." << texto[i] << endl;
cout << "\tOpc:?";
cin >> opc;
}while( opc <0 || opc > cont);
return opc;
}
Para que pueda probar la clase Menu, debe crear un programa donde la pueda usar, de la
siguiente manera:
void main(){
Menu men1("Menu de Programa");
men1.Add("Opcion1");
//opcion 1
//agregar el Titulo al menu
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Practica Nº 5 Programación en C++
Pág. 2
men1.Add("Opcion 2");
//opcion 2
While (true){
int opc = men1.Show();
if (opc==1) cout << “Ha elegido la opcion 1”;
if (opc==2) cout << “Ha elegido la opcion 2”;
}
}
Puede agregar más opciones, o sino continuar con el siguiente ejercicio, que es donde la va a
poder utilizar.
1.2 Ejercicio 2: Mi clase Point.
Este ejercicio consiste en crear una clase Point que tenga dos datos miembro que
representen un punto en un plano cartesiano (x,y). Dicha clase debe tener un método SetData
para introducir los valores del punto y otro método Distancia que permita hallar la distancia
que hay entre el objeto que le llama y otro punto que se le pasa como argumento.
class Point
{
double x,y;
public:
Point(double, double);
void SetData(double,double);
double Distancia(Point p);
void Prt();
};
Debe además implementar el constructor y el método Prt() que permita imprimir los
puntos en la consola
Cree un nuevo proyecto llamado Ejer2 en su directorio de trabajo y en él escriba todos
los ficheros fuente que le hagan falta.
Desde main se deben pedir al usuario los dos puntos a encontrar la distancia entre ellos.
Esto se debe hacer por medio de la clase Menu, con la que va a poder agregar dos opciones:
Opcion1: Medir Distancia (y pedir los 2 puntos)
Opcion2: Salir.
1.3 Ejercicio 3: Base de datos de Alumnos
En este ejercicio se va a hacer un programa que permita implementar una pequeña base de
datos para Alumnos (aunque en el ejemplo se han puesto pocas variables, se deben agregar
más, como dirección, número de carné, etc.).
Para desarrollar este ejercicio se debe crear una nueva clase, la clase Alumno, la cual tiene un
array name[50] para introducir el nombre y las variables tipo int edad y teléfono.
En la función principal main se debe hacer un menú, utilizando la clase Menu del ejercicio 1,
que permita elegir las opciones de introducir y ver los datos de los alumnos. Se puede ver que
se utiliza un array de objetos als[200] que permite ir introduciendo los nuevos alumnos.
A continuación se puede ver el programa completo.
class Alumno
{
char name[50];
int edad,telefono;
public:
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Practica Nº 5 Programación en C++
Pág. 3
Alumno(char *t="", int ed=0, long telf=0){
SetData(t,ed,telf);
}
void SetData(char *t, int ed, long telf){
strcpy(name,t);
edad = ed;
telefono = telf;
}
void Prt(){
cout << name <<"," << edad << "," << telefono << endl;;
}
};
// file main.cpp
// agregar los ficheros *.h necesarios
void main()
{
char tmp[120];
int edad,telf;
int opc;
Menu men1("Alumnos");
men1.Add("Introducir Datos");
men1.Add("Ver Datos");
men1.Add("Salir");
Alumno als[200];
int n=0;
//array para 200 objetos
//contador de objetos
while(true){
opc = men1.Show();
cin.ignore();
if (opc==1) {
cout << "Nombres:"; cin.getline(tmp,120);
cout << "Edad:";
cin >> edad;
cout << "Telfono:"; cin >> telf;
als[n++].SetData(tmp,edad,telf);
//
}
else if (opc==2) {
cout << "\n *** datos:\n";
for (int i=0;i<n;i++) als[i].Prt();
}
else if (opc==3) {
break; //salir
}
}
}
Cree un nuevo proyecto llamado Ejer3 en su directorio de trabajo y en él escriba todos
los ficheros fuente que le hagan falta.
1.4 Ejercicio 4: Mi clase String, versión 1.0
Hasta ahora hemos utilizado muchas veces las funciones para manejo de cadenas de
caracteres. En este ejercicio vamos a hacer una clase que permita de forma definitiva utilizar
de manera más intuitiva las cadenas, como por ejemplo crear una nueva variable de la
siguiente forma:
String cadena1 = “Hola”;
Este proyecto se llamará Ejer4. Debe crear tres ficheros String.h, String.cpp y
main.cpp. Estos ficheros se listan a continuación:
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Practica Nº 5 Programación en C++
//String.h
class String
{
char *str;
public:
String();
String(char *t);
~String(){
Pág. 4
//cadena
delete [] str; } //destructor
void operator=(char *t){
//sobrecarga
delete [] str;
str = new char[ strlen(t)+1 ];
strcpy(str,t);
}
int GetLen(){ return strlen(str); }
char GetAt(int);
void Add(char *t){
//funcion
char *tmp;
tmp = new char[strlen(str)+strlen(t)+1];
strcpy(tmp,str);
//guardar
strcat(tmp,t);
delete [] str;
str = tmp;
//cambiamos de puntero
}
void Prt(){ cout << str; }
};
//String.cpp
String::String()
{
str = new char[1]; str[0]=0;
}
String::String(char *text)
{
str = new char[ strlen(text)+1 ];
strcpy(str,text);
}
char String::GetAt(int i)
{
return str[i];
}
//main.cpp
void main()
{
char tmp[200];
cout << "\nDame tu nombre y apellidos:";
cin.getline(tmp,200);
String cs1(tmp);
//crear objeto
int len = cs1.GetLen();
cout << "\nLong. de tus datos: " << len;
cout << "\nAhora tus datos invertidos:\n";
for (int i=len-1;i>=0;i--)
cout << cs1.GetAt(i);
//funcion GetLen()
cout << "\nAhora usando la sobrecarga:\n";
String cs2 = "Escuela Superior de Ingenieros";
for (i=0; i<cs2.GetLen();i++)
cout << cs2.GetAt(i);
cout << "\nAdios " << endl;
}
Compile el proyecto y ejecútelo, observando el resultado.
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Descargar