Prácticas de C++

Anuncio
Prácticas de C++
Practica Nº 3
Informática II
Fundamentos de Programación
Prof. Dr. Paul Bustamante
Practica Nº3 Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ........................................................................................................................................ 1
1. Introducción...................................................................................................................... 1
1.1
Ejercicio 1: Usando mi primer array .......................................................................... 1
1.2
Ejercicio 2: Pasando los límites al ejercicio anterior. ................................................ 2
1.3
Ejercicio 3: Calculando el Mayor y el Menor de un conjunto de números................ 2
1.4
Ejercicio 4: Ordenando un conjunto de números. ...................................................... 3
1.5
Ejercicio 5: Ordenar sin olvidar el desorden inicial................................................... 4
1.6
Ejercicio 6: Jugando con las “cadenas”...................................................................... 4
1.7
Ejercicio 7: Buscando palabras. ................................................................................. 5
1. Introducción.
Ha llegado el momento de empezar a trabajar con los Array’s, para lo cual se le dará
una pequeña introducción en el tema:
• Un array (también conocido como arreglo, vector o matriz) es una colección de
variables relacionadas a las que se hace referencia por medio de un nombre en común. Es un
modo de manejar una gran cantidad de datos del mismo tipo bajo un mismo nombre o
identificador.
• Su forma general es: tipo nombre[ tamaño ]
Ejemplo double datos[10] : En esta sentencia se reserva espacio para 10 variables de
tipo double, las cuales se van a manejar por medio del nombre datos y un índice, el
cual en C++ siempre empieza por “cero”.
• Los elementos se enumeran desde 0 hasta (n-1). Hay que tener mucho cuidado de no
sobre-pasar las dimensiones del array, en cuyo caso daría error el programa.
– Si queremos acceder al primer elemento del ejemplo anterior: datos[0]=2.5; Al
segundo: datos[1]=4.5; Y así sucesivamente hasta el último valor: datos[9]=3.5;
1.1 Ejercicio 1: Usando mi primer array
En este ejercicio vamos a generar una cantidad constante de números aleatorios entre dos
límites A y B dados por el usuario y los vamos a introducir en un array de doubles.
Sacaremos por la consola dichos números con sus correspondientes raíces cuadradas, para lo
cual usaremos algunos manipuladores vistos en clase:
#include <iostream.h>
#include <math.h>
//para sqrt()
#include <stdlib.h>
//para rand()
#include <iomanip.h>
#define NUM 15
void main()
{
double datos[NUM];
//array
double A,B;
//limites
cout << "Dar limite A y B:";
cin >> A >> B;
//generacion de numeros con For
for (int i=0;i<NUM;i++){
double x = (double)rand()/RAND_MAX; //entre 0 y 1
datos[i] = A + x * (B - A);
//entre A y B
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 2
}
//imprimir datos con While
i=0;
while(i<NUM){
cout << "Num:"<< setw(8) << setprecision(5) << datos[i];
cout << " Sqrt:"<< sqrt(datos[i]) << endl;
i++;
}
} //fin de main
1.2 Ejercicio 2: Pasando los límites al ejercicio anterior.
El objetivo de este ejercicio es hacerle una mejora al ejercicio anterior, la cual consiste en que
el programa sea capaz de detectar si se le han pasado los límites A y B a través de los
argumentos de main. En el caso en que no se le pasaran los argumentos, el programa debe
pedirlos. Y en caso de que sólo se le pasara un argumento, debe asumir que es el límite A y
debe pedir al usuario que ingrese el límite B.
Para el desarrollo de este ejercicio no es necesario que cree un proyecto ni fichero
nuevo, puede utilizar el del ejercicio 1.
1.3 Ejercicio 3: Calculando el Mayor y el Menor de un conjunto de números.
En este ejercicio vamos a hacer la versión 1.1 del ejercicio 6 de la práctica No. 2, en el que se
calculaba el mayor elemento de un conjunto de números enteros. En este caso, los datos serán
pedidos por el programa y se irán almacenando en un array.
El objetivo de este ejercicio es calcular no solo el mayor, sino también el menor
elemento de un grupo de números enteros. Todo esto lo haremos en un solo bucle.
Los pasos que debe seguir son:
1- Debe crear un array de datos de tipo int, para almacenar hasta 10 elementos. Por
ejemplo int datos[10];
2- Debe crear dos variables tipo int: iMax, iMin, en las cuales se almacenará el valor
máximo y el mínimo.
3- Si lo cree necesario, puede crear más variables temporales que le ayuden a hacer
los cálculos.
4- Luego debe pedir por teclado al usuario que introduzca los elementos, uno a uno, y
los debe ir almacenando en el array.
5- Es momento de hacer el algoritmo de calcular el máximo y mínimo.
6- Finalmente sacará por la consola todos los elementos, tal como han sido
introducidos y luego cual es el mayor, cuál es el menor del conjunto y sus
respectivas posiciones.
Este ejercicio tiene dos pasos, para lo cual debe generar un solo proyecto: Ejer3.
Para el primer paso debe generar un fichero MayMinFor.cpp en el que hará el programa,
según las indicaciones anteriores, sólo con sentencias For (donde deba usar los bucles).
El segundo paso es hacer lo mismo pero con la sentencia While o Do-While en lugar de for,
para lo cual hará otro fichero MayMinWhile.cpp.
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 3
1.4 Ejercicio 4: Ordenando un conjunto de números.
En este ejercicio vamos a ordenar un conjunto de números introducidos por el usuario, a
través del teclado.
Primero, el programa debe pedir al usuario de qué forma desea ordenarlos: ascendente
o descendente. Debe Ud. crear un proyecto nuevo Ejer4 y en él un fichero ordena.cpp, en el
que pondrá el siguiente código:
#include <iostream.h>
#define NUM 10
void main(void)
{
int dato[NUM];
bool ord=false;
//true:ascend false=descen.
char ch;
while(true){
cout << "\nOrdenar descendente (D) o Ascendente (A)?" ;
cout << flush;
//limpia buffer
cin >> ch;
//captura la tecla presionada
if (ch=='A' || ch=='a') { ord=true; break; }
else if (ch=='D' || ch=='d') { ord=false; break; }
else cout << "Error, no ha elegido bien.\n";
}
//introducir numeros
cout << endl;
for (int i=0;i<NUM;i++){
cout << "dame el dato[" << i << "]:";
cin >> dato[i];
}
//
algoritmo de ordenacion
for (i=0;i<NUM-1;i++){
for (int j=i+1;j<NUM;j++){
int a=dato[i];
int b=dato[j];
if ( a < b && !ord) {
// Descen
dato[i] = b;
dato[j] = a;
}
if ( a > b && ord){
//Ascend
dato[i] = b;
dato[j] = a;
}
}
}
//
imprime numeros ordenados
cout << "\nOrden elegido: " ;
ord? cout << "Ascend" : cout << "Descend"; //operador ternario
for ( i=0;i<NUM;i++){
cout << "\ndato[" << i << "]:" << dato[i];
}
cout << endl;
}
Una vez que le ha funcionado el programa y lo ha entendido por completo, deberá
reemplazar cada for por un while y cada while por un for. Esto lo hará en otro fichero
ordena1.cpp (podría copiar el código de un fichero a otro y hacer lo cambios oportunos, para
que no pierda tiempo en volver a escribirlo).
Debe tener en cuenta la forma en que se compara la tecla presionada, cuyo valor está
en la variable ch. También debe analizar la forma como utilizamos el operador ternario ( ? : ).
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 4
Para ordenar se usa un algoritmo sencillo, el llamado algoritmo de la burbuja que
procede de la siguiente manera: se van recorriendo uno a uno todos los elementos del vector,
desde el primero hasta el penúltimo (índice i). Cada uno de estos elementos se compara con el
de todos los elementos siguientes (índice j). Si se encuentra un elemento j con un valor menor
o mayor que i (según sea el caso) se intercambian dichos elementos, pues están desordenados
Así pues, para implementar este algoritmo son necesarios dos bucles: el primero, bucle
i, recorre el vector desde la posición i= 0 hasta i < NUM-1. El segundo bucle, bucle j, recorre
el vector desde la posición j= i+1 hasta el final.
1.5 Ejercicio 5: Ordenar sin olvidar el desorden inicial
Este ejercicio consiste en guardar los datos dados al inicio en el ejercicio anterior, con el fin
de mantener los datos desordenados, tal cual fueron introducidos.
Para este ejercicio puede utilizar el proyecto anterior, pero debe crear un nuevo fichero
Ordena2.cpp, en el cual va a copiar todo el código anterior. A partir de aquí empezará a hacer
las modificaciones.
Para desarrollar el ejercicio, debe crear otro array de enteros: int datoOld[NUM]; en
el cual debe copiar los datos introducidos al inicio. Recuerde que el algoritmo de ordenación
modifica el vector.
Finalmente, debe sacar por la consola los dos array’s: a la izquierda el inicial y a la
derecha el ordenado, tal como se ve en la siguiente figura:
Orden elegido: Ascendente
VecIni VecFin
dato[0]:
1
1
dato[1]:
5
2
dato[2]:
9
5
dato[3]:
2
9
dato[4]:
40
40
1.6 Ejercicio 6: Jugando con las “cadenas”.
En este ejercicio vamos a experimentar con algunas de las funciones utilizadas para el manejo
de las cadenas, como por ejemplo escribir una cadena al revés, escribirla en mayúsculas,
invertir las mayúsculas a minúsculas y viceversa.
Debe crear un proyecto nuevo Ejer6 y en él crear el fichero cadena.cpp, en el cual
escribirá el siguiente código:
// fichero cadena.cpp
#include <iostream.h>
#include <string.h>
#include <ctype.h>
void main(void)
{
char cadena[120];
//para strlen()
//para islower()
cout << "Escribe una frase:" << endl;
cin.getline(cadena,120);
int len = strlen(cadena);
cout << "Longitud de la cadena: " << len << endl;
//escribir la cadena al revés
cout << "Cadena al reves: " << endl << "\t";
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 5
int val=len;
//copia longitud
while(val--){
cout << cadena[val];
}
//convertir las May en Min y viceversa
cout << "\nConvertir de May a Min y viceversa:\n";
for (int i=0;i<len;i++){
if ( islower( cadena[i] )) { //es minuscula?
cout << (char)toupper(cadena[i]); //conv a may.
}else {
cout << (char)tolower(cadena[i]); //sino conv. a min.
}
}
cout << endl;
}
Dentro de las funciones utilizadas tenemos:
strlen( char* ): devuelve la longitud de la cadena, hasta encontrar el carácter nulo ‘\0’.
islower( char ): esta función devuelve un true si el carácter está en minúsculas.
toupper( char ): esta función convierte un carácter a mayúsculas.
tolower( char ): convierte a minúsculas.
No olvide poner siempre los ficheros de encabezado para poder usar estas funciones.
1.7 Ejercicio 7: Buscando palabras.
Dada su experiencia ya con el manejo de las cadenas, demostrada en el ejercicio anterior, en
este ejercicio debe hacer un programa que pida al usuario una frase y también que pida una
palabra para buscar dentro de dicha frase. El programa debe decirle en qué posición ha
encontrado dicha frase, en caso de haberla encontrado, sino deberá mostrar un mensaje
diciendo que no ha encontrado dicha palabra.
Por ejemplo:
Frase: Esta es una demostración del uso de las cadenas con el lenguaje C++
Palabra a buscar: uso
Resultado: Encontrada en la posición 30.
Informática II – Fundamentos de Programación - Tecnun
Descargar