Cuadernos de Ejercicios C
Cuadernos de Ejercicios C
Cuadernos de Ejercicios C
Cuaderno de Trabajo Visual Basic se encuentra bajo una Licencia Creative Commons Atribucin Atribucin-No Comercial-Licenciamiento Recproco 3.0 Unported. Diciembre IDSystems Licenciamiento Unpo
Pgina 1
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 IfElse ....................................................................................................................... 18 Ejercicio 12 Operaciones condicionales ........................................................................................ 19 Ejercicio 13 IFELSE 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 Practica/Ejercicio 6 Dados .......................................................................................................... 105 CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 2
[PROGRAMACION I C++] IDSystems 2011 - 2013 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 PRACTICA 50 Countdown ....................................................................................................... 115 CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 3
[PROGRAMACION I C++] IDSystems 2011 - 2013 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 PRACTICA 74 Serie .................................................................................................................. 119
Pgina 4
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 SIENTONCES.
Pgina 5
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 acompaado 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.
Pgina 6
Pgina 7
[PROGRAMACION I C++] IDSystems 2011 - 2013 SENTENCIA Que tipo de variables declaramos? Que operaciones estamos realizando? Cual es el comando para mostrar salida por pantalla? ACCION
Pgina 8
Responde a lo que se indica: SENTENCIA 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?
ACCION
Pgina 9
Responde a lo que se indica: Cual es la diferencia entre una variable normal y las variables de preprocesador?
Pgina 10
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; }
Cual es la diferencia entre este programa y los que se han escrito anteriormente?
Pgina 11
Pgina 12
Pgina 13
Pgina 14
ACCION
Pgina 15
Pgina 16
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; return 0;}
Pgina 17
Ejercicio 11 IfElse
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; }
Pgina 18
Explica el comando de IF
Pgina 19
Pgina 20
[PROGRAMACION I C++] IDSystems 2011 - 2013 Realiza el pseudocdigo del programa anterior
Pgina 21
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;} cout <<"El area de la figura es= "<<area<<endl;
Pgina 22
COMANDO
Pgina 23
/* 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
Pgina 24
Pgina 25
Pgina 26
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; }
Pgina 27
[PROGRAMACION I C++] IDSystems 2011 - 2013 Menciona las diferencias entre la instruccin Switch y la instruccin IF
cin >>a;
Pgina 28
Prueba a hacer este programa sin ver el cdigo aqu presentado, ya que es una variacin del ejercicio de polgonos usando el IFelse
Pgina 29
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.
Pgina 30
DevC++
return 0; } // Este programa muestra una lista de nmeros, indicando para cada uno // si es o no mltipo de 3. // 11/09/2000 Salvador Pozo #include <iostream> // librera para uso de cout using namespace std; int main() // funcin principal { int i; // variable para bucle for(i = 1; i <= 20; i++) // bucle for de 1 a 20 { cout << i; // muestra el nmero if(i % 3 == 0) cout << " es mltiplo de 3"; // el resto de dividir por 3 es 0 else cout << " no es mltiplo de 3"; // o no lo es cout << endl; // cambio de lnea } system("pause"); return 0; }
Pgina 31
El enunciado es el tpico de un problema que puede ser solucionado con un bucle "for". Observa el uso de los comentarios, y acostmbrate a incluirlos en todos tus programas. Acostmbrate tambin a escribir el cdigo al mismo tiempo que los comentarios. Si lo dejas para cuando has terminado el cdigo, probablemente sea demasiado tarde, y la mayora de las veces no lo hars. ;-) Tambin es una buena costumbre incluir al principio del programa un comentario extenso que incluya el enunciado del problema, aadiendo tambin el nombre del autor y la fecha en que se escribi. Adems, cuando hagas revisiones, actualizaciones o correcciones deberas incluir una explicacin de cada una de ellas y la fecha en que se hicieron. Una buena documentacin te ahorrar mucho tiempo y te evitar muchos dolores de cabeza.
Pgina 32
Pgina 33
Comprueba cmo hemos declarado el prototipo de la funcin "MultiploDeTres". Adems, al declarar la variable i le hemos dado un valor inicial 1. Observa que al incluir la funcin, con el nombre adecuado, el cdigo queda mucho ms legible, de hecho prcticamente sobra el comentario. Por ltimo, fjate en que la definicin de la funcin va precedida de un comentario que explica lo que hace. Esto tambin es muy recomendable.
#include <iostream.h> // librera para uso de cout int main() // funcin 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 nmero cout << endl; // cambio de lnea
Pgina 34
} return 0; } // // // // // // Este programa muestra una lista de nmeros de este tipo: 1 1 2 1 2 3 ...
#include <iostream> // librera para uso de cout using namespace std; int main() // funcin 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 nmero cout << endl; // cambio de lnea } 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, adems del bucle interior, la orden de cambio de lnea, de no ser as, la salida no tendra la forma deseada. Adems, despus de cada nmero se imprime un espacio en blanco, de otro modo los nmeros apareceran amontonados.
separadores if(sumar) i += 4; else i -= 2;// Calcula siguiente elemento sumar = !sumar; // Cambia la siguiente operacin } while(!terminado); // ... mientras no se termine cout << endl; return 0; } /* Prog22 */ #include <iostream> using namespace std; int main() // funcin principal { int i = 1; // variable para bucles bool sumar = true; // Siguiente operacin es sumar o restar bool terminado = false; Se ha alcanzado la condicin de fin do { // Hacer cout << i; // muestra el valor en pantalla terminado = (i == 23); Actualiza condicin de fin if(terminado) cout << "."; else cout << ", "; separadores if(sumar) i += 4; else i -= 2; Calcula siguiente elemento sumar = !sumar; // Cambia la siguiente operacin } while(!terminado); ... mientras no se termine cout << endl; // Cambio de lnea
//
// // Puntuacin,
//
//
Pgina 36
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.
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/
He aqui el codigo:
Pgina 37
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; /* * 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; el banco izquierdo int move; movimiento requerido int trips; char reply[NBYTES]; // variable generica bitfield
//0 significa que el granjero esta en // el codigo de la tecla para el // numero de viajes a traves del rio //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);
Pgina 38
/* * 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");
Pgina 39
/* * 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) {
Pgina 40
Pgina 41
/* * 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 #include #include #include <stdio.h> <stdlib.h> <conio.h> <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; /* * Prototipos de funcion */ void Instruct(void); int GetMove(int); // variable generica bitfield
Pgina 42
//0 significa que el granjero esta en // el codigo de la tecla para el // numero de viajes a traves del rio //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"); printf("El tiene una zorra, una gallina y un balde de maiz.\n");
Pgina 43
/* * * 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); } void
Pgina 44
Pgina 45
/* * 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); }
Pgina 46
[PROGRAMACION I C++] IDSystems 2011 - 2013 Responde a lo siguiente: Cual es el objetivo del juego?
Pgina 47
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.
Pgina 48
[PROGRAMACION I C++] IDSystems 2011 - 2013 Ejercicio 22a Juego de Adivinanzas El siguiente es un pequeo 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; }
Pgina 49
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: El pseudocdigo El diagrama de flujo
Pgina 50
Ahora, un pequeo 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 #include #include #include #include #include #include <iostream.h> <conio.h> <stdlib.h> <string.h> <dos.h> <time.h> "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)); system("cls");
strcpy(fruta[0], "Melocoton"); strcpy(fruta[1], "Melon"); strcpy(fruta[2], "Sandia"); strcpy(fruta[3], "Naranja"); strcpy(fruta[4], "Pia"); 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
Pgina 51
//for seed based on current time 9; cout<<" - "; cout<<fruta[a]; delay(100); cout<<" "<<endl;
/* progb22b_tragamonedas.cpp JUEGO: El clasico de las Vegas. MOD: 18-Feb-2013 para adecuarlo a DevC++*/ #include #include #include #include #include #include #include <iostream> <conio.h> <stdlib.h> <string.h> <dos.h> <time.h> <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)); system("cls"); strcpy(fruta[0], strcpy(fruta[1], strcpy(fruta[2], strcpy(fruta[3], strcpy(fruta[4], strcpy(fruta[5], strcpy(fruta[6], strcpy(fruta[7], strcpy(fruta[8],
Pgina 52
g a n a d o
//for seed based on current time 9; cout<<" - "; cout<<fruta[a]; Sleep(100); cout<<""<<endl;
Aqui repasaras sobre los ciclos y las condicionales. Asi con una pequea funcion. Deberas realizar: 1) El codigo 2) El diagrama de flujo Ademas indica lo siguiente: Cules son las libreras que incorpora el programa y que hacen cada una?
Pgina 53
[PROGRAMACION I C++] IDSystems 2011 - 2013 Qu tipos de datos estamos declarando y como?
Quieres hacer una pequea 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);
Pgina 54
Pgina 55
Pgina 56
Aqui veras bastantes ciclos for. Algunas instrucciones de pantalla y retardo. Realiza: 1) El codigo 2) El diagrama de flujo. Ademas indica lo siguiente: Qu libreras incluye este programa?
Pgina 57
Pgina 58
#define num_palabras 3 void void void void void void void void void void void void construye_todo(); captura_las_palabras(); muestra_las_palabras(); exhibe_el_menu(); elegir_palabra(); construye_cabeza(); construye_tronco(); construye_brazo_izquierdo(); construye_brazo_derecho(); construye_pie_izquierdo(); construye_pie_derecho(); construye_hora();
int opcion_elegida; int posicion_de_palabra_a_adivinar; int cant_de_palabras = num_palabras; int longitud_de_las_palabras[num_palabras]; char todas_las_palabras[20] [num_palabras]; char palabra_actual[20]; int logitud_palabra_actual=0; main() { opcion_elegida = 0; clrscr(); exhibe_el_menu(); getche(); return 0; } //*********************************************************** void exhibe_el_menu(void) { //clrscr(); do { gotoxy(25,2); printf("PRESIONA EL NUMERO DE LA OPCION QUE DESEE"); gotoxy(25,3); printf("-----------------------------------------");
Pgina 59
Pgina 60
//*************************************************************** void elegir_palabra(void) { int longitud_de_palabra_a_adivinar, l; int i,j,sw=0, errores=0,contaP=0; char letra[l], completa[20]; clrscr(); do { gotoxy(10,4); printf("Escriba un numero entre 1 y %d y pulse enter:", cant_de_palabras); gotoxy(55,4); scanf("%d", &posicion_de_palabra_a_adivinar); clrscr(); } while (posicion_de_palabra_a_adivinar < 1 || posicion_de_palabra_a_adivinar > cant_de_palabras); longitud_de_palabra_a_adivinar = longitud_de_las_palabras[posicion_de_palabra_a_adivinar-1]; for (i=0: i<longitud_de_palabra_a_adivinar; i++) { gotoxy(i+20,3); printf("-"); } do { i++; gotoxy(10,4); printf("\n Escriba una Letra y Presione <Enter>..."); cin>>letra; sw=0; for (j=0; j<longitud_de_palabra_a_adivinar; j++) { if (todas_las_palabras[j][posicion_de_palabra_a_adivinar-1]==letra[0]) { gotoxy(j+20,3); printf("%c", letra[0]); completa[j]= letra[0]; sw=1; } } contaP=0; for (l=0; l<longitud_de_palabra_a_adivinar; l++) { if(completa[l]==todas_las_palabras[l][posicion_de_palabra_a_adiv inar-1]) contaP++;
Pgina 61
Pgina 62
Pgina 63
/*Pro23_ahorcado.cpp Este es el juego del Ahorcado. Solamente contiene 3 palabras iniciales pero puede ser agrandado hasta donde quieras. Por: LSC Sergio Hugo Sanchez MOD: 18-Feb-2013 Actualizado para DevC++ */ #include #include #include #include #include <iostream> <conio.h> <stdio.h> <string.h> <windows.h>
#define num_palabras 3 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 void void void void void exhibe_el_menu(); captura_las_palabras(); muestra_las_palabras(); construye_todo(); elegir_palabra(); construye_cabeza();
Pgina 64
int opcion_elegida=0; int posicion_de_palabra_a_adivinar=0; int cant_de_palabras = num_palabras; int longitud_de_las_palabras[num_palabras]; char todas_las_palabras[20] [num_palabras]; char palabra_actual[20]; int longitud_palabra_actual=0; int main() { opcion_elegida = 0; system("cls"); exhibe_el_menu(); system("pause"); return 0; } //*********************************************************** void exhibe_el_menu(void) { system("cls"); do { gotoxy(25,2); printf("PRESIONA EL NUMERO DE LA OPCION QUE DESEE"); gotoxy(25,3); printf("-----------------------------------------"); gotoxy(25,3.5); printf("-"); gotoxy(59,3.5); printf("!"); gotoxy(25,4); printf("MENU DEL JUEGO EL AHORCADO !"); gotoxy(25,5); printf("1 - INGRESAR LAS PALABRAS !"); gotoxy(25,6); printf("2 - JUGAR EL AHORCADO !"); gotoxy(25,7); printf("3 - MOSTRAS LAS PALABRAS !"); gotoxy(25,8); printf("4 - ABANDONAR EL PROGRAMA !"); gotoxy(25,9); printf("----------------------------------------"); gotoxy(25,15); printf("ELIJA LA OPCION QUE DESEE Y PULSE ACEPTAR:"); gotoxy(67,15); scanf("%d",&opcion_elegida); } while (opcion_elegida < 1 || opcion_elegida > 4 ); switch (opcion_elegida) { case 1: captura_las_palabras(); case 2: elegir_palabra();
// //
Pgina 65
Pgina 66
Pgina 67
construye_brazo_izquierdo(); else if (errores==5) construye_pie_derecho(); else if (errores==6) construye_pie_izquierdo(); else if (errores==7) { system("cls"); construye_todo(); errores=7; } } } while (i<longitud_de_palabra_a_adivinar || errores <=6); //printf( "\n\n Pulse una tecla para continuar..."); //getche(); system("pause"); exhibe_el_menu(); } //******************************************************************** ***** void construye_cabeza() { gotoxy(39,6); printf("|||||"); gotoxy(38,7); printf("| . . |"); gotoxy(38,8); printf("|_-_|"); } //******************************************************************** *** void construye_tronco(void) { gotoxy(41,9); printf("|"); gotoxy(41,10); printf("|"); gotoxy(41,11); printf("|"); gotoxy(41,12); printf("|"); } //******************************************************************** void construye_brazo_derecho(void) { gotoxy(40,9); printf("/"); gotoxy(38,10);
Pgina 68
Pgina 69
Gracias a: TRABAJO FINAL DE COMPUTACION PAZ CARDENAS ISRAEL EDSON ESCOBAR CHAINA PABLO WILSON MEDRANO AROSQUETA FREDDY (creadores originales) */ #include #include #include #include #include <iostream> <stdlib.h> <stdio.h> <String.h> <winbgim.h>
using namespace std; int main() { int x=20; system("color e1"); char texto[20]; cout<< "\n"; cout<< "\n"; cout<< " ===== JUEGO DEL AHORCADO ===== \n"; cout<< "\n"; cout<< "\n"; cout<< " ===== Escriba la palabra que desea adivinar ? ===== \n"; cout<< "\n"; cout<< "\n"; cin>> texto; cout<< "\n"; int n=strlen(texto); char otro[n]; for (int i=0;i < n;i++) { otro[i]='-'; } char letra[2]; int ce=0, completa=0, encontrado; initwindow(300,300); setcolor(4); settextstyle(0,0,2); outtextxy(20,250,"= EL AHORCADO ="); outtextxy(50,30,otro); while (ce < 5 && completa==0) { cout<< " Escriba la letra para completar la palabra ? \n"; cout<< "\n"; cin>> letra; encontrado=0;
Pgina 70
NOTA: Recuerda que algunas funciones de este programa son una emulacion de la biblioteca original conio.h de Borland C++, por lo que deberas incluir el archivo header CONSOLA.H y la libreria CONSOLA.LIB, si es que trabajas en MS Visual C++ 6.0 o MS Visual C++ 2008 Express.
Pgina 71
[PROGRAMACION I C++] IDSystems 2011 - 2013 Ademas, compara que el codigo para DevC++ no utiliza la librera consola.h y en su defecto utiliza la librera windows.h. Este programa tiene errores de manera intencional para las versiones de Visual C++ y DevC++. Descubrelos y da una solucion, ademas: Se ha incorporado otro codigo del ahorcado de manera grafica utilizando la librera wimbgim.h. Para lo cual buscala en internet o pidela a tu profesor. Deberas instalar esta librera para tu compilador DevC++, y crear un proyecto nuevo bajo Console Graphics Application, en lugar de Console Application tradicional. Una vez hecho esto, teclea el codigo correspondiente y compila. Responde a lo siguiente: Qu libreras son las que se incluyen en este programa?
Cules son las funciones en las que esta dividido este programa?
Pgina 72
Pgina 73
Pgina 74
Para la version DevC++, solo hay que cambiar unas lineas que esperamos ya hayas identificado. Y despues, ve a la seccion de BIBLIOTECA\DESCARGAS y baja el archivo de HANOIG (BORLAND), para que ejecutes el ejecutable. Este ultimo programa esta escrito en Borland C++ y utiliza bibliotecas graficas de MSDOS.
NOTA: En ambos es posible que solo veas a la computadora jugar. Podrias modificar el programa para que tu seas el que haga los movimientos? Es un buen reto. =)
Pgina 75
Pgina 76
PARTE III
ARREGLOS Y ESTRUCTURAS A partir de aqu, usamos solamente el compilador DevC++.
Pgina 77
Ejercicio 25 Arreglos
Realiza la siguiente practica, tecleando los siguientes programas para que veas el funcionamiento de los arreglos. Primero un programa que cuenta los numeros sin usar arrelgos:
prog24_vectores.cpp /* prog24 - Ejemplo de vectores */ #include <stdio.h> #define MAX 100 //Declara funcion de vectores //void vectores() // Comenzamos con la funcion normal /* A continuacion se muestra un programa que cuenta el numero de apariciones de los numeros 0, 1, 2 y 3 en una secuencia de enteros acabada en -1. */ int main() { int num, c0=0, c1=0, c2=0, c3=0; printf("El siguiente programa cuenta en numero de apariciones de los numeros 0 al 3\n"); printf("Por lo que se te preguntara por un numero, teclealo y pulsa ENTER \n"); printf("Para finalizar el ciclo, teclea -1 y te apaceran los resutados \n\n"); scanf("%d", &num); while (num != -1) { if (num == 0) c0++; if (num == 1) c1++; if (num == 2) c2++; if (num == 3) c3++; scanf( "%d", &num ); } printf( "Resultado Contadores:%d, %d, %d, %d \n\n", c0, c1, c2, c3 ); return 0; }
Pgina 78
int main() { int i, num2, cont[MAX]; printf("El siguiente programa cuenta en numero de apariciones de los numeros 0 al 3\n"); printf("Por lo que se te preguntara por un numero, teclealo y pulsa ENTER \n"); printf("Para finalizar el ciclo, teclea -1 y te apaceran los resutados \n\n"); for (i= 0; i< MAX; i++) cont[i] = 0; scanf("Numero %d", &num2); while (num2 != -1) { if ((num2 >= 0) && (num2 <= MAX)) cont[num2]++; scanf( "%d", &num2 ); } for (i= 0; i< MAX; i++) printf( "Contador [%d] = %d \n\n", i, cont[i] ); return 0; }
Pgina 79
Ejercicio 26
Ahora un ejercicio para aprender sobre arrays multidimensionales:
prog31.cpp /* Prog31 - Arrays multidimensionales El siguiente ejemplo muestra el empleo de una tabla multidimensional. Concretamente, el programa utiliza una tabla de 3 dimensiones para almacenar 1000 numeros aleatorios. Para generar numeros aleatorios se usa la funcion rand de la libreria estandar stdlib.h. Tambien se ha usado la funcion getchar (stdio.h), que interrumpe el programa y espera a que el usuario presione una tecla. */ #include <stdio.h> #include <stdlib.h> #define DIM 10 void main() { int tabla_random [DIM][DIM][DIM], a, b, c; for (a= 0; a< DIM; a++) for (b= 0; b< DIM; b++) for (c= 0; c< DIM; c++) tabla_random[a][b][c] = rand(); /* Muestra series de DIM en DIM elementos. */ for (a= 0; a< DIM; a++) for (b= 0; b < DIM; b++) { for (c= 0; c < DIM; c++) { printf( "\n\n tabla[%d][%d][%d] = ", a, b, c ); printf( "%d", tabla_random[a][b][c] ); } printf( "\n\nPulse ENTER para seguir" ); getchar(); } }
Pgina 80
los
numerous
Pgina 81
Ejercicio 27 Cadenas
Para repasar los temas, realiza estos dos programas:
prog32.cpp /* Prog32 - Ejemplo de cadenas El siguiente programa cuenta el numero de veces que se repite una palabra en una frase. El programa emplea la funcion de comparacion de cadenas strcmp. Dicha funcion devuelve 0 en caso de que las cadenas comparadas sean iguales */ #include <stdio.h> #include <string.h> #define MAXLIN 100 void main() { char pal[MAXLIN]; /* La que buscamos. */ char palfrase[MAXLIN]; /* Una palabra de la frase. */ char c; int total = 0; printf( "\nPALABRA:" ); scanf( "%s", pal ); printf( "\nFRASE:" ); c=' '; while (c != '\n') { scanf( "%s%c", palfrase, &c ); if (strcmp(pal, palfrase) == 0) total++; } printf( "\nLa palabra %s aparece %d veces.", pal, total ); }
prog33.cpp /* Prog33 - Otro ejemplo de cadenas A continuacion se muestra otro ejemplo que hace uso de las cadenas de caracteres. El programa lee dos cadenas de caracteres, las concatena, convierte las letras minusculas en mayusculas y viceversa, y finalmente escribe la cadena resultante. */ #include <stdio.h> #include <string.h> void main() { char cad1[80], cad2[80], cad3[160];
Pgina 82
Cules son las instrucciones de entrada en los dos programas? CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 83
Cmo se declaran las variables en ambos programas y por que de esa manera?
j; inicializamos los int enteros [5] = char cadena1 [16] char cadena2 [16]
//Ahora inicializamos las estructuras de datos static int a[2][5] = { { 1, 22, 333, 4444, 55555 }, { 5, 4, 3, 2, 1 } }; static int b[2][5] = { 1,22,333,4444,55555,5,4,3,2,1 }; static char *c = "cadena"; static struct { int i; float x; } sta = { 1, 3.1415e4}, stb = { 2, 1.5e4 }; static struct { char c; int i; float s; } st [2][3] = { {{ 'a', 1, 3e3 }, { 'b', 2, 4e2 }, { 'c', 3, 5e3 }}, { { 'd', 4, 6e2 },} }; //Aqui pondremos los resultados de dichos arrays y estructuras. // Comenzamos con las cadenas
Pgina 84
Pgina 85
[PROGRAMACION I C++] IDSystems 2011 - 2013 Que funcion tienen la instruccion static?
prog35_juegogato.cpp #include <iostream.h> #include <stdlib.h> #include <conio.h> char matrix[3][3]; //={0} void playbox(void); int main() { int m, n; char ch='y'; while (ch=='Y' || ch =='y') { for (m=0; m<3; m++) for (n=0; n<3; n++) matrix[m][n]='\0'; int i,j, sum=0; while (sum<10)
Pgina 86
matrix[0][0]==matrix[1][1] && matrix[2][0]==matrix[1][1] && matrix[0][0]==matrix[1][0] && matrix[0][1]==matrix[1][1] && matrix[0][2]==matrix[1][2] && matrix[0][0]==matrix[0][1] && matrix[1][0]==matrix[1][1] && matrix[2][0]==matrix[2][1] &&
boxes in the game cout<<"The game is over and no one wins, hahaha, you both stink!!!"<<endl; break; } // player 2's turn cout<<"Player 2 is 'O': choose the row and column "<<endl; cout<<"Row : "; cin>>i; cout<<"Coumn : "; cin>>j; for (;i>3 || i<1 || j>3 || j<1 || ('X'==matrix[i-1][j-1] ||'O'==matrix[i-1][j-1]);) { cout<<"Sorry boy, but you gotta choose another place.\n";
Pgina 87
- N)\n";
Pgina 88
[PROGRAMACION I C++] IDSystems 2011 - 2013 Responde a lo siguiente: Por que este juego implementa arreglos?
Pgina 89
Ejercicio 30 Estructuras
Realiza el siguiente ejemplo de manejo de estructuras:
prog34_estruc.cpp /* Prog34 - Ejemplo de estrucutras */ #include <stdio.h> struct datos { char nombre[20]; char apellido[20]; long int dni; }; struct tablapersonas { int numpersonas; struct datos persona[100]; }; void main() { int i; struct tablapersonas tabla; printf( "Numero de personas: " ); scanf( "%d", &tabla.numpersonas ); for (i= 0; i< tabla.numpersonas; i++) { printf( "\nNombre: " ); gets( tabla.persona[i].nombre ); printf( "\nApellido: " ); gets( tabla.persona[i].apellido ); //printf( "\nRFC: " ); //scanf( "%ld", &tabla.persona[i].dni ); } // Ahora hay que realizar el codigo para imprimir los resultados de la tabla }
Y una vez terminado, completalo, creando el codigo necesario para que imprima los resultados capturados que se almacenaron en la estructura de la tabla. Responde a lo que se indica: Cul fue el cdigo que escribiste para completar el programa?
Pgina 90
Qu es una estructura?
Pgina 91
Practica/Ejercicio 1 Zodiaco
Ahora teclea el siguiente programa que te dice el signo zodiacal de una persona. Este ya es un ejercicio resuelto en donde veras algunas instrucciones nuevas para construir una funcion que borre la pantalla. El programa ademas, esta basado en instrucciones condicionales IFELSE.
prog36_zodiaco.cpp /*Este programa muestra el signo zodiacal de una persona. Para ello el usuario debe introducir nicamente el da y el mes de nacimiento y el programa determinar inmediatamente el signo zodiacal de la persona.*/ //muestra el signo zodiacal #include <STdio.h> #include <math.h> #include <windows.h> void clrscr()/*Creando funcion para limpiar pantalla.*/ { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); } void main() { int salir,saliryesno; salir=0; while(salir==0){ clrscr();/*Llamando la funcion para limpiar pantalla.*/ short unsigned int m,d = 0; printf("Introduzca su mes de nacimiento: "); scanf("%d",&m,"\n"); while ((m > 12) || (m < 1)){ printf("Introduzca su mes de nacimiento(DE 1 A 12): "); scanf("%d",&m,"\n"); } if (m==1){ printf("Introduzca su dia de nacimiento: "); scanf("%d",&d,"\n"); while ( (d>31) || (d != (d)) ){//!= esta sentencia es diferente de{ printf("Introduzca dia(ENTRE 1 Y 31): "); scanf("%d",&d,"\n"); } (d<=20) ? printf("\nSu signo es CAPRICORNIO.\n\n"):printf("\nSu signo es ACUARIO.\n\n");
Pgina 92
Pgina 93
Pgina 94
scanf("%d",&d,"\n"); } (d<=23) ? printf("\nSu signo es LIBRA.\n\n") : printf("\nSu signo es ESCORPION.\n\n"); } else{ if(m==11){ printf("Introduzca su dia de nacimiento: "); scanf("%d",&d,"\n"); while ( (d>30) || (d!=(d)) ){ printf("Introduzca dia(ENTRE 1 Y 31): "); scanf("%d",&d,"\n"); } (d<=22) ? printf("\nSu signo es ESCORPION.\n\n"):printf("\nSu signo es SAGITARIO.\n\n"); } else{ if(m==12){ printf("Introduzca su dia de nacimiento: "); scanf("%d",&d,"\n"); while ( (d>31) || (d !=(d)) ){ printf("Introduzca dia(ENTRE 1 Y 31): "); scanf("%d",&d,"\n"); } (d<=21) ? printf("\nSu signo es SAGITARIO.\n\n"):printf("\nSu signo es CAPRICORNIO.\n\n"); } } } } } } } } } } } } printf("SI DESEA SALIR PRESIONE 1 O DE LO CONTRARIO PRESIONE OTRO NUMERO: "); scanf("%d",&saliryesno);
Pgina 95
ACTIVIDAD Realiza el mismo programa pero usando sentencias SWITCH y una modificacion para hacer el algoritmo mas simple.
Pgina 96
Pgina 97
ACTIVIDAD Realiza el mismo programa, cambiando las sentencias condicionales IF..ELSE por SWITCH para hacer el programa mas corto. Tambien podrias usar un archivo externo para leer la informacion de equivalencias o la informacion de calificaciones de un alumno.
Pgina 98
Pgina 99
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> void clrscr()/*Creando funcion para limpiar pantalla.*/ { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); } void main() {
Pgina 100
Pgina 101
ACTIVIDAD Realiza el mismo programa pero usando las sentencias SWITCH donde se requiera
Pgina 102
prog40_peliculas.cpp /*Este programa muestra primero el listado de categoria de peliculas y pide al usuario que introduzca el codigo de la categoria de la pelicula y posterior a ello pide que el usuario introduzca el nmero de das de atraso en la devolucin de la pelcula. Lo que hace el programa es sumar el precio de la pelcula ms el valor del recargo multiplicado por el nmero de das de atraso, y as se muestra al final el total a pagar.*/ #include "STdio.h" #include <windows.h> void clrscr()/*Creando funcion para limpiar pantalla.*/ { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); } void main() { int salir,saliryesno; salir=0; while(salir==0){ clrscr();/*Llamando la funcion para limpiar pantalla.*/ int cod_pel,a; float dias,fav,nue,est,sest; printf("\n"); printf("\t CATEGORIA\tPRECIO\t CODIGO\tRECARGO/DIA DE ATRASO\n\n"); printf("\tFAVORITOS\t$2.50\t\t1\t\t$0.50\n"); printf("\tNUEVOS\t\t$3.00\t\t2\t\t$0.75\n"); printf("\tESTRENOS\t$3.50\t\t3\t\t$1.00\n"); printf("\tSUPER ESTRENOS\t$4.00\t\t4\t\t$1.50\n\n"); printf("INTRODUZCA EL CODIGO DE LA CATEGORIA DE LA PELICULA: "); scanf("%d",&cod_pel); a=0; while(a==0){ if(cod_pel<1 || cod_pel>4){ printf("INTRODUZCA EL CODIGO DE LA CATEGORIA DE LA PELICULA (ENTRE 1 Y 4): ");
Pgina 103
ACTIVIDAD Elimina el codigo que no sea necesario y que puedas sustituir por otras funciones o crear las propias
Pgina 104
Practica/Ejercicio 6 Dados
Otra practica de programa para ver la funcion aleatoria. Tambien repasamos las sentencias IFELSE
prog41_dados.cpp /* DISELE UN PROGRAMA QUE SIMULE EL LANZAMIENTO DE DOS DADOS HASTA QUE SALGA UN SIETE DOS VECES CONSECUTIVAS EL PROGRAMA DEBE INDICAR EN QUE TIRADA OCURRIO ESE RESULTADO Este programa es posible gracias a la utilizacion del generador de numeros aleatorios para simular el lanzamiento de dos dados El programa indica en que tirada se da el evento de los dos dados que caigan 7 consecutivamente. Para lograr esto se da la condicion ("if") que cada vez que caiga un 7 que vaya a evaluar si la siguiente tirada da otro siete. Si esto es asi, el programa se sale del ciclo o de lo contrario continua. Se aade tambien un contador que es el que dice finalmente a las cuantas tiradas se dio el eento de dos sietes consecutivamente*/ #include <stdio.h> #include <time.h> #include <windows.h> #define FONDO (0) #define VERDE (10) #define AMARILLO (14) void main() { HANDLE hStdInput=INVALID_HANDLE_VALUE, hStdOutput=INVALID_HANDLE_VALUE; hStdInput=GetStdHandle(STD_INPUT_HANDLE); hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdOutput,FONDO|AMARILLO); float salir; int saliryesno; salir=0; while(salir==0) { system("cls"); SetConsoleTextAttribute(hStdOutput, FONDO|VERDE); printf("\n\t\t\t EJERCICIO 41 (DADOS)\n"); printf("\t\t\t =====================\n"); int a, lanzamiento, i=0, contador=0; printf("\nPROBLEMA: DISEE UN PROGRAMA QUE SIMULE UN LANZAMIENTO DE DOS DADOS HASTA QUE\n"); printf("SALGA UN SIETE DOS VECES CONSECUTIVAS. EL PROGRAMA DEBE INDICAR EN QUE TIRADA\n"); printf("OCURRIO ESE RESULTADO.\n\n"); srand(time(NULL)); //Inicializar generador aleatorio while(i==0){ lanzamiento=1+rand()%12; //Generar numeros aleatorios
Pgina 105
ACTIVIDAD Trata de modificar el programa para que en lugar de un dado, sea una moneda (recuerda que tiene 2 lados).
Pgina 106
PARTE IV
PRACTICAS PARA DESARROLLAR
Pgina 107
PRACTICA 8 Numeros
Desarrolla un programa donde el usuario introduzca tres numeros enteros y luego nos indique cual de ellos es el central o el de en medio.
PRACTICA 10 Boletos
Desarrolla un programa que nos diga el precio de un boleto de ida y vuelta en autobus, conociendo la distancia a recorrer y sabiendo que si el numero de dias de estancia es mayor o igual a 7, y la distancia mayor o igual a 100 kilometros, el boleto tiene un descuento del 50%
Pgina 108
Pgina 109
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 19 Millonario Un millonario excentrico tenia tres hijos: Carlos, Jose y Marta. Al morir dejo el siguiente legado: A jose le dejo 4/3 de lo que le dejo Carlos. A Carlos le dejo 1/3 de su fortuna. A marta le dejo la mitad de lo que le dejo a Jose. Preparar un programa para darle la suma a repartir e imprima cuanto le toco a cada uno. PRACTICA 20 Promedio Haga un programa para calcular el promedio de cinco calificaciones. PRACTICA 21 Circulo Escribe un programa en C++ que calcule el area y perimetro de un circulo PRACTICA 22 Maquina reversadora de numeros Haz un programa que reciba un numero de 5 digitos (suponga que lo ingresan bien) y muestre el numero en forma inversa. PRACTICA 23 Nibles Haga un programa que sume los nibles (4 bits) mas significativo y menos significativo de una variable de un byte llamada dato y escriba el resultado en una variable de un byte llamada resul. PRACTICA 24 Multiplicacion por 300 Haga un programa que lea un entero y lo multiplique por 300. El uso del operador * y \ esta prohibido. PRACTICA 25 Peso Dado el peso de una persona en libras, calcule su peso en kilogramos. NOTA: 1 libra es aproximadamente igual a 0.453592Kg. PRACTICA 26 Fahrenheit Haga un programa para convertir una temperatura en grados Centigrados a Fahrenheit. La formula para hacer la conversion es: Fahrenheit = (9 * Celsius) / 5 + 32. PRACTICA 27 Celsius Haga un programa para convertir una temperatura en grados Fahrenheit a grados Celsius. Utilizar la formula: Celsius = (5/9)*(Fahrenheit-32).
Pgina 110
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 28 Determinante Dada una matriz de tres filas por tres columnas: | A1 A2 A3 | | A4 A5 A6 | | A7 A8 A9 | Puede obtenerse su determinante mediante la formula: D = A1*A5*A9 + A2*A6*A7 + A3*A4*A8 A3*A5*A7 A2*A4*A9 A1*A6*A8 Preparar un programa que permita ingresar por teclado los elementos de la matriz, y que calcule y muestre por pantalla el determinante. PRACTICA 29 Don Manolo El almacen Don Manolo, necesita un programa que ayude a calcular la forma de dar el cambio a sus clientes con el minimo de billetes y monedas posible. PRACTICA 30 - ISBN El International Standard Book Number (en espaol Nmero Internacional Estndar del Libro), o ISBN (pronunciado a veces como "is-bin"), es un identificador nico para libros. El nmero tiene siempre 10 dgitos de longitud, y est dividido en cuatro partes: 1. El cdigo del pas o lengua de origen 2. El editor 3. El nmero del artculo, y 4. El dgito de control. Estas partes tienen distintas longitudes y generalmente estn separadas por guiones. El dgito de control de un ISBN se puede calcular multiplicando cada dgito del ISBN por el lugar que ocupa dicho dgito en la secuencia numrica (multiplicando el primero por la izquierda por 1, el siguiente por 2, etc.) Tomando despus la suma de las multiplicaciones y calculando el modulo 11 de esta suma, con 10 representado por el carcter "X". Por ejemplo, para calcular el dgito de control de un ISBN cuyos nueve primeros dgitos son 0-306-40615: 1x0 + 2x3 + 3x0 + 4x6 + 5x4 + 6x0 + 7x6 + 8x1 + 9x5 = 0 + 6 + 0 + 24 + 20 + 0 + 42 + 8 + 45 = 145 = 145%11 = 2 Por lo que el dgito de control es 2, y la secuencia completa es ISBN 0-306-40615-2. Escriba un programa que, a partir de los dgitos de un ISBN, calcule el dgito de control.
Pgina 111
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 31 Odometer A sales person leaves his home every Monday and returns every Friday. He travels by company car. Each day on the road, the salesperson records the amount of gasoline put in the car. Given the starting odometer reading(that is, the odometer reading before he leaves on monday) and the ending odometer reading (the odometer reading after he returns home on friday). here some sample data: start: 68723 end: 71289 Mon: 15.75 Tues: 16.30 Wed: 10.95 Thru: 20.65 Fri: 30.00 Find how many miles could the saleperson drive (in average) with a galon. PRACTICA 32 Triangulo II Suponga que a, b y c son las longitudes de los lados de un tringulo. Entonces el rea de un tringulo se puede calcular utilizando la siguiente formula: rea = SQR( s(s-a)(s-b)(s-c) ). Donde s es el semi-permetro (a+b+c)/2. PRACTICA 33 Distancia Euclidiana Haga un programa que pregunte por las coordenadas de dos puntos en el plano y calcule la distancia (euclidiana) entre ellos. La distancia entre dos puntos (x1, y1) y (x2, y2) esta dada por la formula d=SQR( (x2-x1)^2 + (y2-y1)^2 ). PRACTICA 34 Validacion de Tarjetas de credito Todas las tarjetas de crdito tienen un sistema de verificacin de nmeros. Esto se hace para verificar la autenticidad del nmero de la tarjeta. Cada nmero tiene un significado. La mayora de las veces los primeros nmeros agrupados (que suelen ser de cuatro) significan el tipo de tarjeta. Los dems nmeros significan la oficina del representante de servicio y los nmeros que identifican al cliente. Los dos ltimos nmeros se utilizan para verificar si el nmero de tarjeta de crdito es correcto. A estos se le conocen como los check digits. Construya un programa que dada la siguiente frmula valide los nmeros de tarjeta de crdito. 1. Los nmeros en posiciones pares se acumulan. 2. Cada nmero en posicion impares se multiplica por 2 y se acumula. 3. Los check digits se calculan buscando el residuo de lo acumulado de nmeros en posiciones pares entre el acumulado de nmeros en posiciones impares.
Pgina 112
PRACTICA 35 Suma de fracciones Para sumar dos nmeros racionales se utiliza la siguiente frmula:
a c ad + bc - + - = ------b d bd
Pgina 113
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 40 Grado Promedio Hacer un programa que lea tres grados en letras, y muestre su promedio. El programa deber utilizar una escala de 4 puntos para calcular el promedio numrico (PN): 4 para A, 3 para B, 2 para C, 1 para D y 0 para F. Su programa debe mostrar que el promedio es A si PN es mayor a 3.5, B si es mayor a 2.5, C si es mayor a 1.5, D si es mayor a 0.5 o F de lo contrario. [Nota] Por simplicidad, asuma que el programa solo acepta letras maysculas.
PRACTICA 41 Bisiesto Haga un programa que determine si un ao es bisiesto: si es divisible por 4, pero no es divisible por 100 o si es divisible por 400.
PRACTICA 42 Diferencia Ingresar tres nmeros y hallar la diferencia del mayor menos el menor. PRACTICA 43 Saludo Escriba un programa que lea un instante de tiempo expresado en horas y minutos y escriba como respuesta uno de los mensajes "Buenos das", "Buenas tardes" o "Buenas noches", de acuerdo con las siguientes reglas: 1. Se considera que es de da desde las 6:00 horas hasta las 11:59 horas. 2. Se considera que es por la tarde desde las 12:00 horas hasta las 19:00 horas. 3. Se considera que es de noche desde las 19:01 horas hasta las 5:59 horas PRACTICA 44 - Control Escriba un programa que lea un nmero x del teclado y lleve a cabo las siguientes operaciones: a) si es positivo, calcular e imprimir su raz cuadrada. b) si es distinto de cero, calcular e imprimir su inverso (1/x). c) si es cuadrado perfecto (tiene raz cuadrada exacta), imprimir el mensaje "Es un cuadrado perfecto". d) si es par, calcular e imprimir su cociente entre 2 (x/2). e) si es positivo y menor que 10, imprimir el mensaje "Slo tiene un dgito". f) si est comprendido entre 32 y 127 (ambos inclusive) imprimir el carcter cuyo cdigo ASCII representa.
Pgina 114
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 45 Multiplo Ingresar un nmero n y verificar si es mltiplo de 3 o 5. PRACTICA 46 ASCII Lea un carcter y deduzca si es vocal, consonante, dgito o caracter especial. PRACTICA 47 Super Raices Partiendo del enunciado del problema [Races] arriba mencionado, tener en cuenta la posiblidad de tener races negativas. Primero calcule el discriminate B^2 - 4*A*C, si el discriminante es > 0.0, las dos races son reales y distintas y se caculan de la misma manera que en el programa [Races], si el discriminante es 0, las dos raices son reales e iguales y valen X1 = X2 = -B / (2*A). Finalmente, si el discriminante es < 0.0, las dos races son complejas conjugadas y valen X1_parte_real=X2_parte_real=-B / (2*A), X1_parte_imaginaria = SQR(-discriminante)/(2*A) y X2_parte_imaginaria = -SQR(-discriminante)/(2*A). PRACTICA 48 Dia semana Se desea escribir el nombre del da de la semana en funcin de un nmero de da, introducido por teclado. Donde 1 es Domingo, 2 Lunes y as sucesivamente. PRACTICA 49 Super Triangulo Disee un programa que lea tres longitudes y determine si forman o no un tringulo. Si es un tringulo determine de que tipo de tringulo se trata entre: equiltero (si tiene tres lados iguales), issceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales). Considere que para formar un tringulo se requiere que: "el lado mayor sea menor que la suma de los otros dos lados".
PRACTICA 51 Factorial El factorial de un nmero es el producto de todos los nmeros entre 1 y ese nmero. Por ejemplo, el factorial de 4 es 4x3x2x1 = 24. Haga un programa para calcular el factorial de un nmero n.
Pgina 115
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 52 Serie 1 Elabore un programa que calcule e imprima la suma de 1 + 1/2 + 1/3+ 1/4 + 1/5 + 1/6 + . . . + 1/50. PRACTICA 53 Primo Por si no lo recurda, los nmeros primos son cantidades enteras positivas que nicamente pueden dividirse por uno o por s mismos. Hacer un programa que detecte si un nmero es primo o no. Nota: Para saber si un nmero n es primo, hay que comprobar que el nmero no sea divisible por ningn entero entre 2 y la raz cuadrada del propio nmero. PRACTICA 54 Ingenieros 2050 Estime la poblacin de Ingenieros en sistemas en Mexico para el ao 2050, considerando un crecimiento anual de 11%. Actualmente hay 40000 profesionales del rea. PRACTICA 55 Super Primos Haga un programa que imprima todos los nmeros primos entre 1 y n. PRACTICA 56 Mayor Menor Leer una serie de nmeros hasta que el usuario ingrese el valor sentinela de -99 y escriba el nmero mayor y el nmero menor. PRACTICA 57 Cuadrado Has un programa en C++ que dibuje un cuadrado de n asteriscos. PRACTICA 58 Decimal a Hexadecimal This program reads integers and prints them in hexadecimal, using the shift and "and" operators. But there are two errors in the program. Correct the errors. PRACTICA 59 Rombo Escribir un programa que lea un entero y un carcter. La salida debe ser un rombo dibujado con el carcter dado y de anchura mxima dada por el entero leido. PRACTICA 60 Binario The following program reads integers and prints them in binary by division. There are some errors. Find them.
Pgina 116
[PROGRAMACION I C++] IDSystems 2011 - 2013 PRACTICA 61 Tablas de Multiplicar Implemente un programa que muestre por pantalla las tablas de multiplicar que el usuario quiera, y finalice cuando el usuario indique que desea ver la tabla del cero. PRACTICA 62 Divisores Implemente un programa que calcule los divisores de un nmero entero. PRACTICA 63 Calculadora Hacer un programa que simule una calculadora. Nos mostrara el men siguiente: ====== MENU CALCULADORA ====== 1.- Sumar 2.- Restar 3.- Multiplicar 4.- Dividir 0.- Terminar ============================== Ingrese su seleccin > __ El programa deber verificar que introducimos un nmero vlido (del 0 al 4). Si introducimos un nmero errneo nos avisar y volver a mostrar el men. Si introducimos un 0 el programa terminar. Si elegimos un nmero entre el 1 y el 4 nos pedir dos nmeros, mostrar el resultado dependiendo de nuestra eleccin y volver a mostrar el men. PRACTICA 64 Adivinar Disee un programa para jugar a adivinar un nmero entre 0 y 100. El programa ir dando pistas al jugador indicndole si el nmero introducido por el jugador es menor o mayor que el nmero que tiene que adivinar. El juego termina cuando el jugador adivina el nmero o decide terminar de jugar (por ejemplo, escribiendo un nmero negativo). PRACTICA 65 Nicomaco Considere la siguiente propiedad descubierta por Nicmaco de Gerasa. "Sumando el primer numero impar, se obtiene el primer cubo; Sumando los dos siguientes impares se obtiene el segundo cubo; Sumando los tres siguientes impares se obtiene el tercer cubo, etc." Ejemplo: 1^3 = 1 = 1 2^3 = 3 + 5 = 8 3^3 = 7 + 9 + 11 = 27 4^3 = 13 + 15 + 17 + 19 = 64 5^3 = 21 + 23 + 25 + 27 + 29 = 125 CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 117
Desarrolle un programa que escriba los n primeros cubos utilizando esta propiedad. El valor de n debe ser un valor leido por teclado. PRACTICA 66 Perfectos Los nmeros perfectos son aquellos enteros que son iguales a la suma de sus divisores sin incluir a l mismo. Ejemplo: 6 es un nmero perfecto porque 1 + 2 + 3 = 6. Elabore un programa que calcule todos los nmeros perfectos menores que un nmero n dado. PRACTICA 67 Sumatorias Se tiene una entrada de dgitos entre 0 y 9, precedida por el nmero total de dgitos a leer. Dada la entrada, se debe calcular el total de nmero pares, el total de nmeros impares, el promedio de todos los nmeros, la sumatoria de los nmeros pares, la sumatoria de los nmeros impares, la sumatoria de los cuadrados de los nmeros pares y la sumatoria de los cuadrados de los nmeros impares. PRACTICA 68 Guess my age Write a program to play "Guess my age:". PRACTICA 69 Power Write a program to calculate the power of one number raised to another. PRACTICA 70 Amigos Dos nmeros son amigos si cada una de ellos es igual a la suma de los divisores del otro, por ejemplo 224 y 284 son amigos ya que: 284 : 1 + 2 + 4 + 71 + 142 = 220 220 : 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 Elabore un programa que imprima todas las parejas de nmeros amigos menores o iguales que un numero n ingresado por teclado.
En el caso de aparecer repetido el valor mnimo se mostrara el menor ndice de los valores mnimos PRACTICA 72 Cafeteria Veinte estudiantes de Ingeniera de Sistemas se les pidi que valoraran de 1 a 10 la calidad de los almuerzos en la cafetera de la universidad. Un puntaje de 1 significa que la calidad es "psima" y un puntaje de 10 significa que la calidad es "excelente". Su programa deber colocar las 20 respuestas en un arreglo de tipo int y determinar la frecuencia de cada puntaje. Las frecuencias deben ser mostradas en forma de histograma. PRACTICA 73 Traductor de Codigo Morse El objetivo de este programa consiste en realizar un traductor de nmero a morse. Leyenda: : raya (seal larga) : punto (seal corta) Numeros 0 ----- 1 ---- 2 --- 3 -- 4 5 6 - 7 -- 8 --- 9 ---- Cada nmero en morse se representar en C++ por una cadena de 5 caracteres compuesta de puntos y rayas, segn la tabla anterior. Un ejemplo de lo que debe hacer el programa es: #morses Entre n: 2005 ..--- ----- ----- ..... #morse Entre n: 1992 .---- ----. ----. ..---
PRACTICA 74 Serie Escriba un programa en C++ que calcule e imprima el promedio y la varianza de los elementos un arreglo de 10 elementos, donde cada uno de ellos se corresponde con los elementos de la serie 1, 2^2, 3^3, 4^4, 5^5, ... .
Pgina 119