Acrobat Distiller, Job 6

Anuncio
C+ +
PRACTICA Nº5
Practica Nº5 Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ........................................................................................................................................0
1.1
Ejercicio 1: Mi primera Función ................................................................................1
1.2
Ejercicio 2: Función AreaCirculo...............................................................................1
1.3
Ejercicio 3: Función Calculo ......................................................................................1
1.4
Ejercicio 4: Ordenar Palabras .....................................................................................2
1.5
Ejercicio 5: Obteniendo los datos de fecha y hora del PC..........................................4
1.1 Ejercicio 1: Mi primera Función
El primer ejercicio pretende introducirte en el uso de las funciones. Para ello vamos a hacer
una sencilla función que calcule el área de un triángulo. Como bien sabrás, para calcular el
área de un triángulo es necesario conocer la base y la altura. Estos dos datos debes pedirlos al
usuario y luego calcular el área por medio de la función.
Crea un proyecto nuevo Ejer1 y en él el fichero AreaTriangulo.cpp. Introduce el
siguiente código:
#include <iostream.h>
float AreaTriangulo( float , float );
void main(void)
{
float base,alt;
cout << "Escribe la base: " ;
cin >> base;
cout << "Escribe la altura: " ;
cin >> alt;
cout << "El area del triangulo es: " << AreaTriangulo(base,alt);
}
float AreaTriangulo( float b, float h)
{
float tmp = b*h/2.0;
return tmp;
}
1.2 Ejercicio 2: Función AreaCirculo
Una vez que has visto cómo se hace una función, debes crear tu propia función AreaCirculo,
la cual recibirá como único argumento el radio del círculo (que debes pedirlo al usuario) y
devolverá el área calculada.
Recuerda que debes definir la función y declararla. Para hacer este ejercicio puedes
usar el mismo proyecto anterior y agregar un nuevo fichero Circulo.cpp, en el cual harás el
programa.
1.3 Ejercicio 3: Función Calculo
Vamos a introducirnos en el cálculo de la posición de un cuerpo en caída libre. La ecuación
que rige este movimiento es:
g *t2
y =h−
h: altura inicial (mts.) g: 9.81m/s^2
2 .0
Informática II – Fundamentos de Programación - Tecnun
Practica Nº5 Programación en C++
Pág. 2
El ejercicio consiste en ir sacando por la consola las posiciones del cuerpo para un
determinado diferencial de tiempo (dt), hasta que el cuerpo llegue a la superficie.
Los datos que el usuario debe dar son dos:
1) Altura de la caída del cuerpo (en mts.).
2) Diferencial de tiempo para el cálculo (en milisegundos).
El esqueleto del programa podría ser el siguiente:
#include <iostream.h>
#include <math.h>
void Calcula(float alt, float dt);
void main(void)
{
float alt, dt;
cout << "Escribe la altura de la caida: " ;
cin >> alt;
cout << "Escribe el dt(ms) para el calculo: " ;
cin >> dt;
Calcula(alt,dt);
}
void Calcula(float alt, float dt)
{
//escribir el código de la función
}
Recuerda que el tiempo al inicio es cero. Luego va incrementando de acuerdo a lo que
el usuario ha especificado, por medio de dt.
Para hacer este programa crea el proyecto Ejer3 y en el el fichero CaidaLibre.cpp.
1.4 Ejercicio 4: Ordenar Palabras
Vamos a hacer un ejercicio que permita introducir al usuario una número determinado de
palabras y el resultado será sacarlas por consola ordenadas de forma descendente. Para ello
vamos a utilizar la función strcmp(char*, char*) de la librería estándar del C++ que permite
comparar dos cadenas de caracteres. Dicha función está declarada en el fichero string.h.
Crea un nuevo proyecto Ejer4 y el fichero Ordena.cpp, en el cual vas a escribir el
siguiente código:
#include <iostream.h>
#include <string.h>
void Ordena(char **, int);
void ImprimePalabras(char **, int);
char** ReservayPide(int);
void Libera( char **, int);
void main(void)
{
char **palabras;
int num;
cout << "Numero de palabras:";
cin >> num;
palabras = ReservayPide(num);
Informática II – Fundamentos de Programación - Tecnun
Practica Nº5 Programación en C++
Pág. 3
cout << "Palabras Introducidas: " << endl;
ImprimePalabras(palabras,num);
Ordena(palabras,num);
cout << "Palabras Ordenadas: " << endl;
ImprimePalabras(palabras,num);
}
char** ReservayPide(int num)
{
char tmp[120];
char **words;
words = new char*[num];
for (int i=0;i<num;i++){
cout << "Introduce la " << i+1 << " palabra:";
cin >> tmp;
words[i] = new char[ strlen(tmp)+1 ];
strcpy( words[i], tmp);
}
return words; //devuelve matriz
}
void Ordena(char **words, int num)
{
for (int i=0;i<num-1;i++){
for (int j=i+1;j<num;j++){
if ( strcmp( words[i], words[j]) < 0) {
//al cambiar hay que destruir los vectores
int len1 = strlen(words[i]);
int len2 = strlen(words[j]);
char *tmp1 = new char[len1 +1];
char *tmp2 = new char[len2 +1];
strcpy(tmp1,words[i]);
//copiar antes de borrar
strcpy(tmp2,words[j]);
delete [] words[i];
//eliminar vectores
delete [] words[j];
words[i] = new char[len2+1]; //nuevos vectores
words[j] = new char[len1+1];
strcpy(words[i],tmp2);
//Permutar las cadenas
strcpy(words[j],tmp1);
delete [] tmp1;
//eliminar vectores temporales
delete [] tmp2;
}
}
}
}
void ImprimePalabras(char ** words, int Num)
{
for (int i=0;i<Num;i++){
cout << "\t" << words[i] << endl;
}
}
void Libera( char **words, int Num)
{
for (int i=0;i<Num;i++) delete [] words[i];
delete [] words;
}
Como puedes ver, aprovechamos las ventajas de las funciones para darle mudularidad a
nuestro ejercicio, con lo cual logramos que la función principal main() tenga poco código,
sólo incluye las llamadas a las funciones.
Informática II – Fundamentos de Programación - Tecnun
Practica Nº5 Programación en C++
Pág. 4
Hemos creado 4 funciones:
1. Función char** ReservayPide(int num): Esta función reserva memoria para
almacenar las cadenas y pide al mismo tiempo los datos de cada palabra. Devuelve el
vector de cadenas.
2. Función Ordena(char **, int): Esta función se encarga de ordenar de forma
descendente las palabras que hay en el vector de cadenas. Para ello utiliza la función
strcmp(...). Notar que si hay que cambiar las palabras, se deben copiar las cadenas
primero, luego borrar el espacio que cada cadena ocupa (esto debido a que la longitud
de las cadenas pueden ser diferentes). Finalmente se reserva nuevamente memoria
para almacenar las cadenas cambiadas.
3. Funcion Imprime(char **, int): Se encarga de imprimir a la consola las cadenas que
hay en el vector.
4. Función Libera(char **, int): Su función es liberar la memoria utilizada.
1.5 Ejercicio 5: Obteniendo los datos de fecha y hora del PC
En este ejercicio vamos a hacer uso de algunas funciones definidas en el estándar del C++
para obtener los datos de fecha y hora del PC.
Para ello vamos a crear un nuevo proyecto Ejer5 y el fichero Hora.cpp, en el cual
copiarás el código que te daré a continuación.
#include <iostream.h>
#include <time.h>
void ImprimeHora(void);
void Delay(double seg);
void main(void)
{
ImprimeHora();
Delay(2.5);
//retardo de 2.5 seg.
ImprimeHora();
}
void ImprimeHora(void)
{
long t1;
tm *mihora; //estructura para time
time(&t1); //obtener los datos actuales (en long)
mihora = localtime(&t1);
//convierte long a struct tm
cout << "Fecha: " << mihora->tm_mday << "/" ;
cout << mihora->tm_mon+1<<"/"<<mihora->tm_year+1900;
cout << " Hora: " << mihora->tm_hour << ":" ;
cout << mihora->tm_min << ":“ <<mihora->tm_sec << endl;
}
void Delay(double seg)
{
long start;
long end;
time(&start);
end = start;
while( difftime(end,start) < seg){
time(&end);
}
}
Informática II – Fundamentos de Programación - Tecnun
Practica Nº5 Programación en C++
Pág. 5
Explicación:
1. Todas las funciones se encuentran definidas en el fichero time.h, el cual debes
incluir al comienzo del programa.
2. La función time(long&) obtiene en una variable del tipo long un valor que
representa la fecha y hora a partir del 1 de enero de 1900. Se le debe pasar la
dirección de la variable (&t1), ya que la función tiene que escribir el dato.
3. El valor obtenido con time() se introduce como parámetro a la función
localtime(), la cual se encarga de convertir ese long en “algo más inteligible”
La función devuelve un puntero a una estructura tm (por eso definimos tm
*mihora) definida en el fichero time.h, que tiene los siguientes miembros:
struct tm {
int
int
int
int
int
int
int
int
int
};
tm_sec;
tm_min;
tm_hour;
tm_mday;
tm_mon;
tm_year;
tm_wday;
tm_yday;
tm_isdst;
/*
/*
/*
/*
/*
/*
/*
/*
/*
seconds after the minute - [0,59] */
minutes after the hour - [0,59] */
hours since midnight - [0,23] */
day of the month - [1,31] */
months since January - [0,11] */
years since 1900 */
days since Sunday - [0,6] */
days since January 1 - [0,365] */
daylight savings time flag */
4. Una vez que tenemos la estructura, podemos sacar la hora, minutos segundos,
día, etc., por medio de los miembros de la estructura.
5. Existe también una función difftime(time1, time2) que obtiene la diferencia de
dos tiempos, la cual utilizo para medir el tiempo que ha transcurrido entre una
operación y otra. En el caso de nuestro ejemplo, la uso para crear una función
delay() que hace que el programa se quede en un bucle while un tiempo
determinado, dado como argumento a delay(double seg).
Nota: Debes tratar de hacer todos los ejercicios, no solo de las prácticas, sino también los
ejercicios que se dan en los cuadernillos de clase.
Informática II – Fundamentos de Programación - Tecnun
Descargar