Vous êtes sur la page 1sur 29

2015

Mximo Obregn Ramos


Buscar en google:
Profesor UNI

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

1
GUIA DEL PROGRAMADOR
TIPO DE DATO
unsigned char
char
short int
unsigned int
int
unsigned long
enum
long
float
double
long double

# bits y rango para 32 bits


8 (0 ... 255)
8 (-128 ... 127)
16 (-32,768 ... 32,767)
32 (0 ... 4,294,967,295)
32 (-2,147,483,648 ... 2,147,483,647)
32 (0 ... 4,294,967,295)
32 (-2,147,483,648 ... 2,147,483,647)
32 (-2,147,483,648 ... 2,147,483,647)
32 (3.4 * 10E-38 ... 1.7* 10E38 (7-digit) precisin))
64 (1.7* 10E-308 ... 3.4* 10E308 (15-digit precisin))
80
) (3.4* 10E-4932 ... 1.1* 10E4932 (18-digit precision))

MODIFICADOR DE ESCAPE
%c
%hd
%hu
%d
%8d
%08d
%ld
%e
%E
%f
%.2f
%6.2f
%lf
%o
%p
%s
%u
%x
%X
CDIGO
'\n'
'\r'
'\f'
'\t'
'\b'
'\''
'\"'
'\\ '
'\? '
'\nnn'
'\xnn'

Para 16 bits

16
16
16

Descripcin
Un nico carcter
Un entero corto
Un entero corto sin signo
Un entero con signo, en base decimal
Se reserva 8 digitos y se completa con espacios en blanco
Se reserva 8 digitos y se completa con 0
Un entero largo
Un nmero real en coma flotante, con exponente e(10)
Un nmero real en coma flotante, con exponente E(10)
Para float sin exponente
Con 2 decimales
Con 2 decimales, en 6 caracteres, se completa con espacios,
se incluye el punto, se puede colocar 0 despus de %.
Para doubl sin exponente
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 minuscula
Un entero en base hexadecimal en maysculas

Valor en decimal Significado


10
nueva lnea
13
retorno de carro
2
nueva pgina (form feed)
9
tabulador horizontal
8
retroceso (backspace)
39
comilla simple
4
comillas
92
barra invertida
63
interrogacin
cualquier carcter (donde nnn es el cdigo ASCII expresado en octal)
cualquier carcter (donde nn es el cdigo ASCII expresado en hexadecimal)

Elaborado por: Mximo Obregn R. (511) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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!

5
5!

7
7!

9
9!

11
11!

Problema 9: Calcule el coseno(x) tomando los n primeros trminos de la siguiente expresin:

() = 1

2
2!

4
4!

6
6!

8
8!

10
10!

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
2

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) 951629294 (movistar RPM y Whats App)

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 ()

2
3

1
2

Calcule 4, sabiendo que la frmula de recurrencia es ()

3
4

+ 3

Calcule 5, sabiendo que la frmula de recurrencia es ()

4
5

+ 4

Calcule por deduccin de las frmulas anteriores.


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;

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

Problema 4:
#include<iostream.h>
#include<conio.h>
int main()
{int i,f,n;
cout<<"Ingrese n:";cin>>n;

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

Problema 6:
#include<iostream.h>
#include<conio.h>
int main()
{int i,f,n;
float s;
cout<<"Ingrese cantidad de trminos:";
cin>>n;

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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:

C rn

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

Parte 1

Parte 2

d3

Parte 3

d4

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

"
"

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

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) 951629294 (movistar RPM y Whats App)

Vous aimerez peut-être aussi