Вы находитесь на странице: 1из 29

2015

Máximo Obregón Ramos


Buscar en google:
Profesor UNI

EL ARTE DE
PROGRAMAR
Con el lenguaje de programación C++
1
GUIA DEL PROGRAMADOR
TIPO DE DATO # bits y rango para 32 bits Para 16 bits
unsigned char 8 (0 ... 255)
char 8 (-128 ... 127)
short int 16 (-32,768 ... 32,767)
unsigned int 32 (0 ... 4,294,967,295) 16
int 32 (-2,147,483,648 ... 2,147,483,647) 16
unsigned long 32 (0 ... 4,294,967,295)
enum 32 (-2,147,483,648 ... 2,147,483,647) 16
long 32 (-2,147,483,648 ... 2,147,483,647)
float 32 (3.4 * 10E-38 ... 1.7* 10E38 (7-digit) precisión))
double 64 (1.7* 10E-308 ... 3.4* 10E308 (15-digit precisión))
long double 80
) (3.4* 10E-4932 ... 1.1* 10E4932 (18-digit precision))

MODIFICADOR DE ESCAPE Descripción


%c Un único carácter
%hd Un entero corto
%hu Un entero corto sin signo
%d Un entero con signo, en base decimal
%8d Se reserva 8 digitos y se completa con espacios en blanco
%08d Se reserva 8 digitos y se completa con 0
%ld Un entero largo
%e Un número real en coma flotante, con exponente e(10)
%E Un número real en coma flotante, con exponente E(10)
%f Para float sin exponente
%.2f Con 2 decimales
%6.2f Con 2 decimales, en 6 caracteres, se completa con espacios,
se incluye el punto, se puede colocar 0 después de %.
%lf Para doublé sin exponente
%o Un entero en base octal
%p Un puntero o dirección de memoria
%s Una cadena de caracteres
%u Un entero sin signo, en base decimal
%x Un entero en base hexadecimal minuscula
%X Un entero en base hexadecimal en mayúsculas

CÓDIGO Valor en decimal Significado


'\n' 10 nueva línea
'\r' 13 retorno de carro
'\f' 2 nueva página (form feed)
'\t' 9 tabulador horizontal
'\b' 8 retroceso (backspace)
'\'' 39 comilla simple
'\"' 4 comillas
'\\ ' 92 barra invertida
'\? ' 63 interrogación
'\nnn' cualquier carácter (donde nnn es el código ASCII expresado en octal)
'\xnn' cualquier carácter (donde nn es el código ASCII expresado en hexadecimal)

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
2
FUNCIONES DE LA LIBRERÍA math.h
Nombre Descripción
acos Arcocoseno
asin Arcoseno
atan Arcotangente
atan2 Arcotangente de dos parámetros
ceil Menor entero no menor que el parámetro
cos Coseno
cosh Coseno hiperbólico
exp(double x) Función exponencial, computa ex
abs Valor absoluto de entero
fabs Valor absoluto de float
floor Mayor entero no mayor que el parámetro
fmod Residuo de la división de flotantes
frexp Fracciona y eleva al cuadrado.
ldexp Tamaño 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 hiperbólico
sqrt Raíz cuadrada
tan Tangente
tanh Tangente hiperbólica
M_PI El numero pi
Nota: Los argumentos de las funciones trigonométricas están en radianes.

Fórmulas de referencia:

Residuo 18%7 => 4


División entera 18/7 => 2
División de coma flotante 7/2.0 => 3.5

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
3
PROGRAMACION EN C++
PROBLEMAS DE SOLUCION DIRECTA
Problema 1: Leer 2 números y mostrar la suma
//Mi primer programa c++ c=a+b;
#include<iostream.h> //cout,cin //cout<<"La suma es "<<c<<endl;
#include<stdlib.h> //system cout<<a<<" mas "<<b<<" es "<<c<<endl;
int main() // void main() // main() // char system("pause");
main() ... return 0;
{ }
int a,b,c;
// int =>enteros float =>coma flotante
cout<<"Ingrese primer número:";
cin>>a;
cout<<"Ingrese segundo número:";
cin>>b;

Problema 2: Calcular el tercer lado de un triángulo a partir de sus 2 lados y el ángulo


sexagesimal entre ellas.
#include<iostream.h> //cout,cin cout<<"Ingrese angulo(sexagesimal):";
#include<stdlib.h> //system cin>>ang;
#include<math.h> //system //c=sqrt(a*a+b*b-2*a*b*cos(ang*M_PI/180));
int main() // void main() // main() c=pow(pow(a,2)+b*b-
// char main() ... 2*a*b*cos(ang*M_PI/180),0.5);
{float a,b,c,ang; cout<<"El tercer lado es "<<c<<endl;
cout<<"Ingrese primer lado:"; system("pause");
cin>>a; return 0;
cout<<"Ingrese segundo lado:"; }
cin>>b;

Problema 3: Muestre el número 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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
4
EJERCICIOS PROPUESTOS
Problema 1: Leer los tres lados de un triángulo 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 mínima cantidad de 1 sol.
Problema 4: Leer un número de 4 cifras e invertir el número.
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 esféricas y cilíndricas del mismo punto.
Problema 7: Leer las coordenadas cartesianas de 3 puntos en el espacio tridimensional para
formar un triangulo y calcular su perímetro 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 también el punto de tangencia.
Problema 9: Leer la velocidad inicial y el ángulo inicial de un movimiento parabólico y
determinar la altura máxima, la distancia máxima, el tiempo total que se toma en llegar a la
distancia máxima.

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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
5

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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
6
SENTENCIAS SELECTIVAS (If , switch)
Problema 1: Leer 2 números 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 números 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 círculo
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 condición 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: Máximo Obregón 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 número entero de hasta 3 cifras, formar otro número ordenando sus
cifras de menor a mayor, luego duplicarlo. Si el número tiene más de 3 cifras enviar un
mensaje de error. Por ejemplo si se lee: 412 entonces la salida será 248.
Solución
#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 número procesado es:"<<N<<endl;
c=n%10; }
a=n/100; else
b=(n/10)%10; cout<<"El número es mayor a 3 cifras"<<endl;
//Ordenando m<i<M getch();
m=M=a; //M=a; m=M; return 0;
}

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
8
Problema 6: Convertir un número arábigo en letras
Solución
#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 Número:"; case 4: cout<<"CUATRO";break;
cin>>n; case 5: cout<<"CINCO";break;
/*if (n==1) cout<<"UNO"; default: cout<<"El número 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 número es mayor a 5";
*/

Problema 7: Convertir un número arábigo en romano hasta el número 100. Recuerda que las
equivalencias son: I=1 V=5 X=10 L=50 C=100. Por ejemplo: 49 => XLIX
Solución
#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 números (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 días; y el
resto, excepto febrero tienen 30 días, para el mes de febrero trae 29 días cuando el año es
bisiesto y 28 cuando no lo es. Tenga en cuenta que un año 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 válida.

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
9
Solución
#include<iostream.h> else if (d==31)
#include<conio.h> switch (m)
int main() { case 4:
{int a,d,m; case 6:
cout<<"Ingrese dia:";cin>>d; case 9:
cout<<"Ingrese mes:";cin>>m; case 11: d=1;m++;
cout<<"Ingrese año:";cin>>a; }
d++;//d=d+1; else if ((d==30) && (m==2))
if (d==32) {d=1; m++; }
{d=1; else if ( (d==29) && (m==2) &&
m++; !((a%400==0)||((a%4==0)&&(a%100!=0))) )
if (m==13) {d=1;m++; }
{m=1; cout<<"La fecha del día siguiente es:";
a++; cout<<d<<"/"<<m<<"/"<<a<<endl;
} getch();
} return 0;
}

PROBLEMA PROPUESTOS
Problema 1: Leer 7 números y encontrar el mayor, desarrolle 3 formas distintas de
codificación para encontrar la misma respuesta.
Problema 2: Leer un número de 4 cifras y mostrar el mayor dígito.
Problema 3: Leer 7 números y encontrar el segundo mayor.
Problema 4: Leer 3 números y ordenarlos de menor a mayor
Problema 5: Leer los 3 lados de un triángulo e indicar si: no existe, es rectangular, es isósceles,
es equilátero, es acutángulo, escaleno, etc.
Problema 6: Leer los datos de 2 circunferencias e indicar la posición relativa entre ellas, y
verificar si: se intersectan, son tangentes internas, son tangentes externas, de tamaños iguales,
la primera circunferencia está dentro de la segunda, etc...
Problema 7: Leer un numero entero de hasta 3 cifras, formar otro número ordenando sus
cifras de menor a mayor, luego duplicarlo. Si el número tiene más 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
algún eje y el origen de coordenadas.
Problema 9: Leer las coordenadas de los vértices de un triángulo y las coordenadas de un
punto cualquiera. Si el triángulo existe, verificar la posición relativa del punto con respecto al
triangulo, si esta fuera, dentro o en el perímetro.
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
números 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: Máximo Obregón 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
dirección dos veces, donde dirección puede ser : 1(Derecha), 2(Izquierda), 3(Arriba), 4(Abajo).
Luego deberá imprimir la nueva posición, en este ejemplo se pide que use switch
obligatoriamente.
Ejemplo:
Ingrese posición Inicial
x:10
y:5
Ingrese Desplazamiento 1:
Distancia:8
Direccion:2
Ingrese Desplazamiento 2:
Distancia:5
Direccion:3
Posición 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 años es 15%
[5,10> años es 30%
>10 años 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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
11
Problema 12: El juego de Billar.
Los datos de entrada será la dimensión del tablero de nfil filas x ncol columnas, la posición de
la bolilla (fil,col), la dirección de lanzamiento (dv,dh), considerando el sistema de coordenadas
según la figura.
Direcciones de
X (col) Lanzamientos posibles:
(0,1)
Y
(-1,1)
(fil)
(-1,0)
(-1,-1)
(0,-1)
(-1,1)
(1,0)
(1,1)
El programa deberá calcular la nueva posición de la bolilla cuando esta avance una casilla, si
está en el borde deberá considerar el rebote.

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
12
SENTENCIAS ITERATIVAS (while, do..while, for)
Problema 1: Ejemplo básico de iterativas sentencia while mostrar los n primeros números 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 básico de iterativas sentencia while mostrar los n primeros números
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 - básico de iterativas sentencia while mostrar todos los factores de
un número 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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
13
Problema 4: Ejemplo semi - básico 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 número es primo"<<endl;
else
cout<<"El número no es primo"<<endl;
getche();
return 0;
}

Problema 5: Ejemplo semi - básico 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 número es primo"<<endl;
int main() else
{int i,c,n,esprimo; cout<<"El número 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-básico de iterativas sentencia for, para mostrar los n primeros
primos.
#include<iostream.h> //Imprime el número 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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
14
Problema 7: Ejemplo semi - básico de iterativas sentencia for, mostrar los n primeros términos
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 números 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 vértices de un polígono regular de n
lados cuyo centro se encuentra en el origen de coordenadas.
Problema 6: Calcule el número e= 2.718281828…, a partir de la siguiente serie, usando los n
primeros términos.
1 1 1 1 1 1 1
𝑒 = + + + + + + +⋯
0! 1! 2! 3! 4! 5! 6!
Problema 7: Calcule el número π= 3.1415926…, a partir de la siguiente serie, usando los n
primeros términos.
4 4 4 4 4 4
𝜋= − + − + − +⋯
1 3 5 7 9 11

Problema 8: Calcule el seno(x) considerando los n primeros términos de la siguiente expresión:


𝑥3 𝑥5 𝑥7 𝑥9 𝑥 11
𝑠𝑒𝑛(𝑥) = 𝑥 − + − + − +⋯
3! 5! 7! 9! 11!
Problema 9: Calcule el coseno(x) tomando los n primeros términos de la siguiente expresión:
𝑥2 𝑥4 𝑥6 𝑥8 𝑥 10
𝑐𝑜𝑠(𝑥) = 1 − + − + − +⋯
2! 4! 6! 8! 10!
Problema 10: Dentro de las maravillosas expresiones que se pueden construir en las
𝑥 1
matemáticas, se tiene la siguiente fórmula de recurrencia: 𝑥 = 𝑓(𝑥) = + , que nos permite
2 𝑥
calcular la √2 usando solamente sumas y divisiones. Lo interesante de esta expresión es que
empieza con un valor de x0 cualquiera, con la cual obtenemos f(x0), la cual viene a ser x1,
luego evalúas 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 número se va aproximando a √2 = 1.4142 …

Elaborado por: Máximo Obregón 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 después 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:
2𝑥 1
Calcule √3, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = +
3 𝑥2

3𝑥 1
Calcule √4, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = + 𝑥3
4

4𝑥 1
Calcule √5, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = + 𝑥4
5
Calcule √𝑎 por deducción de las fórmulas anteriores.

Problema 12: En todos los problemas anteriores que usan una serie o una fórmula 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 máximo,
que previamente se ha tenido que leer como dato de entrada.

SOLUCIONARIO:
Problema 1:
#include<iostream.h> for (i=1,s=0;ii<n;i++)
#include<conio.h> s+=i;//s=s+i;
int main() cou<<"La suma es "<<s;
{int i,s; getch();
cout<<"Ingrese n:";cin>>n; }

Problema 4:
#include<iostream.h> for (i=1,f=1;i<=n;i++)
#include<conio.h> f*=i;//f=f*i;
int main() cout<<n<<"!="<<f;
{int i,f,n; getch();
cout<<"Ingrese n:";cin>>n; }

Problema 6:
#include<iostream.h> for (j=0,s=0;j<n;j++)
#include<conio.h> {for (i=1,f=1;i<=j;i++)
int main() f*=i;//f=f*i;
{int i,f,n; s+=1.0/f;//s=s+f;
float s; }
cout<<"Ingrese cantidad de términos:"; cout<<"e="<<s;
cin>>n; getch();
}

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
16
Problema 7:
#include<iostream.h> for (sig=1,i=1,s=0;i<=n;i++,sig=-sig)
#include<conio.h> s+=sig*4/(i*2-1);//s=s+4.0/(i*2-1);
int main()
{int i,j,f,n; cout<<"pi="<<s;
float s,sig; getch();
cout<<"Ingrese cantidad de términos:"; }
cin>>n;

Problema 10:
#include<iostream.h> for (i=1;i<=n;i++)
#include<conio.h> x=x/2+1/x;
int main() cout<<"raiz de 2="<<x;
{int i,j,f,n; getch();
float x; }
cout<<"Ingrese cantidad de veces a
iterar:";
cin>>n;
cout<<"Ingrese aproximacion inicial:";
cin>>x;

Problema 12:
#include<iostream.h> for(i=1;error>errormax;i++)
#include<math.h> {x=x/2+1/x;
#include<conio.h> error=fabs(x-xa);
#define errormax 0.0001 xa=x;
int main() cout<<"raiz de 2="<<x<<endl;
{int i,n; }
float x,error=1,xa; cout<<"Esta respuesta se obtuvo con ";
cout<<"Ingrese aproximacion inicial:"; cout<<i<<" iteraciones";
cin>>x; getch();
xa=x; }

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
17
FUNCIONES
Esta herramienta es fundamental en la programación para poder realizar la modulación del
problema a resolver, es decir dividir el gran problema en pequeños problemas.

Ejemplo 1: Calcular la hipotenusa a partir de los 2 los catetos de un triángulo 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 triángulo 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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
18
PROBLEMAS PROPUESTOS
Problema 1: Desarrolle una función que devuelva la suma de los n primeros números
naturales.
Problema 2: Desarrolle una función que devuelva verdadero si un número n es primo y falso si
no lo es.
Problema 3: Desarrolle una función que devuelva la cantidad de primos que existen en un
intervalo de a y b.
Problema 4: Desarrolle una función que permita calcular el enésimo término de la serie de
Fibonacci.
Problema 5: Desarrolle una función que invierta un número n, por ejemplo si ingresa 357 debe
entregar 753.
Problema 6: Desarrolle una función que cuente la cantidad de dígitos que tiene un número n.
Problema 7: Desarrolle una función que devuelva el mcm de 2 números
Problema 8: Desarrolle una función que devuelva el MCD de 2 números
Problema 9: Elaborar un programa que permita calcular el combinatorio de dos números.
Recordar que el combinatorio de 2 números se calcula de la siguiente manera:
n!
C rn 
r! ( n  r )!
Problema 10: Desarrolle una función que devuelva la longitud de curva de la función
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 función seria a,b y n, la función debe estar incorporada
dentro de la función. Por ejemplo en la figura se divide en 4 partes(n=4), entonces la longitud
de la curva es d1+d2+d3+d4.

d2 d4
d3
d1

a b
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 número entre 1 y 6, de manera alterna (B-N-
B-N, etc.): es decir, primero genera un número para la ficha blanca y en la siguiente
jugada genera un número para la ficha negra.

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
19
 Si el número generado es igual a 6, entonces esa ficha repite otro turno (juega otra vez,
inmediatamente).
 Gana la ficha que acumule más 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 mostrarán los resultados finales.
Nota: Utilice las funciones rand() para generar números al azar.

FUNCIONES RECURSIVAS
Si la función tiene la forma:
f(xi ) = g(f(xi−1 ))
Entonces esta puede ser implementada con una función recursiva. Pero estas deben tener
algún criterio de parada.
Ejemplos de casos donde se podría implementar la función recursiva:
1. n!=n*(n-1)! 0!=1
2. ∑ 𝑛 = 𝑛 + ∑(𝑛 − 1) ∑ 0=0
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. Triángulo de pascal

Implemente las funcione pascal(f,t) donde f es la fila del triángulo y t es el término 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 enésima de función determinada.
8. Implementar el Juego de Buscaminas en un tablero de mxn, trate usar recursividad.

Elaborado por: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)
20
Ejemplo 1: Cálculo del factorial y la sumatoria.
#include<iostream.h> int fib(int n) //recursivo
#include<conio.h> {if (n==1) return 0;
#include<stdlib.h> else if (n==2) return 1;
#include<math.h> else fib(n-1)+fib(n-2);
int facnor(int n); //factorial normal }
int facrec(int n); //factorial recursivo /* otra forma
int sum(int n); //sumatoria recursivo int fib(int n) //recursivo
int fib(int n);//enésimo térm. de fibonacci {if (n<=2) return n-1;
int main() else fib(n-1)+fib(n-2);
{int n=5; }*/
cout<<facnor(n)<<endl;
cout<<facrec(n)<<endl; int facnor(int n)
cout<<sum(n)<<endl; {int f=1,i;
cout<<fib(n)<<endl; for(i=1;i<=n;i++)
system("pause"); f=f*i;
return 0; return f;
} }
int sum(int n) //sumatoria recursivo
{if (n==0) int facrec(int n)
return 0; {if (n==0)
else return 1;
return n+sum(n-1); else
} return n*facrec(n-1);
}

Elaborado por: Máximo Obregón 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 dimensión:

int x[5]; 7
x[3]=7; 0 1 2 3 4

Ejemplo de dos dimensiones:


int m[3][4]; 0 1 2 3
m[2][1]=5; 0 9
m[1][2]=7; 1 7
m[0][1]=m[2][1]+4; 2 5
Ejemplo 1: Leer y mostrar un vector de una dimensión.
#include<iostream.h> void leer(int *n,int v[])
#include<conio.h> {int i;
#include<stdlib.h> cout<<"Ingrese número 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: Máximo Obregón 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 dimensión, 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 número gigante de 200 cifras se almacena en un vector (arreglo de
una dimensión), donde cada digito es almacenado en cada elemento del vector, entonces
desarrolle un programa que lea 2 números grandes y calcule la suma, la resta, el producto
y el factorial.

Elaborado por: Máximo Obregón 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 características y su funcionalidad.
Una clase es la definición de un grupo de objetos que tienen características similares, por
ejemplo la clase persona, mamíferos, 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(métodos)
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: Máximo Obregón 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);
//definición 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(métodos) 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: Máximo Obregón 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: Máximo Obregón 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 posición 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: Máximo Obregón 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: Máximo Obregón 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: Máximo Obregón R. (511) 951629294 (movistar RPM y Whats App)

Вам также может понравиться