Sei sulla pagina 1di 5

Practica N3 Programacin en C++

Pg. 1

NDICE
NDICE ..................................................................................................................................................... 1
1. Introduccin. ................................................................................................................................. 1
1.1
Ejercicio 1: Usando mi primer array ...................................................................................... 1
1.2
Ejercicio 2: Pasando los lmites al ejercicio anterior.............................................................. 2
1.3
Ejercicio 3: Calculando el Mayor y el Menor de un conjunto de nmeros. ........................... 2
1.4
Ejercicio 4: Ordenando un conjunto de nmeros. .................................................................. 2
1.5
Ejercicio 5: Ordenar sin olvidar el desorden inicial ............................................................... 4
1.6
Ejercicio 6: Jugando con las cadenas.................................................................................. 4

1. Introduccin.
Ha llegado el momento de empezar a trabajar con los Arrays, para lo cual se le dar
una pequea introduccin en el tema:
Un array (tambin conocido como arreglo, vector o matriz) es una coleccin de
variables relacionadas a las que se hace referencia por medio de un nombre en comn. 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[ tamao ]
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 dara 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 nmeros aleatorios entre dos
lmites A y B dados por el usuario y los vamos a introducir en un array de doubles.
Sacaremos por la consola dichos nmeros con sus correspondientes races 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
}
//imprimir datos con While
Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 2

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 lmites 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 lmites A y B a travs 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 slo se le pasara un argumento, debe asumir que es el lmite A y
debe pedir al usuario que ingrese el lmite 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 nmeros.
En este ejercicio vamos a hacer la versin 1.1 del ejercicio 6 de la prctica No. 2, en el que se
calculaba el mayor elemento de un conjunto de nmeros enteros. En este caso, los datos sern
pedidos por el programa y se irn almacenando en un array.
El objetivo de este ejercicio es calcular no solo el mayor, sino tambin el menor
elemento de un grupo de nmeros 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
mximo y el mnimo.
3- Si lo cree necesario, puede crear ms variables temporales que le ayuden a hacer
los clculos.
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 mximo y mnimo.
6- Finalmente sacar por la consola todos los elementos, tal como han sido
introducidos y luego cual es el mayor, cul 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,
segn las indicaciones anteriores, slo 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.
1.4 Ejercicio 4: Ordenando un conjunto de nmeros.
En este ejercicio vamos a ordenar un conjunto de nmeros introducidos por el usuario, a
travs del teclado.
Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 3

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 cdigo:
#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 (podra copiar el cdigo 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. Tambin debe analizar la forma como utilizamos el operador ternario ( ? : ).
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 penltimo (ndice i). Cada uno de estos elementos se compara con el
Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 4

de todos los elementos siguientes (ndice j). Si se encuentra un elemento j con un valor menor
o mayor que i (segn sea el caso) se intercambian dichos elementos, pues estn desordenados
As pues, para implementar este algoritmo son necesarios dos bucles: el primero, bucle
i, recorre el vector desde la posicin i= 0 hasta i < NUM-1. El segundo bucle, bucle j, recorre
el vector desde la posicin 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 cdigo 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 ordenacin
modifica el vector.
Finalmente, debe sacar por la consola los dos arrays: 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 revs, escribirla en maysculas,
invertir las maysculas a minsculas y viceversa.
Debe crear un proyecto nuevo Ejer6 y en l crear el fichero cadena.cpp, en el cual
escribir el siguiente cdigo:
// 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 revs
cout << "Cadena al reves: " << endl << "\t";
int val=len;
//copia longitud
while(val--){
cout << cadena[val];
}

Informtica II Fundamentos de Programacin - Tecnun

Practica N3 Programacin en C++

Pg. 5

//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 carcter nulo \0.
islower( char ): esta funcin devuelve un true si el carcter est en minsculas.
toupper( char ): esta funcin convierte un carcter a maysculas.
tolower( char ): convierte a minsculas.
No olvide poner siempre los ficheros de encabezado para poder usar estas funciones.

Informtica II Fundamentos de Programacin - Tecnun

Potrebbero piacerti anche