Upload
julio-sanchez
View
257
Download
0
Embed Size (px)
Citation preview
7/31/2019 Cuaderno de Ejercicios de C
1/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 1
CUADERNO DE TRABAJO DE C++
7/31/2019 Cuaderno de Ejercicios de C
2/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 2
ContenidoPARTE 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 ....................................................................................... 11 Ejercicio 8 Operadores y tipos de datos ........................................................................................ 12 Ejercicio 9 Operaciones simples ................................................................................................... 13 Ejercicio 10 - Concatenacion ........................................................................................................... 14 Ejercicio 11 IfElse ....................................................................................................................... 15 Ejercicio 12 Operaciones condicionales ........................................................................................ 15 Ejercicio 13 IFELSE anidados ...................................................................................................... 16
Ejercicio 14 Salida a un archivo externo ....................................................................................... 18 Ejercicio 15 - Switch ........................................................................................................................ 20 Ejercicio 16 Area de poligonos con Switch .................................................................................... 20 Ejercicio 17 Ciclo For .................................................................................................................... 23 Ejercicio 18 Ciclo while ................................................................................................................. 24 Ejercicio 19 Ciclos anidados .......................................................................................................... 25 Ejercicio 20 Ciclo While ................................................................................................................ 26 PRACTICA 1 ..................................................................................................................................... 26 Ejercicio 21 - Juego del Granjero ..................................................................................................... 27 Ejercicio 22 - Juegos ........................................................................................................................ 33
Ejercicio 22a Juego de Adivinanzas ........................................................................................... 34
Ejercicio 22b - Tragamonedas .......... .......... ......... ........... ......... ............ ......... ........ .......... ........... .. 36 Ejercicio 22c Pseudovirus ......................................................................................................... 38 Ejercicio 23 - Juego del Ahorcado .................................................................................................... 40 Ejercicio 24 - Juego Las Torres de Hanoi .......................................................................................... 48 Ejercicio 25 Arreglos ..................................................................................................................... 52 Ejercicio 26 ..................................................................................................................................... 54 Ejercicio 27 Cadenas .................................................................................................................... 56 Ejercicio 28 - Arreglos y cadenas ..................................................................................................... 58 Ejercicio 29 - Juego del Gato (Tic-Tac-Toe) ...................................................................................... 60 Ejercicio 30 Estructuras ................................................................................................................ 64 Practica/Ejercicio 1 Zodiaco ......................................................................................................... 66 Practica/Ejercicio 2 Califaciones Estilo USA .................................................................................. 70 Practica/Ejercicio 3 Sueldos a trabajador...................................................................................... 72 Practica/Ejercicio 4 Promocion de Ventas .................................................................................... 74 Practica/Ejercicio 5 Retraso en renta peliculas ............................................................................. 77 Practica/Ejercicio 6 Dados ............................................................................................................ 79 PRACTICA 7 Contando dinero ....................................................................................................... 82 PRACTICA 8 Numeros ................................................................................................................... 82 PRACTICA 9 Numeros ordenados ................................................................................................. 82 PRACTICA 10 Boletos .................................................................................................................... 82
7/31/2019 Cuaderno de Ejercicios de C
3/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 3
PRACTICA 11 Conversiones metricas ............................................................................................ 82 PRACTICAS DE VARIABLES, TIPOS DE DATOS, ASIGNACIONES, OPERADORES .................................. 83
PRACTICA 12 Rectangulo .......................................................................................................... 83 PRACTICA 13 Pies ..................................................................................................................... 83 PRACTICA 14 Triangulo ............................................................................................................. 83 PRACTICA 15 Raices .................................................................................................................. 83 PRACTICA 16 Tiempos .............................................................................................................. 83 PRACTICA 17 Prestamo ............................................................................................................ 83 PRACTICA 18 Metros ................................................................................................................ 83 PRACTICA 19 Millonario ........................................................................................................... 84 PRACTICA 20 Promedio ............................................................................................................ 84 PRACTICA 21 Circulo ................................................................................................................. 84 PRACTICA 22 Maquina reversadora de numeros ...................................................................... 84 PRACTICA 23 Nibles .................................................................................................................. 84 PRACTICA 24 Multiplicacion por 300 ........................................................................................ 84 PRACTICA 25 Peso .................................................................................................................... 84 PRACTICA 26 Fahrenheit .......................................................................................................... 84 PRACTICA 27 Celsius ................................................................................................................. 84 PRACTICA 28 Determinante ...................................................................................................... 85 PRACTICA 29 Don Manolo ........................................................................................................ 85 PRACTICA 30 - ISBN .................................................................................................................... 85 PRACTICA 31 Odometer ........................................................................................................... 86 PRACTICA 32 Triangulo II .......................................................................................................... 86 PRACTICA 33 Distancia Euclidiana ............................................................................................ 86 PRACTICA 34 Validacion de Tarjetas de credito ........................................................................ 86 PRACTICA 35 Suma de fracciones ............................................................................................. 87
PRACTICAS DE ESTRUCTURAS DE CONTROL .................................................................................... 87 PRACTICA 36 Max ..................................................................................................................... 87
PRACTICA 37 Positivo Negativo ................................................................................................ 87 PRACITCA 38 Par Impar ............................................................................................................ 87 PRACTICA 39 Convertidor de divisas ......................................................................................... 87 PRACTICA 40 Grado Promedio .................................................................................................. 88 PRACTICA 41 Bisiesto ............................................................................................................... 88 PRACTICA 42 Diferencia............................................................................................................ 88 PRACTICA 43 Saludo ................................................................................................................. 88 PRACTICA 44 - Control ................................................................................................................ 88 PRACTICA 45 Multiplo .............................................................................................................. 89 PRACTICA 46 ASCII ................................................................................................................... 89 PRACTICA 47 Super Raices ........................................................................................................ 89
PRACTICA 48 Dia semana ........................................................................................................ 89 PRACTICA 49 Super Triangulo ................................................................................................... 89
PRACTICAS DE ESTRUCTURAS REPETITIVAS ..................................................................................... 89 PRACTICA 50 Countdown ......................................................................................................... 89 PRACTICA 51 Factorial .............................................................................................................. 89 PRACTICA 52 Serie 1 ................................................................................................................. 90 PRACTICA 53 Primo .................................................................................................................. 90 PRACTICA 54 Ingenieros 2050 .................................................................................................. 90
7/31/2019 Cuaderno de Ejercicios de C
4/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 4
PRACTICA 55 Super Primos ....................................................................................................... 90 PRACTICA 56 Mayor Menor ...................................................................................................... 90 PRACTICA 57 Cuadrado ............................................................................................................ 90 PRACTICA 58 Decimal a Hexadecimal ....................................................................................... 90 PRACTICA 59 Rombo ................................................................................................................ 90 PRACTICA 60 Binario ................................................................................................................ 90 PRACTICA 61 Tablas de Multiplicar ........................................................................................... 91 PRACTICA 62 Divisores ............................................................................................................. 91 PRACTICA 63 Calculadora ......................................................................................................... 91 PRACTICA 64 Adivinar............................................................................................................... 91 PRACTICA 65 Nicomaco ............................................................................................................ 91 PRACTICA 66 Perfectos ............................................................................................................. 92 PRACTICA 67 Sumatorias .......................................................................................................... 92 PRACTICA 68 Guess my age ...................................................................................................... 92 PRACTICA 69 Power ................................................................................................................. 92 PRACTICA 70 Amigos ................................................................................................................ 92
PRACTICAS CON VECTORES ............................................................................................................. 92 PRACTICA 71 Minimo ............................................................................................................... 92 PRACTICA 72 Cafeteria ............................................................................................................. 93 PRACTICA 73 Traductor de Codigo Morse ................................................................................. 93 PRACTICA 74 Serie .................................................................................................................... 93
7/31/2019 Cuaderno de Ejercicios de C
5/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 5
PARTE ILos ejercicios y practicas de esta primera parte estan enfocados a entender los conceptos y el modode sintaxis de C++. Se vera la estructura basica de un programa, las instrucciones estandar y alfinalizar algunos ejemplos de comandos condicionales SIENTONCES.
7/31/2019 Cuaderno de Ejercicios de C
6/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 6
INSTRUCCIONES
En este cuaderno de trabajo tendras los EJERCICIOS y PRACTICAS que veras en el curso deProgramacion I. Los ejercicios seran instrucciones paso a paso o programas ya resueltos para que losteclees, te familiarices con la sintaxis, comados y realices alguna tarea sobre ellos como generar losdiagramas de flujo, pseudocodigo o indicar su funcionamiento. Las practicas , no tendran aqu larespuesta, sino que deberas realizarla desde cero.Debes teclear cada uno de los programas en tu compilador de C++. Hacer la compilacion yencadenamiento 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 quesoporta hasta Windows XP. Para versiones Windows Vista y Windows 7, este compilador nofuncionara. Necesitaras descargar el Visual C++ 2008 Studio Express y posiblemente haceralgunas modificaciones en el codigo.
7/31/2019 Cuaderno de Ejercicios de C
7/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 7
Ejercicio 1 Hola Mundo
1. El primer programa es el clasico HOLA MUNDO. Aqui lo hemos nombrado hola.cpp
Primero.cpp#include
int main(){std::cout
7/31/2019 Cuaderno de Ejercicios de C
8/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 8
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 int main(){
int x = 5;int y = 7;std::cout
7/31/2019 Cuaderno de Ejercicios de C
9/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 9
Ejercicio 4 Simplificando comandos y datos
El cuarto programa es otra variacion del no. 2, pero aqui pedira una entrada por el teclado, sealmacena en una variable caracter y luego muestra todos los resultados.
Tercero.cpp/* Tercero.cppEste es el tercer programa y vamos a ver la entrada del teclado y salidapor pantallaen la consola */
/* Esta es la libreria basica */#include
/* 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
7/31/2019 Cuaderno de Ejercicios de C
10/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 10
Ejercicio 5 Variables de preprocesador
En este ejercicio veremos como usar variables para ejecutarse en el preprocesador
Prog05.cpp/* Prog05_Case.cppUn programa que pregunta su nombre y le saludaDe: El C++ por la practica. FICHA 1. Pag. 15Por: Lic. Sergio Hugo Sanchez O.Para: Universidad Valle del Bravo
17, Mayo,2009 */
#include
#define FRIEND 1int main ( void ){
char name [200];std::cout > name;
#ifdef FRIENDstd::cout
7/31/2019 Cuaderno de Ejercicios de C
11/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 11
Ejercicio 6 Salida por pantalla
Simple programa de salida por pantalla
Prog06.cpp
/* Prog06_17.cppPrograma del ejercicio propuesto pag. 17 C++ por la practica.Para repasar la forma de mostrar mensajes en la pantalla.Por: Lic. Sergio Hugo Sanchez O.Para: Universidad Matamoros17,Mayo, 2009 */#include int main( void ){
cout
7/31/2019 Cuaderno de Ejercicios de C
12/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 12
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.cppPrograma de la pagina 19 Curso C++ a la practicaPara conocer los tipos basicos de datos en CPor: Lic. Sergio Hugo Sanchez O
Para: Universidad Matamoros17, Mayo, 2009
FICHA2*/#include
int global = 5;
int main ( void ){
int a= 1;double x = 1.2 ;double y = 2.3 ;
cout
7/31/2019 Cuaderno de Ejercicios de C
13/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 13
Ejercicio 9 Operaciones simples
Otro ejemplo de operaciones simples con tipos de datos numericos
Prog09.cpp/* Prog09_21.cppPrograma pag 21 El C++ por la practicaTipos de datos numericos y operaciones simplesPor: Lic. Sergio Hugo Sanchez O.Para: Universidad Valle del Bravo17, Mayo, 2009
Ficha2*/#include int main ( void ){
double x, y, z;cout x;
cout y;z = x+y;cout
7/31/2019 Cuaderno de Ejercicios de C
14/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 14
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 Matamoros17, Mayo, 2009
Ficha 2*/#include int main ( void ){
char a; //declaracion de la variable tipo caracterchar b;
cout a;cout b;
a+=b; // a=a+b, suma o concatenacion de caracterescout
7/31/2019 Cuaderno de Ejercicios de C
15/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 15
Ejercicio 11 IfElse
Ejercicio para usar la sentencia IF/ELSE
Prog12.cpp/* Sentencias tipo if/else. Anidamientos y operaciones logicas */
#include int main (){
int i = 1; int j = 2;if (i>j){cout
7/31/2019 Cuaderno de Ejercicios de C
16/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 16
Realiza el pseudocdigo del programa anterior
Ejercicio 13 IFELSE anidados
Ejercicio mas complejo de IF...ELSE anidados
Prog14.cpp/*Calcular el area de diferentes poligonos */#include int main(){
double a, b;double area;int figura;cout
7/31/2019 Cuaderno de Ejercicios de C
17/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 17
cin >>a;cout > b;area = a*b;}
else if (figura==3){ cout > a;cout > b;area=a*b/2.0;}
else{ cout
7/31/2019 Cuaderno de Ejercicios de C
18/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 18
Ejercicio 14 Salida a un archivo externo
Programa mas complejo que involucra: IF...ELSE, matrices, mas de 1 libreria, creacion de archivo detexto, entrada y salida por pantalla. Nuevos comandos
Prog15.cpp
/* Se define la dimesion de un vector mediante un entero, el concepto dematrizse restringe de momento a un vector, se escribe un texto de salidamediante sentencialogica
Aqui veremos otras librerias de C, como se crean los vectores y el uso deun archivode texto
*/#include #include
#define MAX_SIZE 25int main (){
int size;ofstream MyReport( "resultado.txt" );
cout MAX_SIZE){
cerr
7/31/2019 Cuaderno de Ejercicios de C
19/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 19
Indica lo siguiente:Qu libreras estamos incorporando alprograma?
Qu es lo que hace el programa?
Cules son los comandos de archivo quese presentan?
Realiza el pseudocdigo correspondiente:
7/31/2019 Cuaderno de Ejercicios de C
20/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 20
Ejercicio 15 - Switch
Programa de ejemplo para el Switch, variacion del primer programa IF...ELSE
Prog16.cpp/* Uso de switch en lugar de IFIgual al prog13 */
#include int main (){
double a, b; int c;cout
7/31/2019 Cuaderno de Ejercicios de C
21/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 21
switch (figura){case 1:
cout >a;cout > b;area = a*b; break ;
case 2:cout > a;cout > b;area=a*b/2.0; break ;
default :cout
7/31/2019 Cuaderno de Ejercicios de C
22/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 22
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 laprogramacion.
7/31/2019 Cuaderno de Ejercicios de C
23/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 23
Ejercicio 17 Ciclo For
Primero haremos uno fcil. Escribir un programa que muestre una lista de nmeros del 1 al20, indicando a la derecha de cada uno si es divisible por 3 o no.
Prog19.cpp// Este programa muestra una lista de nmeros, indicando para cada uno// si es o no mltipo de 3.// 11/09/2000 Salvador Pozo
#include // librera para uso de cout
int main() // funcin principal
{
int i; // variable para bucle
for (i = 1; i
7/31/2019 Cuaderno de Ejercicios de C
24/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 24
Ejercicio 18 Ciclo while
Escribir el programa anterior, pero usando una funcin para verificar si el nmero esdivisible por tres, y un bucle de tipo "while".
Prog20.cpp// Este programa muestra una lista de nmeros, indicando para cada uno// si es o no mltipo de 3.
#include // librera para uso de cout
// Prototipos:bool MultiploDeTres( int n);
int main() // funcin principal
{
int i = 1; // variable para buclewhile (i
7/31/2019 Cuaderno de Ejercicios de C
25/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 25
Ejercicio 19 Ciclos anidados
Escribir un programa que muestre una salida de 20 lneas de este tipo:11 21 2 31 2 3 4...
Prog21.cpp// Este programa muestra una lista de nmeros// de este tipo:// 1// 1 2// 1 2 3// ...
#include // librera para uso de cout
int main() // funcin principal
{
int i, j; // variables para buclesfor (i = 1; i
7/31/2019 Cuaderno de Ejercicios de C
26/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 26
Ejercicio 20 Ciclo While
Escribir un programa que muestre una salida con la siguiente secuencia numrica: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 cmo resolverlo:Prog21.cpp
/* Prog22 */
#include
int main() // funcin principal
{
int i = 1; / / variable para buclesbool sumar = true ; // Siguiente operacin es sumar o restarbool terminado = false ; // Se ha alcanzado la condicin de fin
do { // Hacercout
7/31/2019 Cuaderno de Ejercicios de C
27/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 27
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/
He aqui el codigo:
granjero.cpp/** G R A N J E R O** El problema del granjero cruzando el rio**/
#include #include #include
#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
7/31/2019 Cuaderno de Ejercicios de C
28/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 28
/** 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 enel banco izquierdo
int move; // el codigo de la tecla para elmovimiento requerido
int trips; // numero de viajes a traves del riochar 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);
return (0);}
/** Instruct()** Despliega las reglas del juego**/void
7/31/2019 Cuaderno de Ejercicios de C
29/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 29
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*/
intGetMove( 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
7/31/2019 Cuaderno de Ejercicios de C
30/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 30
}putchar( '\n' );return (key);
}
voidDoMove( 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*/intCheckMap( 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*/voidPrintMap(){
char wc, ec;
/* El granjero */wc = ec = ' ' ;if (Player.granjero)
ec = 'G' ;else
wc = 'G' ;printf( "\n%c ^^^^^ %c\n" ,wc, ec);
7/31/2019 Cuaderno de Ejercicios de C
31/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 31
/* 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*/intMadeIt()
{
int status;status =0;if (Player.granjero && Player.zorra && Player.gallina &&
Player.maiz)status = 1;
return (status);}
/** Cuando pierdes*/
voidYouLose()
{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);}
7/31/2019 Cuaderno de Ejercicios de C
32/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 32
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 acout y cin ?
Que tipo de datos estamos declarando ycomo?
Que significa cada constante declarada?
7/31/2019 Cuaderno de Ejercicios de C
33/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 33
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 usadoes 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 algunasfunciones graficas.
De entre ellas, hay una libreria llamada CONIO.H y STDLIB.H, que si bien existen en la version delcompilador 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 nuevasinstrucciones que generalmente son utiles en los juegos. Sin embargo, algunas setenciones no serecomiendan 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 maneracorrecta.
INSTRUCCIONES ANTES DE EJECUTAR LOS PROGRAMAS.
1. Ve a la seccion de Manuales y Video y deberas bajar CONSOLA.H y CONSOLA.LIB2. 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 estosdos 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 algunoscasos) por otras compatibles con esta version del compilador (como RANDOM y RANDOMIZE).
Cualquier duda, preguntale a tu profesor.
7/31/2019 Cuaderno de Ejercicios de C
34/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 34
Ejercicio 22a Juego de Adivinanzas
El siguiente es un pequeo juego de adivinanzas. La computadora "pensara" un numero entre 1 y 100y tu deberas adivinarlo en maximo 9 oportunidades.
prog22a_adivinanzas.cpp
#include #include #include #include
void main(){int i, a, b;//randomize();//clrscr();system( "cls" );//a=rand()%100;srand(time(0));a = 1 + rand() % 100;coutb;if (b == a) {
cout
7/31/2019 Cuaderno de Ejercicios de C
35/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 35
7/31/2019 Cuaderno de Ejercicios de C
36/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 36
Ejercicio 22b - Tragamonedas
Ahora, un pequeo juego muy popular en las vegas. El clasico tragamonedas, el cual cada vez que loejecutes generara aleatoriamente las columnas con los elementos. Si le "atinas" a que las 3 columnascontengan lo mismo... YA GANASTE!.
prog22b_tragamonedas.cpp/* progb22b_tragamonedas.cppJUEGO: El clasico de las Vegas. */
#include #include #include #include #include #include #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 timesystem( "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
7/31/2019 Cuaderno de Ejercicios de C
37/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 37
cout
7/31/2019 Cuaderno de Ejercicios de C
38/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 38
Ejercicio 22c Pseudovirus
Quieres hacer una pequea demostracion de un virus? Aqui tienes la oportunidad mientras practicaslos ciclos.
prog22c_pseudovirus.cpp/* Pseudovirus.cppPrograma que muestra un supuesto virus en la pantalla
Por: LSC Sergio Hugo Sanchez.NOTA: Recordar que necesitamos el archivo CONSOLA.H y CONSOLA.LIBen el mismo directorio del programa para compilar*/#include #include #include
#include #include "consola.h"
void derecha( int fila);void izquierda( int fila);void final();
int col,i, j, r;
void main(){clrscr();r=50;
for (j=1; j
7/31/2019 Cuaderno de Ejercicios de C
39/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 39
void derecha( int fila) {for (col=1; col
7/31/2019 Cuaderno de Ejercicios de C
40/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 40
Qu tipos de datos estamos declarando?
Qu funciones propias estamos usando?
Ejercicio 23 - Juego del Ahorcado
Para seguir probando lo que son las funciones y como un programa se divide en estaspara hacer mas facil de administrar, ahora veamos este juego un poco mas largo: elAhorcado.
Si bien, es un juego sencillo ya que solo acepta 3 palabras, contiene un menu inicial y laforma basica para jugarlo. En la seccion de practicas de este curso apareceran otrosmodelos de juego del ahorcado (incluso con graficas, mas temas y el uso de archivos paralas palabras) que estan hechos en Borland C++ (en lugar de MS Visual C++) y con loscuales podras practicar.
Mientras, divirtete y si quieres modifica el programa para que acepte mas palabras una vez
que te funcione. Aqui aplicaremos los temas anteriores:El programa esta un poco largo, pero te gustara:
7/31/2019 Cuaderno de Ejercicios de C
41/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 41
prog23_ahorcado.cpp/*Pro23_ahorcado.cppEste es el juego del Ahorcado.Solamente contiene 3 palabras iniciales pero puede seragrandado hasta donde quieras.
Por: LSC Sergio Hugo Sanchez
NOTA: No oldivar poner el header y libreria CONSOLA.H, CONSOLA.LIB en lamisma carpeta*/
#include #include #include #include #include "consola.h"
#define num_palabras 3
void construye_todo();void captura_las_palabras();void muestra_las_palabras();void exhibe_el_menu();void elegir_palabra();void construye_cabeza();void construye_tronco();void construye_brazo_izquierdo();void construye_brazo_derecho();void construye_pie_izquierdo();void construye_pie_derecho();void 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( "-----------------------------------------" );
7/31/2019 Cuaderno de Ejercicios de C
42/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 42
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.5,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();case 3: muestra_las_palabras();case 4: break ;
}}
//*****************************************************************void captura_las_palabras( void ){
int ia,ja;clrscr();
for (ia=0; ia>palabra_actual;longitud_palabra_actual = strlen(palabra_actual);longitud_de_las_palabras[a] = longitud_palabra_actual;for (ja=0; ja
7/31/2019 Cuaderno de Ejercicios de C
43/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 43
{gotoxy(19+j, i+10);printf( "%c" , todas_las_palabras[j][i]);
}}printf( "\n Pulse una tecla para continuar..." ;getche();exhibe_el_menu();
}
//***************************************************************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>letra;sw=0;for (j=0; j
7/31/2019 Cuaderno de Ejercicios de C
44/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 44
}
if (contaP=longitud_de_palabra_a_adivinar){
gotoxy(37,10);printf( "\nGANASTES EL JUEGO...." );errores=4;i=longitud_de_palabra_a_adivinar;getch();exhibe_el_menu();
}else{
if (sw==0)errores++;if (errores==1)
construye_cabeza();else
if (errores==2)construye_tronco();
elseif (errores==3)
construye_brazo_derecho();else
if (errores==4)
construye_brazo_izquierdo();else
if (errores==5)
construye_pie_derecho();else
if (errores==6)
construye_pie_izquierdo();else
if (errores==7){clrscr();
construye_todo();errores=7;
}}
} while (i
7/31/2019 Cuaderno de Ejercicios de C
45/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 45
//***********************************************************************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);printf( "/" );
}
//********************************************************************void construye_brazo_izquierdo( void ){
gotoxy(42,9);printf( "\");gotoxy(44,10);printf( "\");
}
//*******************************************************************void construye_pie_izquierdo( void ){
gotoxy(42,13);printf( "" );
gotoxy(44,14);printf( "" );}
//*******************************************************************void construye_pie_derecho( void ){
gotoxy(40,13);printf( "/" );gotoxy(38,14);printf( "/" );
}
//******************************************************************void construye_horca( void ){
int i;gotoxy(41,5);printf( ":" );gotoxy(41,4);printf( ":" );gotoxy(41,3);printf( ":" );gotoxy(42,3);printf( ":::::::::::::::" );
7/31/2019 Cuaderno de Ejercicios de C
46/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 46
for (i=3; i
7/31/2019 Cuaderno de Ejercicios de C
47/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 47
Cules son los nuevos comandos de C, que seincluyen en este programa?
Qu tipos de datos se declaran en este programa?
Dnde se almacenan las palabras?
Cmo se pueden poner mas palabras?
Qu funcin o proceso es lo que mas realizaeste programa y se repite?
7/31/2019 Cuaderno de Ejercicios de C
48/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 48
Ejercicio 24 - Juego Las Torres de Hanoi
Generalmente para probar el tema de la recursividad se aplica el ejercicio del juego de las
torres de Hanoi. En este juego, el usuario tiene que mover unos aros que estan desde elposte 1 hasta el poste 3, pasando a veces por el poste 2, de tal forma que quedenacomodados de menor a mayor hacia abajo como estaban en el poste 1.
Prueba hacer el codigo siguiente en MS Visual C++
prog24_hanoi.cpp/*prog24_hanoi.cppPrograma de la Torre de HanoiPor: Enrique R. Mosqueda */#include #include #include
/* include #define BG_BLACK (0) #define FG_RED (12) #defineFG_BLUE (9) #define FG_WHITE (15)#define FG_GREEN (2) */
//void clrscr()/* {
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE), COORD cor = {0,0},DWORD count;
CONSOLE_SCREEN_BUFFER_INFO csbi;GetConsoleScreenBufferInfo(hStdOut, &csbi);FillConsoleOutputCharacter(hStdOut, ' ', csbi.dvSize.X * csbi.dvSize.Y,
coord, &count);SetConsoleCursorPosition(hStdOut, coord);
}*/
void Towers( int , int , char , char , char );int n=0, a=0, b=0, c=0;void main(){
//clsscr();printf( "\n\n\t\tTORRE DE HANOI\n" );printf( "CREADO POR ENRIQUE RADHAMES MOSQUEA MARTINEZ\n" );printf( "las torres estan representadas como A,B,C\n" );printf( "Digite el 0 para salir del sistema.\n" );printf( "Digite la cantidad de Discos ===> " ,n); scanf( "%d" ,&n);Towers( n,a, 'A' , 'B' , 'C' );c=((a+b)-1);
printf( "\n\n Con %d DISCOS %d" , n, c);printf( "\n\tEl numero de Dias es => %d" , c);printf( "\n\n\n\tnota: estas variables solo alcanzan para 30
discos" );printf( "\n\ty usando la funcion POW(2,n)-1" );c=pow(2,n)-1;printf( "\n\tEl resultado es el mismo => %d" ,c);printf( "\n\tpara jugar con los colores solo activen las
funciones" );printf( "\n\tque estan como comentarios." );printf( "\nEspero que les guste " );
7/31/2019 Cuaderno de Ejercicios de C
49/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 49
getch();}
/* juego del sistema */void Towers( int n, int a, char frompeg, char topeg, char auxpeg ){
/* HANDLE hStdInput = INVALID_HANDLE_VALUE,hStdOutPut = INVALID_HANDLE_VALUE;hStdInput = GetStdHandle(STD_INPUT_HANDLE);hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hStdOutput, BG_BLACK | FG_RED); */if (n==1){
b=b+2;c*=a+b;printf( "\n%s%d%s%c%s%c" , "\t\t\t DISCO " , n, " DESDE " ,
frompeg, " HACIA " , topeg, a);return ;
} a=a+1;Towers( n-1,a, frompeg, auxpeg, topeg);//SetConsoleTextAttribute(hStdOutput, BG_BLACK | FG_BLUE );printf( "\n%s%d%s%c%s%c" , "\t\t\t DISCO " , n, " DESDE " , frompeg, "
HACIA " , topeg, a);Towers( n-1,a, frompeg, auxpeg, topeg);//SetConsoleTextAttribute(hStdOutput, BG_BLACK | FG_BLUE );
}
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 BorlandC++ y utiliza bibliotecas graficas de MSDOS.
7/31/2019 Cuaderno de Ejercicios de C
50/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 50
NOTA:En ambos es posible que solo veas a la computadora jugar. Podrias modificar elprograma para que tu seas el que haga los movimientos?Es un buen reto. =)
Responde a lo que se indica:Qu es la recursin?
Por qu estn variasinstrucciones concomentarios?
7/31/2019 Cuaderno de Ejercicios de C
51/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 51
PARTE IIIARREGLOS Y ESTRUCTURAS
7/31/2019 Cuaderno de Ejercicios de C
52/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 52
Ejercicio 25 Arreglos
Realiza la siguiente practica, tecleando los siguientes programas para que veas elfuncionamiento de los arreglos. Primero un programa que cuenta los numeros sin usararrelgos:
prog24_vectores.cpp/* prog24 - Ejemplo de vectores */#include #define MAX 100
//Declara funcion de vectores//void vectores()
// Comenzamos con la funcion normal/* A continuacion se muestra un programa que cuenta el numero deapariciones de los numeros 0, 1, 2 y3 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;}
Y ahora basado en el mismo concepto de contar numeros, usando arrays:
7/31/2019 Cuaderno de Ejercicios de C
53/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 53
prog30_vectores.cpp/* Pro30 - Uso de vectores *//* Que ocurriria si tuviesemos que contar las apariciones de los cien
primeros numeros enteros? Deberamos declarar cien contadores yescribir cien construcciones if para cada caso? La respuesta, como era deesperar, se halla en el uso de vectores.Veamoslo en el siguiente codigo que llama a la funcion:
*/#include #define MAX 100
int main(){
int i, num2, cont[MAX];
printf( "El siguiente programa cuenta en numero de apariciones delos numeros 0 al 3\n" );
printf( "Por lo que se te preguntara por un numero, teclealo y pulsaENTER \n" );
printf( "Para finalizar el ciclo, teclea -1 y te apaceran losresutados \n\n" );
for (i= 0; i< MAX; i++)cont[i] = 0;scanf( "Numero %d" , &num2);while (num2 != -1) {
if ((num2 >= 0) && (num2
7/31/2019 Cuaderno de Ejercicios de C
54/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 54
Por qu cambiaron las instrucciones paralos ciclos?
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 paraalmacenar 1000 numerosaleatorios. Para generar numeros aleatorios se usa la funcion rand de lalibreria estandarstdlib.h. Tambien se ha usado la funcion getchar (stdio.h), queinterrumpe el programa yespera a que el usuario presione una tecla.*/
#include #include #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();
}}
7/31/2019 Cuaderno de Ejercicios de C
55/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 55
Responde a lo siguiente:
Que son los arrays multidimensionales?
Como generamos los numerousaleatorios?
Como declaramos las variables?
7/31/2019 Cuaderno de Ejercicios de C
56/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 56
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 palabraen una frase.El programa emplea la funcion de comparacion de cadenas strcmp.Dicha funcion devuelve 0 en caso de que las cadenas comparadas seaniguales */
#include #include #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 );
}
Y tambien este otro:
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 lasletras minusculasen mayusculas y viceversa, y finalmente escribe la cadena resultante. */
#include #include
void main(){
char cad1[80], cad2[80], cad3[160];
7/31/2019 Cuaderno de Ejercicios de C
57/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 57
int i, delta;printf( "Introduzca la primera cadena:\n" );gets(cad1);printf( "Introduzca la segunda cadena:\n" );gets( cad2 );/* cad3 = cad1 + cad2 */strcpy( cad3, cad1 );strcat( cad3, cad2 );i = 0;delta = 'a' - 'A' ;while (cad3[i] != '\0' ){
if ((cad3[i] >= 'a' ) && (cad3[i] = 'A' ) && (cad3[i]
7/31/2019 Cuaderno de Ejercicios de C
58/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 58
Cmo se declaran las variables en ambosprogramas y por que de esa manera?
Ejercicio 28 - Arreglos y cadenas
Para repasar la leccion anterior sobre los arrays, realiza el siguiente ejercicio para que
veas como se determinan y que resultados muestran: prog23_arrays.cpp
/*ej4.cInicializacion y manejo de "arrays", cadenas y estructuras.*/# include
void main(){
int i, j;//Aqui inicializamos los arrays, tanto de numeros como de cadenasstatic int enteros [5] = { 3, 7, 1, 5, 2 };
static char cadena1 [16] = "cadena" ;static char cadena2 [16] = { 'c' , 'a' , 'd' , 'e' , 'n' , 'a' , '\0' };
//Ahora inicializamos las estructuras de datosstatic 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
7/31/2019 Cuaderno de Ejercicios de C
59/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 59
printf ( "enteros:\n" );for ( i=0; i
7/31/2019 Cuaderno de Ejercicios de C
60/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 60
Que funcion tienen la instruccion static?
Cual es la descripcion del formato que usala funcion printf?
Ejercicio 29 - Juego del Gato (Tic-Tac-Toe)
A continuacion se presenta el juego del gato o Tres en raya (Tic-Tac-Toe en ingles), paraaprender un poco mas sobre las matrices y ver su aplicacion.
Teclea el codigo siguiente y ejecutalo, ademas tendras que traducirlo porque los mensajesestan en ingles. Que te diviertas!!!
prog35_juegogato.cpp#include #include #include
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
7/31/2019 Cuaderno de Ejercicios de C
61/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 61
{if (sum==0)
playbox();cout3 || i3 || jj;
}matrix[i-1][j-1]= 'X' ;sum++;playbox();
//Check if winsif (matrix[0][0]== 'X' &&
matrix[0][0]==matrix[1][1] && matrix[1][1]==matrix[2][2]) {if (matrix[2][0]== 'X' &&
matrix[2][0]==matrix[1][1] && matrix[1][1]==matrix[0][2]) {if (matrix[0][0]== 'X' &&
matrix[0][0]==matrix[1][0] && matrix[1][0]==matrix[2][0]) {if (matrix[0][1]== 'X' &&
matrix[0][1]==matrix[1][1] && matrix[1][1]==matrix[2][1]) {if (matrix[0][2]== 'X' &&
matrix[0][2]==matrix[1][2] && matrix[1][2]==matrix[2][2]) {if (matrix[0][0]== 'X' &&
matrix[0][0]==matrix[0][1] && matrix[0][1]==matrix[0][2]) {
if (matrix[1][0]== 'X' &&matrix[1][0]==matrix[1][1] && matrix[1][1]==matrix[1][2]) {if (matrix[2][0]== 'X' &&
matrix[2][0]==matrix[2][1] && matrix[2][1]==matrix[2][2]) {}if (sum==9){ //sum=9 because there are only 9
boxes in the gamecout
7/31/2019 Cuaderno de Ejercicios de C
62/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 62
cout>i;cout>j;
}matrix[i-1][j-1]= 'O' ;sum++;//the play boxplaybox();
//Check if winsif (matrix[0][0]== 'O' &&
matrix[0][0]==matrix[1][1] && matrix[1][1]==matrix[2][2]) {if (matrix[2][0]== 'O' &&
matrix[2][0]==matrix[1][1] && matrix[1][1]==matrix[0][2]) {if (matrix[0][0]== 'O' &&
matrix[0][0]==matrix[1][0] && matrix[1][0]==matrix[2][0]) {if (matrix[0][1]== 'O' &&
matrix[0][1]==matrix[1][1] && matrix[1][1]==matrix[2][1]) {if (matrix[0][2]== 'O' &&
matrix[0][2]==matrix[1][2] && matrix[1][2]==matrix[2][2]) {if (matrix[0][0]== 'O' &&
matrix[0][0]==matrix[0][1] && matrix[0][1]==matrix[0][2]) {if (matrix[1][0]== 'O' &&
matrix[1][0]==matrix[1][1] && matrix[1][1]==matrix[1][2]) {if (matrix[2][0]== 'O' &&
matrix[2][0]==matrix[2][1] && matrix[2][1]==matrix[2][2]) {}cout>ch;
}system( "PAUSE" );return 0;
}
}
/****************************/
void playbox( void ){
//the play boxcout
7/31/2019 Cuaderno de Ejercicios de C
63/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 63
Responde a lo siguiente:
Por que este juego implementa arreglos?
Que tipo de arreglos usa este programa?
Este programa contiene errores de maneraintencional. Cules son?
Cul es la solucion a los errorespresentados?
7/31/2019 Cuaderno de Ejercicios de C
64/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 64
Ejercicio 30 Estructuras
Realiza el siguiente ejemplo de manejo de estructuras:
prog34_estruc.cpp/* Prog34 - Ejemplo de estrucutras */#include
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 dela 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 paracompletar el programa?
7/31/2019 Cuaderno de Ejercicios de C
65/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 65
Qu es una estructura?
7/31/2019 Cuaderno de Ejercicios de C
66/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 66
Practica/Ejercicio 1 Zodiaco
Ahora teclea el siguiente programa que te dice el signo zodiacal de una persona. Este ya es unejercicio resuelto en donde veras algunas instrucciones nuevas para construir una funcion queborre 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 elusuario debe introducir nicamente el da y el mes de nacimiento y elprograma determinar inmediatamente el signo zodiacal de la persona.*///muestra el signo zodiacal#include #include #include 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
7/31/2019 Cuaderno de Ejercicios de C
67/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 67
}else {
if (m==2){printf( "Introduzca su dia de nacimiento: " );scanf( "%d" ,&d, "\n" );while ( (d>29) || (d != (d)) ){
printf( "Introduzca dia(ENTRE 1 Y 29): " );scanf( "%d" ,&d, "\n" );
}(d31) || (d != (d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31):" );
scanf( "%d" ,&d, "\n" );}
(d30) || (d!=(d)) ){
printf( "Introduzca dia(ENTRE 1 Y31): " );
scanf( "%d" ,&d, "\n" );}(d31) || (d != (d)) ){
printf( "Introduzcadia(ENTRE 1 Y 31): " );
scanf( "%d" ,&d, "\n" );}(d30) || (d!=(d))
){printf( "Introduzca
dia(ENTRE 1 Y 31): " );scanf( "%d" ,&d, "\n" );
}
7/31/2019 Cuaderno de Ejercicios de C
68/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 68
(d31) || (d
!= (d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31): " );
scanf( "%d" ,&d, "\n" );}(d31)
|| (d != (d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31): " );
scanf( "%d" ,&d, "\n" );}(d30) || (d!=(d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31): " );
scanf( "%d" ,&d, "\n" );}(d31) || (d != (d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31): " );
7/31/2019 Cuaderno de Ejercicios de C
69/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 69
scanf( "%d" ,&d, "\n" );}
(d30) || (d!=(d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31): " );
scanf( "%d" ,&d, "\n" );
}
(d31) || (d !=(d)) ){
printf( "Introduzca dia(ENTRE 1 Y 31): " );
scanf( "%d" ,&d, "\n" );
}
(d
7/31/2019 Cuaderno de Ejercicios de C
70/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 70
if (saliryesno==1){salir=1;
}}
}
ACTIVIDADRealiza el mismo programa pero usando sentencias SWITCH y una modificacion para hacer elalgoritmo mas simple.
Practica/Ejercicio 2 Califaciones Estilo USA
Este ejercicio permite convertir el sistema de calificacion escolar de Mexico al sistema de Estados
Unidos que se basa en letras de la A hasta la F. Primero se debe mostrar una tabla de equivalenciasy luego preguntara la calificacion. El resultado sera el equivalente a la notacion americana.
Generalmente, para este tipo de programas se utilizan muchas condicionales. Este tipo deprogramas se utilizan en el ambito escolar para saber las calificaciones de los alumnos.
prog37_califeu.cpp/*El programa muestra primero una tabla de notas con sus equivalentes enel Standard Grading System o el sistema utilizado en los Estados Unidosque va desde la A hasta la F. El programa preguntar al usuario su notay transformar ese resultado al equivalente en el Standard GradingSystem. Tambin el programa dar una pequea pero valiosa recomendacinal usuario respecto a su nivel de estudio y calidad como estudiante.*/#include "stdio.h"#include 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 a;float nota;printf( "\n\t\t\tNOTAS\t\tEQUIVALENTE\n" );
7/31/2019 Cuaderno de Ejercicios de C
71/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 71
printf( "\t\t 9.0 - 10.0\t\t A\n" );printf( "\t\t 8.5 - 8.9\t\t B+\n" );printf( "\t\t 8.0 - 8.4\t\t B\n" );printf( "\t\t 7.5 - 7.9\t\t C+\n" );printf( "\t\t 7.0 - 7.4\t\t C\n" );printf( "\t\t 6.0 - 6.9\t\t D\n" );printf( "\t\t 0.0 - 6.0\t\t F\n" );a=0;while (a==0){
printf( "\nIntroduzca su nota en Programacion II: " );scanf( "%f" ,¬a);if (nota10){
/*a sigue valiendo cero y no se sale del ciclo*/}else {
a=1;}
}if (nota>=9){
printf( "\nNOTA EQUIVALENTE EN STANDARD GRADING SYSTEM:A\n" );
printf( "RECOMENDACIONES: Excelente, si continua asiusted es un genio.\n\n" );
}else {
if (nota>=8.5){printf( "\nNOTA EQUIVALENTE EN STANDARD GRADING
SYSTEM: B+\n" );printf( "RECOMENDACIONES: Muy bien, su nivel es
impresionante.\n\n" );}else {
if (nota>=8){printf( "\nNOTA EQUIVALENTE EN STANDARD
GRADING SYSTEM: B\n" );printf( "RECOMENDACIONES: Bien, su nivel es
muy bueno.\n\n" ); }else {
if (nota>=7.5){printf( "\nNOTA EQUIVALENTE EN STANDARD
GRADING SYSTEM: C+\n" );printf( "RECOMENDACIONES: Usted esta
dentro del promedio, trate de no bajar.\n\n" );}else {
if (nota>=7){printf( "\nNOTA EQUIVALENTE EN
STANDARD GRADING SYSTEM: C\n" );printf( "RECOMENDACIONES: Usted
la va pasando, pero trate elevar su promedio.\n\n" );}else {
if (nota>=6){printf( "\nNOTA EQUIVALENTE
EN STANDARD GRADING SYSTEM: D\n" );printf( "RECOMENDACIONES:
Usted esta en la cuerda floja, un pequeno descuido \nlo pone enproblemas.\n\n" );
}else { /*nota mayor que cero pero
7/31/2019 Cuaderno de Ejercicios de C
72/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 72
menor que 6.*/printf( "\nNOTA EQUIVALENTE
EN STANDARD GRADING SYSTEM: F\n" );printf( "RECOMENDACIONES:
Su nota sinceramente es mala, busque nuevas \ntecnicas de estudio.\n\n" );}
}}
}}
}printf( "SI DESEA SALIR PRESIONE 1 O DE LO CONTRARIO PRESIONE
OTRO NUMERO: " );scanf( "%d" ,&saliryesno);if (saliryesno==1){
salir=1;}
}}
ACTIVIDADRealiza el mismo programa, cambiando las sentencias condicionales IF..ELSE por SWITCH para hacerel programa mas corto.Tambien podrias usar un archivo externo para leer la informacion de equivalencias o la informacionde calificaciones de un alumno.
Practica/Ejercicio 3 Sueldos a trabajador
En este ejercicio deberas realizar un programa que calcule el pago que recibe un trabajador en base
a las horas del dia en que trabaja. El ejercicio ya esta escrito por lo que deberas leer y entender loscomentarios al principio, asi como la logica de construccion.
Este tipo de programas se usa mucho en sistemas administrativos de nominas o recursos humanos
prog38_sueldos.cpp/*Este programa muestra los pagos que recibir un trabajador por cada horalaboral en base a la hora del da en que trabaja. El usuario deber escribirel nmero de horas trabajadas en cada uno de los horarios y el programadeterminar el total de dinero a recibir por el trabajador y tambin dir sigan ms dinero por horas extras que por horas de oficina trabajadas oviceversa, o si el trabajador gan exctamente lo mismo por horas extras quepor horas de oficina.*/
#include "STdio.h"#include 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);
7/31/2019 Cuaderno de Ejercicios de C
73/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 73
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.*/printf( "\n\t\tHORARIO\t\t\t PAGO \n\n" );printf( "\t 8:00 AM - 4:00 PM\t\tPAGO BASE\n" );printf( "\t 4:00 PM - 8:00 PM\t 25 POR CIENTO EXTRA\n" );printf( "\t 8:00 PM - 12:00 AM\t 50 POR CIENTO EXTRA\n" );printf( "\t 12:00 AM - 8:00 AM\t\tPAGO DOBLE\n\n" );int horas_trab,horas_trab25,horas_trab50,horas_doble;float
pago_base,pago_extra25,pago_extra50,pago_doble,suma_extra,suma_base,pago,sueldo _total,pago_extra;
printf( "SUELDO BASE POR HORA TRABAJADA: " );scanf( "%f" ,&pago);printf( "\nNumero de horas trabajadas de 8:00 am a 4:00 pm: " );scanf( "%d" ,&horas_trab);pago_base=(horas_trab*pago);printf( "Numero de horas trabajadas de 4:00 pm a 8:00 pm: " );scanf( "%d" ,&horas_trab25);pago_extra25=(horas_trab25*(1.25)*pago);printf( "Numero de horas trabajadas de 8:00 pm a 12:00 am: " );scanf( "%d" ,&horas_trab50);pago_extra50=(horas_trab50*(1.50)*pago);printf( "Numero de horas trabajadas de 12:00 am a 8:00am: " );scanf( "%d" ,&horas_doble);pago_doble=(horas_doble*(2.0)*pago);suma_base=pago*horas_trab;suma_extra=(pago_extra25+pago_extra50+pago_doble);
sueldo_total= suma_extra+pago_base;printf( "\nEL PAGO TOTAL QUE RECIBIRA EL TRABAJADOR ES:$%.2f\n\n" ,sueldo_total);
printf( "EL SALARIO DEL TRABAJADOR POR HORAS DE OFICINA ES:$%.2f\n" ,suma_base);
printf( "EL SALARIO DEL TRABAJADOR POR HORAS EXTRAS ES:$%.2f\n" ,suma_extra);
if (suma_extra>suma_base){printf( "\nEL TRABAJADOR GANO MAS DINERO POR HORAS EXTRAS QUE
POR HORAS DE OFICINA\n\n" );}else {
if (suma_extra==suma_base){printf( "EL TRABAJADOR GANO EL MISMO SALARIO POR HORAS
EXTRAS QUE POR HORAS DE OFICINA\n\n" );}else { /*pago_base es mayor que suma_extra*/
printf( "EL TRABAJADOR GANO MAS DINERO POR HORAS DEOFICINA QUE POR HORAS EXTRA\n\n" );
}}printf( "SI DESEA SALIR PRESIONE 1 O DE LO CONTRARIO PRESIONE OTRO
NUMERO: " );scanf( "%d" ,&saliryesno);if (saliryesno==1){
7/31/2019 Cuaderno de Ejercicios de C
74/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 74
salir=1;}
}}
ACTIVIDAD:Realiza el diagrama de flujo de este programa
Practica/Ejercicio 4 Promocion de Ventas
El siguiente programa hara una promocion de ventas a un cliente en una tienda. De tal forma, quede manera aleatoria le tocara una bola de un color y dicho color tendra asociado un descuento paralos productos que compre.
Es un interesante ejemplo para ver nuevamente la funcion aleatoria, manejo de tablas,condicionales. Este tipo de programa es util en el area de ventas de un negocio.
prog39_promocion.cpp/*Este programa pide primeramente la cantidad total de compras de unapersona. Si la cantidad es inferior a $100.00, el programa dir que elcliente no aplica a la promocin. Pero si la persona ingresa unacantidad en compras igual o superior a $100.00, el programa genera deforma aleatoria un nmero entero del cero al cinco. Cada nmerocorresponder a un color diferente de cinco colores de bolas que hay paradeterminar el descuento que el cliente recibir como premio. Si la bolaaleatoria es color blanco, no hay descuento, pero si es uno de los otroscuatro colores, s se aplicar un descuento determinado segn la tablaque aparecer, y ese descuento se aplicar sobre el total de la compraque introdujo inicialmente el usuario, de manera que el programa mostrarun nuevo valor a pagar luego de haber aplicado el descuento.*/
#include #include #include #include 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(){
7/31/2019 Cuaderno de Ejercicios de C
75/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 75
int salir,saliryesno;salir=0;while (salir==0){
clrscr(); /*Llamando la funcion para limpiar pantalla.*/
int random;float gasto, ncargo;
printf( "\nINTRODUZCA LA CANTIDAD TOTAL DE LA COMPRA: " );scanf( "%f" ,&gasto, "\n" );
while (gasto < 0){
printf( "NO EXISTEN CARGOS NEGATIVOS INTRODUZCA NUEVOGASTO: " );
scanf( "%f" ,&gasto, "\n" );}
if (gasto >= 100){
printf( "\nSU GASTO IGUALA O SUPERA LOS $100.00 Y PORTANTO PARTICIPA EN LA PROMOCION.\n" );
printf( "\n\t\t COLOR\t\t DESCUENTO\n\n" );printf( "\t\tBOLA BLANCA\t\t NO TIENE\n" );printf( "\t\tBOLA ROJA\t\t10 POR CIENTO\n" );printf( "\t\tBOLA AZUL\t\t20 POR CIENTO\n" );printf( "\t\tBOLA VERDE\t\t25 POR CIENTO\n" );printf( "\t\tBOLA AMARILLA\t\t50 POR CIENTO\n\n" );
srand(time(NULL)); /*Inicializa el generador random*/random=rand()%5; /*Genera los nmeros random*/
if (random==0){printf( "ALEATORIAMENTE USTED OBTUVO UNA BOLA
BLANCA\n\n" );printf( "LO SENTIMOS, NO HA GANADO NINGUN
DESCUENTO." ); printf( " EL TOTAL A PAGAR ES DE$%.2f\n\n" ,gasto);
}else {
if (random==1){printf( "ALEATORIAMENTE USTED OBTUVO UNA BOLA
ROJA\n\n" );printf( "FELIDADES, HA GANADO UN 10 POR
CIENTO DE DESCUENTO \n\n" );ncargo=gasto-(gasto*0.1);printf( "SU NUEVO TOTAL A PAGAR ES:
$%.2f\n\n" , ncargo, "\n\n" );}else {
if (random==2){printf( "ALEATORIAMENTE USTED OBTUVO
UNA BOLA AZUL\n\n" );printf( "FELIDADES, HA GANADO UN 20 POR
CIENTO DE DESCUENTO \n\n" );ncargo=gasto-(gasto*0.2);printf( "SU NUEVO TOTAL A PAGAR ES:
$%.2f\n\n" , ncargo, "\n\n" );}else {
7/31/2019 Cuaderno de Ejercicios de C
76/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 76
if (random==3){printf( "ALEATORIAMENTE USTED
OBTUVO UNA BOLA VERDE\n\n" );printf( "FELIDADES, HA GANADO UN
25 POR CIENTO DE DESCUENTO \n\n" );ncargo=gasto-(gasto*0.25);printf( "SU NUEVO TOTAL A PAGAR
ES: $%.2f\n\n" , ncargo, "\n\n" );}else {
if (random==4){printf( "ALEATORIAMENTE
USTED OBTUVO UNA BOLA AMARILLA\n\n" );printf( "FELIDADES, HA
GANADO UN 50 POR CIENTO DE DESCUENTO \n\n" );ncargo=gasto-(gasto*0.5);printf( "SU NUEVO TOTAL A
PAGAR ES: $%.2f\n\n" , ncargo, "\n\n" );}
}}
}}
}else { /*El gasto es menor a $100.00*/
printf( "\n\nLO SENTIMOS, SU GASTO ES MENOR A CIENDOLARES Y NO APLICA A LA PROMOCION.\n\n" );
}printf( "SI DESEA SALIR PRESIONE 1 O DE LO CONTRARIO PRESIONE
OTRO NUMERO: " );scanf( "%d" ,&saliryesno);if (saliryesno==1){
salir=1;}
}}
ACTIVIDADRealiza el mismo programa pero usando las sentencias SWITCH donde se requiera
7/31/2019 Cuaderno de Ejercicios de C
77/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 77
Practica/Ejercicio 5 Retraso en renta peliculas
La siguiente practica es para elaborar un programa que se usaria en un videoclub. Este mostrara unlistado de peliculas y luego se pedira el numero de dias de atraso de una pelicula. El programacalculara el monto a pagar, segn el precio de la pelicula y la tabla de recargos.
prog40_peliculas.cpp/*Este programa muestra primero el listado de categoria de peliculas ypide al usuario que introduzca el codigo de la categoria de la pelicula yposterior a ello pide que el usuario introduzca el nmero de das deatraso en la devolucin de la pelcula. Lo que hace el programa es sumarel precio de la pelcula ms el valor del recargo multiplicado por elnmero de das de atraso, y as se muestra al final el total a pagar.*/
#include "STdio.h"#include 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_pel4){printf( "INTRODUZCA EL CODIGO DE LA CATEGORIA DE LA
PELICULA (ENTRE 1 Y 4): " );
7/31/2019 Cuaderno de Ejercicios de C
78/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 78
scanf( "%d" ,&cod_pel);}else {
a=1;}
}printf( "INTRODUZCA EL NUMERO DE DIAS DE ATRASO EN LA
DEVOLUCION: " );scanf( "%f" ,&dias);a=0;while (a==0){
if (dias
7/31/2019 Cuaderno de Ejercicios de C
79/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 79
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 QUESALGA UN SIETE DOS VECES CONSECUTIVASEL PROGRAMA DEBE INDICAR EN QUE TIRADA OCURRIO ESE RESULTADO
Este programa es posible gracias a la utilizacion del generador denumeros aleatorios para simular el lanzamiento de dos dadosEl programa indica en que tirada se da el evento de los dos dados quecaigan 7 consecutivamente.Para lograr esto se da la condicion ("if") que cada vez que caiga un 7que 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 cuantastiradas se dio el eento de dos sietes consecutivamente*/
#include #include #include
#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 aleatoriowhile (i==0){
lanzamiento=1+rand()%12; //Generar numerosaleatorios
7/31/2019 Cuaderno de Ejercicios de C
80/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 80
if (lanzamiento==7){lanzamiento=1+rand()%12;contador=contador+1;if (lanzamiento==7){
contador=contador+1;i=1;
}}contador=contador+1;
}printf( "EL SIETE SALIO DOS VECES CONSECUTIVAS EN LA TIRADA
NUMERO %d.\n\n" ,contador);SetConsoleTextAttribute(hStdOutput, FONDO|AMARILLO);printf( "SI DESEA SALIR PRESIONE 1 O DE LO CONTRARIO PRESIONE
OTRO NUMERO: " );scanf( "%d" , &saliryesno);if (saliryesno==1){
printf( "\n\a" );salir=1;
}} //Fin del while
}
ACTIVIDADTrata de modificar el programa para que en lugar de un dado, sea una moneda (recuerda que tiene2 lados).
7/31/2019 Cuaderno de Ejercicios de C
81/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 81
PARTE IVPRACTICAS PARA DESARROLLAR
7/31/2019 Cuaderno de Ejercicios de C
82/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 82
PRACTICA 7 Contando dinero
Desarrolla un programa que ira preguntando por la cantidad de billetes y monedas de cada valorque tiene el usuario y luego determinara la suma de dinero que hay en monedas y la suma que hayen billetes. El programa dira la suma total de dinero que tiene. Finalmente el programa dara al
usuario la posibiliad de transformar la cantidad de la moneda local a dolares o euros segn decidael usuario.
PRACTICA 8 Numeros
Desarrolla un programa donde el usuario introduzca tres numeros enteros y luego nos indique cualde ellos es el central o el de en medio.
PRACTICA 9 Numeros ordenados
Crea un programa donde el usuario introduzca tres numeros enteros y se orden de maneraascendete y a continuacion en orden descendente.
PRACTICA 10 Boletos
Desarrolla un programa que nos diga el precio de un boleto de ida y vuelta en autobus, conociendola distancia a recorrer y sabiendo que si el numero de dias de estancia es mayor o igual a 7, y ladistancia mayor o igual a 100 kilometros, el boleto tiene un descuento del 50%
PRACTICA 11 Conversiones metricas
Crea un programa que muestre un listado de unidades de medida y que pida al usuario indicar concual desea trabajar. Despues, se le pide que introduzca el valor de la unidad que selecciono yentonces el programa le dice el equivalente de ese valor en todas las otras unidades de medida. La
transformacion a equivalencia se hace entre estas cuatro unidades: metros, pulgadas, pies y yardas.
7/31/2019 Cuaderno de Ejercicios de C
83/93
[PROGRAMACION I C++ ] IDSystems 2011
CUADERNO DE EJERCICIOS Y PRACTICAS C++ Pgina 83
PRACTICAS DE VARIABLES, TIPOS DE DATOS, ASIGNACIONES,OPERADORES
PRACTICA 12 Rectangulo
Haga un programa que halle el area y el perimetro de un rectangulo. Considere las siguientesformulas: area = base * altura, perimetro = 2 * (base + altura).
PRACTICA 13 Pies
Disee un programa para convertir una longitud dada en centimetros a pies. Considere que: 1 pie =30.48 centimetros.
PRACTICA 14 Triangulo
Calcular el area de un triangulo, conociend