Está en la página 1de 29

2011

Mximo Obregn Ramos www.maxobregon.com Profesor UNI

EL ARTE DE PROGRAMAR
Con el lenguaje de programacin C++

1
GUIA DEL PROGRAMADOR
Tipo de datos para 16 bits
Tipo unsigned char char enum unsigned int short int int unsigned long long float double long double # bits 8 8 16 16 16 16 32 32 32 64 80 Rango 0 ... 255 -128 ... 127 -32,768 ... 32,767 0 ... 65,535 -32,768 ... 32,767 -32,768 ... 32,767 0 ... 4,294,967,295 -2,147,483,648 ... 2,147,483,647 3.4 *10-38 ... 3.4 *1038 (7-digit precision) 1.7 * 10-308 ... 1.7 ^*10308 (15-digit precision) 3.4*10-4932 ... 1.1*104932 (18-digit precision)

Tipo de datos para 32 bits


Tipo unsigned char char short int unsigned int int unsigned long enum long float double long double Modificador de Escape %c %hd %hu %d %ld %e %E %f %lf %o %p %s %u %x %X # bits 8 8 16 32 32 32 32 32 32 64 80 Rango 0 ... 255 -128 ... 127 -32,768 ... 32,767 0 ... 4,294,967,295 -2,147,483,648 ... 2,147,483,647 0 ... 4,294,967,295 -2,147,483,648 ... 2,147,483,647 -2,147,483,648 ... 2,147,483,647 3.4 * 10-38 ... 1.7* 1038 (7-digit) precisin) 1.7* 10-308 ... 3.4* 10308 (15-digit precisin) 3.4* 10-4932 ... 1.1* 104932 (18-digit precision)

Descripcin Un nico carcter Un entero corto Un entero corto sin signo Un entero con signo, en base decimal Un entero largo Un nmero real en coma flotante, con exponente 3e2 Un nmero real en coma flotante, con exponente en Para float 3E2 mayscula Para double Un entero en base octal Un puntero o direccin de memoria Una cadena de caracteres Un entero sin signo, en base decimal Un entero en base hexadecimal aa289 Un entero en base hexadecimal en maysculas AA289

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

2
FUNCIONES DE LA LIBRERA math.h
Nombre Descripcin acos Arcocoseno asin Arcoseno atan Arcotangente atan2 Arcotangente de dos parmetros ceil Menor entero no menor que el parmetro cos Coseno cosh Coseno hiperblico exp(double x) Funcin exponencial, computa ex abs Valor absoluto de entero fabs Valor absoluto de float floor Mayor entero no mayor que el parmetro fmod Residuo de la divisin de flotantes frexp Fracciona y eleva al cuadrado. ldexp Tamao del exponente de un valor en punto flotante log Logaritmo natural log10 Logaritmo en base 10 modf Obtiene un valor en punto flotante ntegro y en partes pow(x,y) Eleva un valor dado a un exponente, xy sin Seno sinh Seno hiperblico sqrt Raz cuadrada tan Tangente tanh Tangente hiperblica M_PI El numero pi Nota: Los argumentos de las funciones trigonomtricas estn en radianes. Frmulas de referencia:

Residuo 18%7 => 4 Divisin entera 18/7 => 2 Divisin de coma flotante 7/2.0 => 3.5

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

3
PROGRAMACION EN C++
PROBLEMAS DE SOLUCION DIRECTA
Problema 1: Leer 2 nmeros y mostrar la suma //Mi primer programa c++ #include<iostream.h> //cout,cin #include<stdlib.h> //system int main() // void main() // main() // char main() ... { int a,b,c; // int =>enteros float =>coma flotante cout<<"Ingrese primer nmero:"; cin>>a; cout<<"Ingrese segundo nmero:"; cin>>b; Problema 2: Calcular el tercer lado sexagesimal entre ellas. #include<iostream.h> //cout,cin #include<stdlib.h> //system #include<math.h> //system int main() // void main() // main() // char main() ... {float a,b,c,ang; cout<<"Ingrese primer lado:"; cin>>a; cout<<"Ingrese segundo lado:"; cin>>b; c=a+b; //cout<<"La suma es "<<c<<endl; cout<<a<<" mas "<<b<<" es "<<c<<endl; system("pause"); return 0; }

de un tringulo a partir de sus 2 lados y el ngulo cout<<"Ingrese angulo(sexagesimal):"; cin>>ang; //c=sqrt(a*a+b*b-2*a*b*cos(ang*M_PI/180)); c=pow(pow(a,2)+b*b2*a*b*cos(ang*M_PI/180),0.5); cout<<"El tercer lado es "<<c<<endl; system("pause"); return 0; }

Problema 3: Muestre el nmero pi con diferentes formatos. #include<iostream.h> cout.width(10); cout.fill('0'); #include<conio.h> cout<<12<<endl; #include<math.h> cout.width(10); cout.fill('0'); #include <iomanip.h> cout<<2312<<endl; int main() { cout<<"PI="<<M_PI<<endl; //3.14159 //usando iomanip //cout.setf(ios::showpoint); cout.precision(3); cout<<"PI="; cout<<"PI="<<M_PI<<endl; //3.14 cout.precision(23);cout<<M_PI<<endl; cout.setf(0,ios::floatfield); cout.setf(ios::fixed); cout<<"PI="<<setprecision(2)<<M_PI*10<<endl; cout.precision(3); getch();//equivalente a system("pause") cout<<"PI="<<M_PI<<endl; //3.142 }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

4
EJERCICIOS PROPUESTOS
Problema 1: Leer los tres lados de un tringulo y mostrar los 3 ngulos en sexagesimal. Problema 2: Leer las coordenadas cartesianas de un punto y mostrar la coordenada polar de dicho punto, donde el ngulo sea expresada en sexagesimal. Problema 3: Leer el valor de un monto en soles y calcular cuantas monedas de 5 soles y cuantas de 1 sol forman dicho monto, considerando la mnima cantidad de 1 sol. Problema 4: Leer un nmero de 4 cifras e invertir el nmero. Problema 5: Leer las coordenadas polares de un punto en el plano cartesiano y mostrar la coordenada cartesiana de dicho punto, considerar los puntos solo en el primer cuadrante. Problema 6: Leer las coordenadas cartesianas de un punto en el espacio tridimensional y determinar las coordenadas esfricas y cilndricas del mismo punto. Problema 7: Leer las coordenadas cartesianas de 3 puntos en el espacio tridimensional para formar un triangulo y calcular su permetro y rea. Problema 8: Leer las coordenadas de los centros de 2 circunferencias y el radio de uno de ellos, luego calcular el radio del segundo, de tal manera que estas sean tangentes, as mismo calcule tambin el punto de tangencia. Problema 9: Leer la velocidad inicial y el ngulo inicial de un movimiento parablico y determinar la altura mxima, la distancia mxima, el tiempo total que se toma en llegar a la distancia mxima.

Problema 10: Leer la distancia XB, YB, el ngulo grados sexagesimales y determine la velocidad inicial del objeto, de tal manera que impacte el punto B.

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

TIPS PARA RESETEAR AL BC5 1) Cerrar el IDE de borland 2) Ir a la carpeta c:\bc5\bin y borrar con mucho cuidado, solamente los archivos que empiezan con bcwdef.... 3) Iniciar nuevamente el ide de borland

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

6
SENTENCIAS SELECTIVAS (If , switch)
Problema 1: Leer 2 nmeros y mostrar el mayor. #include<iostream.h> //Encontrando el mayor #include<conio.h> if (a>b) int main() M=a; {int a,b,M; else //Entrada de datos M=b; cout<<"Ingrese a:";cin>>a; //Mostrando el mayor cout<<"Ingrese b:";cin>>b; cout<<"El mayor es "<<M<<endl; getch();//equivalente a system("pause") } Problema 2: Leer 2 nmeros y mostrar el mayor y el menor. #include<iostream.h> //Mostrando el mayor #include<conio.h> cout<<"El mayor es "<<M<<endl; int main() cout<<"El menor es "<<m<<endl; {int a,b,M,m; getch();//equivalente a system("pause") //Entrada de datos } cout<<"Ingrese a:";cin>>a; cout<<"Ingrese b:";cin>>b; //Encontrando el mayor y menor if (a>b) {M=a; m=b; } else {M=b; m=a; } Problema 3: Leer los datos de una circunferencia (centro y radio), y las coordenadas cartesianas de un punto cualquiera del plano, luego indique si el punto est dentro del crculo o si esta fuera. #include<iostream.h> //hallando la distancia del centro hasta el punto #include<conio.h> d=sqrt(pow(xc-x,2)+pow(yc-y,2)); #include<math.h> //Mostrando la condicin del punto int main() if (d<=r) { float xc,yc,r,x,y,d; cout<<"El punto est dentro del circulo"; //Entrada de datos else cout<<"Ingrese xc:";cin>>xc; cout<<"El punto est fuera del circulo"; cout<<"Ingrese yc:";cin>>yc; cout<<"Ingrese r:";cin>>r; getch();//equivalente a system("pause") cout<<"Ingrese x:";cin>>x; } cout<<"Ingrese y:";cin>>y;
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

7
Recuerde que: && ==>y || ==>o if (3<x<8) //sentencia invalida if( (3<x)&&(x<8)) // sentencia valida >,<,>=,<= diferente != iguales == Problema 4: Leer el valor de 2 dados y mostrar el puntaje obtenido si la suma es 7 o 6 pero alguno de los dados no sea 1 entonces el puntaje es 20 caso contrario el puntaje ser la mitad de la suma obtenida. #include<iostream.h> if (((s==6)||(s==7))&&((a!=1)&&(b!=1))) #include<conio.h> p=20; int main() else {int a,b,s,p; p=s/2; //Entrada de datos cout<<"puntaje es "<<p; cout<<"Ingrese a:";cin>>a; getch(); cout<<"Ingrese b:";cin>>b; } s=a+b; Recuerda 412/10 => 41 412%10 => 2 Problema 5: Leer un nmero entero de hasta 3 cifras, formar otro nmero ordenando sus cifras de menor a mayor, luego duplicarlo. Si el nmero tiene ms de 3 cifras enviar un mensaje de error. Por ejemplo si se lee: 412 entonces la salida ser 248. Solucin #include<iostream.h> if (M<b) M=b; #include<conio.h> if (M<c) M=c; int main() if (m>b) m=b; {int n,a,b,c,m,M,i,N; if (m>c) m=c; cout<<"Ingrese Numero:"; i=a+b+c-M-m; cin>>n; //Formando el nuevo numero if (n<=999) N=(m*100+i*10+M)*2; {//Partiendo el numero n cout<<"El nmero procesado es:"<<N<<endl; c=n%10; } a=n/100; else b=(n/10)%10; cout<<"El nmero es mayor a 3 cifras"<<endl; //Ordenando m<i<M getch(); m=M=a; //M=a; m=M; return 0; }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

8
Problema 6: Convertir un nmero arbigo en letras Solucin #include<iostream.h> switch (n) #include<conio.h> {case 1: cout<<"UNO";break; int main() case 2: cout<<"DOS";break; {int n; case 3: cout<<"TRES";break; cout<<"Ingrese Nmero:"; case 4: cout<<"CUATRO";break; cin>>n; case 5: cout<<"CINCO";break; /*if (n==1) cout<<"UNO"; default: cout<<"El nmero es mayor a 5"; else if (n==2) cout<<"DOS"; } else if (n==3) cout<<"TRES"; getch(); else if (n==4) cout<<"CUATRO"; return 0; else if (n==5) cout<<"CINCO"; } else cout<<"El nmero es mayor a 5"; */ Problema 7: Convertir un nmero arbigo en romano hasta el nmero 100. Recuerda que las equivalencias son: I=1 V=5 X=10 L=50 C=100. Por ejemplo: 49 => XLIX Solucin #include<iostream.h> switch (u) #include<conio.h> {case 1: cout<<"I";break; int main() case 2: cout<<"II";break; {int n,d,u; case 3: cout<<"III";break; cout<<"Ingrese Numero:"; cin>>n; case 4: cout<<"IV";break; d=n/10; u=n%10; case 5: cout<<"V";break; switch (d) case 6: cout<<"VI";break; {case 1: cout<<"X";break; case 7: cout<<"VII";break; case 2: cout<<"XX";break; case 8: cout<<"VIII";break; case 3: cout<<"XXX";break; case 9: cout<<"IX";break; case 4: cout<<"XL";break; } case 5: cout<<"L";break; getch(); case 6: cout<<"LX";break; return 0; case 7: cout<<"LXX";break; } case 8: cout<<"LXXX";break; case 9: cout<<"XC";break; case 10: cout<<"C";break; } Problema 8: Dada una fecha como 3 nmeros (d/m/a), calcular el valor de la fecha siguiente. Para ello considere que los meses de Ene, Mar, May, Jul, Ago, Oct y Dic tienen 31 das; y el resto, excepto febrero tienen 30 das, para el mes de febrero trae 29 das cuando el ao es bisiesto y 28 cuando no lo es. Tenga en cuenta que un ao es bisiesto cuando es divisible por 400 o si es divisible por 4 pero no por 100. Por ejemplo si la fecha que ingresa es 31/5/2011 entonces la fecha de salida ser 1/6/2011 y si fuera 31/12/2011 de entrada, entonces la salida es 1/1/2012. Asuma que la fecha ingresada es vlida.
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

9
Solucin #include<iostream.h> #include<conio.h> int main() {int a,d,m; cout<<"Ingrese dia:";cin>>d; cout<<"Ingrese mes:";cin>>m; cout<<"Ingrese ao:";cin>>a; d++;//d=d+1; if (d==32) {d=1; m++; if (m==13) {m=1; a++; } } else if (d==31) switch (m) { case 4: case 6: case 9: case 11: d=1;m++; } else if ((d==30) && (m==2)) {d=1; m++; } else if ( (d==29) && (m==2) && !((a%400==0)||((a%4==0)&&(a%100!=0))) ) {d=1;m++; } cout<<"La fecha del da siguiente es:"; cout<<d<<"/"<<m<<"/"<<a<<endl; getch(); return 0; }

PROBLEMA PROPUESTOS
Problema 1: Leer 7 nmeros y encontrar el mayor, desarrolle 3 formas distintas de codificacin para encontrar la misma respuesta. Problema 2: Leer un nmero de 4 cifras y mostrar el mayor dgito. Problema 3: Leer 7 nmeros y encontrar el segundo mayor. Problema 4: Leer 3 nmeros y ordenarlos de menor a mayor Problema 5: Leer los 3 lados de un tringulo e indicar si: no existe, es rectangular, es issceles, es equiltero, es acutngulo, escaleno, etc. Problema 6: Leer los datos de 2 circunferencias e indicar la posicin relativa entre ellas, y verificar si: se intersectan, son tangentes internas, son tangentes externas, de tamaos iguales, la primera circunferencia est dentro de la segunda, etc... Problema 7: Leer un numero entero de hasta 3 cifras, formar otro nmero ordenando sus cifras de menor a mayor, luego duplicarlo. Si el nmero tiene ms de 3 cifras enviar un mensaje de error. Ejemplo si se lee: 412 entonces la salida ser 248 Problema 8: Leer las coordenadas de un punto e indicar en que cuadrante se encuentra o algn eje y el origen de coordenadas. Problema 9: Leer las coordenadas de los vrtices de un tringulo y las coordenadas de un punto cualquiera. Si el tringulo existe, verificar la posicin relativa del punto con respecto al triangulo, si esta fuera, dentro o en el permetro. Problema 10: Leer el valor de 2 dados y mostrar el puntaje obtenido, de acuerdo a las siguientes reglas: 2 parejas de 2 o 3 o 6, ser 4 puntos nmeros correlativos entre (2,3) o (4,5) o (5,6) tendr 5 puntos los dos 1 obtendr 1 punto, el resto ser 0 puntos Nota: Deber usar switch.
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

10
Ejemplo: Dado1:5 Dado2:4 Puntaje obtenido: 5 puntos Problema 10: Leer la coordenadas inicial x,y de un objeto y luego ingresar la distancia y la direccin dos veces, donde direccin puede ser : 1(Derecha), 2(Izquierda), 3(Arriba), 4(Abajo). Luego deber imprimir la nueva posicin, en este ejemplo se pide que use switch obligatoriamente. Ejemplo: Ingrese posicin Inicial x:10 y:5 Ingrese Desplazamiento 1: Distancia:8 Direccion:2 Ingrese Desplazamiento 2: Distancia:5 Direccion:3 Posicin final: (2,10) Problema 11: Calcular el precio de un automovil, considerando las siguientes tablas: Tipo de Auto: 1) nuevo 2) usado Precio en miles de dolares por marca si es nuevo 1)Toyota 27 2)Hyundai 20 3)Chino 14 Descuento por antiguedad si es usado <5 aos es 15% [5,10> aos es 30% >10 aos es 50% Descuento por color: 1) Negro 10% 2) Rojo 2% 3) Azul 20% 4) Resto, no tiene descuento Nota: Usar if y switch dentro de otro switch. Ejemplo1: Ingrese Tipo de auto: 2 Ingrese marca: 2 Ingrese antiguedad: 15 Ingrese color:1 El precio es 8 mil dolares

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

11
Problema 12: El juego de Billar. Los datos de entrada ser la dimensin del tablero de nfil filas x ncol columnas, la posicin de la bolilla (fil,col), la direccin de lanzamiento (dv,dh), considerando el sistema de coordenadas segn la figura. Direcciones de X (col) Lanzamientos posibles:

Y (fil)

(0,1) (-1,1) (-1,0) (-1,-1) (0,-1) (-1,1) (1,0) (1,1)

El programa deber calcular la nueva posicin de la bolilla cuando esta avance una casilla, si est en el borde deber considerar el rebote.

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

12
SENTENCIAS ITERATIVAS (while, do..while, for)
Problema 1: Ejemplo bsico de iterativas sentencia while mostrar los n primeros nmeros y sus cuadrados. #include<iostream.h> while (i<=n) #include<conio.h> {c=i*i; int main() cout<<i<<" ==> "<<c<<endl; {int i,c,n; i++; cout<<"Ingrese n:";cin>>n; } i=1; getche(); return 0; } Problema 2: Ejemplo bsico de iterativas sentencia while mostrar los n primeros nmeros impares y sus cubos. #include<iostream.h> while (con<n) #include<conio.h> {c=i*i*i; int main() if (i%2==1) {int i,c,n,con; {cout<<i<<" ==> "<<c<<endl; cout<<"Ingrese n:";cin>>n; con++; i=1; con=0; } i++; } getche(); return 0; } Problema 3: Ejemplo semi - bsico de iterativas sentencia while mostrar todos los factores de un nmero n. #include<iostream.h> while (i<=n) #include<conio.h> {if (n%i==0) int main() {cout<<"Factor "<<c<<"=>"<<i<<endl; {int i,c,n; c++; cout<<"Ingrese n:";cin>>n; } i=1;c=1; i++; } getche(); return 0; }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

13
Problema 4: Ejemplo semi - bsico de iterativas sentencia while mostrar si un numero n es primo o no. #include<iostream.h> while (i<n) #include<conio.h> {if (n%i==0) int main() esprimo=0; {int i,c,n,esprimo; i++; cout<<"Ingrese n:";cin>>n; } esprimo=1; i=2; if (esprimo==1) cout<<"El nmero es primo"<<endl; else cout<<"El nmero no es primo"<<endl; getche(); return 0; } Problema 5: Ejemplo semi - bsico de iterativas sentencia for, para mostrar si un numero n es primo o no. #include<iostream.h> if (esprimo==1) #include<conio.h> cout<<"El nmero es primo"<<endl; int main() else {int i,c,n,esprimo; cout<<"El nmero no es primo"<<endl; cout<<"Ingrese n:";cin>>n; getche(); return 0; esprimo=1; } for (i=2;i<n;i++) if (n%i==0) esprimo=0; Problema 6: Ejemplo semi-bsico de iterativas sentencia for, para mostrar los n primeros primos. #include<iostream.h> //Imprime el nmero si es primo #include<conio.h> if (esprimo==1) int main() {cout<<"primo "<<c<<"=>"<<n<<endl; {int i,c,n,esprimo,can; c++; cout<<"Ingrese n:";cin>>can; } for(n=2,c=1;c<=can;n++) } { //averigua si n es primo getche(); esprimo=1; return 0; for (i=2;i<n;i++) } if (n%i==0) esprimo=0;

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

14
Problema 7: Ejemplo semi - bsico de iterativas sentencia for, mostrar los n primeros trminos de fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21,... #include<iostream.h> for(a=0,b=1,i=3;i<=n;i++) #include<conio.h> {c=a+b; int main() cout<<","<<c; {int a,b,c,i,n; a=b; cout<<"Ingrese n:";cin>>n; b=c; cout<<"0,1"; } getche(); return 0; }

PROBLEMA PROPUESTOS
Problema 1: Calcular la suma de n primeros nmeros naturales Problema 2: Mostrar los primos comprendidos entre a y b. Problema 3: Calcular la suma de n primeros primos Problema 4: Calcule el factorial de n Problema 5: Mostrar la coordenada cartesiana de los vrtices de un polgono regular de n lados cuyo centro se encuentra en el origen de coordenadas. Problema 6: Calcule el nmero e= 2.718281828, a partir de la siguiente serie, usando los n primeros trminos. 1 1 1 1 1 1 1 = + + + + + + + 0! 1! 2! 3! 4! 5! 6! Problema 7: Calcule el nmero = 3.1415926, a partir de la siguiente serie, usando los n primeros trminos. 4 4 4 4 4 4 = + + + 1 3 5 7 9 11 Problema 8: Calcule el seno(x) considerando los n primeros trminos de la siguiente expresin:
3 3! 2 2! 5 5! 4 4! 7 7! 6 6! 9 9! 8 8! 11 11! 10 10!

() = () = 1

+ +

+ +

+ +
2

Problema 9: Calcule el coseno(x) tomando los n primeros trminos de la siguiente expresin: Problema 10: Dentro de las maravillosas expresiones que se pueden construir en las 1 matemticas, se tiene la siguiente frmula de recurrencia: = () = + , que nos permite calcular la 2 usando solamente sumas y divisiones. Lo interesante de esta expresin es que empieza con un valor de x0 cualquiera, con la cual obtenemos f(x0), la cual viene a ser x1, luego evalas f(x1) para obtener x2, luego f(x2) para obtener x3 y as sucesivamente. Por ejemplo: X0=5 =>f(x0)=2.7 (el valor de x0=5 es un valor cualquiera diferente de 0) x1=2.7 =>f(x1)=1.72 x2=1.72 =>f(x2)=1.44 Observa que el nmero se va aproximando a 2 = 1.4142
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

15
Desarrolle un programa que lea como dato de entrada x0 y n, y muestre la 2 despus de n iteraciones y compare este resultado con el valor exacto. Problema 11: Usando el procedimiento anterior, considerando n iteraciones y partiendo de un x0 cualquiera: Calcule 3, sabiendo que la frmula de recurrencia es () Calcule 4, sabiendo que la frmula de recurrencia es () Calcule 5, sabiendo que la frmula de recurrencia es () Calcule por deduccin de las frmulas anteriores.

= = =

2 3 3 4 4 5

1 2 1

+ 3 + 4
1

Problema 12: En todos los problemas anteriores que usan una serie o una frmula de recurrencia, se ha usado como criterio de parada la cantidad de iteraciones. Intente ahora usar el error aparente como criterio de parada, la cual est definido por: = | | Entonces las iteraciones se debe realizar hasta que este error sea menor que un error mximo, que previamente se ha tenido que leer como dato de entrada. SOLUCIONARIO: Problema 1: #include<iostream.h> #include<conio.h> int main() {int i,s; cout<<"Ingrese n:";cin>>n; Problema 4: #include<iostream.h> #include<conio.h> int main() {int i,f,n; cout<<"Ingrese n:";cin>>n; Problema 6: #include<iostream.h> #include<conio.h> int main() {int i,f,n; float s; cout<<"Ingrese cantidad de trminos:"; cin>>n;

for (i=1,s=0;ii<n;i++) s+=i;//s=s+i; cou<<"La suma es "<<s; getch(); }

for (i=1,f=1;i<=n;i++) f*=i;//f=f*i; cout<<n<<"!="<<f; getch(); }

for (j=0,s=0;j<n;j++) {for (i=1,f=1;i<=j;i++) f*=i;//f=f*i; s+=1.0/f;//s=s+f; } cout<<"e="<<s; getch(); }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

16
Problema 7: #include<iostream.h> #include<conio.h> int main() {int i,j,f,n; float s,sig; cout<<"Ingrese cantidad de trminos:"; cin>>n; Problema 10: #include<iostream.h> #include<conio.h> int main() {int i,j,f,n; float x; cout<<"Ingrese cantidad de veces iterar:"; cin>>n; cout<<"Ingrese aproximacion inicial:"; cin>>x; Problema 12: #include<iostream.h> #include<math.h> #include<conio.h> #define errormax 0.0001 int main() {int i,n; float x,error=1,xa; cout<<"Ingrese aproximacion inicial:"; cin>>x; xa=x; for (sig=1,i=1,s=0;i<=n;i++,sig=-sig) s+=sig*4/(i*2-1);//s=s+4.0/(i*2-1); cout<<"pi="<<s; getch(); }

for (i=1;i<=n;i++) x=x/2+1/x; cout<<"raiz de 2="<<x; getch(); } a

for(i=1;error>errormax;i++) {x=x/2+1/x; error=fabs(x-xa); xa=x; cout<<"raiz de 2="<<x<<endl; } cout<<"Esta respuesta se obtuvo con "; cout<<i<<" iteraciones"; getch(); }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

17
FUNCIONES
Esta herramienta es fundamental en la programacin para poder realizar la modulacin del problema a resolver, es decir dividir el gran problema en pequeos problemas. Ejemplo 1: Calcular la hipotenusa a partir de los 2 los catetos de un tringulo rectangular. Sin funciones Con funciones #include<iostream.h> #include<iostream.h> #include<conio.h> #include<conio.h> #include<math.h> #include<math.h> //prototipo de la funcion //programa principal float calhip(float a,float b); int main() {float a,b,h; //programa principal cout<<"Lado a:";cin>>a; int main() cout<<"Lado b:";cin>>b; {float a,b,h,c,ang; h=sqrt(a*a+b*b); cout<<"Lado a:";cin>>a; cout<<"la hipotenusa es "<<h<<endl; cout<<"Lado b:";cin>>b; getch(); h=calhip(a,b); } cout<<"La hipotenusa es "<<h<<endl; getch(); } //desarrollo de las funciones float calhip(float a,float b) {return sqrt(a*a+b*b); } Ejemplo 2: Calcular los ngulos de un tringulo a partir de sus tres lados, usando funciones. #include<iostream.h> cout<<"El ngulo opuesto a A es "<<angA<<endl; #include<conio.h> cout<<"El ngulo opuesto a B es "<<angB<<endl; #include<math.h> cout<<"El ngulo opuesto a C es "<<angC<<endl; getch(); //prototipo de las funciones } float calang(float a,float b,float c); float calsex(float ang); //desarrollo de las funciones float calang(float a,float b,float c) //programa principal {return acos((a*a+b*b-c*c)/(2*a*b))*180/M_PI; int main() } {float a,b,c,angA,angB,angC; float calsex(float ang) cout<<"Lado a:";cin>>a; {return ang*180/M_PI cout<<"Lado b:";cin>>b; } cout<<"Lado c:";cin>>c; angC= calsex(calang(a,b,c)); angB= calsex(calang(a,c,b)); angA= calsex(calang(b,c,a));
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

18
PROBLEMAS PROPUESTOS
Problema 1: Desarrolle una funcin que devuelva la suma de los n primeros nmeros naturales. Problema 2: Desarrolle una funcin que devuelva verdadero si un nmero n es primo y falso si no lo es. Problema 3: Desarrolle una funcin que devuelva la cantidad de primos que existen en un intervalo de a y b. Problema 4: Desarrolle una funcin que permita calcular el ensimo trmino de la serie de Fibonacci. Problema 5: Desarrolle una funcin que invierta un nmero n, por ejemplo si ingresa 357 debe entregar 753. Problema 6: Desarrolle una funcin que cuente la cantidad de dgitos que tiene un nmero n. Problema 7: Desarrolle una funcin que devuelva el mcm de 2 nmeros Problema 8: Desarrolle una funcin que devuelva el MCD de 2 nmeros Problema 9: Elaborar un programa que permita calcular el combinatorio de dos nmeros. Recordar que el combinatorio de 2 nmeros se calcula de la siguiente manera:

Crn

n! r! (n r )!

Problema 10: Desarrolle una funcin que devuelva la longitud de curva de la funcin f(x)=cos(x+sin(x)*x)*x, en el intervalo x=[a,b], para ello deber dividir el intervalo en n tramos, luego deber tomar cada tramo y aproximar que la curva en cada tramo es una recta. Por lo tanto los datos de entrada de la funcin seria a,b y n, la funcin debe estar incorporada dentro de la funcin. Por ejemplo en la figura se divide en 4 partes(n=4), entonces la longitud de la curva es d1+d2+d3+d4.

d2 d1

d3

d4

Parte 1

Parte 2

Parte 3

Parte 4

Problema 11: Haciendo uso de funciones convenientemente, escriba un programa en C++ que permita elaborar un juego con dados, que sigue las siguientes reglas: Se tiene 2 jugadores: Blanco (B) y una Negro (N). Inicia el juego el blanco, tirando los dados Por cada lance, el programa debe generar un nmero entre 1 y 6, de manera alterna (B-NB-N, etc.): es decir, primero genera un nmero para la ficha blanca y en la siguiente jugada genera un nmero para la ficha negra.

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

19
Si el nmero generado es igual a 6, entonces esa ficha repite otro turno (juega otra vez, inmediatamente). Gana la ficha que acumule ms de 100 puntos. El programa deber mostrar por cada lance: El color de la ficha El puntaje que saca en el lance El puntaje acumulado del jugador Un mensaje que indique si hay o no cambio de turno (le toca al otro) Se mostrarn los resultados finales. Nota: Utilice las funciones rand() para generar nmeros al azar.

FUNCIONES RECURSIVAS
Si la funcin tiene la forma: f(xi ) = g(f(xi1 )) Entonces esta puede ser implementada con una funcin recursiva. Pero estas deben tener algn criterio de parada. Ejemplos de casos donde se podra implementar la funcin recursiva: 1. n!=n*(n-1)! 0!=1 0=0 2. = + ( 1) 3. Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2) Fibonacci(1)=0,Fibonacci(2)=1 4. Mayor(n, V)= Al mayor entre V[n] y Mayor(n-1,V) Mayor(1,V) = V[1] 5. Tringulo de pascal

Implemente las funcione pascal(f,t) donde f es la fila del tringulo y t es el trmino a extraer de esa fila. Por ejemplo pascal(5,3) debe devolver 6 6. Calcular la determinante de una matriz de n x n, considere el siguiente ejemplo para el caso de 3x3. 1,1 1,2 1,3 2,2 2,3 2,1 2,3 2,1 2,2 |2,1 2,2 2,3 | = 1,1 | | -1,2 | |+1,3 | | 3,2 3,3 3,1 3,3 3,1 3,2 3,1 3,2 3,3 7. Calcular la derivada ensima de funcin determinada. 8. Implementar el Juego de Buscaminas en un tablero de mxn, trate usar recursividad.

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

20
Ejemplo 1: Clculo del factorial y la sumatoria. #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<math.h> int facnor(int n); //factorial normal int facrec(int n); //factorial recursivo int sum(int n); //sumatoria recursivo int fib(int n);//ensimo trm. de fibonacci int main() {int n=5; cout<<facnor(n)<<endl; cout<<facrec(n)<<endl; cout<<sum(n)<<endl; cout<<fib(n)<<endl; system("pause"); return 0; } int sum(int n) //sumatoria recursivo {if (n==0) return 0; else return n+sum(n-1); } int fib(int n) //recursivo {if (n==1) return 0; else if (n==2) return 1; else fib(n-1)+fib(n-2); } /* otra forma int fib(int n) //recursivo {if (n<=2) return n-1; else fib(n-1)+fib(n-2); }*/ int facnor(int n) {int f=1,i; for(i=1;i<=n;i++) f=f*i; return f; } int facrec(int n) {if (n==0) return 1; else return n*facrec(n-1); }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

21
ARREGLOS
Los arreglos son tipos de datos que permiten almacenar varios valores en una sola variable, estas pueden ser multidimensionales. Ejemplo de una dimensin: int x[5]; x[3]=7; 7
0 1 2 3 4

Ejemplo de dos dimensiones: int m[3][4]; m[2][1]=5; 0 m[1][2]=7; 1 m[0][1]=m[2][1]+4; 2

9 7 5

Ejemplo 1: Leer y mostrar un vector de una dimensin. #include<iostream.h> void leer(int *n,int v[]) #include<conio.h> {int i; #include<stdlib.h> cout<<"Ingrese nmero de elementos:"; #include<math.h> cin>>*n; #define N 1000 for(i=0;i<*n;i++) void leer(int *n,int v[]); {cout<<"V["<<i<<"]="; void generar(int n,int v[]); cin>>v[i]; void mostrar1(int n,int v[]); } void mostrar2(int n,int v[]); } void mostrar3(int n,int v[]); void mostrar1(int n,int v[]) int main() {int i; { int v[N],n; for(i=0;i<n;i++) //leer(&n,v); cout<<"V["<<i<<"]="<<v[i]<<endl; n=300; } generar(n,v); void mostrar2(int n,int v[]) cout<<"Mostrando los valores\n"; {int i; mostrar3(n,v); for(i=0;i<n;i++) system("pause"); cout<<v[i]<<" "; return 0; cout<<endl; } } //desarrollo de las funciones void mostrar3(int n,int v[]) void generar(int n,int v[]) {int i; {int i; cout<<"("; for (i=0;i<n;i++) for(i=0;i<n;i++) v[i]=rand()%20; {cout<<v[i]; } if (i<n-1) cout<<","; } cout<<")"<<endl; }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

22
Ejemplo 2: Hallar el mayor y menor valor de un arreglo aleatorio, usar recursividad para el mayor. #include<iostream.h> int mayorec(int n,int v[]) #include<conio.h> {if (n==1) return v[0]; #include<stdlib.h> else #include<time.h> if (v[n-1]>mayorec(n-1,v)) #define N 1000 return v[n-1]; void generar(int n,int v[]); else void mostrar(int n,int v[]); return mayorec(n-1,v); int mayor(int n,int v[]); } int mayorec(int n,int v[]); int menor(int n,int v[]) int menor(int n,int v[]); {int m=v[0],i; //programa principal for(i=1;i<n;i++) int main() if (m>v[i]) m=v[i]; { int v[N],n; return m; srand(time(NULL)); } n=6; generar(n,v); void generar(int n,int v[]) cout<<"Mostrando los valores\n"; {int i; mostrar(n,v); for (i=0;i<n;i++) cout<<"El mayor es "<<mayorec(n,v)<<endl; v[i]=rand()%101; cout<<"El menor es "<<menor(n,v)<<endl; } system("pause"); void mostrar(int n,int v[]) return 0; {int i; } cout<<"("; //desarrollo de las funciones for(i=0;i<n;i++) int mayor(int n,int v[]) {cout<<v[i]; {int m=v[0],i; if (i<n-1) cout<<","; for(i=1;i<n;i++) } if (m<v[i]) m=v[i]; cout<<")"<<endl; return m; } } Problemas: 1) Lea los datos de un polinomio, en un arreglo de una dimensin, luego muestre el producto entre la derivada e integral de dicho polinomio 2) Lea 2 polinomios y muestre el producto entre ellas. 3) Considerando que un nmero gigante de 200 cifras se almacena en un vector (arreglo de una dimensin), donde cada digito es almacenado en cada elemento del vector, entonces desarrolle un programa que lea 2 nmeros grandes y calcule la suma, la resta, el producto y el factorial.

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

23
PROGRAMACION ORIENTADA A OBJETOS
En la POO, primero se identifica a los objetos que participan en el problema a resolver, luego se definen las clases que determina sus caractersticas y su funcionalidad. Una clase es la definicin de un grupo de objetos que tienen caractersticas similares, por ejemplo la clase persona, mamferos, tornillo, auto, punto, vector2d, etc. Un objeto es una entidad en particular que pertenece a una clase, como por ejemplo: el objeto Marcos que pertenece a la clase persona. Ejemplo definamos: La clase vector: class vector2d{ //datos miembro private: int x,y; //funciones miembro(mtodos) public: void leer(); void mostrar(); void setear(int vx,int vy); float modulo(); }; La clase persona: class persona{ private: char nombre[100]; char apellido[200]; int edad; float peso; public: void correr(); void estudiar(); }; La clase matriz class matriz{ private: int nfil,ncol; float m[50][50]; public: void leer(); void mostrar(); float determinante(); matriz inversa(); matriz traspuesta(); };
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

24
Ejemplo 1: Implemente la clase vector2d y use los componentes. #include<iostream.h> //programa principal #include<conio.h> int main(){ #include<stdlib.h> vector2d v1,v2,v3; #include<math.h> v1.setear(3,4); //definicin de la clase v2.leer(); class vector2d{ cout<<"El modulo del primer vector es //datos miembro <<v1.modulo()<<endl; private: cout<<"El modulo del segundo vector es int x,y; <<v2.modulo()<<endl; //funciones miembro(mtodos) v1.mostrar(); public: v2.mostrar(); void leer(); system("pause"); void setear(float vx,float vy); return 0; void mostrar(); } float modulo(); //desarrollo de las funciones miembros de la clase }; void vector2d::leer(){ cout<<"Ingrese x:";cin>>x; cout<<"Ingrese y:";cin>>y; } void vector2d::setear(float vx,float vy){ x=vx; y=vy; } void vector2d::mostrar(){ cout<<"("<<x<<","<<y<<")"<<endl; } float vector2d::modulo(){ return pow(x*x+y*y,0.5); }

" "

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

25
Ejemplo 2: Implemente el juego del buscaminas usando POO #include<iostream.h> void minas::mostrar(){ #include<conio.h> int i,j;char let='V',letbom=2; #include<stdlib.h> for(i=0;i<f;i++) #include<math.h> {for(j=0;j<c;j++) #include<time.h> if (tab[i][j]==-5) #define F 100 cout<<letbom; #define C 100 else if (tab[i][j]==0) class minas{ cout<<let; private: else int f,c; cout<<tab[i][j]; int tab[F][C]; cout<<endl; public: } void generar(int nf,int nc, int nb); } void contar(); void mostrar(); void minas::contar(){ }; int i,j,conb,ii,jj; for(i=0;i<f;i++) int main() for(j=0;j<c;j++) {srand(time(NULL)); if (tab[i][j]!=-5) minas m; { conb=0; m.generar(24,79,100); for(ii=i-1;ii<=i+1;ii++) m.contar(); for(jj=j-1;jj<=j+1;jj++) m.mostrar(); if ( getche(); !((ii==i)&&(jj==j)) return 0; && (ii>=0) && (jj>=0) } && (ii<f) && (jj<c) ) void minas::generar(int nf,int nc, int nb) if (tab[ii][jj]==-5) {int i,j,conb,posf,posc; conb++; f=nf; c=nc; tab[i][j]=conb; for(i=0;i<f;i++) //rellenando de 0 el tablero } for(j=0;j<c;j++) } tab[i][j]=0; conb=0; //la bomba se registra con el valor de -5 while (conb<nb) {posf=rand()%f; posc=rand()%c; if (tab[posf][posc]==0) {tab[posf][posc]=-5; conb++; } } }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

26
Ejemplo 3: Clase punto,vector y recta #include<iostream.h> #include<conio.h> #include<math.h> //DEFINICION DE LA CLASE class Cpunto3d { protected: float x,y,z; public: Cpunto3d(); Cpunto3d(float,float,float); leer(); ver(); setear(float,float,float); }; class Cvector3d: public Cpunto3d {public: Cvector3d unitario(); float modulo(); Cvector3d(); Cvector3d(float,float,float); Cvector3d operator+(Cvector3d a); Cvector3d operator-(Cvector3d a); Cvector3d operator*(float k); Cvector3d operator*(Cvector3d a); float operator^(Cvector3d a); operator++(); operator+=(float k); }; class Crecta3d {protected: Cpunto3d P; Cvector3d Q; public: void leer(); void ver(); void setear(Cpunto3d vP,Cvector3d vQ); }; //PROGRAMA PRINCIPAL aplicacion de las clases //Calcular N, que es la nueva posicin de M cuando rota sobre la recta //En el sentido de la mano derecha siguiendo al vector Q de la recta //R: R=P+kQ un determinado ngulo a(en sexagesimal)
Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

27
void main() {clrscr(); float a; Cvector3d P,Q,M,N,B,ux,uy; cout<<"Ingresar el angulo a rotar en sexagesimal:";cin>>a; a=a*M_PI/180; cout<<"Ingrese punto fijo P de la recta:\n"; P.leer(); cout<<"Ingrese vector Q de la recta:\n"; Q.leer(); cout<<"Ingrese punto M a rotar alrededor de la recta:\n"; M.leer(); B=P+Q.unitario()*(((M-P)^Q)/Q.modulo()); ux=(M-B).unitario(); uy=Q.unitario()*ux; N=B+ux*((M-B).modulo()*cos(a))+uy*((M-B).modulo()*sin(a)); cout<<"La nueva posicion es:"; N.ver(); getch(); } //DESARROLLO DE LOS MIEMBROS DE LA CLASE //CLASE CPUNTO3D Cpunto3d::Cpunto3d() {setear(0,0,0);} Cpunto3d::Cpunto3d(float vx,float vy,float vz) {setear(vx,vy,vz);} Cpunto3d::leer() {cout<<"X= ";cin>>x; cout<<"Y= ";cin>>y; cout<<"Z= ";cin>>z; } Cpunto3d::ver() {cout<<"("<<x<<","<<y<<","<<z<<")"<<endl; } Cpunto3d::setear(float vx,float vy,float vz) {x=vx; y=vy; z=vz; } //CLASE CVECTOR3D Cvector3d::Cvector3d() {Cpunto3d(0,0,0);} Cvector3d::Cvector3d(float vx,float vy,float vz):Cpunto3d(vx,vy,vz) {} float Cvector3d::modulo() {return sqrt(x*x+y*y+z*z); }

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com

28
Cvector3d Cvector3d::unitario() {Cvector3d temp; temp.x=x/modulo(); temp.y=y/modulo(); temp.z=z/modulo(); return temp; } Cvector3d Cvector3d::operator+(Cvector3d a) {Cvector3d temp; temp.x=x+a.x; temp.y=y+a.y; temp.z=z+a.z; return temp; } Cvector3d Cvector3d::operator-(Cvector3d a) {Cvector3d temp; temp.x=x-a.x; temp.y=y-a.y; temp.z=z-a.z; return temp; } Cvector3d Cvector3d::operator*(Cvector3d a) {Cvector3d temp; temp.x=y*a.z-a.y*z; temp.y=z*a.x-a.z*x; temp.z=x*a.y-a.x*y; return temp; } float Cvector3d::operator^(Cvector3d a) {return (x*a.x+y*a.y+z*a.z); } Cvector3d Cvector3d::operator*(float k) {Cvector3d temp; temp.x=x*k; temp.y=y*k; temp.z=z*k; return temp; } Cvector3d::operator++() {x++;y++;z++;} Cvector3d::operator+=(float k) {x+=k;y+=k;z+=k;}

Elaborado por: Mximo Obregn R. (511) 999662562(mov)/987121648 www.maxobregon.com