ejerc con matrices

Upload: david-magne-mamani

Post on 07-Jul-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Ejerc Con MATRICES

    1/30

    Ejercicio 30:

    Dada las matrices A y B  con números enteros y positivos generados

    Randomicamente, de igual números de filas y columnas. Hacer el diagrama y elprograma que permita crear e imprimir la suma de las dos matrices, y el resultadoalmacenarlo en una nueva matriz llamada C. De esta manera estaríamossimulando la suma de matrices de n filas x n columnas.

    Solución:

    Miremos primero como se efectúa la suma de matrices. Supongamos que setienen las siguientes matrices A y B, que se muestran a continuación, yobservemos el proceso de la suma.

    Matriz A Matriz B Matriz C

    La suma se efectúa de la siguiente manera:

    C [1,1]=A [1,1]+B [1,1]=1+15= 16; C [1,2]=A [1,2]+B [1,2]=3+12= 15;

    C [1,3]=A [1,3]+B [1,3]=5+13= 18; C [1,4]=A [1,4]+B [1,4]=6+1= 7;

    Y así sucesivamente hasta terminar con las demás filas.

    Variables de entrada de datos

    f,c= Variables que identifican el numero de filas y de columnas de las matrices A yB.

    Variables de proceso

    A[i,j]=  Matriz que almacenara numeros enteros y positivos generados

    aleatoriamente, numeros comprendidos en un rango de 0 a 99.B[i,j]=  Matriz que almacenara numeros enteros y positivos generadosaleatoriamente, numeros comprendidos en un rango de 0 a 99.C[i,j]= Matriz que almacenara la suma de los numeros de las matrices A y B.i, j = Variables subíndices de las matrices A,B,C.num= Variable que almacena temporalmente el numero generado aleatoriamente.

    1 3 5 68 10 15 209 7 8 0

    15 12 13 12 3 4 56 7 8 9

    16 15 18 710 13 19 2515 14 16 9

    + =

  • 8/19/2019 Ejerc Con MATRICES

    2/30

     

      PRIMERA PARTE: Aplicación Consola

    Nuevamente nos dirigimos al menú Archivo, Nuevo, Proyecto. Al hacerlo nosmuestra la pantalla de nuevo proyecto, escogemos Visual C#, Aplicación consola,le damos el nombre al proyecto, en este caso “  suma_matrices_consola”, luegoaceptar, tal y como se muestra en la siguiente pantalla.

    Inicio

    MatrizC [i, j]

    i= 1, f

    C [i, j]=A [i, j]+B [i, j]

    f,c

     j= 1, c

    Fin

    Random num= Random

    A [f, c] =num (0, 99)B [f, c] =num (0, 99)

    A [f, c]

    B [f, c]

  • 8/19/2019 Ejerc Con MATRICES

    3/30

     

    Pantalla nuevo proyecto Visual csharp

    Después de esto tendremos la pantalla en donde podremos digitar el códigocorrespondiente para el ejercicio que estamos trabajando. La pantalla es lasiguiente.

    Pantalla proyecto suma_matrices_consola Visual csharpNos ubicamos dentro de las llaves que encierran al método static void Main(string[]args) y digitamos el siguiente codigo.

    int f,c; //Indican el numero de filas y columnas de las matrices

  • 8/19/2019 Ejerc Con MATRICES

    4/30

    int i, j; //Variables de los subindices de la matriz // Definimos las matricesint[,] A = new int[100, 100]; //Matriz A de cien posiciones

    int[,] B = new int[100, 100]; //Matriz B de cien posicionesint[,] C = new int[100, 100]; //Matriz C de cien posiciones

     //Definimos la semilla para la generacion de los numeros aleatoriosRandom num = new Random(DateTime.Now.Millisecond);

     //Definimos el titulo del proyectoConsole.Title = "Suma de Matrices en CSharp";Console.WriteLine("\n");

     //Ingresamos el numero de filas de las matricesConsole.Write("Ingrese el numero de filas: ");f = int.Parse(Console.ReadLine());

     //Ingresamos el numero de columnas de las matrices

    Console.Write("Ingrese el numero de columnas: ");c = int.Parse(Console.ReadLine());

     //Hacemos el llenado de la matriz A Randomicamentefor (i = 1; i

  • 8/19/2019 Ejerc Con MATRICES

    5/30

    Console.WriteLine("------------------------------" ); //Imprimimos la matriz Bfor (i = 1; i

  • 8/19/2019 Ejerc Con MATRICES

    6/30

     

    Pantalla proyecto suma_matrices_consola Visual csharp

    Pantalla proyecto suma_matrices_consola Visual csharp

  • 8/19/2019 Ejerc Con MATRICES

    7/30

    Ejercicio 31: 

    Con las mismas matrices del ejercicio anterior, desarrollaremos el proceso de

    multiplicar dos matrices y su resultado sera almacenado en otra matriz.

    Solucion:

    Veamos primero como se dearrolla el proceso de multiplicacion de matrices. Sibien es cierto que tiene algo de parecido a la suma, no es igual, el procedimientoes diferente, ademas debe existir un requisito especial, el cual consiste en que elnumero de columnas de la matriz A debe ser igual al numero de filas de la matrizB. Pasemos a ver como se veria esta situacion graficamente.

    Matriz A (3x3) Matriz B (3x4) Matriz C (3x4)

    Es decir que para sacar el resultado de la primera posición de la matriz C [1,1] sedebe hacer lo siguiente:

    C [i, k]=0; j=1;

    C [i, k] = C [i, k] + A [i, j] * B [j, k]

    C [1, 1] = 0 + 2 * 1=2

    J=2

    C [i, k] = C [i, k] + A [i, j] * B [j, k]

    C [1, 1] = 2 + 8 * 0=2

    J=3

    2 8 43 1 25 7 8

    1 4 0 30 2 2 10 8 1 2

    2 56 20 223 30 4 145 98 22 38

    X =

    . . .

    .

    .

    .Fila i matriz A

    Columna k matriz B

  • 8/19/2019 Ejerc Con MATRICES

    8/30

    C [i, k] = C [i, k] + A [i, j] * B [j, k]

    C [1, 1] = 2 + 4 * 0=2

    De esta manera se obtiene el primer termino de la matriz C [1,1].

    Para obtener el termino de la posición C [1,2], se hace exactamente igual solo quela operación se hace entra la misma fila de la matriz A con la segunda columna dela matriz B y así sucesivamente, hasta terminar de llenar la matriz C.

    Variables de entrada de datos

    fa= Variable que identifican el numero de filas de la matriz A.ca= Variable que identifican el numero de filas de la matriz A.

    fb= Variable que identifican el numero de filas de la matriz B.cb= Variable que identifican el numero de filas de la matriz B.

    Variables de proceso

    A[i,j]=  Matriz que almacenara numeros enteros y positivos generadosaleatoriamente, numeros comprendidos en un rango de 0 a 99.B[i,j]=  Matriz que almacenara numeros enteros y positivos generadosaleatoriamente, numeros comprendidos en un rango de 0 a 99.C[i,k]= Matriz que almacenara el resultado de la multiplicacion de la matriz A porla matriz B.

    i, j, k = Variables subíndices de las matrices A, B, C.num= Variable que almacena temporalmente el numero generado aleatoriamente.

  • 8/19/2019 Ejerc Con MATRICES

    9/30

     

      PRIMERA PARTE: Aplicación Consola

    Inicio

    MatrizC [i, j]

    i= 1, fa

    C [i, k] =C [i, k] + A [i, j]*B [j, k]

    fa, ca, fb, cb

    k= 1, cb

    Fin

    Random num= Random

    A [fa, ca] =num (0, 99)B [fb, cb] =num (0, 99)

    A [fa, ca]B [fb, cb]

    C [i, k]=0

     j= 1, ca

  • 8/19/2019 Ejerc Con MATRICES

    10/30

    Nuevamente nos dirigimos al menú Archivo, Nuevo, Proyecto. Al hacerlo nosmuestra la pantalla de nuevo proyecto, escogemos Visual C#, Aplicación consola,le damos el nombre al proyecto, en este caso “  producto_matrices_consola”,

    luego aceptar, tal y como se muestra en la siguiente pantalla.

    Pantalla nuevo proyecto Visual csharp

    Después de esto tendremos la pantalla en donde podremos digitar el códigocorrespondiente para el ejercicio que estamos trabajando. La pantalla es lasiguiente.

  • 8/19/2019 Ejerc Con MATRICES

    11/30

     

    Pantalla proyecto producto_matrices_consola Visual csharp

    Nos ubicamos dentro de las llaves que encierran al método static void Main(string[]args) y digitamos el siguiente codigo.

    int fa, fb, ca, cb; //Indican el numero de filas y columnas de las matrices A y Bint i, j, k; //Variables de los subindices de la matrices

     // Definimos las matricesint[,] A = new int[100, 100]; //Matriz A de cien posicionesint[,] B = new int[100, 100]; //Matriz B de cien posicionesint[,] C = new int[100, 100]; //Matriz C de cien posiciones

     //Definimos la semilla para la generacion de los numeros aleatoriosRandom num = new Random(DateTime.Now.Millisecond);

     //Definimos el titulo del proyectoConsole.Title = "Multiplicacion de Matrices en CSharp";Console.WriteLine("\n");

     //Ingresamos el numero de filas de la matriz AConsole.Write("Ingrese el numero de filas de la matriz A: ");

    fa = int.Parse(Console.ReadLine()); //Ingresamos el numero de columnas de la matriz AConsole.Write("Ingrese el numero de columnas de la matriz A: ");ca = int.Parse(Console.ReadLine());

     //Ingresamos el numero de filas de la matriz BConsole.Write("Ingrese el numero de filas de la matriz B: ");fb = int.Parse(Console.ReadLine());

     //Ingresamos el numero de columnas de la matriz BConsole.Write("Ingrese el numero de columnas de la matriz B: ");cb = int.Parse(Console.ReadLine());

  • 8/19/2019 Ejerc Con MATRICES

    12/30

     //Hacemos el llenado de la matriz A Randomicamentefor (i = 1; i

  • 8/19/2019 Ejerc Con MATRICES

    13/30

       //Incializamos la matriz C en ceroC[i, k] = 0;for (j = 1; j

  • 8/19/2019 Ejerc Con MATRICES

    14/30

     

    Pantalla proyecto producto_matrices_consola Visual csharp

    Ejercicio 32: 

    Hacer el diagrama y el programa, que permita leer una matriz A, de n filas por ncolumnas. Los datos de la matriz A, serán números enteros y positivos los cualesdeberán ser ingresados por el teclado. Después de ingresar los datos en la matrizA, se deberá crear una nueva matriz llamada transpuesta, la cual consiste enconvertir las filas en columnas y las columnas en filas de la matriz A. Pero mejorveamos gráficamente como es una matriz transpuesta.

    Matriz A (3x3) Matriz Transpuesta (3x3)

    Si observamos detenidamente la fila 1 (2, 8, 4), ahora es columna 1 (2, 8, 4), y lacolumna 1(2, 3, 5), ahora es fila 1(2, 3, 5), y así sucesivamente con las demásfilas y columnas. Veamos ahora como quedaría nuestro diagrama de flujo.

    Solución:

    Variables de entrada de datos

    n= Variable que identifican el orden de la matriz A.Variables de proceso

    A[i,j]= Matriz que almacenara numeros enteros y positivos digitados por el teclado.transpuesta[i,j]=  Matriz que almacenara el intercambio de filas por columnas ycolumnas por filas de la matriz A.

    2 8 43 1 25 7 8

    2 3 58 1 74 2 8

  • 8/19/2019 Ejerc Con MATRICES

    15/30

  • 8/19/2019 Ejerc Con MATRICES

    16/30

     

    Pantalla nuevo proyecto Visual csharp

    Después de esto tendremos la pantalla en donde podremos digitar el códigocorrespondiente para el ejercicio que estamos trabajando. La pantalla es lasiguiente.

    Pantalla proyecto matriz_transpuesta_consola Visual csharp

    Nos ubicamos dentro de las llaves que encierran al método static void Main(string[]args) y digitamos el siguiente codigo.int n; //Indican el orden de la matriz Aint i, j; //Variables de los subindices de la matrices

  • 8/19/2019 Ejerc Con MATRICES

    17/30

     // Definimos las matricesint[,] A = new int[100, 100]; //Matriz A de cien posicionesint[,] transpuesta = new int[100, 100]; //Matriz transpuesta de cien posiciones

     //Definimos el titulo del proyectoConsole.Title = "Matriz Transpuesta en CSharp";Console.WriteLine("\n");

     //Ingresamos el orden de la matriz AConsole.Write("Ingrese el orden de la matriz A: ");n = int.Parse(Console.ReadLine());

     //Leemos la matriz A desde el tecladoConsole.WriteLine("Ingrese los valores de la matriz A ");Console.WriteLine();for (i = 1; i

  • 8/19/2019 Ejerc Con MATRICES

    18/30

     for (j = 1; j

  • 8/19/2019 Ejerc Con MATRICES

    19/30

      Matriz Espiral

    Una matriz de n filas por n columnas, se puede llenar y recorrer de varias formas.

    En los siguientes ejercicios se tratara los casos existentes para una matriz en estecaso la llamada espiral envolvente. Pero mejor veamos gráficamente como serepresenta cada uno de los casos existentes.

      Matriz Espiral Envolvente caso 1

    Para este caso el llenado se hace de la siguiente manera, tal y como se muestraen la siguiente grafica.

    Ahora veamos cual seria el código que permitiría el llenado de esta matriz de nfilas por n columnas. Le recuerdo amigo lector que este tipo de matriz el llenado

    no se hace desde el teclado sino que se hace necesario que a través del softwarese haga el llenado respectivo.

    Console.Write("Digite el orden de la matriz:");n = int.Parse(Console.ReadLine());

     //Inicializamos las variables utilizadas en el llenado de la matrizz = i = 1;v = n * n;f = n;while (z < v)

    -- 1

    --

     8

  • 8/19/2019 Ejerc Con MATRICES

    20/30

    {for (x = i; x = i + 1; x--){espiral[x, i] = z;z++;

    } //Incrementamos la variable ii++; //Disminuimos la variable ff--;

    } //Cerramos el cilco while  //Imprimimos la matriz espiralConsole.WriteLine("\n");Console.WriteLine("\t\t CASO UNO");Console.WriteLine("---------------------------------------------------------" );for (x = 1; x

  • 8/19/2019 Ejerc Con MATRICES

    21/30

     

    Si observamos detenidamente el anterior código, se ha utilizado un ciclo while, ydentro de este ciclo encontramos cuatro ciclos for, que permite el llenado de lamatriz. Vemos que se utiliza una variable llamada z que controla la secuencia delos números, en este caso por tratarse de 6x6, significa que la variable z deberállegar hasta el numero 36, con la cual se generan los números de 1 a 36 que sonlos que se almacenan en la matriz. También vemos una variable f  que esinicializada con el mismo valor de n, el cual controla el alcance de los ciclos for.Vemos que también que existe una variable llamada v, que es inicializada con la

    multiplicación de nxn, para el caso de que n es igual a 6, entonces quiere decirque v inicializaría su valor en 36, lo cual permite controlar el ciclo while, es decirque mientras z  que se inicializa en uno y se va incrementado mediante laejecución de los ciclos for  sea menor a v  en este caso 36, se ejecuta el ciclowhile. También observamos que la variable i que se arranca en uno seincrementa al final de los ciclos for, y la variable f se disminuye. En general este elprocedimiento que se utiliza para los demás casos que veremos a continuación.

    Bucle foreach

    Existe esta sentencia de control de flujo, especialmente diseñada para este tipo de

    estructuras, donde se manejan listas de elementos, todos del mismo tipo. Foreachdepende de la definición previa de un arreglo de elementos del mismo tipo, loscuales puede recorrer individualmente sin conocer el tamaño, explícitamente(como se requiere en otras instrucciones, por ejemplo en el for).

    Usted amigo lector se preguntara por que estoy definiendo el bucle foreachdespués de haber visto el tema de array y no cuando vimos todos los buclesexistentes. Pues la razón es muy sencilla, el bucle foreach es utilizado pararecorrer grandes grupos de información o mejor colecciones, por esta razónconsidere que era mejor dejar este bucle para después de haber visto el concepto

  • 8/19/2019 Ejerc Con MATRICES

    22/30

    de array, aunque no quiere decir con esto que no se pueda utilizar en otro tipo desituación.

    Veamos ahora la sintaxis general del bucle foreach.

    foreach ( in ) {

    }

    Donde:

       es el tipo básico de los elementos contenidos en el arreglo.

       es el arreglo de elementos a revisar.    es un identificador de una variable local del foreach () que se

    usará para ver un elemento del arreglo en cada iteración.

    La colección que se recorre se especifica como una colección que en este caso,es un array. Cabe anotar que la variable de iteración es de solo lectura en lo querespecta al array. Por lo tanto, no se puede cambiar el contenido del arrayasignando un nuevo valor a la variable de iteración.

    Ahora veamos algunos ejemplos en donde se puede utilizar este bucle.

    Ejercicio 34:

    Se tiene un arreglo llamado enteros, que contiene números enteros previamentedefinidos al momento de declarar el array. Se desea conocer cuantos de estosnúmeros son pares y cuantos impares. Veamos el código para este ejercicio.

     //Definimos las variables contador par e impar;int par = 0, impar = 0;

     //Definimos y el array enterosint[] enteros = new int[] { 1, 2, 5, 7, 9, 12, 13, 15, 18, 20, 22, 25, 30 };

     //Definimos el titulo al proyecto

    Console.Title="Uso del Bucle foreach con Array"; //Efectuamos el recorrido del array mediante bucle foreachforeach (int i in enteros){

    if (i % 2 == 0)par++;

    elseimpar++;

    }Console.WriteLine("\n");

  • 8/19/2019 Ejerc Con MATRICES

    23/30

    Console.WriteLine("Array de enteros");Console.WriteLine();

     //Imprimimos el array enteros

    foreach (int i in enteros){Console.Write(" {0} ", i);

    }Console.WriteLine();

     //Ahora imprimamos cuantos son pares y cuantos imparesConsole.WriteLine("\n");Console.WriteLine("Hay {0}pares y {1} impares.", par, impar);Console.ReadLine();Al ejecutar este codigo, se obtendra la siguiente salida en pantalla, la cual semuestra a continuacion.

    Ahora analicemos el anterior código. Vemos que para recorrer la colección de

    números del array es mucho más sencillo que si lo hiciéramos utilizando el buclefor, debido a que solo se necesita la variable, en este caso i y el array llamadoenteros, y no se necesita conocer cuantos elementos tiene la colección. Tambiénse observa que al momento de imprimir el array es de gran utilidad este bucle,hace más sencilla la instrucción.

    Ejercicio 35:

    Se tiene un vector de 240 posiciones, el cual contiene los nombres de lospasajeros del avión de Avianca HK7000, que viaja de Bogota Colombia, condestino Madrid España. Hacer el diagrama y el programa que permita conocer e

    imprimir si cierto pasajero viaja en el avión y el número del asiento en el avión.

    Solución:

    El objetivo de este ejercicio es que mediante el bucle foreach y digitando elnombre del pasajero, se verifique si en realidad viaja o no en el avión y en quepuesto esta ubicado.

    Variables de entrada de datos

  • 8/19/2019 Ejerc Con MATRICES

    24/30

    pasajeros[i]=  Vector de 240 posiicones, que almacenara los nombres de laspersonas que viajan en el avion HK7000.nombre= Variable utilizada para leer el nombre del pasajero a buscar en el avion.

    Variables de proceso

    i, x = Variables subíndices del bucle for y foreach.puesto= Variable que almacenara el numero del asiento del pasajero encontradoen el avión.viaja= Variable booleana, que tomara el valor de verdadero “true” o falso“false” dependiendo si encontró o no el pasajero en el avión.

  • 8/19/2019 Ejerc Con MATRICES

    25/30

     Inicio

    i= 1, 240

    viaja =falso; puesto=0

    Vectorpasajeros[i]

    x, in pasajeros

    Fin

    nombre, “Viaja yesta ubicado en elpuesto:”, puesto

    viaja=verdadero

    nombre

    x=nombre

    viaja=verdadero

    SI

    SI

    NO

    NO

    nombre, “No viaja enel Avión.”

    puesto=puesto+1

  • 8/19/2019 Ejerc Con MATRICES

    26/30

    Si observamos detenidamente el diagrama, vemos que para conocer el numerodel puesto en donde se encuentra ubicado el pasajero encontrado en el vector, seutilizo una variable tipo contador llamada puesto, ¿por que contador?, esto es

    debido a que como el vector es tipo string, y el recorrido se hace con bucleforeach, no hay posibilidades de definir una variable tipo entera y asociarla a laposición del vector debido a que este es de tipo string, por ese motivo se definecomo entera y a su vez como contador.

      PRIMERA PARTE: Aplicación Consola

    Nuevamente nos dirigimos al menú Archivo, Nuevo, Proyecto. Al hacerlo nosmuestra la pantalla de nuevo proyecto, escogemos Visual C#, Aplicación consola,le damos el nombre al proyecto, en este caso “foreach_pasajeros_consola”,luego aceptar, tal y como se muestra en la siguiente pantalla.

    Pantalla nuevo proyecto Visual csharp

    Después de esto tendremos la pantalla en donde podremos digitar el códigocorrespondiente para el ejercicio que estamos trabajando. La pantalla es lasiguiente.

  • 8/19/2019 Ejerc Con MATRICES

    27/30

  • 8/19/2019 Ejerc Con MATRICES

    28/30

    Console.Write("Digite el nombre del pasajero a buscar en el avion: ");nombre=Console.ReadLine();Console.WriteLine();

     //Efectuamos el recorrido del array mediante bucle foreach //para hallar el pasajero y su respectivo puesto en el avionforeach (string x in pasajeros)

    {if (x ==nombre){viaja=true;break; //Fuerza a salir del bucle

    } //Incrementamos el contador para saber el puesto del pasajeropuesto++;

    } //Efectuamos la pregunta para saber si fue encontrado o no el pasajeroif (viaja ==true){Console.WriteLine("{0} es ocupante del Avion y se encuentra ubicada en elpuesto Nº. {1}",nombre, puesto);

    }elseConsole.WriteLine(" {0} No viaja en el Avion", nombre);Console.ReadLine();

    Ahora le damos Depurar, Iniciar depuración o F5, el cual nos permite ir a lapantalla en donde podremos digitar los nombres de los pasajeros que viajan en elavión y que son almacenados en el vector pasajeros, luego se digita el nombre delpasajero a buscar dentro del avión o mejor dentro del vector, para hacer la pruebadel ejercicio se hará con veinte pasajeros, igual debe funcionar para 240 pasajerosque es en realidad la capacidad que se tiene para el ejercicio. Las pantallas semuestran a continuación.

  • 8/19/2019 Ejerc Con MATRICES

    29/30

     

    Pantalla proyecto foreach_pasajeros_consola Visual csharp

    Pantalla proyecto foreach_pasajeros_consola Visual csharp

  • 8/19/2019 Ejerc Con MATRICES

    30/30

    Ejercicio 36:

    Hacer el diagrama y el programa que permita crear una matriz de cinco filas por

    cinco columnas, y hallar la suma de todos los elementos de la matriz. La matrizdeberá ser creada con números enteros tal y como se muestra a continuación enla siguiente grafica. Aclaro que la matriz no se debe llenar por le teclado, nitampoco de forma Aleatoria (Randomicamente). Veamos la grafica de la matriz.

    1 2 3 4 52 4 6 8 103 6 9 12 154 8 12 16 20

    5 10 15 20 25

    Columnas

    Filas