Vous êtes sur la page 1sur 4

Practica N5 Programacin en C++

Pg. 1

NDICE
NDICE ........................................................................................................................................1
1. Introduccin. .....................................................................................................................1
1.1
Ejercicio 1: Trabajando con complejos. .....................................................................1
1.2
Ejercicio 2: Reserva dinmica de memoria para vectores. .........................................1
1.3
Ejercicio 3: Matrices dinmicas. ................................................................................2
1.4
Ejercicio 4: Producto de matriz por matriz.................................................................3
1.5
Ejercicio 5: Mi primera Funcin ................................................................................3
1.6
Ejercicio 6: Funcin Calculo ......................................................................................4

1. Introduccin.
Como ya lo hemos venido haciendo, el primer ejercicio de esta prctica debe realizarlo
solo, con el fin de que pueda ganar ms experiencia en la programacin en C++.
En algunos ejercicios se dar el cdigo, lo que no significa que slo tenga que
escribirlo en el ordenador, debe tratar de realizarlos por su cuenta.
Recuerde borrar los ficheros que estn en los subdirectorios \debug y \release del
proyecto, para que libere espacio en su disco G\.
1.1 Ejercicio 1: Trabajando con complejos.
En este ejercicio va a utilizar las estructuras, ya vistas en clase. Para ello ha de crear una
estructura Complejo para sumar, restar y multiplicar dos nmeros complejos. El resultado
del programa debe ser el complejo resultante, su mdulo y su fase. Debe utilizar las
funciones matemticas ( sqrt(), atan() ) que se encuentran definidas en el fichero math.h.
El programa debe pedir al usuario que selecciones de un men la operacin que desea
realizar: sumar, restar o multiplicar dos complejos.
La estructura debe tener esta forma:
struct Complejo{
float real;
float imag;
};

El algoritmo para multiplicar dos complejos, por si alguien no lo recuerda es:


(a+bi)*(c+di) = a*c b*d, a*d+b*ci
Recuerde que debe crear un proyecto nuevo Ejer1 y el fichero Complejo.cpp en el que
escribir el cdigo.
1.2 Ejercicio 2: Reserva dinmica de memoria para vectores.
En este ejercicio vamos a hacer uso de la reserva dinmica de memoria para almacenar un
nmero determinado de valores (obtenidos de forma aleatoria, entre 0 y 100) y ordenarlos de
mayor a menor.
El cdigo para obtener los nmeros y para la reserva dinmica de memoria se lo doy,
el resto debe tratar de implementarlo solo.
Debe crear el proyecto Ejer2 y el fichero ordena.cpp para introducir el cdigo.
// fichero ordena.cpp
// ordena usando memoria dinamica

Informtica II Fundamentos de Programacin - Tecnun

Practica N5 Programacin en C++

Pg. 2

#include <iostream.h>
#include <stdlib.h>
//para rand()
void main(void)
{
int Num;
//Numero de datos
int *datos;
//puntero a int
cout << "Cuantos numeros deseas generar:";
cin >> Num;
//asignacion de memoria
datos = new int[Num];
if (datos == NULL) cout << "Error";
//Llenar el vector
for (int i=0;i<Num;i++){
datos[i] = rand() * 100 / RAND_MAX;
}
//ordena los datos -> Hacer aqu el algoritmo
. . .
. . .
//imprime los datos ordenados
for (i=0;i<Num;i++) cout << i << ":" << datos[i] <<endl;
//liberar memoria
delete [] datos;
}

1.3 Ejercicio 3: Matrices dinmicas.


Ha llegado el momento de hacer una introduccin a la reserva de memoria dinmica para
matrices.
Los pasos para hacer la reserva dinmica de memoria para matrices son:
a. Crear el array de punteros del tipo de datos: float **datos;
b. Reservar memoria para el array de punteros: datos = new float*[fil];
c. Hacer un bucle para reservar memoria para col columnas de cada fila:
for (int i=0;i<fil;i++) datos[i] = new float[col];

d. Ya tenemos creada la matriz, podemos trabajar con ella con los ndices, por medio
de los corchetes [].
e. Finalmente, debemos hacer otro bucle para liberar la memoria de cada fila y luego
debemos liberar la memoria asignada al array de punteros.
En el siguiente ejemplo ver cmo asignar memoria para una matriz de filxcol:
// fichero matriz.cpp
// crear matrices usando memoria dinamica
#include <iostream.h>
#include <string.h>
//para strlen
#include <stdlib.h>
//para atoi()
void main(void)
{
int fil = 8; //numero de filas
int col = 5; //numero de columnas
float **datos;
datos = new float*[fil];
//vector filas
//reserva memoria para las columnas de cada fila
for (int i=0;i<fil;i++)
datos[i] = new float[col];
//ya puedes usar la matriz
for (int f=0;f<fil;f++)

Informtica II Fundamentos de Programacin - Tecnun

Practica N5 Programacin en C++

Pg. 3

for (int c=0;c<col;c++) datos[f][c] = (float)rand()/RAND_MAX;


//imprime los valores
for ( f=0;f<fil;f++){
for (int c=0;c<col;c++) {
cout << f << "," << c << ":"<<datos[f][c]<< " ";
}
cout <<endl;
}
//liberar memoria
for (f=0;f<fil;f++) delete datos[f]; //libera filas
delete [] datos;
//libera vector
}

Debe crear un proyecto Ejer3 y el fichero matriz.cpp para escribir el cdigo.


1.4 Ejercicio 4: Producto de matriz por matriz.
Basndote en el ejercicio anterior, vamos a realizar la versin 2.0 del ejercicio 2 de la prctica
N4: producto de matrices con asignacin dinmica de memoria.
Crea un proyecto llamado Ejer5 que contenga un programa que multiplique dos
matrices MatA y MatB de cualquier tamao; llmalo matxmat2.cpp.
Pasos a seguir:
1- Debe crear tres punteros a punteros: float **mA, **mB, **mC.
2- Pedir por teclado las dimensiones de la matriz MatA (filas y columnas).
3- Pedir por teclado slo las columnas de la matriz MatB, ya que las filas tienen que
ser igual a las columnas de MatA para la multiplicacin.
4- Realizar la reserva dinmica de memoria, usando el operador new.
5- Pedir los datos de las dos matrices MatA y MatB.
6- Realizar la multiplicacin, como en el ejercicio de la prctica anterior, en sendos
bucles for anidados, y almacenar el resultado en la matriz C.
7- Finalmente debe sacar por consola los datos de la matriz resultante:
8- Liberar la memoria asignada, utilizando el operador delete.
Recuerde la frmula para multiplicar dos matrices:
n

cij = aik bkj

i = 1...n, j = 1,..., n

k =1

1.5 Ejercicio 5: Mi primera Funcin


Este ejercicio pretende introducirle en el uso de las funciones. Para ello vamos a hacer una
sencilla funcin que calcule el rea de un tringulo. Como bien sabr, para calcular el rea de
un tringulo es necesario conocer la base y la altura. Estos datos debe pedirlos al usuario y
luego calcular el rea por medio de la funcin.
Crear el proyecto Ejer5 y el fichero AreaTriangulo.cpp (con el sgte. cdigo):
#include <iostream.h>
float AreaTriangulo( float , float );
void main(void)
{
float base,alt;

//declaracin

Informtica II Fundamentos de Programacin - Tecnun

Practica N5 Programacin en C++

Pg. 4

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.6 Ejercicio 6: Funcin Calculo


Vamos a introducirnos en el clculo de la posicin de un cuerpo en cada libre. La ecuacin
que rige este movimiento es:
g *t2
h: altura inicial (mts.)
g: 9.81m/s^2
y =h
2 .0
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. Se debe ir
alamcenando el tiempo para ver cal es la duracin de la cada.
Los datos que el usuario debe dar son dos:
1) Altura de la cada del cuerpo (en mts.).
2) Diferencial de tiempo para el clculo (en milisegundos).
La estructura del programa podra ser la siguiente:
#include <iostream.h>
#include <math.h>
void Calcula(float alt, float dt);
void main(void)
{
float alt, dt, tot;
cout << "Escribe la altura de la caida: " ;
cin >> alt;
cout << "Escribe el dt(ms) para el calculo: " ;
cin >> dt;
tot=Calcula(alt,dt);
cout << "Tiempo total en caer(ms): " << tot << endl;
}
float Calcula(float alt, float dt)
{
//escribir el cdigo de la funcin
return ??
}

Recuerde que el tiempo al inicio es cero, luego debe ir incrementndolo de acuerdo a


lo que el usuario ha especificado por medio de dt. La funcin calcula debe devolver el tiempo
total de la cada e imprimirlo al final de main.
Para hacer este programa crea el proyecto Ejer6 y el fichero CaidaLibre.cpp.
Informtica II Fundamentos de Programacin - Tecnun

Vous aimerez peut-être aussi