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

2017

EL ARTE DE
PROGRAMAR
Con el lenguaje de programación C++

Autor
Ing. Máximo Obregón Ramos
Profesor UNI
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)
Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe
2

FUNCIONES DE LA LIBRERÍA math.h


Nombre Descripción
acos Arcocoseno
asin Arcoseno
atan Arcotangente
atan2 Arcotangente de dos parámetros
ceil Entero más cercano a +∞

cos Coseno
cosh Coseno hiperbólico
exp(double x) x
Función exponencial, computa e
abs Valor absoluto de entero
fabs Valor absoluto de float
floor Entero más cercano a −∞

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) y
Eleva un valor dado a un exponente, x
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, para los parámetros de un triángulo.


Ley de Seno ( )= ()= ()

Ley de Coseno
2
= 2
+2−2 . ()
2 2
= +2−2 . ()
2 2
= + 2−2 . ()

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


3
PROGRAMACION EN C++
El lenguaje de programación a usar será el C++ y el IDE será Visual Studio de
Microsoft versión 2010, la cual tiene como logo inicial:

Este software comparado a otras versiones o a otros IDEs, puede variar


ligeramente la sintaxis, es por ello que se debe tener cuidado con la versión y el
IDE a usar.

Para iniciar un programa en este IDE en modo consola, se puede hacer de varias
maneras, de las cuales se sugiere la siguiente:
Paso 1: Abrir el software Visual Studio 2010.
Paso 2: Abrir un nuevo proyecto

Solo si en tu PC, no te aparece esta Ruta, es porque alguien lo desconfiguró,


entonces tienes 3 caminos:

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


4
Camino 1: Te vas a (Página principal) con la siguiente ruta y luego seleccionas
Nuevo proyecto…:

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


5
Camino 2: Reseteas la configuración con (importar y exportar configuraciones…)
en la siguiente ruta:

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


6

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


7
En esta ventana solo escoger, finalizar.

Camino 3: Ctrl Shift N

Paso 3: Luego de cualquiera de las formas del paso 2, debería aparecer esta
ventana, la cual debe ser llenada en el orden indicado. Cuando seleccione
examinar, deberá indicar la carpeta donde se alojarán sus programas.

2
1

4
3

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


8
Paso 4: Siguiente.

Paso 5: Quitar el check en Encabezado precompilado y dar Finalizar.

Paso 6: Saldrá la siguiente ventana, el código que aparece, puede borrarlo


totalmente y empezar a escribir su propio programa.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


9
Paso 7: Cargue este programa, reemplazando lo anterior.

Paso 8: Compile y ejecute, pulsando el botón verde .


Si hubiese algún error al momento de digitar el programa, este no se ejecutará y
deberá corregir, hasta que funcione. Si lo has cargado correctamente debería
aparecer la siguiente pantalla.

Llenas los valores indicados, y se debe mostrar los siguientes resultados.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


10
Considerar lo siguiente:
División entera 7/2 => 3
División de coma flotante 7/2.0 => 3.5
Residuo 7%2 => 1
Para enteros usar: int
Para números con decimales usar: float
Las variables flotantes, se muestra por defecto con 4 decimales, si
usted desea otra cantidad, observe el problema 3.

PROBLEMAS DE SOLUCION DIRECTA

Problema 1: Leer 2 números y Problema 2: Calcular el tercer lado de un triángulo a


mostrar la suma partir de sus 2 lados y el ángulo sexagesimal entre ellas.
#include<iostream> //cout,cin #include<iostream>
using namespace std; #include<conio.h>
int main() #define M_PI (atan(1.0)*4)
{int a,b,c; using namespace std;
cout<<"Ingrese a:"; int main()
cin>>a; {float a,b,c,ang;
cout<<"Ingrese b:"; cout<<"Ingrese primer lado:";
cin>>b; cin>>a;
c=a+b; cout<<"Ingrese segundo lado:";
cout<<a<<" mas "; cin>>b;
cout <<b<<" es "<<c<<endl; cout<<"Ingrese ángulo(sexagesimal):";
system("pause"); cin>>ang;
return 0; //c=sqrt(a*a+b*b-2*a*b*cos(ang*M_PI/180));
} c=pow(pow(a,2)+b*b-2*a*b*cos(ang*M_PI/180),0.5);
cout<<"El tercer lado es "<<c<<endl;
getche();
return 0;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


11
Problema 3: Muestre el número pi con diferentes formatos.
#include<iostream>
#include<conio.h>
#define M_PI (atan(1.0)*4)
using namespace std;
int main()
{cout<<"PI="<<M_PI<<endl; //3.14159
cout.precision(3);
cout<<"PI="<<M_PI<<endl; //3.14

cout.setf(ios::fixed);
cout.precision(3);
cout<<"PI="<<M_PI<<endl; //3.142
cout.precision(20);
cout<<"PI="<<M_PI<<endl;//3.14159265358979310000
cout.width(10); cout.fill('0');
cout<<12<<endl; //0000000012
cout.width(10); cout.fill('0');
cout<<2312<<endl;//0000002312

cout.setf(0,ios::floatfield);
cout.precision(2);
cout<<"PI="<<M_PI*10<<endl;//31

getche();
return 0;
}

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 triángulo y calcular su perímetro y área.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


12
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.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


13
SENTENCIAS SELECTIVAS (If , switch)
Recuerde que:
& ==>y
| ==>o
if (3<x<8) //sentencia invalida
if( (3<x)&&(x<8)) // sentencia valida
>,<,>=,<=
diferente !=
iguales ==

Todos estos ejercicios se le debe agregar la siguiente cabecera:


#include<iostream>
#include<conio.h>
using namespace std;

Problema 1: Leer 2 números y mostrar el Problema 2: Leer 2 números y mostrar el


mayor. mayor y el menor.
int main() int main()
{int a,b,M; {int a,b,M,m;
//Entrada de datos //Entrada de datos
cout<<"Ingrese a:";cin>>a; cout<<"Ingrese a:"; cin>>a;
cout<<"Ingrese b:";cin>>b; cout<<"Ingrese b:"; cin>>b;
//Encontrando el mayor //Encontrando el mayor y menor
if (a>b) if (a>b)
M=a; {M=a;
else m=b;
M=b; }
//Mostrando el mayor else
cout<<"El mayor es "<<M<<endl; {M=b;
getche(); m=a;
return 0; }
} //Mostrando el mayor
cout<<"El mayor es "<<M<<endl;
cout<<"El menor es "<<m<<endl;
getche();
return 0;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


14
Problema 3: Leer los datos de una Problema 4: Leer el valor de 2 dados y
circunferencia (centro y radio), y las mostrar el puntaje obtenido, si la suma es 7
coordenadas cartesianas de un punto o 6 pero alguno de los dados no sea 1
cualquiera del plano, luego indique si el entonces el puntaje es 20 caso contrario el
punto está dentro del círculo o si esta fuera. puntaje será la mitad de la suma obtenida.
int main() int main()
{float xc,yc,r,x,y,d; {int a,b,s,p;
//Entrada de datos //Entrada de datos
cout<<"Ingrese xc:";cin>>xc; cout<<"Ingrese a:";cin>>a;
cout<<"Ingrese yc:";cin>>yc; cout<<"Ingrese b:";cin>>b;
cout<<"Ingrese r:";cin>>r; s=a+b;
cout<<"Ingrese x:";cin>>x; if (((s==6)||(s==7))&&((a!=1)&&(b!=1)))
cout<<"Ingrese y:";cin>>y; p=20;
//hallando la distancia else
//del centro hasta el punto p=s/2;
d=sqrt(pow(xc-x,2)+pow(yc-y,2)); cout<<"puntaje es "<<p;
//Mostrando la condición del punto getche();
if (d<=r) return 0;
cout<<"El punto está dentro del circulo"; }
else
cout<<"El punto está fuera del circulo";
getche(); return 0;
}

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.
int main() if (M<b) M=b;
{int n,a,b,c,m,M,i,N; if (M<c) M=c;
cout<<"Ingrese Numero:"; if (m>b) m=b;
cin>>n; if (m>c) m=c;
if (n<=999) i=a+b+c-M-m;
{//Partiendo el numero n //Formando el nuevo numero
c=n%10; N=(m*100+i*10+M)*2;
a=n/100; cout<<"El número procesado es:" ;
b=(n/10)%10; cout<<N<<endl;
//Ordenando m<i<M }
m=M=a; //M=a; m=M; else
cout<<"El número es mayor a 3 cifras
\n";
getche();
return 0;
}
Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe
15

Problema 6: Convertir un número arábigo en Problema 7: Convertir un número arábigo


letras menor a 5 usando if en letras menor a 5 usando switch
#include<iostream> #include<iostream>
#include<conio.h> #include<conio.h>
using namespace std; using namespace std;
int main() int main()
{int n; {int n;
cout<<"Ingrese Número:"; cout<<"Ingrese Número:";
cin>>n; cin>>n;
if (n==1) cout<<"UNO"; switch (n)
else if (n==2) cout<<"DOS"; {case 1: cout<<"UNO";break;
else if (n==3) cout<<"TRES"; case 2: cout<<"DOS";break;
else if (n==4) cout<<"CUATRO"; case 3: cout<<"TRES";break;
else if (n==5) cout<<"CINCO"; case 4: cout<<"CUATRO";break;
else cout<<"El número es mayor a 5"; case 5: cout<<"CINCO";break;
getche(); default: cout<<"El número es mayor a 5";
return 0; }
} getche();
return 0;
}

Problema 8: 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
#include<iostream> switch (u)
#include<conio.h> {case 1: cout<<"I";break;
using namespace std; case 2: cout<<"II";break;
int main() case 3: cout<<"III";break;
{int n,d,u; case 4: cout<<"IV";break;
cout<<"Ingrese Numero:"; cin>>n; case 5: cout<<"V";break;
d=n/10; u=n%10; case 6: cout<<"VI";break;
switch (d) case 7: cout<<"VII";break;
{case 1: cout<<"X";break; case 8: cout<<"VIII";break;
case 2: cout<<"XX";break; case 9: cout<<"IX";break;
case 3: cout<<"XXX";break; }
case 4: cout<<"XL";break; getche();
case 5: cout<<"L";break; return 0;
case 6: cout<<"LX";break; }
case 7: cout<<"LXX";break;
case 8: cout<<"LXXX";break;
case 9: cout<<"XC";break;
case 10: cout<<"C";break;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


16
Problema 9: 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.
#include<iostream> else if (d==31)
#include<conio.h> switch (m)
using namespace std; { case 4:
int main() case 6:
{int a,d,m; case 9:
cout<<"Ingrese dia:";cin>>d; case 11: d=1;m++;
cout<<"Ingrese mes:";cin>>m; }
cout<<"Ingrese año:";cin>>a; else if ((d==30) && (m==2))
d++;//d=d+1; {d=1; m++; }
if (d==32) else if ( (d==29) && (m==2) &&
{d=1; !((a%400==0)||
m++; ((a%4==0)&&
if (m==13) (a%100!=0)
{m=1; )
a++; )
} )
} {d=1;m++; }
cout<<"La fecha del día siguiente es:";
cout<<d<<"/"<<m<<"/"<<a<<endl;
getche();
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.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


17
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á 1 puntos
números correlativos entre (2,3) o (4,5) o (5,6) tendrá 2 puntos
los dos 1 obtendrá 3 puntos,
el resto será 0 puntos
Nota: Deberá usar switch.
Ejemplo:
Dado1:5
Dado2:4
Puntaje obtenido: 5 puntos

Problema 11: 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)

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


18

Direcciones de
Lanzamientos posibles:
(0,1)
(-1,1)
(-1,0)
(-1,-1)
(0,-1) (-
1,1)
(1,0)
(1,1)
Problema 12: 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

Problema 13: 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.

X (col)

Y
(fil)

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.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


19
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> cout<<"Ingrese n:";cin>>n;
#include<conio.h> i=1;
using namespace std; while (i<=n)
int main() {c=i*i;
{int i,c,n; cout<<i<<" ==> "<<c<<endl;
i++;
}
getche();
return 0;
}

Para n=4
Iteración c pantalla i
Inicia 1
1 1 1==>1 2
2 4 2==>4 3
3 9 3==>9 4
4 16 4==>16 5

Problema 2: Ejemplo básico de iterativas sentencias while mostrar los n primeros capicúas de 3
cifras
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{int i,c,n,u,d,con;
cout<<"Ingrese n:";cin>>n;
i=100; con=1;
while (con<=n)
{c=i/100;u=i%10;d=(i%100)/10;
if (u==c)
{cout<<"Capicua "<<con<<":"<<i<<endl;
con++;
}
i++;
}
getche();
return 0;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


20
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;
}

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;

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


21
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;

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!
+ − + − +⋯

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


22
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
matemáticas, se tiene la siguiente fórmula de recurrencia: = ( ) = 2 + 1 , que nos permite

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 …

Desarrolle un programa que lea como dato de entrada x 0 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 ( ) =4+ 3

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

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.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


23
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();
}
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> cout<<"Ingrese aproximacion inicial:";


#include<conio.h> cin>>x;
int main() for (i=1;i<=n;i++)
{int i,j,f,n; x=x/2+1/x;
float x; cout<<"raiz de 2="<<x;
cout<<"Ingrese cantidad de veces a getch();
iterar:"; }
cin>>n;
Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe
24
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; }

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


25
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. Las funciones
creadas por el programador serán convenientes sobre todo cuando el problema a resolver es
cada vez mas complejo.

Ejemplo 1: Calcular la hipotenusa a partir de los 2 los catetos de un triángulo rectangular.


Sin funciones Con funciones
#include<iostream> #include<iostream>
#include<conio.h> #include<conio.h>
#include<math.h> #include<math.h>
using namespace std; using namespace std;
//programa principal //prototipo de la funcion
int main()
float calhip(float a,float b);
{float a,b,h;
cout<<"Lado a:";cin>>a; //programa principal
cout<<"Lado b:";cin>>b; int main()
h=sqrt(a*a+b*b); {float a,b,h,c,ang;
cout<<"la hipotenusa es "<<h<<endl; cout<<"Lado a:";cin>>a;
getch(); cout<<"Lado b:";cin>>b;
} 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> angC= calsex(calang(a,b,c));
#include<conio.h> angB= calsex(calang(a,c,b));
#include<math.h> angA= 180-angC-angB;
#define M_PI (atan(1.0)*4) cout<<"El ángulo opuesto a A es "<<angA<<endl;
using namespace std; cout<<"El ángulo opuesto a B es "<<angB<<endl;
cout<<"El ángulo opuesto a C es "<<angC<<endl;
//prototipo de las funciones getch();
float calang(float a,float b,float c); }
float calsex(float ang);
//desarrollo de las funciones
//programa principal float calang(float a,float b,float c)
int main() {return acos((a*a+b*b-c*c)/(2*a*b));
{float a,b,c,angA,angB,angC; }
cout<<"Lado a:";cin>>a; float calsex(float ang)
cout<<"Lado b:";cin>>b; {return ang*180/M_PI;
cout<<"Lado c:";cin>>c; }
Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe
26
Ejemplo 3: Funciones para extraer los dígitos de un numero de diferentes formas.
#include<iostream> int extraer2(int n,int p) //con iterativa
#include<conio.h> while {//int dig,con;con=0;
#include<math.h> int dig,con=0;
using namespace std; while (n>0)
//prototipo de la funcion {con++;//con=con+1;
int extraer1(int,int); dig=n%10;
int extraer2(int,int); n/=10;//n=n/10;
int extraer3(int,int); if (con==p)
//programa principal return dig;
int main() }
{int n,p,d; return 0;
cout<<"Ingrese n:";cin>>n; }
cout<<"Ingrese posicion de digito(de int extraer3(int n,int p) //con iterativa
derecha a izquierda):"; cin>>p; for {//int dig,con;con=0;
int dig,con;
d=extraer3(n,p); //34568 , 2 ==>6 for(con=1;n>0;con++)
cout<<"El digito es "<<d<<endl; {dig=n%10;
getch(); n/=10;//n=n/10;
} if (con==p)
//desarrollo de las funciones return dig;
int extraer1(int n,int p)//sin iterativa }
{return int(n/pow(10.0,(p-1)*1.0)) return 0;
%10; } }

Ejemplo 4: Funciones para calcular de forma aproximada las raíces de una función matemática
en un determinado intervalo [a,b].
Para graficar, puede usar Matlab y colocar la siguiente orden:
>> ezplot('exp(-0.1*x)*sin(cos(5*x))',[10 16]);grid

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


27
#include<iostream> for(x=a;x<=b;x=x+h)
#include<conio.h> { cout<<"x="<<x<<" y="<<f(x)<<endl;
#include<math.h> /*if ( (f(x)>0 && f(x+h)<0) ||
using namespace std; (f(x)<0 && f(x+h)>0)
//prototipo de la funcion )*/
float f(float); if (f(x)*f(x+h)<=0)
//programa principal cout<<"\t\t==>Raiz="<<x+h/2<<endl;
int main()
{float a,b,h,x; }
cout<<"Ingrese a:";cin>>a;
cout<<"Ingrese b:";cin>>b; //desarrollo de las funciones
cout<<"Ingrese h:";cin>>h; float f(float x)
cout<<"Las raices de la funcion son:\n"; { return exp(-0.1*x)*sin(cos(5*x)); }

Ejemplo 5: Funciones para calcular de forma aproximada los puntos máximos de una función
matemática en un determinado intervalo [a,b].
#include<iostream> cout<<"Las raices de la funcion son:\n";
#include<conio.h> for(x=a;x<=b;x=x+h)
#include<math.h> if (f(x)>f(x+h) && f(x)>f(x-h))
using namespace std;
cout<<"\t\t==>Maximo=("<<x<<","<<f(x)<<")\n";
//prototipo de la funcion getch();
float f(float); }
//programa principal //desarrollo de las funciones

int main() float f(float x)


{float a,b,h,x; { return exp(-0.1*x)*sin(cos(5*x)); }
cout<<"Ingrese a:";cin>>a;
cout<<"Ingrese b:";cin>>b;
cout<<"Ingrese h:";cin>>h;

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.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


28
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:
!
=

!( − )!

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 d3 d4
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.
• 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.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


29
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. 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,2
| 2,1
2,3| = 1,1
| 3,3 | - 1,2 | 3,3 |+ 1,3 |3,1 3,2 |

3,1 3,2 3,3 3,2 3,1

7. La derivada enésima de función determinada. ()


( + ℎ) ( −1) − ( ) ( −1)
() = ℎ→0


( + ℎ) ( −1) − ( )( −1)
( )( ) ≈ , ℎ ñ

8. El Juego de Buscaminas en un tablero de mxn.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


30
Ejemplo 1: Cálculo del factorial de n, la sumatoria de los n primeros números naturales y el
termino enésimo de Fibonacci.
#include<iostream> int fib(int n) //recursivo
#include<conio.h> {if (n==1) return 0; else
#include<math.h> if (n==2) return 1; else
using namespace std; fib(n-1)+fib(n-2); }
/* otra forma
//prototipo de la funcion int fib(int n) //recursivo
int facnor(int n); //factorial normal {if (n<=2) return n-1;
int facrec(int n); //factorial recursivo else fib(n-1)+fib(n-2); }
int sum(int n); //sumatoria recursivo */
int fib(int n);//enésimo térm. de fibonacci int facnor(int n)
{int f=1,i;
//programa principal for(i=1;i<=n;i++)
int main() f=f*i;
{int n=7; return f;
cout<<"Factorial normal:"<<facnor(n)<<endl; }
cout<<"Factorial recursivo:"<<facrec(n)<<endl; int facrec(int n)
cout<<"Sumatoria:"<<sum(n)<<endl; {if (n==0)
cout<<"Fibonacci:"<<fib(n)<<endl;//0 1 1 2 3 5 8 ... return 1;
system("pause"); else
return 0; return n*facrec(n-1);
} }

//prototipo de la funcion
int sum(int n) //sumatoria recursivo
{if (n==0)
return 0;
else
return n+sum(n-1);
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


31
Ejemplo 2: Calculo de la derivada enésima en un punto.
#include<iostream> //prototipo de la funcion
#include<conio.h> float f(float x)
#include<math.h> {return sin(x);};
using namespace std; float dnf(float x,int n)
{float h=0.001;
//prototipo de la funcion if (n==1)
float f(float x); //La funcion matematica return (f(x+h)-f(x))/h;
float dnf(float x,int n);//La funcion de la else
derivada enésima return (dnf(x+h,n-1)-dnf(x,n-1))/h;
}
//programa principal
int main()
{float x=5; int n=2;
cout<<"La derivada enesima es
"<<dnf(x,n)<<endl;
system("pause");
return 0;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


32
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: Ejemplo de dos dimensiones:
int x[5]; Int m[3][4];
x[3]=7; m[2][1]=5;
x[0]=x[3]-3; m[1][2]=7;
m[0][1]=m[2][1]+4;
4 7 0 1 2 3

0 1 2 3 4 0 9
1 7
2 5

Ejemplo 1: Leer y mostrar un vector de una dimensión.


#include<iostream> void leer(int *n,int v[])
#include<conio.h> {cout<<"Ingrese número de elementos:";
#include<math.h> cin>>*n;
using namespace std; for(int i=0;i<*n;i++)
//Prototipo de la funcion {cout<<"V["<<i<<"]=";
#define N 1000 cin>>v[i];
void leer(int *n,int v[]); }
void generar(int n,int v[]); }
void mostrar1(int n,int v[]); void mostrar1(int n,int v[])
void mostrar2(int n,int v[]); {for(int i=0;i<n;i++)
void mostrar3(int n,int v[]); cout<<"V["<<i<<"]="<<v[i]<<endl;
void mostrar4(int n,int v[]); }
//Programa principal void mostrar2(int n,int v[])
int main() {for(int i=0;i<n;i++)
{ int v[N],n; cout<<v[i]<<" ";
//leer(&n,v); cout<<endl;
n=10; }
generar(n,v); void mostrar3(int n,int v[])
cout<<"Mostrando los valores\n"; {cout<<"(";
mostrar1(n,v); cout<<endl; for(int i=0;i<n;i++)
system("pause"); {cout<<v[i];
return 0; if (i<n-1) cout<<",";
} }
cout<<")"<<endl;
//Desarrollo de las funciones }
void generar(int n,int v[]) void mostrar4(int n,int v[])//polinomio
{for (int i=0;i<n;i++) {//Ahora usted intente aqui...
v[i]=rand()%21; }
} //5x^0+3x^1+4x^2+17x^3.........
Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe
33
Ejemplo 2: Hallar el mayor y menor valor de un arreglo aleatorio, usar recursividad para el
mayor.
#include<iostream> int mayorec(int n,int v[])
#include<conio.h> {if (n==1) return v[0];
#include<math.h> else
#include<time.h> if (v[n-1]>mayorec(n-1,v))
using namespace std; return v[n-1];
//Prototipo de la funcion else
#define N 1000 return mayorec(n-1,v);
void generar(int n,int v[]); }
void mostrar(int n,int v[]); int menor(int n,int v[])
int mayor(int n,int v[]); {int m=v[0],i;
int mayorec(int n,int v[]); for(i=1;i<n;i++)
int menor(int n,int v[]); if (m>v[i]) m=v[i];
return m;
//programa principal }
int main()
{ int v[N],n; void generar(int n,int v[])
srand(time(NULL)); {int i;
n=10; for (i=0;i<n;i++)
generar(n,v); v[i]=rand()%101;
cout<<"Mostrando los valores\n"; }
mostrar(n,v); void mostrar(int n,int v[])
cout<<"El mayor es "<<mayorec(n,v)<<endl; {int i;
cout<<"El menor es "<<menor(n,v)<<endl; cout<<"(";
system("pause"); for(i=0;i<n;i++)
return 0; {cout<<v[i];
} if (i<n-1) cout<<",";
}
//desarrollo de las funciones cout<<")"<<endl;
int mayor(int n,int v[]) }
{int m=v[0],i;
for(i=1;i<n;i++)
if (m<v[i]) m=v[i];
return m;
}

Ejemplo 3: Generar un menú, para el tratamiento de 2 matrices.


#include<iostream>
#include<conio.h>
#include<math.h>
#include<time.h>
using namespace std;
#define Fm 100
#define Cm 100

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


34
//Prototipo de la funcion
void generar(int &f,int &c,float M[Fm][Cm]);
void leer(int &f,int &c,float M[Fm][Cm]); void
mostrar(int f,int c,float M[Fm][Cm]); void
sumar(int fa,int ca,float A[Fm][Cm],
int fb,int cb,float B[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm]);
void restar(int fa,int ca,float A[Fm][Cm],
int fb,int cb,float B[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm]);
void transpuesta(int fa,int ca,float A[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm]);

void sumcol(int fa,int ca,float A[Fm][Cm],


int &fc,int &cc,float C[Fm][Cm]);

int menu();
//PROGRAMA PRINCIPAL
int main()
{ float A[Fm][Cm],B[Fm][Cm],C[Fm][Cm];
int fa=0,ca=0,fb=0,cb=0,fc=0,cc=0,opcion;
system("color f9"); srand(time(NULL));
do{
opcion=menu();
switch(opcion)
{case 1:cout<<"matriz A=\n";generar(fa,ca,A);
mostrar(fa,ca,A);break;
case 2:cout<<"matriz B=\n";generar(fb,cb,B);
mostrar(fb,cb,B);break;
case 3:cout<<"matriz A=\n";leer(fa,ca,A);
mostrar(fa,ca,A);break;
case 4:cout<<"matriz B=\n";leer(fb,cb,B);
mostrar(fb,cb,B);break;
case 5:cout<<"matriz A=\n";
mostrar(fa,ca,A);break;
case 6:cout<<"matriz B=\n";
mostrar(fb,cb,B);break;
case 7:cout<<"matriz C=\n";
mostrar(fc,cc,C);break;
case 8:cout<<"A+B==>C\n";sumar(fa,ca,A,fb,cb,B,fc,cc,C);
mostrar(fc,cc,C);break;
case 9:cout<<"A-B==>C\n";restar(fa,ca,A,fb,cb,B,fc,cc,C);
mostrar(fc,cc,C);break;
case 10:cout<<"Transpuesta(A)==>C\n"; transpuesta(fa,ca,A,fc,cc,C);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


35
mostrar(fc,cc,C);break;
case 11:cout<<"Suma de columnas de A==>C\n";
sumcol(fa,ca,A,fc,cc,C);
cout<<"matriz A=\n";mostrar(fa,ca,A);
cout<<"matriz C=\n";mostrar(fc,cc,C);
break;
}
if (opcion!=0) {system("pause");system("cls");}
}while (opcion!=0);
return 0;
}
//Desarrollo de las funciones
void generar(int &f,int &c,float M[Fm][Cm])
{cout<<"Ingrese numero de filas:";cin>>f;
cout<<"Ingrese numero de columnas:";cin>>c;
for(int i=0;i<f;i++)
for (int j=0;j<c;j++)
M[i][j]=rand()%100+(rand()%100)/100.0;
}
void leer(int &f,int &c,float M[Fm][Cm])
{cout<<"Ingrese numero de filas:";cin>>f;
cout<<"Ingrese numero de columnas:";cin>>c;
cout<<"Ingrese sus elementos:\n";
for(int i=0;i<f;i++)
for (int j=0;j<c;j++)
{cout<<"M["<<i+1<<"]["<<j+1<<"]=";
cin>>M[i][j];
}
}

void mostrar(int f,int c,float M[Fm][Cm])


{cout.setf(ios::fixed);
cout.precision(2);
for(int i=0;i<f;i++)
{for (int j=0;j<c;j++)
{cout.width(8);
cout<<M[i][j]<<" ";
}
cout<<endl;
}
if(f*c==0)
cout<<"\t\tMatriz nula\n";

}
int menu()

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


36
{int opcion;
cout<<"**************************************************\n";
cout<<"* MENU PRINCIPAL DE *\n";
cout<<"* Genera aleatoriamente matriz (1)A y (2)B *\n";
cout<<"* Leer por pantalla matriz (3)A y (4)B *\n";
cout<<"* Mostrar matrices (5)A, (6)B y (7)C *\n";
cout<<"* Operaciones basicas grabadas en C: *\n";
cout<<"* (8)A+B (9)A-B (10)Transpuesta(A) *\n";
cout<<"* (11)Suma de columnas de A *\n";
cout<<"* (0)Salir *\n";
cout<<"* *\n";
cout<<"**************************************************\n";
cout<<"Ingrese opcion:";
cin>>opcion;
return opcion;
}
void sumar(int fa,int ca,float A[Fm][Cm],
int fb,int cb,float B[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm])
{if (fa==fb && ca==cb)
{for(int i=0;i<fa;i++)
for (int j=0;j<ca;j++)
C[i][j]=A[i][j]+B[i][j];
fc=fa;
cc=ca;
}
else
fc=cc=0;

void restar(int fa,int ca,float A[Fm][Cm],


int fb,int cb,float B[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm])
{if (fa==fb && ca==cb)
{for(int i=0;i<fa;i++)
for (int j=0;j<ca;j++)
C[i][j]=A[i][j]-B[i][j];
fc=fa;
cc=ca;
}
else
fc=cc=0;

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


37
void transpuesta(int fa,int ca,float A[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm])
{for(int i=0;i<ca;i++)
for (int j=0;j<fa;j++)
C[i][j]=A[j][i];
fc=ca;
cc=fa;
}
void sumcol(int fa,int ca,float A[Fm][Cm],
int &fc,int &cc,float C[Fm][Cm])
{int s;
for (int j=0;j<ca;j++)
{s=0;
for(int i=0;i<fa;i++)
s=s+A[i][j];
C[0][j]=s;
}

fc=1;
cc=ca;
}

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 la factorial.
4) Simule el juego de una rifa, considerando n participantes y considerando que el ganador
será designado en el k-esimo intento. Los que salieron sorteados antes del k-esimo
intento, son anulados del juego.
5) Registrar las notas de n alumnos, simulando desde números aleatorios en un arreglo
unidimensional y en otro se registrará sus DNI, la cual también se llenará de forma
aleatoria. Luego realizar los siguientes reportes:
a. La nota promedio
b. Cantidad de desaprobados
c. Los códigos de los alumnos tercio superior
d. Los códigos de los alumnos tercio inferior
e. Los códigos de los alumnos que obtuvieron la mayor nota.
f. Los códigos de los alumnos que obtuvieron la menor nota.
g. La(s) nota(s) que tiene mayor incidencia.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


38
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, 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();
};

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


39
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);
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


40
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++;
}
}
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


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

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


42
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);
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe


43
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;}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe