Acrobat Distiller, Job 11

Anuncio
C++
PRACTICA Nº3
Practica Nº3 Programación en C++
Pág. 1
ÍNDICE
ÍNDICE ........................................................................................................................................0
1. Introducción. .....................................................................................................................1
1.1
1.2
1.3
1.4
1.5
Ejercicio 1: Calculando el Mayor y el Menor de un conjunto de números. ......................................... 1
Ejercicio 2: Ordenando un conjunto de números. ................................................................................ 1
Ejercicio 3: Jugando con las “cadenas”. ............................................................................................... 3
Ejercicio 4: Producto de matriz por vector........................................................................................... 3
Ejercicio 5: Producto de matriz por vector........................................................................................... 4
1. Introducción.
Ha llegado el momento de que empieces a pensar en cómo se hace un programa. Para
el primer ejercicio no te voy a dar el código, ya que hemos hecho algo parecido en varios
ejercicios anteriores.
Los ejercicios 2,3 y 4 si tienen código. Como en otras ocasiones, te recomiendo que no
te dediques sólo a escribir el código y ejecutar los programas, sino que trates de entenderlos.
Para realizar el ejercicio 5 te puedes basar en el código del ejercicio 4.
1.1 Ejercicio 1: 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.
Lo que se pretende conseguir con 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 debes seguir son:
1- Debes crear un array de datos de tipo int, para almacenar hasta 10 elementos. Por
ejemplo int datos[10];
2- Debes crear dos variables tipo int: iMax, iMin, en las cuales almacenarás el valor
máximo y el mínimo.
3- Si necesitas puedes crear más variables temporales que te ayuden a hacer los
cálculos.
4- Luego debes pedir por teclado al usuario que introduzca los elementos, uno a uno.
5- Finalmente sacarás por la consola todos los elementos, tal como han sido
introducidos y luego cual es el mayor y cuál es el menor del conjunto.
Este ejercicio tiene dos pasos, para lo cual debes generar un solo proyecto: Ejer1.
Para el primer paso debes generar un fichero MayFor.cpp en el que harás el programa, según
las indicaciones anteriores, sólo con sentencias For (donde debas 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ás otro fichero MayWhile.cpp.
1.2 Ejercicio 2: 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.
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 2
Primero, el programa debe pedir al usuario de qué forma desea ordenarlos: ascendente
o descendente. Debes crear un proyecto nuevo Ejer2 y en él un fichero ordena.cpp., en el que
pondrás el siguiente código:
#include <iostream.h>
#include <conio.h>
//para getch()
#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
ch = getch();
//captura la tecla presionada
if ( ch=='a' || ch=='A' ) { ord=true; break; }
if ( ch=='d' || ch=='D') { ord=false; break; }
}
//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 te ha funcionado el programa y lo has entendido por completo, deberás
reemplazar cada for por un while y cada while por un for. Esto lo harás en otro fichero
ordena1.cpp (podrías copiar el código de un fichero a otro y hacer lo cambios oportunos, para
que no pierdas tiempo en volver a escribirlo).
Tener en cuenta la utilización de getch(). Esta función captura la tecla que ha sido
presionada y deposita el valor en la variable ch. También debes 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 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
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 3
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.3 Ejercicio 3: 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.
Debes crear un proyecto Ejer3 y en él crear el fichero cadena.cpp, en el cual escribirás
el siguiente código:
// fichero cadena.cpp
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main(void)
{
char cadena[120];
//para gets()
//para strlen()
//para islower()
cout << "Escribe una frase:" << endl;
gets(cadena);
int len = strlen(cadena);
cout << "Longitud de la cadena: " << len << endl;
//escribir la cadena al revés
cout << "Cadena al reves: " << endl << "\t";
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 as funciones utilizadas tenemos:
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 olvides poner siempre los ficheros de encabezado para poder usar estas funciones.
1.4 Ejercicio 4: Producto de matriz por vector.
Para que no dejes sin explotar todas las posibilidades de los bucles for, te proponemos este
sencillo programa que multiplica una matriz por un vector (en este orden). La fórmula
utilizada para realizar el producto matricial y=Ax ha sido la siguiente:
n
bi = ∑ aij x j
j =1
Informática II – Fundamentos de Programación - Tecnun
Practica Nº3 Programación en C++
Pág. 4
Escribe el siguiente programa y guárdalo como vmatriz.cpp (no te olvides de crear el
proyecto Ejer4):
// fichero vmatriz.cpp
#include <iostream.h>
#define SIZE 2
void main(void)
{
double matriz[SIZE][SIZE];
double vector[SIZE];
double solucion[SIZE];
double sum;
// lectura de la matriz
cout << "Introduzca los datos de la matriz:\n";
for(int i=0; i<SIZE; i++) {
for(int j=0; j<SIZE; j++) {
cout << "Elemento ("<< (i+1) << "," << (j+1) << "): ";
cin >> matriz[i][j];
}
}
// lectura del vector
cout << "\n\nIntroduzca los datos del vector:\n";
for( i= 0; i < SIZE; i++) {
cout << "Elemento " << (i+1) << ": ";
cin >> vector[i];
}
// producto de matriz por vector
for(i=0; i<SIZE; i++) {
sum=0.0;
for(int j=0; j<SIZE; j++) {
sum+=matriz[i][j]*vector[j];
}
solucion[i]=sum;
}
// escritura del vector resultado
cout << "\nEl vector solucion es:\n";
for(i=0; i<SIZE; i++) {
cout <<"Elemento "<< (i+1) << "= " << solucion[i] << endl;
}
}
1.5 Ejercicio 5: Producto de matriz por vector.
Basándote en el producto de matriz por vector anterior, realiza un proyecto llamado Ejer5 que
contenga un programa que multiplique dos matrices A y B de cualquier tamaño; llámalo
matxmat.cpp.
Pasos a seguir:
1- Debes crear dos matrices de 10x10, para tener espacio suficiente para realizar las
operaciones.
2- Pedir por teclado las dimensiones de la matriz A (filas y columnas). Debes
comprobar de no sobrepasar el límite reservado (10 en nuestro caso).
3- Pedir por teclado sólo las columnas de la matriz B, ya que las filas tienen que ser
igual a las columnas de A para la multiplicación. También debes comprobar que
no sea mayor que la memoria reservada.
4- Realizar la multiplicación, como en el ejemplo anterior, en dos bucles for
anidados.
5- Finalmente debes sacar por consola :
a. Las dimensiones de la matriz resultante.
b. Los datos de la matriz resultante.
Informática II – Fundamentos de Programación - Tecnun
Descargar