Академический Документы
Профессиональный Документы
Культура Документы
Autor
Ing. Mximo Obregn Ramos
Profesor UNI
EL ARTE DE
PROGRAMAR
Con el lenguaje de programacin 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) precisin))
double 64 (1.7* 10E-308 ... 3.4* 10E308 (15-digit precisin))
long double 80
) (3.4* 10E-4932 ... 1.1* 10E4932 (18-digit precision))
Frmulas de referencia:
PROGRAMACION EN C++
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 versin 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
Camino 2: Te vas a (Pgina principal) con la siguiente ruta y luego seleccionas Nuevo
proyecto:
Paso 3: Luego de cualquiera de las formas del paso 2, debera aparecer esta ventana,
la cual debe ser llenada en el orden indicado. Cuando seleccione examinar, deber
indicar la carpeta donde se alojarn sus programas.
1 2
4
3
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 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 tringulo y calcular su permetro y rea.
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.
Problema 9: 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.
#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 ao:";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++; )
} )
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 1 puntos
nmeros 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 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;
}
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;
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
3 1
Calcule 4, sabiendo que la frmula de recurrencia es () = + 3
4
4 1
Calcule 5, sabiendo que la frmula de recurrencia es () = + 4
5
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> 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 trminos:"; cout<<"e="<<s;
cin>>n; getch();
}
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; }
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));
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 nmero entre 1 y 6, de manera alterna (B-N-
B-N, etc.): es decir, primero genera un nmero para la ficha blanca y en la siguiente
jugada genera un nmero para la ficha negra.
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
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. 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.
int x[5]; 7
x[3]=7; 0 1 2 3 4
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.
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();
};
class Crecta3d
{protected:
Cpunto3d P;
Cvector3d Q;
public:
void leer();
void ver();
void setear(Cpunto3d vP,Cvector3d vQ);
};
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;}