Issuu on Google+

Laboratorio de Programación II. Grupo C

PRACTICA 1: ASPECTOS BÁSICOS DE C++(I) EJERCICIOS GUIADOS Ejercicio 1: Entrada/Salida básica(I). En este ejercicio se va a probar el flujo cout , que permite mostrar cadenas por pantalla. Para ello se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer00.bpr y el del programa será Ejer00.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución. #include <iostream.h> void main (void){ cout << "Hola futuro(a) programador de C++" << endl; cout << "Como estas?" << endl; } Para completar el ejercicio se va introducir el flujo cin, el cual permite leer tanto números como cadenas de caracteres, pero cuando encuentra blancos, tabuladores o espacios, termina de leer. Se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer01.bpr y el del programa será Ejer01.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución. #include <iostream.h> void main (void){ char nombre[30]; int edad; cout << "Hola! Como te llamas?"; cin >> nombre; cout << "Cuantos anyos tienes?"; cin >> edad; cout << "Hola " << nombre ; cout << ",tienes " << edad << " anyos" << endl; }

Ejercicio 2:Entrada/Salida(II) En este ejercicio se va a encriptar un texto dado por el usuario usando el operador XOR y la función getline del flujo cin, la cual toma todo lo escrito por el usuario, incluidos los espacios. Se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer02.bpr y el del programa será Ejer02.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución.Observar el uso de la función strlen(). #include <iostream.h> #include <string.h> //para strlen() void main() { int len; const int NUM=120; //num. maximo de caracteres. char texto[NUM],key; cout << "Escriba un texto:"; cin.getline(texto,120); cout << "Introduzca la clave para codificar (un digito):"; cin >> key; len=strlen(texto); cout << "\n\t*** texto Codificado ***\n"; for (int i=0;i<len;i++){

1


Laboratorio de Programación II. Grupo C texto[i] = texto[i] ^ key; //XOR } cout << texto << endl; cout << "\n\t*** texto DeCodificado ***\n"; for (i=0;i<len;i++){ texto[i] = texto[i] ^ key; } cout << texto << endl; }

Ejercicio 3: Expresiones aritméticas En este ejercicio se va a ilustrar el uso de expresiones aritméticas. Para ello se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer03.bpr y el del programa será Ejer03.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución. /* Un marathon tiene 26 millas y 385 yardas */ /* Calcula la distancia del marathon en Kilómetros */ /* Una milla tiene 1760 yardas */ #include <iostream.h> void main (void){ int millas,yardas; float kilometros; millas = 26; yardas = 385; /* fórmula de conversión */ kilometros = 1.609 * (millas + yardas / 1760); // salida de datos cout <<"Un marathon tiene "<< kilometros << " kilometros" << endl; } Después de realizar su ejecución se debe modificar el programa sustituyendo 1760 por 1760.0 en la línea que calcula el número de kilómetros, y volver a ejecutar. Reflexionar sobre el resultado que se obtiene ahora con la modificación.

Ejercicio 4: La función main Todos los argumentos que se le pasan al programa desde la línea de comandos (ventana del MS-DOS) se reciben en un array de caracteres, esto quiere decir que si pasamos un número, este es leído como una cadena de caracteres, con lo cual no se puede utilizar para hacer operaciones aritméticas. En este ejercicio se van a convertir esas cadenas de caracteres en números, enteros o reales. Para ello se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer04.bpr y el del programa será Ejer04.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución pasándole un número real como por ejemplo Ejer1 25.6 debiendo obtener como salida Numero de argumentos: 2 #include <iostream.h> void main(int num, char *cadena[]) { cout << "Numero de argumentos: " << num; } Como la variable num de la función main() almacena el número de argumentos, se pueden obtener los datos del argumento (char *cadena[]). En particular se va obtener la sqrt() del número pasado como argumento. Para ello se va utilizar la función atof(), definida en el fichero math.h, para realizar la conversión de caracteres a una variable numérica tipo double. Modifique el código anterior con:

#include <iostream.h>

2


Laboratorio de Programación II. Grupo C #include <math.h> //para atof y sqrt void main(int num, char *cadena[]) { if (num == 1 ){ cout << "Pasar un número real como parámetro" << endl; }else{ double valor = atof(cadena[1]); double res = sqrt(valor); cout << "Resultado: " << res << endl; } } Probar a ejecutar el programa sin pasarle argumentos, se obtendrá un mensaje.

Ejercicio 5:Bucle for(I) En este ejercicio se van a escribir distintos bucles for para sumar los enteros del 1 al 5.En la forma 1 se dejan en blanco las partes de inicialización y actualización del bucle for; el resultado es correcto porque dichas tareas se han incluido de otra forma. La forma 2 es completamente estándar. En la forma 3 todo se ha introducido en el paréntesis del bucle; en la inicialización se da valor inicial tanto a i como a suma; en la actualización se modifica también tanto i como suma. El resultado es que el bucle sólo necesita una sentencia vacía, representada por el punto y coma (;). La forma 4 es una variante de la forma 3. Se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer05.bpr y el del programa será Ejer05.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución. #include <iostream.h> void main(void) { int i=1, suma=0; for( ; i<=5; ) { // forma 1 suma += i; ++i; } cout << "suma 1 = " << suma << endl; suma=0; for(i=1; i<=5; ++i) // forma 2 suma += i; cout << "suma 2 = " << suma << endl; for(i=1, suma=0; i<=5; ++i, suma+=i) // forma 3 ; cout << "suma 3 = " << suma << endl; for(i=1, suma=0; i<=5; suma+=i, ++i) // forma 4 ; cout << "suma 4 = " << suma << endl; } Después de crear el proyecto, de compilar y de ejecutar este programa, observará que la forma 3 da un resultado diferente de las demás. ¿Sabrías explicar por qué? ¿Puedes corregirla?

Ejercicio 6:Bucle for(II) En este ejercicio se va a realizar un menú, desde el cual se pueden escoger distintas opciones. Para ello se va a usar un bucle for sin ningún parámetro que actúa como un bucle infinito, esto quiere decir que nunca terminará, por eso se termina el programa por medio de la función exit(0) aunque también se puede probar a utilizar la sentencia break para salir del bucle for.

3


Laboratorio de Programación II. Grupo C Se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer06.bpr y el del programa será Ejer06.cpp. A continuación se debe copiar el siguiente programa en el editor de código y realizar su ejecución. #include <iostream.h> #include <stdlib.h> //para system() y exit; void main(void) { int opcion; system("cls"); //borra la pantalla al inicio for(;;){ cout << "\tMi Menu" << endl; cout << "\t-------" << endl; cout << "1. Opcion 1" << endl; cout << "2. Opcion 2" << endl; cout << "3. Opcion 3" << endl; cout << "4. Opcion 4" << endl; cout << "5. Salir" << endl; //pedimos al usuario que escoja. cin >> opcion; //evaluamos la opcion escogida if (opcion==1) { cout << "\tHa elegido la opcion 1." << endl; }else if (opcion==2){ cout << "\tHa elegido la opcion 2." << endl; }else if (opcion==3){ cout << "\tHa elegido la opcion 3." << endl; }else if (opcion==4){ cout << "\tHa elegido la opcion 4." << endl; }else if (opcion==5){ cout << "Adios.." << endl; exit(0); //termina }else { cout << "Elija Bien..." << endl; } } }

Ejercicio 7:El if-else En este programa se va a resolver la ecuación de segundo grado según el valor de su discriminante. Para ello se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer07.bpr y el del programa será Ejer07.cpp. A continuación se debe copiar el siguiente programa en el editor de código, completar el código que aparece con puntos suspensivos y realizar su ejecución. #include <iostream.h> #include <math.h> //para sqrt() void main(void) { double a, b, c; double discr, x1, x2, xr, xi; cout << "Escribe los valores de los coeficientes A, B y C: "; cin >> a >> b >> c; discr = ... ; if (discr > 0.0) { x1= . . .; x2= . . .;

4


Laboratorio de Programación II. Grupo C cout << "Las dos raíces reales son: "; cout << x1 << " y " << x2 << endl; } else if (discr < 0.0) { xr= . . .; xi= . . .; cout << "Raices complejas: " << endl; cout << "(" << xr << ", " << xi << "i) y "; cout << "(" << xr << ", " << -xi << "i)" << endl; } else { x1= . . .; cout << "Las dos raíces son iguales y valen: " << x1 << endl; } } Para probar el código se pueden usar los siguientes valores: A B C Resultado 1 4 4 Raíces iguales 1 5 4 Raíces reales 1 3 6.25 Raíces imaginarias

EJERCICIOS PROPUESTOS Ejercicio 1 En este ejercicio se va a generar una serie de números aleatorios entre 0 y 1. La cantidad de números a generar tiene que se pasada como argumento al programa desde la consola como por ejemplo ejer2 10, para lo cual se utilizará la variable entera Num. La función rand() genera un número entero aleatorio entre 0 y 32767 y se encuentra en math.h y la función atoi(char *) convierte una cadena de caracteres en un número entero y se encuentra en stdlib.h . Usar la directiva #include para incluir tanto math.h como stdlib.h. Se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer08.bpr y el del programa será Ejer08.cpp. A continuación se debe copiar el siguiente programa en el editor de código, completar el código que aparece con puntos suspensivos y realizar su ejecución. ... int Num = atoi(cadena[1]); for (int i=0;i<Num;i++){ double val = rand()/32767.0; cout << "Numero: " << i+1 << " Valor:"<< val << endl; } ...

Ejercicio 2 En este programa se va a calcular el mayor elemento entre un conjunto de números enteros que son pasados como argumentos al programa. Para el cálculo se utiliza el siguiente algoritmo: se crea una variable llamada Max, a la que se da inicialmente el valor del primer elemento pasado como argumento, previamente convertido a entero por medio de la función atoi(). Luego se recorren paso a paso todos los otros valores, por medio de un bucle for. Usamos una variable temporal tmp para obtener el siguiente valor, convertido a entero, y lo comparamos con el valor de la variable Max. Si el nuevo valor es mayor que Max (o Max menor que tmp) entonces se copia este valor en la variable Max. De esta forma, una vez que hayamos recorrido todos los valores, la variable Max contendrá el máximo valor del conjunto, pues cada vez que se ha encontrado un valor mayor que Max, esta variable se ha cambiado a dicho valor. La variable iMax indica la posición del último valor copiado a Max. Al final, iMax indicará en qué posición estaba el mayor elemento. Se debe crear una aplicación de consola, de forma que el nombre del proyecto será Ejer09.bpr y el del programa será Ejer09.cpp. A continuación se debe copiar el siguiente programa en el editor de código, y realizar su ejecución pasándole varios números por ejemplo ejer6 10 15 4 22 18 34.

5


Laboratorio de Programación II. Grupo C

#include <iostream.h> #include <stdlib.h> //para atoi void main(int Num, char *cadena[]) { int iMax, Max; if (Num == 1) { cout << "Dar los numeros para hallar el mayor" << endl; exit(0); } iMax = 1; Max = atoi( cadena[1] ); for (int i=2; i<Num; i++){ int tmp = atoi( cadena[i] ); if ( Max < tmp ){ Max = tmp; //guarda el valor iMax = i; } } cout << "El mayor es: " << Max; cout << " En la Posicion:" << iMax << endl; } Basándose en el anterior programa se pide: a) Escribir un programa que permita calcular el menor de varios números reales pasados como argumentos. Llamar al proyecto Ejer09a.bpr y al programa Ejer09a.cpp b) Escribir un programa que permita dados un conjunto de números enteros, positivos y negativos, calcular el mayor en valor absoluto. Usar la función abs(int) que está definida en el fichero math.h. Esta función trabaja de la siguiente manera: int x1=-5, x2; x2 = abs(x1); cout <<”Valor absoluto de “ << x1 << “ es “ << x2; Llamar al proyecto Ejer09b.bpr y al programa Ejer09b.cpp. Probar a realizar la llamada ejer8 12 –25 4 16 10 , de forma que el resultado obtenido sea el número -25 o la posición 2.

Ejercicio 3 Realizar una aplicación de consola que imprima por la consola todos los argumentos que se le pasan desde la línea de comandos de la forma: Argumento 1: Valor: 10 Argumento 2: Valor: 13.5 Argumento 3: Valor: Mensaje Crear un nuevo proyecto Ejer10.bpr y el fichero Ejer10.cpp para realizar este ejercicio.

Ejercicio 4 Realizar una aplicación de consola que calcule el factorial de un número entero. El programa tiene que ver si el número al que se le va a calcular el factorial viene como argumento de main(), entonces hace el cálculo. Si no viene como argumento, el programa debe pedirle al usuario que ingrese el número por teclado y realizar el cálculo.

Ejercicio 5 Realizar una aplicación de consola que permita la conversión de euros, de forma que pregunte los euros que desea convertir y como salida devuelva cuantas pesetas y dólares son. Recordar que 1€ son 166.386 pesetas y

6


Laboratorio de Programación II. Grupo C aproximadamente 1.078 dólares. El nombre del proyecto debe ser Ejer12.bpr y al nombre del fichero fuente debe ser Ejer12.cpp.

Ejercicio 6

Realizar una aplicación de consola que permita realizar la conversión entre temperaturas de ºC ƺF y ºFƺC, según la siguiente fórmula: ºF = (9.0/5.0)* (ºC)+32.El programa debe pedir al usuario qué tipo de conversión debe hacer y luego el dato de la temperatura a convertir. Para este ejercicio debe crear un proyecto Ejer13.bpr y el nombre del programa será Ejer13.cpp.

Ejercicio 7 Realizar una aplicación de consola que muestre por pantalla el siguiente triángulo: 1 232 34543 4567654 567898765 67890109876 7890123210987 890123454321098 90123456765432109 0123456789876543210 El nombre del proyecto debe ser Ejer14.bpr y al nombre del fichero fuente debe ser Ejer14.cpp.

ENTREGA DE LOS EJERCICIOS La forma de entregar la práctica será a través de la asignatura virtualizada en el campus virtual. Para ello debes darte de alta en el campus virtual de la complutense, lo cual puedes realizar en la siguiente página www.ucm.es/campusvirtual, o bien puedes encontrar un enlace al mismo desde la página Web de la facultad. En dicha página podrás encontrar un formulario de Inscripción de alumnos, y es allí donde debes darte de alta. Una vez que te hayas dado de alta, y tengas acceso al campus virtual, entra en la asignatura de Laboratorio de Programación II con el usuario y password que te hayan proporcionado al registrarte. En la asignatura virtualizada verás una serie de enlaces, entre ellos, hay uno titulado como prácticas. Navega sobre dicho enlace, y verás que hay un grupo de trabajo creado denominado Práctica 1. Dicho grupo de trabajo tiene asociado una carpeta sobre la que puedes subir , eliminar o editar archivos(Accedes usando Editar Archivos). Allí verás que hay tres subcarpetas, una por cada laboratorio. Zippea el trabajo correspondiente, y dentro del zip incluye un archivo de texto en que aparezcan los nombres de los que formáis el grupo. Etiqueta el archivo zip con el nombre LabnApellidoApellido.zip. Por ejemplo si Juan Martínez Martin y Silvia Pérez García están en el laboratorio 1, y forman un grupo etiquetan su zip como Lab1MartinezPerez.zip. A continuación usa la opción cargar que hay en la parte derecha del área donde te encuentras, y te permitirá subir archivos desde tu disco duro. Almacénalo en la carpeta correspondiente al laboratorio al que perteneces. Como aún la mayoría de los alumnos no están registrados, tenéis de plazo para registraros y subir la correspondiente práctica 1 hasta este viernes día 29 de Octubre. Acabado el plazo no se podrán subir las prácticas, y se considerará como práctica no entregada. Si tienes alguna duda o problema sobre el procedimiento de entrega no dudes en preguntar.

7


c++