Prácticas de C++

Anuncio
Prácticas de C++
Practica Nº 3
Informática II
Fundamentos de Programación
Prof. Dr. Paul Bustamante
Practica Nº3 Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ........................................................................................................................................ 1
1. Introducción...................................................................................................................... 1
1.1
Ejercicio 1: Mi primeras Funciones ........................................................................... 1
1.2
Ejercicio 2: Cálculo de las Raíces de una Función .................................................... 2
1.3
Ejercicio 3: Estructuras y Funciones.......................................................................... 3
1.4
Ejercicio 4: Cálculo del Seno de un ángulo ............................................................... 4
1. Introducción.
Como ya lo hemos venido haciendo, el primer ejercicio de esta práctica debe realizarlo
solo, con el fin de que pueda ganar más experiencia en la programación en C++.
En algunos ejercicios se dará el código, lo que no significa que sólo tenga que
escribirlo en el ordenador, debe tratar de realizarlos por su cuenta.
Recuerde borrar los ficheros que estén en los subdirectorios \debug y \release del
proyecto, para que libere espacio en su disco G\.
1.1 Ejercicio 1: Mi primeras Funciones
Este ejercicio permite introducirle un poco en el cálculo estadístico, para lo cual vamos a
implementar el método de la desviación estándar. Como ya habíamos dicho en clase, la
desviación estandar es un valor que nos da la dispersión que hay entre varias muestras (es
cero cuando todas son iguales).
La fórmula de la desviación estandar es la siguiente:
∑ (x
n −1
σ=
i =0
i
−x
n −1
)
n −1
2
, donde
x=
∑x
i =0
i
n
A continuación se dará la estructura general del programa, debiendo poner cada uno el código
necesario, respetando los nombres de las funciones:
//Calculo de media y desv std (medida de la dispersion=0 cuando todos
//son iguales)
#include <iostream.h>
#include <math.h>
double *PedirDatos(int &n);
double Media( double *d, int n);
double Desviacion( double *d, int n);
void main()
{
int num;
double *datos;
double med,desv;
datos = PedirDatos(num);
med = Media(datos,num);
desv = Desviacion(datos,num);
cout << "\tMedia:" << med << endl;
cout << "\tDesv. Std:" << desv << endl;
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
delete [] datos; //liberar
}
double Desviacion( double *d, int n)
{
double desv, md;
// agregar aqui el codigo
return desv;
}
double Media( double *d, int n)
{
double md;
// agregar aqui el codigo
Pág. 2
// ds= sqrt( sum(xi-xm)^2 / n-1)
return md;
}
double *PedirDatos(int &n)
{
double *d;
}
// agregar aquí el código
return d;
Recuerde que la función PedirDatos debe pedir al usuario el número de muestras que
quiere introducir y luego introducir todas las muestras. Esta función debe devolver a main dos
cosas:
1- El vector con los datos y
2- El número de datos que hay en dicho vector.
Para hacer este programa debe crear el proyecto Ejer1 y el fichero Desviacion.cpp.
1.2 Ejercicio 2: Cálculo de las Raíces de una Función
Este ejercicio consiste en hacer un programa que encuentre las raíces de una función entre dos
puntos dados (a,b) empleando el método del punto medio. El algoritmo consiste en hacer
iteraciones sucesivas, dividiendo el intervalo en dos y eligiendo un nuevo intervalo en el cual
se encuentra la raíz (se comprueba si f(a)*f(b)<0). El método termina cuando la raíz está cerca
de un valor (CERO=1e-9) o cuando se alcanza un número máximo de iteraciones y no se ha
llegado a encontrar la raíz.
Debe crear el proyecto Ejer2 y el fichero Raices.cpp, con el siguiente código:
//obtención de las raíces de una función por el método del pto. medio
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
double fx( double);
double PtoMedio( double a, double b, int max, int &num);
void main()
{
double a,b;
int num,max=300;
cout << "Dar intervalo a evaluar a b:";
cin >> a >> b;
if ( (fx(a) > 0 && fx(b)>0) || (fx(a)<0 && fx(b)<0)) {
cout << "Error en el intervalo" << endl;
return;
//quitar para probar intervalos
}
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 3
double raiz = PtoMedio(a,b,max,num);
if (num == max){
cout << "No hay raiz, limite maximo alcanzado\n";
}else{
cout << "Raiz x=" << setprecision(12) << raiz;
cout << " con " << num << " iteraciones\n";
}
}
double PtoMedio( double a, double b, int max, int &num)
{
double m, ym, CERO=1e-9;
num=0;
//importante
do{
m = (a+b)/2;
ym = fx(m);
if ( fabs(ym) < CERO) break;
if ( (fx(a) * ym) < 0) b=m;
//ver si cambia de signo
else a = m;
num++;
}while( num < max);
return m;
}
double fx( double x) //x en radianes
{
double f = x – cos(x);
//raices entre 0 y PI/2
return f;
}
Como ya se ha comentado anteriormente, el ejercicio hay que tratar de hacerlo sin mirar la
solución.
1.3 Ejercicio 3: Estructuras y Funciones
Este ejercicio consiste en hacer un programa que sume, reste, multiplique y divida 2
complejos, utilizando las estructuras, para que analice la importancia de su utilización. Como
ya hemos aprendido en clase cómo se declaran y usan las funciones, tenemos que hacerlo todo
con funciones, de tal forma que vamos dotar de modularidad a nuestro programa.
A continuación se muestra parte del código, el cual Ud. debe completar para hacer todo lo que
se pide:
#include <iostream.h>
struct complejo{
float r,i;
};
int Menu();
complejo GetComplejo();
PrtComplejo( complejo c);
complejo Suma( complejo c1, complejo c2);
void main()
{
complejo c1,c2,c3;
char *operador[]={" +"," -"," *"," /"};
while(true){
int opt=Menu();
if (opt==5) break;
c1=GetComplejo();
c2=GetComplejo();
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 4
switch(opt){
case 1: c3=Suma(c1,c2); break;
case 2: /*c3=Resta(c1,c2);*/ break;
case 3: /*c3=Multiplica(c1,c2);*/ break;
case 4: /*c3=Divide(c1,c2);*/ break;
}
PrtComplejo(c1);
cout << operador[opt-1];
PrtComplejo(c2);
cout << "\n -------- ";
PrtComplejo(c3);
}
}
complejo Suma( complejo c1, complejo c2)
{
complejo c;
c.r=c1.r+c2.r;
c.i=c1.i+c2.i;
return c;
}
PrtComplejo( complejo c)
{
cout << "\n(" << c.r << "," << c.i<<"i)";
}
complejo GetComplejo()
{
complejo c1;
char ch;
cout << "Dar r,i: ";
cin >> c1.r >> ch >> c1.i;
return c1;
}
int Menu()
{
int opt;
while(true){
cout << "\n\n**** Menu ****";
cout << "\n1. Sumar";
cout << "\n2. Restar";
cout << "\n3. Multiplicar";
cout << "\n4. Dividir";
cout << "\n5. Salir";
cout << "\n\tOpcion: ";
cin >> opt;
if (opt > 0 && opt < 6) return opt;
}
}
1.4 Ejercicio 4: Cálculo del Seno de un ángulo
Este ejercicio consiste en calcular el valor del Seno de un ángulo, cuyo desarrollo en series es:
x3 x5 x7
sen( x) = x −
+
−
+ ...
3! 5! 7!
(x en radianes)
El ejercicio lo debe desarrollar en dos partes:
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 5
1. Debe hacer una función Seno que reciba como argumentos el ángulo y el número
de iteraciones y tiene que devolver el valor de la serie como double. La
declaración de dicha función puede ser de la siguiente manera.
double Seno( double x, int N )
2. Debe hacer otra función Seno que reciba como argumentos el ángulo, el error
entre una iteración y otra y la referencia a una variable entera para que devuelva
el número de iteraciones empleadas. La declaración de esta función puede ser de la
siguiente manera:
double Seno( double x, double error, int &num)
Las funciones, que tienen el mismo nombre porque usamos la sobrecarga de funciones,
deben ser llamadas desde main() con los respectivos valores, pedidos al usuario (el ángulo y
el error o número de iteraciones, según sea el caso).
Debe crear un proyecto Ejer4 y el fichero FuncSeno.cpp para escribir en el código.
Informática II – Fundamentos de Programación - Tecnun
Descargar