Acrobat Distiller, Job 8

Anuncio
C+ +
PRACTICA Nº2
Practica Nº2 Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ........................................................................................................................................0
1. Introducción. .....................................................................................................................1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
Ejercicio 1: Pasando argumentos a main(). .......................................................................................... 1
Ejercicio 2: Mi primer bucle FOR. ........................................................................................................ 2
Ejercicio 3: varias formas de utilizar el bucle for................................................................................. 2
Ejercicio 4: Sacando por consola todos los argumentos pasados a main()........................................... 3
Ejercicio 5: Mi primer menú. ............................................................................................................... 3
Ejercicio 6: Calculando el mayor de un conjunto de números enteros................................................. 4
Ejercicio 7: Calculando el menor de un conjunto de números enteros................................................. 5
Ejercicio 8: Calculando el mayor en valor absoluto de un conjunto de números enteros..................... 5
Ejercicio 9: Calcular el factorial.......................................................................................................... 5
1. Introducción.
Vamos a empezar con la segunda práctica de C++, y como recomendación general,
recuerda no utilizar caracteres extraños en los nombres de los directorios ni de los ficheros
que vas a generar. Tampoco utilices el espacio dentro de un nombre.
Recuerda que debes tratar de hacer todos los ejercicios. Si no lo logras en las 2 horas,
hazlo en otra hora que dispongas de un PC.
Os seguimos animando a que intentéis hacer vosotros mismos modificaciones y
variaciones, incluso hay veces que un mismo problema puede resolverse de varias maneras
diferentes que son igualmente correctas.
1.1 Ejercicio 1: Pasando argumentos a 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 vamos a ver cómo convertimos esas cadenas de caracteres en
números, enteros o reales.
Crea un proyecto Ejer1 y en él crea un fichero Ejer1.cpp. Agrega el siguiente código:
#include <iostream.h>
void main(int num, char *cadena[])
{
cout << "Numero de argumentos: " << num;
}
Compila este proyecto y ejecuta el programa desde la consola de comandos, pasándole
un número real:
G:\Info2> Ejer1 25.6
La salida que obtendrás será: Numero de argumentos: 2
Recuerda que también puedes ejecutar el programa desde el entorno, pero tienes que
pasarle los argumentos desde Projects -> Settings ->Debug -> Program Arguments.
Ahora que ya sabemos que en la variable num de la función main() viene el número
de argumentos, ya podemos obtener el argumento en cuestión, el cual viene en el siguiente
argumento (char *cadena[]).
Informática II – Fundamentos de Programación - Tecnun
Practica Nº2 Programación en C++
Pág. 2
Con el siguiente código vamos a obtener la sqrt() del número que nos han pasado
como argumento. No hace falta crear un nuevo proyecto, utiliza el mismo:
#include <iostream.h>
#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;
}
}
Se utiliza la función atof(), definida en el fichero math.h, para realizar la conversión
de caracteres a una variable numérica tipo double.
En la posición 1 del array (cadena[1]) viene el argumento 1, en la dos el siguiente y
así sucesivamente hasta num-1. Recuerda que esto es porque en C++ los índices empiezan en
cero.
Este programa detecta si no se le ha pasado ningún argumento desde la línea de
comando. Prueba a ejecutar el programa y no le pases argumentos, obtendrás un mensaje.
1.2 Ejercicio 2: Mi primer bucle FOR.
En este ejercicio vas a hacer tu primer bucle for. Para ello es necesario echar mano de
los apuntes dados esta semana para ver cuál es la forma general del bucle for.
Para este ejercicio, crea un proyecto nuevo Ejer2, con un fichero mi_for.cpp. Yo te
voy a dar el código del bucle for pero el código anterior tienes que ponerlo tú solo.
En el ejercicio se trata de 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, por ejemplo g:\Info2\>ejer2 10), para lo cual utilizarás la variable entera Num:
. . .
int Num = atoi(cadena[1]);
for (int i=0;i<Num;i++){
double val = rand()/32767.0;
cout << "Numero: " << i+1 << " Valor:"<< val << endl;
}
. . .
La función rand() ( utiliza math.h ) genera un número entero aleatorio entre 0 y 32767
y la función atoi(char *) convierte una cadena de caracteres en un número entero (es
necesario declarar el fichero stdlib.h al inicio del programa, usando la directiva #include del
preprocesador).
1.3 Ejercicio 3: varias formas de utilizar el bucle for.
En el siguiente programa se muestran distintas formas de escribir un bucle for para
sumar los enteros del 1 al 5. Crea un proyecto llamado Ejer3, teclea con el editor de Visual
C++ el siguiente programa y guárdalo con el nombre suma_for.cpp:
// fichero suma_for.cpp
#include <iostream.h>
void main(void)
{
int i=1, suma=0;
for( ; i<=5; ) {
// forma 1
suma += i;
Informática II – Fundamentos de Programación - Tecnun
Practica Nº2 Programación en C++
Pág. 3
++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)
;
cout << "suma 3 = " << suma << endl;
// forma 3
for(i=1, suma=0; i<=5; suma+=i, ++i)
;
cout << "suma 4 = " << suma << endl;
// forma 4
}
La suma de los 5 primeros números enteros se ha realizado de 4 formas distintas. En la
forma 1 se han dejado 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.
Después de crear el proyecto, de compilar y de ejecutar este programa, observarás que
la forma 3 da un resultado diferente de las demás. ¿Sabrías explicar por qué? ¿Puedes
corregirla? Puedes utilizar el debugger para que te ayude a encontrar el error.
1.4 Ejercicio 4: Sacando por consola todos los argumentos pasados a main().
Ahora que ya sabes hacer un bucle for, puedes hacer un programa que imprima por la
consola todos los argumentos que se le pasan desde la línea de comandos.
Crea un proyecto nuevo Ejer4 y en él crea ejer4.cpp. El programa que debes hacer
será ejer4.exe, el cual al ejecutarlo deberá sacar algo así:
Argumento 1: Valor: 10
Argumento 2: Valor: 13.5
Argumento 3: Valor: Mensaje
1.5 Ejercicio 5: Mi primer menú.
En este ejercicio vas a aprender a hacer un menú, desde el cual puedes escoger
distintas opciones. Lo vas a implementar utilizando sólo sentencias if-elseif y sentencias for.
Debes crear otro proyecto, Ejer5, y un fichero menu.cpp. El código es el siguiente:
// fichero menu.cpp
#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;
Informática II – Fundamentos de Programación - Tecnun
Practica Nº2 Programación en C++
Pág. 4
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."
}else if (opcion==2){
cout << "\tHa elegido la opcion 2."
}else if (opcion==3){
cout << "\tHa elegido la opcion 3."
}else if (opcion==4){
cout << "\tHa elegido la opcion 4."
}else if (opcion==5){
cout << "Adios.." << endl;
exit(0);
//termina
}else {
cout << "Elija Bien..." << endl;
}
<< endl;
<< endl;
<< endl;
<< endl;
}
}
Como podrás observar, el bucle for sin ningún parámetro se utiliza como un bucle
infinito, esto quiere decir que nunca terminará, por eso se termina el programa por medio de
la función exit(0). También puedes probar a utilizar la sentencia break para salir del bucle for.
En cada opción sólo se ha puesto una sentencia cout, pero podría ir allí todo el código
que se desearía ejecutar cuando se elija dicha opción.
1.6 Ejercicio 6: Calculando el mayor de un conjunto de números enteros.
Este programa calcula el mayor elemento entre un conjunto de números enteros que
son pasados como argumentos al programa. Cuando veamos la teoría sobre array’s podemos
hacer otra versión (la versión 1.1) que pida los números desde el teclado.
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.
Guarda este fichero con el nombre mayor.cpp (el proyecto correspondiente se deberá
llamar Ejer6):
// fichero mayor.cpp
#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;
Informática II – Fundamentos de Programación - Tecnun
Practica Nº2 Programación en C++
Pág. 5
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;
}
Compila el programa y ejecútalo desde la línea de comandos, pasándole varios
números: G:\info2\ejer6\>ejer6 10 15 4 22 18 34.
Sería útil que usaras el debugger para ver cómo van cambiando los valores de las
variables i, Max, tmp e iMax.
1.7 Ejercicio 7: Calculando el menor de un conjunto de números enteros.
Crea un proyecto Ejer7 y en él un fichero menor.cpp que permita calcular el menor de
varios números reales pasados como argumentos. Básate en el programa anterior para
hacerlo.
1.8 Ejercicio 8: Calculando el mayor en valor absoluto de un conjunto de
números enteros.
Para hacer este ejercicio te puedes basar en el ejercicio 6, el que calcula el mayor de
un conjunto de número enteros. Para calcular el valor absoluto de un número se utiliza 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;
Compila el proyecto Ejer8 y pásale unos números enteros, positivos y negativos.
Tendrá que hallar el mayor en valor absoluto y la posición en la que se encuentra:
G:\infor2\ejer8\ejer8 12 –25 4 16 10
El resultado tiene que ser 25 en la posición 2;
1.9 Ejercicio 9: Calcular el factorial
Este ejercicio consiste en calcular 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. Sino viene como argumento, el programa debe pedirle al usuario que
ingrese el número por teclado y realizar el cálculo.
Crea un nuevo proyecto Ejer9 y en él crea un fichero factorial.cpp para realizar este
ejercicio.
NOTA: Si no has llegado hasta aquí, debes tratar de hacerlo en casa o en otras horas libres...
Informática II – Fundamentos de Programación - Tecnun
Descargar