CUADERNO DE EJERCICIOS Y PRACTICAS
CUADERNO DE TRABAJO DE
Cuaderno de Trabajo Visual Basic se encuentra bajo una Licencia
Comercial-Licenciamiento Recíproco 3.0 Unpo
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página
CUADERNO DE TRABAJO DE C++
Cuaderno de Trabajo Visual Basic se encuentra bajo una Licencia Creative Commons Atribución
Licenciamiento Recíproco 3.0 Unported. Diciembre – IDSystems
Página 1
C++
Creative Commons Atribución-No
IDSystems
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 2
Contenido
PARTE I ... 5
INSTRUCCIONES ... 6
Ejercicio 1 – Hola Mundo ... 7
Ejercicio 2 – Tipos de datos ... 7
Ejercicio 3 – Mezcla de tipos de datos ... 8
Ejercicio 4 – Simplificando comandos y datos ... 9
Ejercicio 5 – Variables de preprocesador ... 10
Ejercicio 6 – Salida por pantalla ... 11
Ejercicio 7 – Entrada y salida por pantalla ... 12
Ejercicio 8 – Operadores y tipos de datos ... 13
Ejercicio 9 – Operaciones simples ... 15
Ejercicio 10 - Concatenacion ... 17
Ejercicio 11 – If…Else ... 18
Ejercicio 12 – Operaciones condicionales ... 19
Ejercicio 13 – IF…ELSE anidados ... 21
Ejercicio 14 – Salida a un archivo externo ... 24
Ejercicio 15 - Switch ... 27
Ejercicio 16 – Area de poligonos con Switch ... 28
Ejercicio 17 – Ciclo For ... 31
Ejercicio 18 – Ciclo while ... 33
Ejercicio 19 – Ciclos anidados ... 34
Ejercicio 20 – Ciclo While ... 35
PRACTICA 1 ... 37
Ejercicio 21 - Juego del Granjero ... 37
Ejercicio 22 - Juegos ... 48
Ejercicio 22a – Juego de Adivinanzas ... 49
Ejercicio 22b - Tragamonedas ... 51
Ejercicio 22c – Pseudovirus ... 54
Ejercicio 23 - Juego del Ahorcado ... 58
Ejercicio 24 - Juego Las Torres de Hanoi ... 73
Ejercicio 25 – Arreglos ... 78
Ejercicio 26 ... 80
Ejercicio 27 – Cadenas ... 82
Ejercicio 28 - Arreglos y cadenas ... 84
Ejercicio 29 - Juego del Gato (Tic-Tac-Toe) ... 86
Ejercicio 30 – Estructuras ... 90
Practica/Ejercicio 1 – Zodiaco ... 92
Practica/Ejercicio 2 – Califaciones Estilo USA ... 96
Practica/Ejercicio 3 – Sueldos a trabajador... 98
Practica/Ejercicio 4 – Promocion de Ventas ... 100
Practica/Ejercicio 5 – Retraso en renta peliculas ... 103
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 3
PRACTICA 7 – Contando dinero ... 108
PRACTICA 8 – Numeros ... 108
PRACTICA 9 – Numeros ordenados ... 108
PRACTICA 10 – Boletos ... 108
PRACTICA 11 – Conversiones metricas ... 108
PRACTICAS DE VARIABLES, TIPOS DE DATOS, ASIGNACIONES, OPERADORES ... 109
PRACTICA 12 – Rectangulo ... 109
PRACTICA 13 – Pies ... 109
PRACTICA 14 – Triangulo ... 109
PRACTICA 15 – Raices ... 109
PRACTICA 16 – Tiempos ... 109
PRACTICA 17 – Prestamo ... 109
PRACTICA 18 – Metros ... 109
PRACTICA 19 – Millonario ... 110
PRACTICA 20 – Promedio ... 110
PRACTICA 21 – Circulo ... 110
PRACTICA 22 – Maquina reversadora de numeros ... 110
PRACTICA 23 – Nibles ... 110
PRACTICA 24 – Multiplicacion por 300 ... 110
PRACTICA 25 – Peso ... 110
PRACTICA 26 – Fahrenheit ... 110
PRACTICA 27 – Celsius ... 110
PRACTICA 28 – Determinante ... 111
PRACTICA 29 – Don Manolo ... 111
PRACTICA 30 - ISBN ... 111
PRACTICA 31 – Odometer ... 112
PRACTICA 32 – Triangulo II ... 112
PRACTICA 33 – Distancia Euclidiana ... 112
PRACTICA 34 – Validacion de Tarjetas de credito ... 112
PRACTICA 35 – Suma de fracciones ... 113
PRACTICAS DE ESTRUCTURAS DE CONTROL ... 113
PRACTICA 36 – Max ... 113
PRACTICA 37 – Positivo Negativo ... 113
PRACITCA 38 – Par Impar ... 113
PRACTICA 39 – Convertidor de divisas ... 113
PRACTICA 40 – Grado Promedio ... 114
PRACTICA 41 – Bisiesto ... 114
PRACTICA 42 – Diferencia... 114
PRACTICA 43 – Saludo ... 114
PRACTICA 44 - Control ... 114
PRACTICA 45 – Multiplo ... 115
PRACTICA 46 – ASCII ... 115
PRACTICA 47 – Super Raices ... 115
PRACTICA 48 – Dia semana ... 115
PRACTICA 49 – Super Triangulo ... 115
PRACTICAS DE ESTRUCTURAS REPETITIVAS ... 115
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 4
PRACTICA 51 – Factorial ... 115
PRACTICA 52 – Serie 1 ... 116
PRACTICA 53 – Primo ... 116
PRACTICA 54 – Ingenieros 2050 ... 116
PRACTICA 55 – Super Primos ... 116
PRACTICA 56 – Mayor Menor ... 116
PRACTICA 57 – Cuadrado ... 116
PRACTICA 58 – Decimal a Hexadecimal ... 116
PRACTICA 59 – Rombo ... 116
PRACTICA 60 – Binario ... 116
PRACTICA 61 – Tablas de Multiplicar ... 117
PRACTICA 62 – Divisores ... 117
PRACTICA 63 – Calculadora ... 117
PRACTICA 64 – Adivinar... 117
PRACTICA 65 – Nicomaco ... 117
PRACTICA 66 – Perfectos ... 118
PRACTICA 67 – Sumatorias ... 118
PRACTICA 68 – Guess my age ... 118
PRACTICA 69 – Power ... 118
PRACTICA 70 – Amigos ... 118
PRACTICAS CON VECTORES ... 118
PRACTICA 71 – Minimo ... 118
PRACTICA 72 – Cafeteria ... 119
PRACTICA 73 – Traductor de Codigo Morse ... 119
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 5
PARTE I
Los ejercicios y practicas de esta primera parte estan enfocados a entender los conceptos y el modo
de sintaxis de C++. Se vera la estructura basica de un programa, las instrucciones estandar y al
finalizar algunos ejemplos de comandos condicionales SI…ENTONCES.
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 6
INSTRUCCIONES
En este cuaderno de trabajo tendras los EJERCICIOS y PRACTICAS que veras en el curso de
Programacion I. Los ejercicios seran instrucciones paso a paso o programas ya resueltos para que los
teclees, te familiarices con la sintaxis, comados y realices alguna tarea sobre ellos como generar los
diagramas de flujo, pseudocodigo o indicar su funcionamiento. Las practicas, no tendran aquí la
respuesta, sino que deberas realizarla desde cero.
Debes teclear cada uno de los programas en tu compilador de C++. Hacer la compilacion y
encadenamiento y ver los resultados.
Recuerda que debes guardarlos y entregar tanto el compilado (.EXE) como el codigo fuente a tu
profesor. Ambos deben ir en un archivo ZIP como se describe a continuacion, si se los envias por
correo electronico:
Alumno_Grado_NoEjercicio... Ejemplo: ReynolHernandez_03_Prog01.zip
Ademas, cada ejercicio debera ir acompañado de su diagrama de flujo y pseudocodigo.
Los programas fueron creados en Visual C++ 6.0, de la suite Microsoft Visual Studio 6.0 que
soporta hasta Windows XP. Para versiones Windows Vista y Windows 7, este compilador no
funcionara. Necesitaras descargar el Visual C++ 2008 Studio Express y posiblemente hacer
algunas modificaciones en el codigo.
Actualizacion 2013.
Desde el curso 2012, se utilizan 3 compiladores distintos para que el alumno aprenda las
diferencias entre los IDE y no propiamente en el lenguaje de C++. La primera parte
corresponde al compilador ZINJAI. La segunda parte al compilador MS Visual C++ 6.0 y la
tercera parte al compilador DevC++. Se han seleccionado estos compiladores porque se prestan
mejor para la manera didactica, aunque en la parte cuarta se utiliza ZINJAI con librerias
visuales y CODEBLOCKS. Los compiladores de NetBeans y Eclipse no se ven sino hasta el
siguiente curso.
En vista de que el compilador MS VISUAL C++ 6.0 no funciona de manera correcta en
Windows Vista, 7 y 8, se opto por utilizar la version Visual C++ 2008 Express o en su defecto
DevC++. Los ejercicios por tanto, mostraran codigo de ambas versiones.
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 7
Ejercicio 1 – Hola Mundo
1. El primer programa es el clasico HOLA MUNDO. Aqui lo hemos nombrado hola.cpp
Primero.cpp#include <iostream> int main()
{
std::cout<< "Hola Mundo"; return 0;
}
Indica que es lo que hace cada linea:
Ejercicio 2 – Tipos de datos
El segundo programa trabaja con variables de tipo de dato entero, y usa la salida a la pantalla o
consola
Segundo.cpp #include <iostream> int main() { int x = 5; int y = 7; std::cout << std::endl; std::cout << x + y <<" " << x * y; std::cout << std::endl; return 0; }CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 8
SENTENCIA
ACCION
Que tipo de variables declaramos?
Que operaciones estamos realizando?
Cual es el comando para mostrar salida por
pantalla?
Ejercicio 3 – Mezcla de tipos de datos
El tercer programa es una variacion del segundo que incorpora un tipo de dato caracter para mezclar
los dos
Segundob.cpp #include <iostream> int main() { int x = 5; int y = 7; std::cout << std::endl;std::cout << "Estos son los valores: "; std::cout << x << "y " << y; std::cout << std::endl; std::cout << x + y <<" " << x * y; std::cout << std::endl; return 0; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 9
Ejercicio 4 – Simplificando comandos y datos
El cuarto programa es otra variacion del no. 2, pero aqui pedira una entrada por el teclado, se
almacena en una variable caracter y luego muestra todos los resultados.
Tercero.cpp
/* Tercero.cpp
Este es el tercer programa y vamos a ver la entrada del teclado y salida por pantalla
en la consola */
/* Esta es la libreria basica */ #include <iostream>
/* Para no repetir la libreria std, la declaramos aqui */ using std::cout; using std::cin; int main() { int x = 5; int y = 7; char nombre [200]; cout << std::endl;
cout<<"Estos son los valores: "<<x<<" y "<< y; cout<< std::endl;
cout << x + y <<" " << x * y; cout << std::endl;
cout <<"Cual es tu nombre? "; cin>>nombre;
cout<<"Bienvenido "<<nombre<<". Gracias por usar C++\n\n"; return 0;
}
Responde a lo que se indica:
SENTENCIA
ACCION
Que tipo de datos estamos declarando?
Que operaciones estamos realizando?
Cual es el comando de salida en pantalla?
Cual es el comando de entrada de datos?
Cual es la instruccion para ENTER o indicar una
linea nueva?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 10
Ejercicio 5 – Variables de preprocesador
En este ejercicio veremos como usar variables para ejecutarse en el preprocesador
Prog05.cpp/* Prog05_Case.cpp
Un programa que pregunta su nombre y le saluda De: El C++ por la practica. FICHA 1. Pag. 15 Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Valle del Bravo 17, Mayo,2009 */
#include <iostream> #define FRIEND 1 int main (void) {
char name [200];
std::cout << "Escribe tu nombre \n"; std::cin >> name;
#ifdef FRIEND
std::cout << "Hola " << name << ", que tal! \n"; #endif
return 0 ; }
Responde a lo que se indica:
Cual es la diferencia entre una variable normal y
las variables de preprocesador?
Como declaramos las variables de
preprocesador?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 11
Ejercicio 6 – Salida por pantalla
Simple programa de salida por pantalla
Prog06.cpp/* Prog06_17.cpp
Programa del ejercicio propuesto pag. 17 C++ por la practica. Para repasar la forma de mostrar mensajes en la pantalla. Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Matamoros 17,Mayo, 2009 */
#include <iostream.h> int main(void)
{
cout << "Esto del C++ parece muy facil" << endl; return 0;
}
ZinJai
/* Prog06_17.cppPrograma del ejercicio propuesto pag. 17 C++ por la practica. Para repasar la forma de mostrar mensajes en la pantalla. Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Matamoros 17,Mayo, 2009 */
#include <iostream> using namespace std;
int main(void) {
cout << "Esto del C++ parece muy facil" << endl; return 0;
}
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 12
Ejercicio 7 – Entrada y salida por pantalla
Entrada y salida por pantalla:
Prog07.cpp/*Prog07_17.cpp
Programa para el ejercicio propuesto en pag. 17 Manual C++ por la practica
4.1 no. 2
Por: Lic. Sergio Hugo Sanchez O. Para: Universidad Matamoros 17, Mayo, 2009 */
#include <iostream.h> int main(void)
{
char msg[200] ;
cout << "Escribe un mensaje con una sola palabra: "<<endl; cin >> msg; cout << "*********************"<<endl; cout << msg << endl; return 0; } /*Prog07_17.cpp
Programa para el ejercicio propuesto en pag. 17 Manual C++ por la practica
4.1 no. 2
Por: Lic. Sergio Hugo Sanchez O. Para: Universidad Matamoros 17, Mayo, 2009 */ #include <iostream> using namespace std; int main(void) { char msg[200] ;
cout << "Escribe un mensaje con una sola palabra: "<<endl; cin >> msg;
cout << "*********************"<<endl; cout << msg << endl;
return 0; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 13
Que tipo de dato estamos declarando? Y como?
Ejercicio 8 – Operadores y tipos de datos
Programa que muestra el uso de operadores y tipos de datos
Prog08.cpp/* Prog08_19.cpp
Programa de la pagina 19 Curso C++ a la practica Para conocer los tipos basicos de datos en C Por: Lic. Sergio Hugo Sanchez O
Para: Universidad Matamoros 17, Mayo, 2009
FICHA2 */
#include <iostream.h> int global = 5;
int main (void) {
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 14
int a= 1;double x = 1.2 ; double y = 2.3 ;
cout << "x+y="<<x+y<<" "<<"a="<<a<<endl; a=global + (int) x;
cout<<"a="<<a<<endl; return 0;
}
/* Prog08_19.cpp
Programa de la pagina 19 Curso C++ a la practica Para conocer los tipos basicos de datos en C Por: Lic. Sergio Hugo Sanchez O
Para: Universidad Matamoros 17, Mayo, 2009 FICHA2 */ #include <iostream> using namespace std; int global = 5;
int main (void) {
int a= 1;
double x = 1.2 ; double y = 2.3 ;
cout << "x+y="<<x+y<<" "<<"a="<<a<<endl; a=global + (int) x;
cout<<"a="<<a<<endl; return 0;
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 15
INSTRUCCION
ACCION
Que tipos de datos estamos declarando?
Que tipos de operaciones estamos realiznado?
Cual es el resultado del programa?
Ejercicio 9 – Operaciones simples
Otro ejemplo de operaciones simples con tipos de datos numericos
Prog09.cpp/* Prog09_21.cpp
Programa pag 21 El C++ por la practica
Tipos de datos numericos y operaciones simples Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Valle del Bravo 17, Mayo, 2009
Ficha2 */
#include <iostream.h> int main (void)
{
double x, y, z;
cout << "Introduzca el primer numero" << endl; cin >> x;
cout << "Introduzca el segundo numero" << endl; cin >> y;
z = x+y;
cout << x <<"+"<< y << "="<< z << endl; return 0; }
/* Prog09_21.cpp
Programa pag 21 El C++ por la practica
Tipos de datos numericos y operaciones simples Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Valle del Bravo 17, Mayo, 2009
Ficha2 */
#include <iostream> using namespace std;
int main (void) {
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 16
double x, y, z;cout << "Introduzca el primer numero" << endl; cin >> x;
cout << "Introduzca el segundo numero" << endl; cin >> y;
z = x+y;
cout << x <<"+"<< y << "="<< z << endl; return 0; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 17
Ejercicio 10 - Concatenacion
Suma de caracteres, tambien llamada CONCATENACION.
Prog11.cpp/*Prog11.cpp
Programa que permite la suma (concatenacion) de 2 caracteres. Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Matamoros 17, Mayo, 2009
Ficha 2 */
#include <iostream.h> int main (void)
{
char a; //declaracion de la variable tipo caracter char b;
cout << "Introduzca el primer caracter: " << endl; cin >> a;
cout << "Introduzca el segundo caracter: " << endl; cin >> b;
a+=b; // a=a+b, suma o concatenacion de caracteres cout << "El resultado " << a;
return 0;} /*Prog11.cpp
Programa que permite la suma (concatenacion) de 2 caracteres. Por: Lic. Sergio Hugo Sanchez O.
Para: Universidad Matamoros 17, Mayo, 2009
Ficha 2 */
#include <iostream> using namespace std;
int main (void) {
char a; //declaracion de la variable tipo caracter char b;
cout << "Introduzca el primer caracter: " << endl; cin >> a;
cout << "Introduzca el segundo caracter: " << endl; cin >> b;
a+=b; // a=a+b, suma o concatenacion de caracteres cout << "El resultado " << a;
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 18
Responde a lo siguiente:
¿Qué es la concatenación?
¿Cómo se realiza la concatenación?
Ejercicio 11 – If…Else
Ejercicio para usar la sentencia IF/ELSE
Prog12.cpp/* Sentencias tipo if/else. Anidamientos y operaciones logicas */ #include <iostream.h>
int main () {
int i = 1; int j = 2; if (i>j)
{cout << "i es mejor que j"<<endl;} else
{cout << "i es mayor que j"<<endl;} return 0;
}
/* Sentencias tipo if/else. Anidamientos y operaciones logicas */ #include <iostream> using namespace std; int main () { int i = 1; int j = 2; if (i>j)
{cout << "i es mejor que j"<<endl;} else
{cout << "i es mayor que j"<<endl;} return 0;
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 19
Explica el comando de IF
Ejercicio 12 – Operaciones condicionales
Ejercicio con operaciones, entrada salida por consola y condicional
Prog13.cpp/* Pregunta dos numoers, que operacion deseas hacer y muestra el resultado */ #include <iostream.h>
int main() {
double a, b; int c;
cout << "Introduce el primer numero " << endl; cin >> a;
cout << "Introduce el segundo numero " << endl; cin >> b;
cout << "Que operacion deseas hacer, 1(suma), 2(Multiplicacion)? " << endl;
cin >> c;
if (c==1) {cout << "El resultado es: " << a+b<<endl;} else {cout <<"El resultado es: " <<a*b<<endl;}
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 20
}/* Pregunta dos numeros, que operacion deseas hacer y muestra el resultado */ #include <iostream> using namespace std; int main() { double a, b; int c;
cout << "Introduce el primer numero " << endl; cin >> a;
cout << "Introduce el segundo numero " << endl; cin >> b;
cout << "Que operacion deseas hacer, 1(suma), 2(Multiplicacion)? " << endl;
cin >> c;
if (c==1) {cout << "El resultado es: " << a+b<<endl;} else {cout <<"El resultado es: " <<a*b<<endl;}
return 0; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 21
Realiza el pseudocódigo del programa anterior
Ejercicio 13 – IF…ELSE anidados
Ejercicio mas complejo de IF...ELSE anidados
Prog14.cpp
/*Calcular el area de diferentes poligonos */ #include <iostream.h> int main() { double a, b; double area; int figura;
cout << "Figura= cuadrado (1), rectangulo (2), triangulo (3)" << endl; cout << "¿que area deseas calcular)" << endl;
cin >> figura;
if (figura==1)
{ cout << "valor del lado="; cin >>a;
area=a*a;}
else if (figura==2)
{ cout << "Valor del lado menor = "; cin >>a;
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 22
cout << "Valor del lado mayor = " ;cin >> b; area = a*b;}
else if (figura==3)
{ cout <<"Valor de la base ="; cin >> a;
cout << "Valor de la altura ="; cin >> b;
area=a*b/2.0;}
else
{ cout << "figura equivocada" << endl; area=0;}
cout <<"El area de la figura es= "<<area<<endl;
return 0; }
/*Calcular el area de diferentes poligonos */ #include <iostream> using namespace std; int main() { double a, b; double area; int figura;
cout << "Figura= cuadrado (1), rectangulo (2), triangulo (3)" << endl; cout << "¿que area deseas calcular)" << endl;
cin >> figura;
if (figura==1)
{ cout << "valor del lado="; cin >>a;
area=a*a;}
else if (figura==2)
{ cout << "Valor del lado menor = "; cin >>a;
cout << "Valor del lado mayor = " ; cin >> b;
area = a*b;}
else if (figura==3)
{ cout <<"Valor de la base ="; cin >> a;
cout << "Valor de la altura ="; cin >> b;
area=a*b/2.0;}
else
{ cout << "figura equivocada" << endl; area=0;}
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 23
return 0;}
ACCION
COMANDO
¿Qué son las condiciones anidadas?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 24
Ejercicio 14 – Salida a un archivo externo
Programa mas complejo que involucra: IF...ELSE, matrices, mas de 1 libreria, creacion de archivo de
texto, entrada y salida por pantalla. Nuevos comandos
Prog15.cpp
/* Se define la dimesion de un vector mediante un entero, el concepto de matriz
se restringe de momento a un vector, se escribe un texto de salida mediante sentencia
logica
Aqui veremos otras librerias de C, como se crean los vectores y el uso de un archivo de texto */ #include <iostream.h> #include <fstream.h> #define MAX_SIZE 25 int main () { int size; ofstream MyReport("resultado.txt");
cout << "Introduzca la dimension del vector" <<endl; cin >> size;
if (size > MAX_SIZE) {
cerr << "Error, tamaño demasiado grande" << endl;
MyReport << " *********************************** inicio" << endl;
MyReport << " ERROR: dimesion del vector debe ser menor de " << MAX_SIZE <<endl;
MyReport << " *********************************** fin"<<endl; MyReport.close();
return 1; }
cout << "Vamos a trabajar con un vector de " << size << " componentes"<< endl;
MyReport << " *********************************** inicio" << endl; MyReport << " Vector de " << size << " componentes " <<endl;
MyReport << " *********************************** fin"<<endl; MyReport.close();
return 0; }
/* Se define la dimesion de un vector mediante un entero, el concepto de matriz
se restringe de momento a un vector, se escribe un texto de salida mediante sentencia
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 25
logicaAqui veremos otras librerias de C, como se crean los vectores y el uso de un archivo de texto */ #include <iostream> #include <fstream> using namespace std; #define MAX_SIZE 25 int main () { int size; ofstream MyReport("resultado.txt");
cout << "Introduzca la dimension del vector" <<endl; cin >> size;
if (size > MAX_SIZE) {
cerr << "Error, tamaño demasiado grande" << endl;
MyReport << " *********************************** inicio" << endl;
MyReport << " ERROR: dimesion del vector debe ser menor de " << MAX_SIZE <<endl;
MyReport << " *********************************** fin"<<endl; MyReport.close();
return 1; }
cout << "Vamos a trabajar con un vector de " << size << " componentes"<< endl;
MyReport << " *********************************** inicio" << endl; MyReport << " Vector de " << size << " componentes " <<endl;
MyReport << " *********************************** fin"<<endl; MyReport.close();
return 0; }
Indica lo siguiente:
¿Qué librerías estamos incorporando al
programa?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 26
¿Cuáles son los comandos de archivo que
se presentan?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 27
Ejercicio 15 - Switch
Programa de ejemplo para el Switch, variacion del primer programa IF...ELSE
Prog16.cpp/* Uso de switch en lugar de IF Igual al prog13 */
#include <iostream.h> int main ()
{
double a, b; int c;
cout << "Introduzca el primer numero"<<endl; cin >> a; cout << "Introduzca el segundo numero"<<endl; cin >> b; cout << "Que operacion deseas hacer: 1(suma)
2(Multiplicacion)"<<endl; cin>>c;
switch (c) {
case 1:
cout << "el resultado es:"<<a+b<<endl; break;
default:
cout << "el resultado es:"<<a*b<<endl; break;
}
return 0; }
/* Uso de switch en lugar de IF Igual al prog13 */ #include <iostream> using namespace std; int main () { double a, b; int c;
cout << "Introduzca el primer numero"<<endl; cin >> a; cout << "Introduzca el segundo numero"<<endl; cin >> b; cout << "Que operacion deseas hacer: 1(suma)
2(Multiplicacion)"<<endl; cin>>c;
switch (c) {
case 1:
cout << "el resultado es:"<<a+b<<endl; break;
default:
cout << "el resultado es:"<<a*b<<endl; break;
}
return 0; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 28
Menciona las diferencias entre la instrucción Switch y la instrucción IF
Ejercicio 16 – Area de poligonos con Switch
Variacion de operaciones con poligonos usando switch en lugar de IF... else
Prog17.cpp
/*Calcular el area de diferentes poligonos usando Switch*/ #include <iostream.h>
int main() {
double a, b, area; int figura;
cout << "Figura= rectangulo (1), triangulo (2)" << endl; cout << "¿que area deseas calcular)" << endl; cin >> figura;
switch (figura) {
case 1:
cout << "Valor del lado menor = "; cin >>a;
cout << "Valor del lado mayor = " ; cin >> b; area = a*b; break;
case 2:
cout <<"Valor de la base ="; cin >> a;
cout << "Valor de la altura ="; cin >> b; area=a*b/2.0; break ;
default:
cout << "figura equivocada" << endl; area=0; break;
}
if (area) cout <<"El area de la figura es= "<<area<<endl; else cerr <<"error, la figura no tiene area"<<endl; return 0;
}
/*Calcular el area de diferentes poligonos usando Switch*/ #include <iostream>
using namespace std;
int main() {
double a, b, area; int figura;
cout << "Figura= rectangulo (1), triangulo (2)" << endl; cout << "¿que area deseas calcular)" << endl; cin >> figura;
switch (figura) {
case 1:
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 29
cout << "Valor del lado mayor = " ; cin >> b;area = a*b; break; case 2:
cout <<"Valor de la base ="; cin >> a;
cout << "Valor de la altura ="; cin >> b; area=a*b/2.0; break ;
default:
cout << "figura equivocada" << endl; area=0; break;
}
if (area) cout <<"El area de la figura es= "<<area<<endl; else cerr <<"error, la figura no tiene area"<<endl;
return 0; }
Prueba a hacer este programa sin ver el código aquí presentado, ya que es una variación del
ejercicio de polígonos usando el IF…else
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 30
PARTE II
En esta segunda parte se incluyen ejemplos para realizar ciclos. Ademas de incorporar funciones,
matrices, y ejemplos de algunos juegos los cuales preparan al estudiante en la logica de la
programacion.
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 31
Ejercicio 17 – Ciclo For
Primero haremos uno fácil. Escribir un programa que muestre una lista de números del 1 al
20, indicando a la derecha de cada uno si es divisible por 3 o no.
Prog19.cpp
// Este programa muestra una lista de números, indicando para cada uno // si es o no múltipo de 3.
// 11/09/2000 Salvador Pozo
#include <iostream.h> // librería para uso de cout int main() // función principal
{
int i; // variable para bucle
for(i = 1; i <= 20; i++) // bucle for de 1 a 20 {
cout << i; // muestra el número
if(i % 3 == 0) cout << " es múltiplo de 3"; // el resto de dividir por 3 es 0
else cout << " no es múltiplo de 3"; // o no lo es cout << endl; // cambio de línea
}
return 0; }
DevC++
// Este programa muestra una lista de números, indicando para cada uno // si es o no múltipo de 3.// 11/09/2000 Salvador Pozo
#include <iostream> // librería para uso de cout using namespace std;
int main() // función principal
{
int i; // variable para bucle
for(i = 1; i <= 20; i++) // bucle for de 1 a 20 {
cout << i; // muestra el número
if(i % 3 == 0) cout << " es múltiplo de 3"; // el resto de dividir por 3 es 0
else cout << " no es múltiplo de 3"; // o no lo es cout << endl; // cambio de línea
}
system("pause"); return 0; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 32
El enunciado es el típico de un problema que puede ser solucionado con un bucle "for".
Observa el uso de los comentarios, y acostúmbrate a incluirlos en todos tus programas.
Acostúmbrate también a escribir el código al mismo tiempo que los comentarios. Si lo dejas
para cuando has terminado el código, probablemente sea demasiado tarde, y la mayoría
de las veces no lo harás. ;-)
También es una buena costumbre incluir al principio del programa un comentario
extenso que incluya el enunciado del problema, añadiendo también el nombre del autor y
la fecha en que se escribió. Además, cuando hagas revisiones, actualizaciones o
correcciones deberías incluir una explicación de cada una de ellas y la fecha en que se
hicieron.
Una buena documentación te ahorrará mucho tiempo y te evitará muchos dolores de
cabeza.
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 33
Ejercicio 18 – Ciclo while
Escribir el programa anterior, pero usando una función para verificar si el número es
divisible por tres, y un bucle de tipo "while".
Prog20.cpp
// Este programa muestra una lista de números, indicando para cada uno // si es o no múltipo de 3.
#include <iostream.h> // librería para uso de cout // Prototipos:
bool MultiploDeTres(int n); int main() // función principal {
int i = 1; // variable para bucle
while(i <= 20) // bucle hasta i igual a 20 {
cout << i; // muestra el número
if(MultiploDeTres(i)) cout << " es múltiplo de 3"; // el numero es múltiplo de 3
else cout << " no es múltiplo de 3"; // o no lo es cout << endl; // cambio de línea
i++; }
}
// Función que devuelve verdadero si el parámetro 'n' en // múltiplo de tres y falso si no lo es
bool MultiploDeTres(int n) {
if(n % 3) return false; else return true; }
// Este programa muestra una lista de números, indicando para cada uno // si es o no múltipo de 3.
#include <iostream> // librería para uso de cout using namespace std;
// Prototipos:
bool MultiploDeTres(int n);
int main() // función principal
{
int i = 1; // variable para bucle
while(i <= 20) // bucle hasta i igual a 20 {
cout << i; // muestra el número
if(MultiploDeTres(i)) cout << " es múltiplo de 3"; // el numero es múltiplo de 3
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 34
else cout << " no es múltiplo de 3"; // o no lo es cout << endl; // cambio de líneai++; }
system("pause"); }
// Función que devuelve verdadero si el parámetro 'n' en // múltiplo de tres y falso si no lo es
bool MultiploDeTres(int n) {
if(n % 3) return false; else return true;
}
Comprueba cómo hemos declarado el prototipo de la función "MultiploDeTres".
Además, al declarar la variable i le hemos dado un valor inicial 1. Observa que al incluir la
función, con el nombre adecuado, el código queda mucho más legible, de hecho
prácticamente sobra el comentario. Por último, fíjate en que la definición de la función va
precedida de un comentario que explica lo que hace. Esto también es muy recomendable.
Ejercicio 19 – Ciclos anidados
Escribir un programa que muestre una salida de 20 líneas de este tipo:
1
1 2
1 2 3
1 2 3 4
...
Prog21.cpp// Este programa muestra una lista de números // de este tipo:
// 1 // 1 2 // 1 2 3 // ...
#include <iostream.h> // librería para uso de cout int main() // función principal
{
int i, j; // variables para bucles
for(i = 1; i <= 20; i++) // bucle hasta i igual a 20 {
for(j = 1; j <= i; j++) // bucle desde 1 a i cout << i << " "; // muestra el número cout << endl; // cambio de línea
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 35
}return 0; }
// Este programa muestra una lista de números // de este tipo:
// 1 // 1 2 // 1 2 3 // ...
#include <iostream> // librería para uso de cout using namespace std;
int main() // función principal
{
int i, j; // variables para bucles
for(i = 1; i <= 20; i++) // bucle hasta i igual a 20 {
for(j = 1; j <= i; j++) // bucle desde 1 a i cout << i << " "; // muestra el número
cout << endl; // cambio de línea
}
system("pause"); return 0; }
Este ejemplo ilustra el uso de bucles anidados. El bucle interior, que usa "j" como
variable toma valores entre 1 e "i". El bucle exterior incluye, además del bucle interior, la
orden de cambio de línea, de no ser así, la salida no tendría la forma deseada.
Además, después de cada número se imprime un espacio en blanco, de otro modo los
números aparecerían amontonados.
Ejercicio 20 – Ciclo While
Escribir un programa que muestre una salida con la siguiente secuencia numérica:
1, 5, 3, 7, 5, 9, 7, ..., 23
La secuencia debe detenerse al llegar al 23.
El enunciado es rebuscado, pero ilustra el uso de los bucles "do...while".
La secuencia se obtiene partiendo de 1 y sumando y restando 4 y 2, alternativamente.
Veamos cómo resolverlo:
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 36
Prog21.cpp/* Prog22 */
#include <iostream.h>
int main() // función principal
{
int i = 1; // variable para bucles
bool sumar = true; // Siguiente operación es sumar o restar
bool terminado = false; // Se ha alcanzado la condición de fin
do { // Hacer
cout << i; // muestra el valor en pantalla terminado = (i == 23); // Actualiza condición de fin
if(terminado) cout << "."; else cout << ", "; // Puntuación, separadores
if(sumar) i += 4; else i -= 2;// Calcula siguiente elemento sumar = !sumar; // Cambia la siguiente operación } while(!terminado); // ... mientras no se termine
cout << endl; // Cambio de línea
return 0; } /* Prog22 */ #include <iostream> using namespace std; int main() // función principal { int i = 1;
// variable para bucles bool sumar = true;
// Siguiente operación es sumar o restar
bool terminado = false; //
Se ha alcanzado la condición de fin
do { // Hacer
cout << i;
// muestra el valor en pantalla
terminado = (i == 23); //
Actualiza condición de fin
if(terminado) cout << "."; else cout << ", "; // Puntuación, separadores
if(sumar) i += 4; else i -= 2; //
Calcula siguiente elemento sumar = !sumar;
// Cambia la siguiente operación
} while(!terminado); //
... mientras no se termine
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 37
// Cambio de línea system("pause"); return 0; }PRACTICA 1
1.Ahora lee las paginas de la 32 a la 40 del manual el C++ por la practica y realiza los
ejercicios propuestos ahí para enviarlos al profesor.
Ejercicio 21 - Juego del Granjero
Aqui vamos a hacer un alto o un parentesis en los temas que llevamos visto, para mostrar un ejemplo mas practico y divertido sobre la programacion y sobre C++. Nada mejor que checar la logica de un programa, asi como ver nuevas instrucciones que con un juego. Este programa incluye algunas cosas que no se han visto hasta este momento en el curso. Como estructuras, funciones, nuevas librerias y comandos (sentencias). Pero que por lo demas no son dificiles de entender.
1. Deberas teclear todo el codigo en C++ 2. Deberas ejecutarlo... Y JUGARLO.
3. Deberas realizar el algoritmo. LINEA X LINEA del codigo del juego indicando que es lo que crees que hace.
4. Si tienes una duda sobre alguna instruccion... consulta la ayuda del editor o en la wikipedia. 5. Opcial (para obtener mas puntos) realizar el diagrama de flujo del juego.
NOTA: Puedes usar el siguiente programa ONLINE y gratuito para hacer tu diagrama de flujo. No olvides guardarlo o invitar al profesor con tu registro para que lo evalue. http://www.gliffy.com/
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 38
granjero.cpp/*
* G R A N J E R O *
* El problema del granjero cruzando el rio * */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #define BELL 7 #define K_ESC 27 #define NBYTES 80 /*
* Estructura de datos de los jugadores (bitfield) */ struct player_st { unsigned granjero : 1; unsigned zorra : 1; unsigned gallina : 1; unsigned maiz : 1; };
struct player_st Player; // variable generica bitfield /* * Prototipos de funcion */ void Instruct(void); int GetMove(int); void DoMove(int); int CheckMap(int); int MadeIt(void); void YouLose(void); void PrintMap(void); int main() {
int bank; //0 significa que el granjero esta en
el banco izquierdo
int move; // el codigo de la tecla para el
movimiento requerido
int trips; // numero de viajes a traves del rio
char reply[NBYTES]; //respuesta del usuario
/*
* Poner las condiciones iniciales. Todos los elementos estan en el * banco oeste y no se han hecho ningun viaje
*/
Player.granjero = Player.gallina = Player.zorra = Player.maiz = 0; bank = Player.granjero;
trips = 0;
printf("\n============= GRANJERO =================\n"); printf("Presione ESC en cualquier tiempo para salir.\n\n"); printf("Necesita instrucciones? (Pulse S o N): ");
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 39
if (reply[0] == 'S' || reply[0] == 's' ) Instruct(); PrintMap(); while (1) { move = GetMove(bank); DoMove(move); ++trips; bank = Player.granjero; PrintMap(); if (CheckMap(bank)) YouLose(); if (MadeIt()) break; }printf("Felicidades! Has llegado a salvo!\n"); printf("El numero de viajes fueron %d\n", trips);
return (0); }
/*
* Instruct() *
* Despliega las reglas del juego * */ void Instruct() { printf("**************************** INSTRUCCIONES ********************************** \n");
printf("Un granjero debe cruzar un rio en un bote.\n");
printf("El tiene una zorra, una gallina y un balde de maiz.\n"); printf("El granjero solo puede tomar una cosa a la vez en el bote.\n");
printf("La zorra no se puede quedar sola con la gallina porque se la come.\n");
printf("Tampoco puede dejar a la gallina con el maiz.\n");
printf("Cuando el granjero esta presente, los animales se portan bien.\n");
printf("Usted es el granjero. Intente llegar desde el lado oeste del rio \n");
printf("al lado este con su equipaje a cuestas mientras hace el \n");
printf("posible numero de viajes.\n");
}
/* *
* GetMove()
* Hacer los movimientos */
int
GetMove(int bank) {
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 40
/** Pregunte al usuario solo con los comandos disponibles. */ printf("\nComandos: S(olo) "); if (Player.zorra == bank) printf("Z(orra) "); if (Player.gallina == bank) printf("G(allina) "); if (Player.maiz == bank) printf("M(aiz) "); printf(":"); while (1) { key = toupper(getch()); if (key == 'S') break;
else if (key == 'Z' && Player.zorra == bank) break;
else if (key == 'G' && Player.gallina == bank) break;
else if (key == 'M' && Player.maiz == bank ) break;
else if (key == K_ESC) { putchar('\n'); exit (0); }
else
putchar(BELL); // mal comando } putchar('\n'); return (key); } void DoMove(int move) { switch (move) { case 'S': break; case 'Z': Player.zorra = !Player.zorra; break; case 'G': Player.gallina = !Player.gallina; break; case 'M': Player.maiz = !Player.maiz; break; } Player.granjero = !Player.granjero; } /* * CheckMap() *
* Verificar que ningun elemento hostil se quedo solo * Regresar 1 si lo estan o 0 si no
*/ int
CheckMap(int bank) {
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 41
int status = 0;if (Player.zorra != bank && Player.gallina != bank) status = 1;
if (Player.gallina !=bank && Player.maiz != bank) status = 1; return (status); } /* * PrintMap() *
* Desplegar el mapa actual mostrando las posiciones * del granjero y los demas elementos
*/ void PrintMap() { char wc, ec; /* El granjero */ wc = ec = ' '; if (Player.granjero) ec = 'G'; else wc = 'G'; printf("\n%c ^^^^^^ %c\n",wc, ec); /* La zorra */ wc = ec = ' '; if (Player.zorra) ec = 'z'; else wc = 'z'; printf("\n%c ^^^^^^ %c\n",wc, ec); /* La gallina */ wc = ec = ' '; if (Player.gallina) ec = 'g'; else wc = 'g'; printf("\n%c ^^^^^^ %c\n",wc, ec); /* El maiz */ wc = ec = ' '; if (Player.maiz) ec = 'm'; else wc = 'm'; printf("\n%c ^^^^^^ %c\n",wc, ec); } /* * MadeIt() *
* Determinar si todos los elementos fueron satisfactoriamente * transportados al lado este del rio
*/ int
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 42
MadeIt(){
int status; status =0;
if (Player.granjero && Player.zorra && Player.gallina && Player.maiz) status = 1; return (status); } /* * Cuando pierdes */ void YouLose() {
printf("Lo sentimos, has perdido. "); if (Player.zorra == Player.gallina)
printf("La zorra se comio a la gallina.\n"); else if (Player.gallina == Player.maiz)
printf("La gallina se comio el maiz.\n");
exit(1); }
/*
* G R A N J E R O *
* El problema del granjero cruzando el rio * */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <ctype.h> #define BELL 7 #define K_ESC 27 #define NBYTES 80 /*
* Estructura de datos de los jugadores (bitfield) */ struct player_st { unsigned granjero : 1; unsigned zorra : 1; unsigned gallina : 1; unsigned maiz : 1; };
struct player_st Player; // variable generica bitfield
/*
* Prototipos de funcion */
void Instruct(void); int GetMove(int);
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 43
void DoMove(int); int CheckMap(int); int MadeIt(void); void YouLose(void); void PrintMap(void); int main() {int bank; //0 significa que el granjero esta en
el banco izquierdo
int move; // el codigo de la tecla para el
movimiento requerido
int trips; // numero de viajes a traves del rio
char reply[NBYTES]; //respuesta del usuario
/*
* Poner las condiciones iniciales. Todos los elementos estan en el * banco oeste y no se han hecho ningun viaje
*/
Player.granjero = Player.gallina = Player.zorra = Player.maiz = 0; bank = Player.granjero;
trips = 0;
printf("\n============= GRANJERO =================\n"); printf("Presione ESC en cualquier tiempo para salir.\n\n"); printf("Necesita instrucciones? (Pulse S o N): ");
gets(reply); if (reply[0] == 'S' || reply[0] == 's' ) Instruct(); PrintMap(); while (1) { move = GetMove(bank); DoMove(move); ++trips; bank = Player.granjero; PrintMap(); if (CheckMap(bank)) YouLose(); if (MadeIt()) break; }
printf("Felicidades! Has llegado a salvo!\n"); printf("El numero de viajes fueron %d\n", trips); system("pause"); return (0); } /* * Instruct() *
* Despliega las reglas del juego * */ void Instruct() { printf("**************************** INSTRUCCIONES ********************************** \n");
printf("Un granjero debe cruzar un rio en un bote.\n");
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 44
printf("El granjero solo puede tomar una cosa a la vez en el bote.\n");printf("La zorra no se puede quedar sola con la gallina porque se la come.\n");
printf("Tampoco puede dejar a la gallina con el maiz.\n");
printf("Cuando el granjero esta presente, los animales se portan bien.\n");
printf("Usted es el granjero. Intente llegar desde el lado oeste del rio \n");
printf("al lado este con su equipaje a cuestas mientras hace el \n");
printf("posible numero de viajes.\n"); system("pause");
}
/* *
* GetMove()
* Hacer los movimientos */ int GetMove(int bank) { int key; /*
* Pregunte al usuario solo con los comandos disponibles. */ printf("\nComandos: S(olo) "); if (Player.zorra == bank) printf("Z(orra) "); if (Player.gallina == bank) printf("G(allina) "); if (Player.maiz == bank) printf("M(aiz) "); printf(":"); while (1) { key = toupper(getch()); if (key == 'S') break;
else if (key == 'Z' && Player.zorra == bank) break;
else if (key == 'G' && Player.gallina == bank) break;
else if (key == 'M' && Player.maiz == bank ) break;
else if (key == K_ESC) { putchar('\n'); exit (0); }
else
putchar(BELL); // mal comando }
putchar('\n'); return (key); }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 45
DoMove(int move) { switch (move) { case 'S': break; case 'Z': Player.zorra = !Player.zorra; break; case 'G': Player.gallina = !Player.gallina; break; case 'M': Player.maiz = !Player.maiz; break; } Player.granjero = !Player.granjero; } /* * CheckMap() ** Verificar que ningun elemento hostil se quedo solo * Regresar 1 si lo estan o 0 si no */ int CheckMap(int bank) { int status = 0;
if (Player.zorra != bank && Player.gallina != bank) status = 1;
if (Player.gallina !=bank && Player.maiz != bank) status = 1; return (status); } /* * PrintMap() *
* Desplegar el mapa actual mostrando las posiciones * del granjero y los demas elementos
*/ void PrintMap() { char wc, ec; /* El granjero */ wc = ec = ' '; if (Player.granjero) ec = 'G'; else wc = 'G'; printf("\n%c ^^^^^^ %c\n",wc, ec); /* La zorra */ wc = ec = ' '; if (Player.zorra) ec = 'z'; else
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 46
wc = 'z'; printf("\n%c ^^^^^^ %c\n",wc, ec); /* La gallina */ wc = ec = ' '; if (Player.gallina) ec = 'g'; else wc = 'g'; printf("\n%c ^^^^^^ %c\n",wc, ec); /* El maiz */ wc = ec = ' '; if (Player.maiz) ec = 'm'; else wc = 'm'; printf("\n%c ^^^^^^ %c\n",wc, ec); } /* * MadeIt() ** Determinar si todos los elementos fueron satisfactoriamente * transportados al lado este del rio
*/ int MadeIt() { int status; status =0;
if (Player.granjero && Player.zorra && Player.gallina && Player.maiz) status = 1; return (status); } /* * Cuando pierdes */ void YouLose() {
printf("Lo sentimos, has perdido. "); if (Player.zorra == Player.gallina)
printf("La zorra se comio a la gallina.\n"); else if (Player.gallina == Player.maiz)
printf("La gallina se comio el maiz.\n"); system("pause");
exit(1); }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 47
Responde a lo siguiente:
¿Cual es el objetivo del juego?
¿Cuantas y cuales son las funciones que tiene el
juego?
¿Porque el juego esta dividido en funciones?
¿Cuales son las nuevas libreras incluidas?
¿Cuales son los commandos que sustituyen a
cout y cin?
¿Que tipo de datos estamos declarando y
como?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 48
Ejercicio 22 - Juegos
Para terminar de ver los ejemplos acerca de las condicionales y los ciclos, vamos a ver 3 juegos mas.
Sin embargo, es importante hacer la siguiente aclaracion:
Estos juegos fueron adaptados de otras versiones de compilador C++. Como habiamos visto en la
primer leccion, hay varios compiladores de C++, y ademas del Microsot Visual C++, otro muy usado
es el Turbo C++ o Borland C++. Estos compiladores traen unas librerias no estandar de C, que
permiten extender un poco el lenguaje y facilitar algunas tareas en modo DOS para accesar algunas
funciones graficas.
De entre ellas, hay una libreria llamada CONIO.H y STDLIB.H, que si bien existen en la version del
compilador de Microsoft que estamos usando, no contiene las mismas instrucciones.
Por lo tanto, hay que seguir algunas reglas para que estos juegos funcionen y apliques estas nuevas
instrucciones que generalmente son utiles en los juegos. Sin embargo, algunas setenciones no se
recomiendan en su uso porque precisamente no son librerias estandar que puedan ser emuladas
facilmente.
Asi que habra que seguir un par de instrucciones para que estos programas funcionen de manera
correcta.
INSTRUCCIONES ANTES DE EJECUTAR LOS PROGRAMAS.
1. Ve a la seccion de Manuales y Video y deberas bajar CONSOLA.H y CONSOLA.LIB
2. Estos dos archivos deberas incluirlos donde este tu proyecto de programa.
3. Sera muy importante que primero crees un proyecto de programa, porque deberas anexar estos
dos archivos. Uno bajo HEADER y el otro bajo RESOURCES.
4. Ademas, deberas incluir el archivo CONSOLA.H al inicio de tu programa pero veras que en lugar
de <>, lo haras con " ", ya que, estaras indicando que sera de manera local.
5. Tambien se deberan sustituir algunas instrucciones (que veras como comentarios en algunos
casos) por otras compatibles con esta version del compilador (como RANDOM y RANDOMIZE).
Cualquier duda, preguntale a tu profesor.
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 49
Ejercicio 22a – Juego de Adivinanzas
El siguiente es un pequeño juego de adivinanzas. La computadora "pensara" un numero entre 1 y 100
y tu deberas adivinarlo en maximo 9 oportunidades.
prog22a_adivinanzas.cpp #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <time.h> void main(){ int i, a, b; //randomize(); //clrscr(); system("cls"); //a=rand()%100; srand(time(0)); a = 1 + rand() % 100; cout<<"A D I V I N A N Z A S\n";
cout<<"Adivina el numero que estoy pensando\n"; for (i = 1; i < 9; i++){
cin>>b; if (b == a) {
cout<<"Muy bien, has acertado en "<<i<<" oportunidades \n"; break; } else if (b>a) cout<<"Es alto\n"; else cout<<"Es bajo\n"; } if (b != a) {
cout<<"Lo siento, el numero es: "<<a <<endl; } } #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> using namespace std; int main(){ int i, a, b; //randomize(); //clrscr(); system("cls"); //a=rand()%100; srand(time(0)); a = 1 + rand() % 100; cout<<"A D I V I N A N Z A S\n";
cout<<"Adivina el numero que estoy pensando\n"; for (i = 1; i < 9; i++){
cin>>b; if (b == a) {
cout<<"Muy bien, has acertado en "<<i<<" oportunidades \n";
break; }
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 50
else if (b>a) cout<<"Es alto\n"; else cout<<"Es bajo\n"; } if (b != a) {cout<<"Lo siento, el numero es: "<<a <<endl; }
system("pause"); return 0;
}
Aqui veras que se incluyen nuevas librerias. Ademas de nuevas instrucciones que no habiamos visto
hasta el momento. Te servira para repasar las instrucciones de condicion, contadores y generacion de
numeros aleatorios. Deberas descubrirlas y ver que es lo que hacen.
REALIZA:
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 51
Ejercicio 22b - Tragamonedas
Ahora, un pequeño juego muy popular en las vegas. El clasico tragamonedas, el cual cada vez que lo
ejecutes generara aleatoriamente las columnas con los elementos. Si le "atinas" a que las 3 columnas
contengan lo mismo... YA GANASTE!.
prog22b_tragamonedas.cpp
/* progb22b_tragamonedas.cpp
JUEGO: El clasico de las Vegas. */ #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <dos.h> #include <time.h> #include "consola.h" void Frutas(int col);
int i, a, b, c, m; char fruta[10][10]; int cuenta, columna = 0; int frutas[4];
void main() {
//randomize(); //clrscr();
srand(time(0)); // for seed based on current time system("cls"); strcpy(fruta[0], "Melocoton"); strcpy(fruta[1], "Melon"); strcpy(fruta[2], "Sandia"); strcpy(fruta[3], "Naranja"); strcpy(fruta[4], "Piña"); strcpy(fruta[5], "Fresa"); strcpy(fruta[6], "Frambuesa"); strcpy(fruta[7], "Mango"); strcpy(fruta[8], "Pera"); strcpy(fruta[9], "Durazno"); // b = random(5); // c = random(5); b = 1 + rand() % 5; c = 1 + rand() % 5;
for (cuenta =1; cuenta<=3; cuenta++) { columna += 20;
Frutas(columna); frutas[cuenta] = a; }
if (frutas[1]==frutas[2] && frutas[1]==frutas[3]) { gotoxy(24,20);
cout<<"--- F e l i c i d a d e s h a s g a n a d o !!!";
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 52
if (frutas[1]==frutas[2] || frutas[1]==frutas[3] ||frutas[2]==frutas[3]) { gotoxy(24,20);
cout<<"=== Ya casi ganas, te falto uno !!!"; }
getch(); }
void Frutas(int col){ for (i=0; i<10; i++){
//a=random(10);
//srand(time(0); //for seed based on current time srand(time(0));
a = 1 + rand() % 9;
gotoxy(col, i ); cout<<" - ";
gotoxy(col, i ); cout<<fruta[a]; delay(100); gotoxy(col, i ); cout<<" "<<endl;
} }
/* progb22b_tragamonedas.cpp JUEGO: El clasico de las Vegas.
MOD: 18-Feb-2013 para adecuarlo a DevC++*/
#include <iostream> #include <conio.h> #include <stdlib.h> #include <string.h> #include <dos.h> #include <time.h> #include <windows.h> using namespace std;
//Defines gotoxy() for ANSI C compilers. void gotoxy(short x, short y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }
void Frutas(int col); int i, a, b, c, m; char fruta[10][10]; int cuenta, columna = 0; int frutas[4];
int main() {
//randomize(); //clrscr();
srand(time(0)); // for seed based on current time system("cls"); strcpy(fruta[0], "Melocoton"); strcpy(fruta[1], "Melon"); strcpy(fruta[2], "Sandia"); strcpy(fruta[3], "Naranja"); strcpy(fruta[4], "Piña"); strcpy(fruta[5], "Fresa"); strcpy(fruta[6], "Frambuesa"); strcpy(fruta[7], "Mango"); strcpy(fruta[8], "Pera");
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 53
strcpy(fruta[9], "Durazno"); // b = random(5); // c = random(5); b = 1 + rand() % 5; c = 1 + rand() % 5;for (cuenta =1; cuenta<=3; cuenta++) { columna += 20;
Frutas(columna); frutas[cuenta] = a; }
if (frutas[1]==frutas[2] && frutas[1]==frutas[3]) { gotoxy(24,10); cout<<"--- F e l i c i d a d e s h a s g a n a d o !!!"; } if (frutas[1]==frutas[2] || frutas[1]==frutas[3] || frutas[2]==frutas[3]) { gotoxy(24,20);
cout<<"=== Ya casi ganas, te falto uno !!!"; }
//getch();
system("pause"); return 0;
}
void Frutas(int col){ for (i=0; i<10; i++){
//a=random(10);
//srand(time(0); //for seed based on current time srand(time(0));
a = 1 + rand() % 9;
gotoxy(col, i ); cout<<" - ";
gotoxy(col, i ); cout<<fruta[a]; Sleep(100); gotoxy(col, i ); cout<<""<<endl;
} }
Aqui repasaras sobre los ciclos y las condicionales. Asi con una pequeña funcion. Deberas realizar:
1) El codigo
2) El diagrama de flujo
Ademas indica lo siguiente:
¿Cuáles son las librerías que incorpora el
programa y que hacen cada una?
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 54
¿Qué tipos de datos estamos declarando y como?
¿Qué funciones de C++ nuevas has descubierto
en el programa?
Ejercicio 22c – Pseudovirus
Quieres hacer una pequeña demostracion de un virus? Aqui tienes la oportunidad mientras practicas
los ciclos.
prog22c_pseudovirus.cpp /* Pseudovirus.cpp
Programa que muestra un supuesto virus en la pantalla Por: LSC Sergio Hugo Sanchez.
NOTA: Recordar que necesitamos el archivo CONSOLA.H y CONSOLA.LIB en el mismo directorio del programa para compilar
*/ #include <iostream.h> #include <conio.h> #include <dos.h> #include <math.h> #include "consola.h" void derecha(int fila);
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 55
void izquierda(int fila);void final(); int col,i, j, r; void main(){
clrscr(); r=50;
for (j=1; j<=50; j++) cout<<"---Auxilio!!! un virus al ataque al sistema ";
for (i=1; i<=25; i++) { if (i % 2 !=0 ) derecha(i); else izquierda(i); } final(); }
// cambiar * por el codigo ASCII 176 (Si usas NOTEPAD++). Normal @ void derecha(int fila) {
for (col=1; col<=6; col++) {
delay(r); gotoxy(col,fila); cout<<"¦"; }
for (col=1; col<=74; col++) {
delay(r); gotoxy(col,fila); cout<<"¦¦¦¦¦¦"; }
for (col=75; col<=80; col++) {
delay(r); gotoxy(col,fila); cout<<" "; }
}
void izquierda(int fila) {
for (col=80; col>=74; col--) {
delay(r); gotoxy(col,fila); cout<<"|"; }
for (col=74; col>=1; col--) {
delay(r); gotoxy(col,fila); cout<<"||||||"; }
for (col=9; col>=1; col--) {
delay(r); gotoxy(col,fila); cout<<" "; }
}
//cambiar Ü por el codigo ASCII 220 (Si usas NOTEPAD++). Normal * void final() { clrscr(); gotoxy(20, 5); cout<<" ********** * * *"; gotoxy(20, 6); cout<<" * * ** *"; gotoxy(20, 7); cout<<" * * * * *"; gotoxy(20, 8); cout<<" * * * * *"; gotoxy(20, 9); cout<<" * * * * *"; gotoxy(20,10); cout<<" ********** * * * *"; gotoxy(20,11); cout<<" * * * * *"; gotoxy(20,12); cout<<" * * * * *"; gotoxy(20,13); cout<<" * * * * *"; gotoxy(20,14); cout<<" * * * * *"; gotoxy(20,15); cout<<" * * * * *"; gotoxy(20,16); cout<<" * * * **"; gotoxy(20,17); cout<<" * * * *";
CUADERNO DE EJERCICIOS Y PRACTICAS C++
Página 56
delay(3000); clrscr(); delay(1000); } /* Pseudovirus.cppPrograma que muestra un supuesto virus en la pantalla
Por: LSC Sergio Hugo Sanchez.
NOTA: Recordar que necesitamos el archivo CONSOLA.H y CONSOLA.LIB en el mismo directorio del programa para compilar
MOD: 18-Feb-2013.. En la version DevC++ no necesitamos el header CONSOLA.H y la
libreria asociada, basta usar la libreria windows.h y la pequena funcion al
inicio. Ademas, se sustituye la funcion delay() por la funcion Sleep de la
misma libreria windows.h */ #include <iostream> #include <conio.h> #include <dos.h> #include <math.h> #include <windows.h> using namespace std;
//Defines gotoxy() for ANSI C compilers. void gotoxy(short x, short y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }
void derecha(int fila); void izquierda(int fila); void final(); int col,i, j, r; int main(){ //HANDLE hConsoleOutput; //hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); //SetConsoleDisplayMode(hConsoleOutput,1,NULL); system("cls"); r=50;
for (j=1; j<=50; j++) cout<<"---Auxilio!!! un virus al ataque al sistema ";
for (i=1; i<=25; i++) { if (i % 2 !=0 ) derecha(i); else izquierda(i); } final(); system("pause"); return 0; }