Cuadernos de Ejercicios C

119  29  Download (0)

Full text

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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.

(6)

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.

(7)

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

(8)

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

(9)

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?

(10)

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?

(11)

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.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> using namespace std;

int main(void) {

cout << "Esto del C++ parece muy facil" << endl; return 0;

}

(12)

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

(13)

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

(14)

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;

(15)

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

(16)

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

(17)

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;

(18)

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;

(19)

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

(20)

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

(21)

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;

(22)

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

(23)

CUADERNO DE EJERCICIOS Y PRACTICAS C++

Página 23

return 0;

}

ACCION

COMANDO

¿Qué son las condiciones anidadas?

(24)

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

(25)

CUADERNO DE EJERCICIOS Y PRACTICAS C++

Página 25

logica

Aqui 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?

(26)

CUADERNO DE EJERCICIOS Y PRACTICAS C++

Página 26

¿Cuáles son los comandos de archivo que

se presentan?

(27)

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

(28)

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:

(29)

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

(30)

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.

(31)

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

(32)

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.

(33)

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

(34)

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ínea

i++; }

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

(35)

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:

(36)

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

(37)

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/

(38)

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): ");

(39)

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

(40)

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

(41)

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

(42)

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

(43)

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");

(44)

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

(45)

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

(46)

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

(47)

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?

(48)

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.

(49)

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

(50)

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:

(51)

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 !!!";

(52)

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");

(53)

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?

(54)

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

(55)

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<<" * * * *";

(56)

CUADERNO DE EJERCICIOS Y PRACTICAS C++

Página 56

delay(3000); clrscr(); delay(1000); } /* 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

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

Figure

Updating...

References

Related subjects :