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