Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

CP 04

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Facultad de Ciencias y Tecnologı́a Nucleares

Instituto Superior de Tecnologı́as y Ciencias Aplicadas

Clase Práctica 4 ›
Ejercicios Sobre Funciones
Asignatura: Computación Carrera: Radioquı́mica
Profesor: E. González - V. M. Tamé Departamento: Matemática y Computación

10 Marzo, 2010

Nota:
Todos los ejercicios deben ser completados.
Los ejercicios tienen un orden de dificultad aleatorio.
Los ejercicios marcados con dos asteriscos (∗∗) serán considerados para la nota del estudiante en la clase
práctica correspondiente (son los que deciden la nota del estudiante en la clase práctica).
Los ejercicios marcados con tres asteriscos (∗ ∗ ∗) serán considerados para la calificación final del estudiante
(significa que el estudiante puede ser convalidado o recibir bonificación en su nota final).
Se recomienda resolver problemas del sitio http://coj.uci.cu/ (sitio accesible para todos los estudiantes del
InSTEC) y comunicar su solución al profesor. Todos estos problemas serán considerados como tres asteriscos
(∗ ∗ ∗) lo cual significa que el estudiante puede ser convalidado al final del curso, según la cantidad y dificultad
de los problemas resueltos.

Ejercicios Propuestos:

1. Escribe la declaración de un tipo de estructura que se llamará TAlumno, con la siguiente información:

Identificador de alumno: un entero


Sexo: un carácter (“M” para varón y “F” para hembra)
Notas: un vector de 10 reales que contiene las notas del alumno en las 10 asignaturas
Pasa: un booleano (cierto o falso) que nos dice si el alumno puede pasar o no de curso

Escribe la declaración de una variable llamada Alumno de tipo TAlumno, y el código necesario para
poner el campo pasa de esa variable a true si el alumno ha aprobado más de 6 asignaturas o a false
en caso contrario.

2. Escribe la declaración en C de un vector de 50 elementos de tipo TAlumno. Escribe despus el código


necesario para subir, a todas las chicas, 0.5 puntos en la calificación de todas las asignaturas.

3. Supón que un colegio tiene como máximo 100 alumnos y cada alumno hace siempre 10 asignaturas.
Escribe la declaración de la estructura de datos que se llamará TColegio, necesaria para guardar toda
la información de un colegio. En concreto, la estructura debe tener:

Un entero que será el identificador de colegio


Un entero indicando el número de alumnos

Dpto Matemática y Computación Computación para RQ 1/5


Facultad de Ciencias y Tecnologı́a Nucleares
Instituto Superior de Tecnologı́as y Ciencias Aplicadas

Un vector de elementos de tipo talumno, con la información de cada alumno.


Declara una variable de tipo TColegio y escribe el código necesario para actualizar el campo pasa de
todos los alumnos del colegio (recuerda que el campo pasa debe ser true si el alumno ha aprobado
más de 6 asignaturas y false en caso contrario) .
4. Escriba funciones en C++ que evalúen las siguiente funciones matemáticas:
a) f (x) = (1 + x2 )/(1 + 3x3 )
b) f (x) = (ex sin x)4
(√
2x, if x > 0
c) f (x) = √
−x, if x < 0
Luego escriba un programa que utilice todas estas funciones.
5. Re-escriba el siguiente programa de forma tal que el volumen sea calculado por una función:

#include <iostream.h>
void main(){
float r,v;
const float pi=3.141593;
cout << "r=?\n";
cin >> r;
cout << "r=" << r << "\n";
v=(4.0 * pi * r * r * r)/3.0;
cout << "v= " << v << "\n";
}

6. Escriba una función que evalúe:


x = (y + w)2 , y = (x + w)2 , z = x2 + y 2 + w 2
y escriba un programa que utilice los valores calculados x,y y z.
7. (∗∗∗) Se le da el siguiente código, que permite aproximar el valor de una exponencial:

#include <iostream.h>
#include <math.h> // to use fabs
void main(){
float x, eps, E=1.0, NextTerm=1.0, n=1.0;
cout << "what is x> what is eps?\n";
cin >> x >> eps; //read x and eps
cout "x= " << x << " eps = "<< eps << endl; //echo
//now do the loop for the series
while (fabs(NextTerm) > eps){ //fabs is absolute value
NextTerm = (x * NextTerm)/n;
E = E + NextTerm; //update approximation
//output current approximation
cout << "E = " << E << "n= " << n << endl;
n++; //increase n by 1
}
}

Dpto Matemática y Computación Computación para RQ 2/5


Facultad de Ciencias y Tecnologı́a Nucleares
Instituto Superior de Tecnologı́as y Ciencias Aplicadas

Re-escriba el programa anterior, de tal forma que la aproximación de ex sea calculado por una función.
Corra el programa para varios valores de x y eps y compare las aproximaciones, con el valor real ex .
Se puede concluir que mientras mayor es x, más
x=1 eps=0.0001
términos son necesarios en la serie para obtener
E=2 n=1
una determinada precisión. Haga lo mismo para
E=2.5 n=2
funciones como:
E=2.66667 n=3
a) sin x E=2.70833 n=4
E=2.71667 n=5
b) cos x E=2.71806 n=6
E=2.71825 n=7
Se le da la siguiente tabla, como ejemplo de una
E=2.71828 n=8
salida para x=1 y ε = 0,0001.
8. Diga qué imprime el siguiente programa:

#include <iostream.h>
int i=3;
int main(){
j=3;
cout << (i+j) << endl;
{int i=4; j=4;
cout << (i+j) << endl;
}
cout << (i+j) << endl;
return 0;
}

Dpto Matemática y Computación Computación para RQ 3/5


Facultad de Ciencias y Tecnologı́a Nucleares
Instituto Superior de Tecnologı́as y Ciencias Aplicadas

9. Cuál es la salida del siguiente programa:


#include <iostream.h> #include <iostream.h>
int func(int i){ float f(float);
int j=3; int main(){
return i+j; float x=4.0;
} cout << f(x*x);
int main(){ return 0;
int j=4; }
cout << func(j); float f(float x){
return 0; return sqrt(x);
} }
10. (∗∗) Re-escribirel programa del ejercicio 5 de la Clase Práctica › 3, pero en este caso los algoritmos
de encriptación y desencriptación, deben ser implementados por:
a) dos funciones diferentes,
b) una misma función
11. Complete el cuerpo de la siguiente función que compara dos cadenas, de modo que devuelva true en
caso de que sean iguales y false en caso contrario.

b o o l StrEq ( c o n s t c h a r * s1 , c o n s t c h a r * s 2 )
{
// Code t o e n t e r
}

a) Escriba el código de un programa en el que pruebe la efectividad de streq(),


b) escriba una versión recursiva de streq() y diga cuál de las dos versiones serı́a más eficiente. En
caso necesario argumente con pruebas.
dy
12. El método de Runge-Kutta de orden 2 1–3 resuelve de forma numérica el problema = f (x, y), con
dx
y(x0 ) = y0 . Estudie el algoritmo del método y escriba un programa que lo implemente. Compruebe
su efectividad al resolver el siguiente problema:1 y 0 = xy 3 − y con condición inicial: y(0) = 0,5
13. Considere el siguiente circuito:

I
E
R1
L1

Utilizando el programa escrito en el ejercicio anterior, halle las soluciones del problema:
dI
E = ER + EL = RI + L
dt
Mostrar resultados particulares para el caso: R1 = 10Ω, L1 = 2 henries, E(t) = 20 cos 5t. Con I(0) = 0
Compare sus resultados con la solución analı́tica, expresada según:
Z 1  R
I(t) = µ(t) E(t)dt + C donde: µ(t) = e− R(t)dt
µ(t)

Dpto Matemática y Computación Computación para RQ 4/5


Facultad de Ciencias y Tecnologı́a Nucleares
Instituto Superior de Tecnologı́as y Ciencias Aplicadas

14. Re-escribir la solución del problema 12 utilizando inlining y evaluar las diferencias entre los programas
obtenidos. Evaluar el rendimiento de cada uno cuando se estudia la variación del paso (se recomienda
utilizar el comando time 5 de Linux)

Referencias
[1] Clases prácticas de métodos numéricos. http://www.instec.cu/e-books/cps/?p=369, 2003.

[2] Manuel Álvarez Blanco et al. Matemática Numérica. Editorial “Felix Varela”, La Habana, 2003.

[3] Arnaldo Gómez Montenegro and Lilian Álvarez Diaz. Métodos Numéricos del Análisis Matemático.
Editorial Academia, La Habana, 1991.

[4] Ira Pohl. C++ by Dissection. Addison-Wesley, 2002.

[5] Varios Autores. Páginas de Manuales de Linux.

Dpto Matemática y Computación Computación para RQ 5/5

También podría gustarte