Prácticas de C++ Practica Nº 4 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante Practica Nº4 Programación en C++ Pág. 1 ÍNDICE ÍNDICE ........................................................................................................................................ 1 1. Introducción...................................................................................................................... 1 1.1 Ejercicio 1: Números capicúas................................................................................... 1 1.2 Ejercicio 2: Producto de vector por matriz................................................................. 1 1.3 Ejercicio 3: Producto de matriz por matriz. ............................................................... 2 1.4 Ejercicio 4: Resolución de un sistema lineal de 2 ecuaciones. .................................. 3 1. Introducción. El ejercicio 1 es el explicado en clase. No se ha puesto el código para que Ud. trate de realizarlo solo, según los apuntes tomados en clase En los ejercicios siguientes, si se da el código, pero, como en otras ocasiones, le recomiendo que no se dedique sólo a escribir el código y ejecutar los programas, sino que trate de entenderlos. 1.1 Ejercicio 1: Números capicúas. Este ejercicio consiste en hallar los números capicúas de 3 y 4 cifras. Recordar que un número es capicúa cuando al leerlo por la izquierda es igual que al leerlo por la derecha, por ejemplo el 1331. Deben convertir el dato numérico en una cadena de caracteres, para así poder invertir el número, para lo cual se puede usar la función sprintf, que tiene la siguiente forma: char tmp[20]; int num; . . . sprintf(tmp,”%d”,num); //convierte el valor de num en una cadena Esta función se encuentra definida en el fichero stdio.h. 1.2 Ejercicio 2: Producto de vector por matriz. Para que no deje sin explotar todas las posibilidades de los bucles for, le proponemos este sencillo programa que multiplica un vector por una matriz (en este orden). La fórmula utilizada para realizar el producto matricial y = x*A ha sido la siguiente: n −1 bi = ∑ x j * a ji j =0 Escriba el siguiente programa y guárdelo como VxMatriz.cpp (no se olvide de crear el proyecto Ejer2): // fichero vxmatriz.cpp #include <iostream.h> #include <iomanip.h> void main () { int int int int vector[100]; matriz[100][100]; resultado[100]; colV, colM, dato; cout << "Introduce el numero de columnas del vector: "; cin >> colV; cout << "Introduce el numero de columnas de la matriz: "; cin >> colM; Informática II – Fundamentos de Programación - Tecnun Practica Nº4 Programación en C++ Pág. 2 cout << "Introduce valores para el vector: "; for (int i=0; i<colV; i++) cin >> vector[i]; for (i=0; i<colV; i++) { cout << "Introduce valores para la fila " << i << ": "; for (int j=0; j<colM; j++) cin >> matriz[i][j]; } cout << "\nEl vector es: "<<endl; for (i=0; i<colV; i++) cout << vector[i] << " "; cout << "\nLa matriz es: "<<endl; for (i=0; i<colV; i++) { for (int j=0; j<colM; j++) { cout << setw(3) << matriz[i][j] << " "; } cout << endl; } for (i=0; i<colM; i++) { dato = 0; for (int j=0; j<colV; j++) { dato = dato + vector[j]*matriz[j][i]; } resultado[i] = dato; } cout << "\nEl resultado es: "<< endl; for (i=0; i<colM; i++) cout << resultado[i] << " "; cout << endl; } 1.3 Ejercicio 3: Producto de matriz por matriz. Basándose en el producto de vector por matriz anterior, realice un proyecto llamado Ejer3 que contenga un programa que multiplique dos matrices A y B de cualquier tamaño; llámelo matxmat.cpp. Recordemos la fórmula para multiplicar dos matrices: n C = A* B => cij = ∑ aik ⋅ bkj k =1 ,donde i = 1...n, j = 1,..., n Como se puede observar en la fórmula, intervienen 3 índices i,j,k, lo cual se traduce en que necesitaremos tres bucles for para realizar dicha operación. Pasos a seguir: 1- Debe crear tres matrices de 10x10 (A, B y C), para tener espacio suficiente para realizar las operaciones. 2- Pedir por teclado las dimensiones de la matriz A (filas y columnas). Debe 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 debe comprobar que no sea mayor que la memoria reservada. Informática II – Fundamentos de Programación - Tecnun Practica Nº4 Programación en C++ Pág. 3 4- Realizar la multiplicación, como en el ejemplo anterior, en sendos bucles for anidados (en este caso hacen falta 3 bucles for). Ir almacenando el resultado en la matriz C. 5- Finalmente debe sacar por consola: a. La matriz A y la matriz B con sus respectivos formatos (usar setw() ). b. La matriz resultante C, también formateada. 1.4 Ejercicio 4: Resolución de un sistema lineal de 2 ecuaciones. El ejercicio a realizar en este apartado debe permitir resolver un sistema lineal de 2 ecuaciones del tipo: a11 X + a12Y = b1 a 21 X + a 22Y = b2 Donde el determinante viene dado por: det = a11 a12 a 21 a 22 = a11 a 22 − a 21 a12 Y los valores de las variables vienen dados por las siguientes expresiones: a11b1 b1 a12 x= b2 a 22 det ;y = a 21b2 det Crear el proyecto Ejer4 y el fichero Ecua2.cpp para escribir el código. Pasos a seguir para programar este ejercicio: a. Crear una matriz para albergar los coeficientes a11, a12, etc. b. Crear un vector para albergar los términos independientes b1 y b2. c. Pedir los datos al usuario. d. Realizar los cálculos (verificar que el determinante no es cero). e. Imprimir la matriz del determinante (con formato), así como su valor. f. Imprimir la solución (x e y). En la figura anterior se puede apreciar lo que debe salir por la consola. También cuando el usuario pide los datos de la matriz y del vector (caracterizado por el ?: en el mensaje). Informática II – Fundamentos de Programación - Tecnun