You are on page 1of 6

Prcticas de C++

Practica N 3

Informtica II
Fundamentos de Programacin
Prof. Dr. Paul Bustamante

Practica N3 Programacin en C++

Pg. 1

NDICE
NDICE ........................................................................................................................................ 1
1. Introduccin...................................................................................................................... 1
1.1
Ejercicio 1: Mi primeras Funciones ........................................................................... 1
1.2
Ejercicio 2: Clculo de las Races de una Funcin .................................................... 2
1.3
Ejercicio 3: Estructuras y Funciones.......................................................................... 3
1.4
Ejercicio 4: Clculo del Seno de un ngulo ............................................................... 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: Mi primeras Funciones
Este ejercicio permite introducirle un poco en el clculo estadstico, para lo cual vamos a
implementar el mtodo de la desviacin estndar. Como ya habamos dicho en clase, la
desviacin estandar es un valor que nos da la dispersin que hay entre varias muestras (es
cero cuando todas son iguales).
La frmula de la desviacin estandar es la siguiente:

(x
n 1

i =0

n 1

n 1

, donde

x=

x
i =0

A continuacin se dar la estructura general del programa, debiendo poner cada uno el cdigo
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;
Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin 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

Pg. 2

// ds= sqrt( sum(xi-xm)^2 / n-1)

return md;
}
double *PedirDatos(int &n)
{
double *d;

// agregar aqu el cdigo


return d;

Recuerde que la funcin PedirDatos debe pedir al usuario el nmero de muestras que
quiere introducir y luego introducir todas las muestras. Esta funcin debe devolver a main dos
cosas:
1- El vector con los datos y
2- El nmero 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: Clculo de las Races de una Funcin
Este ejercicio consiste en hacer un programa que encuentre las races de una funcin entre dos
puntos dados (a,b) empleando el mtodo 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 raz (se comprueba si f(a)*f(b)<0). El mtodo termina cuando la raz est cerca
de un valor (CERO=1e-9) o cuando se alcanza un nmero mximo de iteraciones y no se ha
llegado a encontrar la raz.
Debe crear el proyecto Ejer2 y el fichero Raices.cpp, con el siguiente cdigo:
//obtencin de las races de una funcin por el mtodo 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
}
Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 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
solucin.
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 utilizacin. Como
ya hemos aprendido en clase cmo se declaran y usan las funciones, tenemos que hacerlo todo
con funciones, de tal forma que vamos dotar de modularidad a nuestro programa.
A continuacin se muestra parte del cdigo, 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();
Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 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: Clculo 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:

Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 5

1. Debe hacer una funcin Seno que reciba como argumentos el ngulo y el nmero
de iteraciones y tiene que devolver el valor de la serie como double. La
declaracin de dicha funcin puede ser de la siguiente manera.
double Seno( double x, int N )

2. Debe hacer otra funcin Seno que reciba como argumentos el ngulo, el error
entre una iteracin y otra y la referencia a una variable entera para que devuelva
el nmero de iteraciones empleadas. La declaracin de esta funcin 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 nmero de iteraciones, segn sea el caso).
Debe crear un proyecto Ejer4 y el fichero FuncSeno.cpp para escribir en el cdigo.

Informtica II Fundamentos de Programacin - Tecnun

You might also like