Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arreglos (Tablas) - Practica A
Arreglos (Tablas) - Practica A
Requisitos previos
Antes de realizar la prctica debe estar familiarizado con los siguientes temas: Uso de instrucciones de programacin en C#. Creacin y uso de mtodos en C#.
Tablas
static void Main(string[ ] args) { Console.WriteLine(args.Length); foreach (string arg in args) { Console.WriteLine(arg); } }
5. Compile el programa FileDetails.cs y corrija los posibles errores. Ejecute el programa desde la lnea de comandos sin utilizar ningn argumento. Compruebe que la longitud de args es cero. Consejo Para ejecutar el programa desde la lnea de comandos, abra la ventana Command y vaya a la carpeta bin\Debug dentro de la carpeta el proyecto, donde estar el archivo ejecutable. 6. Ejecute el programa desde la lnea de comandos con el nombre del archivo Solution\FileDetails\FileDetails.cs dentro del fichero lab06.zip. Compruebe que el runtime pasa el nombre del archivo a Main. 7. Pruebe el programa con distintos argumentos de lnea de comandos y compruebe que todos los argumentos se escriben en la consola. Marque como comentarios las instrucciones que escriben en la consola. 8. Aada a Main una instruccin que declare una variable string llamada (fileName) nombreArchivo e inicialcela con args[0].
Tablas
Cmo leer del archivo de texto a una tabla 9. Quite las marcas de comentarios del cdigo de declaracin e inicializacin de FileStream y StreamReader. 10. Determine la longitud del archivo de texto. Consejo Para encontrar una propiedad adecuada de la clase Stream, busque clase Stream en los documentos de ayuda del SDK de Microsoft .NET Framework. 11. Aada a Main una instruccin que declare una variable de cadena de caracteres llamada contenidos (contents). Inicialice contenidos con una nueva tabla cuya longitud sea igual a la longitud del archivo de texto, que acaba de calcular. 12. Aada a Main una instruccin for. El cuerpo de la instruccin for leer un solo carcter de reader y lo aadir a contenidos. Consejo Use el mtodo Read, que no recibe ningn parmetro y devuelve un int. Convierta el resultado en char antes de almacenarlo en la tabla. 13. Aada a Main una instruccin foreach que escriba carcter por carcter toda la cadena de caracteres en la consola. Esta instruccin comprobar que el archivo de texto se ha ledo correctamente en la tabla contenidos. El cdigo completo debera ser como ste:
static void Main(string[ ] args) { string fileName = args[0]; FileStream stream = new FileStream(fileName, FileMode.Open); StreamReader reader = new StreamReader(stream); int size = (int)stream.Length; char[ ] contents = new char[size]; for (int i = 0; i < size; i++) { contents [i] = (char)reader.Read( ); } foreach(char ch in contents) { Console.Write(ch); } }
14. Compile el programa y corrija los posibles errores. Ejecute el programa con el nombre del archivo Solution\FileDetails\FileDetails.cs dentro del fichero lab06.zip como argumento de lnea de comandos. Compruebe que los contenidos del archivo se escriben correctamente en la consola. 15. Marque como comentario la instruccin foreach. 16. Cierre el objeto Reader con una llamada al mtodo StreamReader correspondiente.
Tablas
Cmo clasificar y resumir los contenidos del archivo 17. Declare un nuevo mtodo static llamado Summarize en la clase FileDetails. Este mtodo no devolver nada y esperar un parmetro de cadena de caracteres. Aada a Main una instruccin que haga una llamada al mtodo Summarize, pasando contenidos como argumento. 18. Aada a Summarize una instruccin foreach que inspeccione cada carcter en el argumento de tabla. Cuente el nmero de caracteres de vocal, consonante y nueva lnea, y almacene los resultados en variables distintas. Consejo Para determinar si un carcter es una vocal, cree una cadena de caracteres con todas las vocales posibles y use sobre ella el mtodo IndexOf para ver si el carcter existe en esa cadena de caracteres:
if ("AEIOUaeiou".IndexOf(myCharacter) != -1) { // myCharacter es una vocal } else { // myCharacter no es una vocal }
19. Escriba en la consola cuatro lneas que indiquen: El nmero total de caracteres en el archivo. El nmero total de vocales en el archivo. El nmero total de consonantes en el archivo. El nmero total de lneas en el archivo. El cdigo completo debera ser como ste:
static void Summarize (char[ ] contents) { int vocales = 0, consonantes = 0, lines = 0; foreach (char actual in contents) { if (Char.IsLetter(current)) { if ("AEIOUaeiou".IndexOf(current) != vowels ++; } else { consonants++; } } else if (actual == '\n') { lines++; } } Console.WriteLine("Nm total de caracteres : contenidos.Length); Console.WriteLine("Nm total de vocales : vocales); Console.WriteLine("Nm total de consonantes: consonantes); Console.WriteLine("Nm total de lneas : lineas); }
-1) {
Tablas
20. Compile el programa y corrija los posibles errores. Ejecute el programa desde la lnea de comandos para resumir los contenidos del archivo Solution\FileDetails\FileDetails.cs dentro del fichero lab06.zip. El resultado correcto es el siguiente: 1.353 caracteres 247 vocales 394 consonantes 41 lneas
Tablas
Cmo multiplicar dos matrices Abra el proyecto MatrixMultiply.sln en la carpeta Starter\MatrixMultiply dentro del fichero lab06.zip. En la clase MatrixMultiply, aada a Main una instruccin que declare una tabla 2 x 2 de ints y la llame a. La solucin final para el programa leer los valores de a desde la consola. Por el momento, inicialice a con los valores enteros de la siguiente tabla (esto permitir comprobar que la multiplicacin se realiza correctamente y que los cambios subsiguientes no hacen variar el comportamiento del programa): 1 3 2 4
3. Aada a Main una instruccin que declare una tabla 2 x 2 de ints y la llame b. La solucin final para el programa leer los valores de b desde la consola. Por el momento, inicialice b con los valores enteros de la siguiente tabla: 5 7 6 8
o Aada a Main una instruccin que declare una tabla 2 x 2 de ints y la llame result. Inicialice result utilizando las siguientes frmulas: a[0,0] * b[0,0] + a[0,1] * b[1,0] a[1,0] * b[0,0] + a[1,1] * b[1,0] a[0,0] * b[0,1] + a[0,1] * b[1,1] a[1,0] * b[0,1] + a[1,1] * b[1,1]
Tablas
o Aada a Main cuatro instrucciones que escriban en la consola los cuatro valores int de result. Estas instrucciones le ayudarn a comprobar que ha copiado las frmulas correctamente. El cdigo completo debera ser como ste:
static void Main( ) { int[,] a = new int[2,2]; a[0,0] = 1; a[0,1] = 2; a[1,0] = 3; a[1,1] = 4; int[,] b = new int[2,2]; b[0,0] = 5; b[0,1] = 6; b[1,0] = 7; b[1,1] = 8; int[,] result result result result result = new int[2,2]; [0,0]=a[0,0]*b[0,0] + a[0,1]*b[1,0]; [0,1]=a[0,0]*b[0,1] + a[0,1]*b[1,1]; [1,0]=a[1,0]*b[0,0] + a[1,1]*b[1,0]; [1,1]=a[1,0]*b[0,1] + a[1,1]*b[1,1]; [0,0]); [0,1]); [1,0]); [1,1]);
6. Compile el programa y corrija los posibles errores. Ejecute el programa y compruebe que los cuatro valores de result son los siguientes: 19 43 22 50
Cmo mostrar el resultado usando un mtodo con un parmetro de tabla 1. Declare un nuevo mtodo static llamado Output (Salida) en la clase MatrixMultiply. Este mtodo no devolver nada y esperar como parmetro una tabla int de rango 2 llamada result. 2. Corte de Main las cuatro instrucciones que escriben en la consola los cuatro valores de result y pguelas en Output. 3. Aada a Main una instruccin que llame al mtodo Output, pasando result como argumento (este cdigo debe ir en el lugar que ocupaban las cuatro instrucciones cortadas en el paso anterior). El cdigo completo debera ser como ste:
static void Output(int[,] result) { Console.WriteLine(result [0,0]); Console.WriteLine(result [0,1]); Console.WriteLine(result [1,0]); Console.WriteLine(result [1,1]); }
Tablas
4. Compile el programa y corrija los posibles errores. Ejecute el programa y compruebe que los cuatro valores escritos en la consola siguen siendo: 19 43 22 50
5. Cambie el mtodo Salida para que utilice dos instrucciones for anidadas en lugar de cuatro instrucciones WriteLine. Use el valor literal 2 en las comprobaciones de lmites de las tablas. El cdigo completo debera ser como ste:
static void Output(int[,] result) { for (int r = 0; r < 2; r++) { for (int c = 0; c < 2; c++) { Console.Write("{0} ", result[r,c]); } Console.WriteLine( ); } }
6. Compile el programa y corrija los posibles errores. Ejecute el programa y compruebe que los cuatro valores escritos en la consola siguen siendo: 19 43 7. 22 50
Vuelva a modificar el mtodo Output para hacerlo ms genrico. Sustituya el valor literal 2 en las comprobaciones de lmites de las tablas por llamadas al mtodo GetLength. El cdigo completo debera ser como ste:
static void Output(int[,] result) { for (int r = 0; r < result.GetLength(0); r++) { for (int c = 0; c < result.GetLength(1); c++) { Console.Write("{0} ", result [r,c]); } Console.WriteLine( ); } }
8. Compile el programa y corrija los posibles errores. Ejecute el programa y compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
Tablas
Cmo calcular el resultado en un mtodo y devolverlo 21. Declare un nuevo mtodo static llamado Multiply en la clase MatrixMultiply. Este mtodo devolver una tabla int de rango 2 y esperar como parmetros dos tablas int de rango 2 llamadas a y b. 22. Copie (sin cortar) de Main a Multiply la declaracin e inicializacin de result. 23. Aada a Multiply una instruccin return que devuelva result 24. Sustituya la inicializacin de result en Main por una llamada a Multiply, pasando a y b como argumentos. El cdigo completo debera ser como ste:
static int[,] Multiply(int[,] a, int [,] b) { int[,] result = new int[2,2]; result [0,0]=a[0,0]*b[0,0] + a[0,1]*b[1,0]; result [0,1]=a[0,0]*b[0,1] + a[0,1]*b[1,1]; result [1,0]=a[1,0]*b[0,0] + a[1,1]*b[1,0]; result [1,1]=a[1,0]*b[0,1] + a[1,1]*b[1,1]; return result; }
5. Compile el programa y corrija los posibles errores. Ejecute el programa y compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
Tablas
10
Cmo calcular el resultado en un mtodo usando instrucciones for 1. Sustituya la inicializacin de result en Multiply por una tabla 2 x 2 de ints de nueva creacin. 2. Aada a Multiply dos instrucciones for anidadas. Utilice un entero llamado r en la instruccin for ms externa para recorrer todos los ndices de la primera dimensin de result, y un entero llamado c en la instruccin for ms interna para recorrer todos los ndices de la segunda dimensin de result. Use el valor literal 2 para los lmites de las tablas. El cuerpo de la instruccin for ms interna tendr que calcular el valor de result [r,c] con la siguiente frmula:
result [r,c] = a[r,0] * b[0,c] + a[r,1] * b[1,c]
3. Compile el programa y corrija los posibles errores. Ejecute el programa y compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
Cmo introducir la primera matriz desde la consola 1. Sustituya la inicializacin de a en Main por una nueva tabla 2 x 2 de ints. 2. Aada a Main instrucciones que pidan al usuario cuatro valores y los lean en a desde la consola. Tienen que ir antes de la llamada al mtodo Multiply. Las instrucciones para leer un valor desde la consola son:
string s = Console.ReadLine( ); a[0,0] = int.Parse(s);
3. Compile el programa y corrija los posibles errores. Ejecute el programa, escribiendo en la consola los mismos cuatro valores para a (es decir, 1, 2, 3 y 4). Compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
4. Declare un nuevo mtodo static llamado Input (Entrada) en la clase MatrixMultiply. Este mtodo no devolver nada y esperar como parmetro una tabla int de rango 2 llamada dst.
Tablas
11
5. Corte de Main las instrucciones que leen los cuatro valores en a y pguelas en Input. Aada a Main (antes de la llamada a Multiply) una instruccin que llame al mtodo Input, pasando a como parmetro. 6. Compile el programa y corrija los posibles errores. Ejecute el programa, escribiendo en la consola los mismos cuatro valores para a (es decir, 1, 2, 3 y 4). Compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
7. Cambie el mtodo Input para que utilice dos instrucciones for anidadas. Use el valor literal 2 para los lmites de las tablas. Incluya en el mtodo Input una instruccin Write que pida los valores al usuario. El cdigo completo debera ser como ste:
static void Input (int[,] dst) { for (int r = 0; r < 2; r++) { for (int c = 0; c < 2; c++) { Console.Write( "Escriba el valor de [{0},{1}] : ", r, c); string s = Console.ReadLine( ); dst[r,c] = int.Parse(s); } } Console.WriteLine( ); }
8. Compile el programa y corrija los posibles errores. Ejecute el programa, escribiendo en la consola los mismos cuatro valores para a (es decir, 1, 2, 3 y 4). Compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
Cmo introducir la segunda matriz desde la consola 1. Sustituya la inicializacin de b en Main por una tabla 2 x 2 de ints de nueva creacin cuyos cuatro valores tengan por defecto el valor cero. 2. Aada a Main una instruccin que lea valores en b desde la consola llamando al mtodo Input y pasando b como argumento. 3. Compile el programa y corrija los posibles errores. Ejecute el programa, escribiendo los mismos cuatro valores para a (1, 2, 3 y 4) y los mismos cuatro valores para b (5, 6, 7 y 8). Compruebe que los cuatro valores escritos en la consola siguen siendo:
19 43 22 50
4. Ejecute el programa con datos diferentes. Colabore con otro estudiante para ver si obtienen la misma respuesta para los mismos datos.