PRÁCTICA ARREGLOS Y ESTRUCTURAS Objetivos El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico. Al final de esta práctica el alumno podrá: 1. Manejar arreglos de varias dimensiones. 2. Manipular estructuras. 3. Realizar correctamente programas que utilicen arreglos y estructuras. Antecedentes 1. Manejar sentencias de control de flujo. 2. Entender el concepto de arreglo y estructura en la programación estructurada. Introducción Arreglo Un arreglo es un conjunto de datos del mismo tipo, que están organizados secuencialmente en memoria principal, y que dichos datos se acceden a través del nombre del arreglo. Cada uno de los componentes del arreglo es llamado elemento, y cada elemento ocupa una dirección contigua en memoria. Los arreglos pueden ser de una, dos o más dimensiones. La complejidad de su uso aumenta de acuerdo al número de dimensiones en que se haya definido el arreglo. Así un arreglo de una dimensión se puede ver como una lista lineal de datos, uno de dos dimensiones como una tabla, y uno de tres dimensiones como un conjunto de tablas. Ejemplo un arreglo de una dimensión o unidimensional: int arr1[5]; En esta declaración se indica que a la variable arr1 le asigne un espacio en memoria, de tal forma que se puedan almacenar 5 elementos de tipo int. Por ejemplo, si en un cierto equipo, el tipo int tiene un tamaño de 2 bytes, quiere decir que la dirección de cada elemento, suponiendo que empieza en FF00, sería: arr1[0] arr1[1] arr1[2] arr1[3] arr1[4] FF00 FF02 FF04 FF06 FF08 Con esto se puede observar que las direcciones son contiguas y dejan 2 bytes para almacenar correctamente a un int. Elaborada por: Ing. Laura Sandoval Montaño Viridiana del Carmen De Luna Bonilla Virgilio Green Pérez Programación Avanzada y Métodos Numéricos PRÁCTICA ARREGLOS Y ESTRUCTURAS Cabe hacer notar que el arreglo emplea subíndices para hacer referencia a cada elemento de éste. Así, el primer elemento del arreglo está asociado con el subíndice 0, el segundo con el 1 y así sucesivamente hasta el subíndice n-1, donde n es el número de elementos del arreglo. Ejemplo de un arreglo de 2 dimensiones: int arr2[3][2]; La dirección de cada elemento, suponiendo que empieza en FF0A, sería: arr2[0][0] arr2[0][1] arr2[1][0] arr2[1][1] arr2[2][0] arr2[2][1] FF0A FF0C FF0E FF10 FF12 FF14 Se puede observar que las localidades de memoria se asignan por renglones, es decir, se colocan los 2 elementos del renglón 0 de manera consecutiva, después los 2 elementos del renglón 1 y así sucesivamente. Ejemplo utilizando arreglos Ejemplo 1. Leer los elementos de una matriz cuadrada de orden 4 y desplegarlos en pantalla. Elaborada por: Ing. Laura Sandoval Montaño Viridiana del Carmen De Luna Bonilla Virgilio Green Pérez Programación Avanzada y Métodos Numéricos PRÁCTICA ARREGLOS Y ESTRUCTURAS -Explicación de las variables i: Variable de tipo entero, utilizada como variable de control de ciclos y como índice del arreglo. j: Variable de tipo entero, utilizada como variable de control de ciclos y como índice del arreglo. M: Arreglo bidimensional de tipo entero. -Código /* Ejemplo1: Programa que lee y despliega en pantalla una matriz de 4 x 4 */ #include<stdio.h> void main(){ int M[4][4]; int i,j; /* Ciclo para la lectura por for(i=0;i<4;i++) for(j=0;j<4;j++){ printf(“Dame el elemento scanf(“%d”,&M[i][j]); } printf(“\n”); /*Ciclo para la escritura de for(i=0;i<4;i++){ for(j=0;j<4;j++) printf(“%d\t”,M[i][j]); printf(“\n”);/*nueva línea } } renglón*/ %d,%d: “,i,j); la matriz en pantalla*/ para imprimir el siguiente renglón*/ Estructuras Una estructura es un conjunto de datos a los que se hace referencia a través de un mismo nombre. A diferencia de un arreglo, una estructura puede tener elementos de distintos tipos, por ejemplo de tipo int, float, double, char, etc. Declaración de una estructura struct{ tipo1 nom_var11, nom_var12,…; tipo2 nom_var21, nom_var22,…; . . tipon nom_varn1, nom_varn2,…; }nombre_variable_estructura ; Elaborada por: Ing. Laura Sandoval Montaño Viridiana del Carmen De Luna Bonilla Virgilio Green Pérez Programación Avanzada y Métodos Numéricos PRÁCTICA ARREGLOS Y ESTRUCTURAS Ejemplo de declaración de una estructura struct { int i,j; float x,y; }var_estructura; En la sentencia anterior se define una variable de tipo estruct nombrada var_estructura compuesta de dos elementos de tipo int y dos elementos de tipo float. Ejemplo utilizando estructuras Ejemplo 2. Leer el nombre y edad de un alumno y almacenarlo en una estructura. -Explicación de variables alumno: Variable de tipo estructura con 2 variables. nombre: Arreglo unidimensional de tipo carácter. edad: Variable de tipo entero. -Código /* Ejemplo 2: Programa que lee el nombre y la edad del alumno y los guarda en una estructura */ #include<stdio.h> void main(){ /*Declaración de la estructura con el nombre alumno*/ struct{ char nombre[50]; int edad; }alumno; printf(“\n Introduce el nombre: “); /*Lee la cadena introducida utilizando el formato %s, y es almacenada en la variable nombre de la estructura alumno*/ scanf(“%s”,alumno.nombre); printf(“\n Introduce la edad: “); scanf(“%i”,&alumno.edad); printf(“\n\nEl nombre tecleado es %s”,alumno.nombre); printf(“\nLa edad es %i”,alumno.edad); } En este ejemplo se observa que para referirse a un elemento de la estructura se hace uso del operador punto (.), separando el nombre de la variable de tipo estructura y el nombre del elemento: alumno.nombre y alumno.edad. Elaborada por: Ing. Laura Sandoval Montaño Viridiana del Carmen De Luna Bonilla Virgilio Green Pérez Programación Avanzada y Métodos Numéricos PRÁCTICA ARREGLOS Y ESTRUCTURAS Problemas Propuestos 1. Hacer el algoritmo y programa que almacene números en una matriz de 5 x 6. Imprimir la matriz, así como la suma de todos sus elementos. 2. Hacer el algoritmo y programa que lea una matriz de 5 x 5 y determine la posición [renglón, columna] del valor máximo en la matriz. En caso de que el valor máximo se repita, determinar todas las posiciones en las que se encuentra. 3. Hacer el algoritmo y programa que lea una matriz de 6 x 4. Calcular la suma de cada renglón y almacenarla en un vector; la suma de cada columna y almacenarla en otro vector; e imprimir ambos vectores. 4. Hacer el algoritmo y programa que lea una matriz de 3 x 5. Sumar las columnas e imprimir la columna que tuvo la máxima suma, así como ese resultado. 5. Hacer el algoritmo y programa que lea una matriz de 5 x 5 y que almacene la diagonal principal en un vector. Imprimir el vector resultante. 6. Hacer el algoritmo y programa que llene automáticamente una matriz de 20 x 20 con valores de cero, excepto en la diagonal principal, que deberán ser unos. Imprimir en pantalla. 7. Hacer el algoritmo y programa que almacene en un arreglo de 3 dimensiones, dos matrices cuadradas de 3 x 3, hacer la suma, y guardar la nueva matriz, dentro del mismo arreglo. Imprimir las tres matrices. 8. Hacer el algoritmo y programa que lea una matriz de 5 x 5, y que imprima la matriz transpuesta. 9. Hacer el algoritmo y programa que lea una matriz de 5 x 6 y que imprima cuántos de los números almacenados son ceros, cuántos son positivos y cuántos son negativos. 10. Hacer el algoritmo y programa que realice la multiplicación de dos matrices de 3 x 3 e imprima el resultado en pantalla. 11. Hacer el algoritmo y programa que pregunte por el orden de dos matrices y determine si se puede realizar la suma de la primera con la segunda, en caso de ser cierto, que obtenga los valores de dichas matrices, realice la suma e imprima el resultado en pantalla. 12. Hacer el algoritmo y programa que almacene en una estructura, un número complejo, y que obtenga su forma polar. 13. Hacer el algoritmo y programa que almacene en un arreglo de estructuras, dos números complejos, y que obtenga la multiplicación. 14. Hacer el algoritmo y programa que almacene en un arreglo de estructuras, los puntos extremos de dos rectas, y que determine la longitud de las mismas; además indicar si son perpendiculares. 15. Hacer el algoritmo y programa que almacene en un arreglo de estructuras, el nombre y calificación de varios alumnos, que obtenga el promedio de las calificaciones, y que diga el nombre del alumno con la calificación más alta. Si se repiten las calificaciones altas, deberá indicar todos los alumnos con esa calificación. (OSURIHVRUSRGUiGLVHxDUVXVSURSLRVHMHUFLFLRVVLHPSUH\FXDQGRFXEUDSRUFRPSOHWRHOREMHWLYRGH ODSUiFWLFD Elaborada por: Ing. Laura Sandoval Montaño Viridiana del Carmen De Luna Bonilla Virgilio Green Pérez Programación Avanzada y Métodos Numéricos