Programación Básica Arreglos y Estructuras de Datos (1) Arturo Vega González [email protected] Division de Ciencias e Ingenierı́as Universidad de Guanajuato Campus León Sesión 6 Universidad de Guanajuato, DCI, Campus León 1 / 17 Programcaión Básica Arreglos y Estructuras de Datos Contenido 1 Arreglos 2 Estructuras de Datos Universidad de Guanajuato, DCI, Campus León 2 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Arreglos Los arreglos son un conjunto de datos del mismo tipo que tienen un ı́ndice para distinguirlos La notación xi es equivalente en C a: x[i]. donde i es el ı́ndice de la variable x El conjunto de datos se almacena en espacios de memoria contigua. Los indices en C comienzan en cero (0) Los indices en Fortran generalmente comienzan en uno (1), pero se puede especificar el rango de los indices. Los arreglos pueden ser n-dimensionales. Universidad de Guanajuato, DCI, Campus León 3 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Declaración de arreglos C f l o a t A[20] ; f l o a t B[ 5 ] = {0.0 , 2.0 , 1.5 , 1.0 , 0.5} int a [10] = { 2 }; Fortran real , dimension (3) : : x real , dimension (4 ,5) : : z r e a l , d i m e n s i o n ( 0 : 8 ) , A1 r e a l , d i m e n s i o n ( 2 : 5 ) , A2 real : : xx ( 3 ) , z z ( 4 , 5 ) Universidad de Guanajuato, DCI, Campus León 4 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Arreglos #i n c l u d e < s t d i o . h> i n t main ( v o i d ) { i n t t , i , num [ 3 ] [ 4 ] ; f o r ( t =0; t <3; ++t ) f o r ( i =0; i <4; ++i ) num [ t ] [ i ]=( t ∗4)+ i ∗ 1 ; f o r ( t =0; t <3; ++t ) { f o r ( i =0; i <4; ++i ) p r i n t f ( ”num[%d ] [ % d ] = %d ” , t , i , num [ t ] [ i ] ) ; p r i n t f ( ” \n” ) ; } } Universidad de Guanajuato, DCI, Campus León 5 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Cadenas de caracteres Cadena o string se utiliza para manipular sı́mbolos o caracteres alfanuméricos Una Cadena es básicamente un arreglo de caracteres o del tipo char La terminación de la cadena se debe especificar con un caracter nulo ’\0’ Por lo que hay que considerar un espacio mas! Universidad de Guanajuato, DCI, Campus León 6 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Cadenas #i n c l u d e < s t d i o . h> i n t main ( v o i d ) { char cadena [5]= ” hol a ” ; c h a r c a d e n a 2 [ 5 ] = { ’ h ’ , ’ o ’ , ’ l ’ , ’ a ’ , ’ \0 ’ } ; c h a r nombre [ 1 5 ] , a p e l l i d o s [ 3 0 ] ; p r i n t f ( ” I n t r o d u c e t u nombre : ” ) ; s c a n f ( ”%s ” , nombre ) ; p r i n t f (” Introduce tus a p e l l i d o s : ” ) ; s c a n f ( ”%s ” , a p e l l i d o s ) ; p r i n t f ( ”Tu Nombre e s %s %s \n” , nombre , a p e l l i d o s ) ; } Universidad de Guanajuato, DCI, Campus León 7 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Operaciones con Cadenas Las cadenas no se manipulan igual que los enteros o flotantes #i n c l u d e < s t d i o . h> i n t main ( v o i d ) { c h a r nombre [ 1 5 ] , a p e l l i d o s [ 3 0 ] , nombrecompleto [ 5 0 ] ; nombre = ”Ana M a rı́ a ” ; \∗ I n c o r r e c t o ∗\ a p e l l i d o s = ” gómez gómez ” ; \∗ I n c o r r e c t o ∗\ n o m b r e c o m p l e t o = nombre + a p e l l i d o s ; \∗ I n c o r r e c t o ∗\ } Universidad de Guanajuato, DCI, Campus León 8 / 17 Programcaión Básica Arreglos y Estructuras de Datos Arreglos Ejercicio Escribir un programa que calcule el promedio de un conjunto de números dados por el usuario. El programa debe pedir al usuario un numero entre 1 y 20 (tamaño del arreglo a promediar) Universidad de Guanajuato, DCI, Campus León 9 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Introducción a Estructura de Datos Conjunto de N elementos que están agrupados por medio de un único nombre. Pueden ser de distinto tipo Es un tipo definido dentro del programa Los elementos o miembros de la estructura pueden a su vez ser otra estructura double int o_ cha Universidad de Guanajuato, DCI, Campus León float r otr o tip ... 10 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Estructuras de Datos Definición y declaración(1) s t r u c t Nombre { t i p o 1 Campo1 ; t i p o 2 Campo2 ; ... t i p o N CampoN ; } Alumno ; Alumno es una variable del tipo Nombre Universidad de Guanajuato, DCI, Campus León 11 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Estructuras de Datos Definición (2) s t r u c t Nombre { t i p o 1 Campo1 ; t i p o 2 Campo2 ; ... t i p o N CampoN ; }; Declaración s t r u c t Nombre Var1 ; Universidad de Guanajuato, DCI, Campus León 12 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Estructuras de Datos Acceso a los elementos de una estructura de datos. Se realiza indicando nombre de la variable tipo estructura y el elemento individual separados por un punto “.” VariableEstructura.ElementoEstructura Cuando se utilizan apuntadores (pointer), el separador es: “− >” VariableEstructura->ElementoEstructura El procesamiento de una estructura solo se puede hacer elemento por elemento. Universidad de Guanajuato, DCI, Campus León 13 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Ejemplo de Estructura de Datos s t r u c t Fecha { i n t Dia ; c h a r Mes [ 1 0 ] ; i n t Anio ; }; ... s t r u c t Fecha Hoy = { 9 , ” Marzo ” , 2 0 1 2 } , V a r F e c ha ; ... V a r F e c ha = Hoy ; Hoy . Dia = 9 ; Hoy . A n i o = 2 0 1 2 ; p r i n t f ( “ E l mes e s : %s \n” , Hoy . Mes ) ; ( Fecha . A n i o % 4 == 0 ) && ( Fecha . A n i o % 100 != 0 ) ) ( Fecha . A n i o % 400 == 0 ) Universidad de Guanajuato, DCI, Campus León 14 / 17 || Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Estructura de Datos Ejemplo #i n c l u d e < s t d i o . h> i n t main ( v o i d ) { struct { i n t i d ; // i d e n t i f i c a d o r d e l alumno c h a r nom [ 2 0 ] ; // nombre float calificacion ; } alumno ; p r i n t f ( ” E s c r i b e e l i d e n t i f i c a d o r y e l nombre d e l alumno \n” ) ; s c a n f ( ”%d %s ” , &alumno . i d , alumno . nom ) ; alumno . c a l i f i c a c i o n = 8 0 . 0 ; i f ( alumno . i d > 1 0 0 ) p r i n t f ( ” E l alumno e s %s \n” , alumno . nom ) ; return (0); } Universidad de Guanajuato, DCI, Campus León 15 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Arreglos de Estructura de Datos struct trabajador { c h a r nombre [ 2 0 ] ; char a p e l l i d o s [ 4 0 ] ; i n t edad ; }; s t r u c t t r a b a j a d o r Academicos [ 2 0 ] ; struct trabajador Administrativos [20]; Universidad de Guanajuato, DCI, Campus León 16 / 17 Programcaión Básica Arreglos y Estructuras de Datos Estructuras de Datos Estructuras de datos Ejercicio: Escriba un programa en C que utilice una estructura (struct), para definir un punto en el plano cartesiano (X,Y) (tipo float) Pida al usuario dos puntos Calcule y despliegue la distancia de un punto a otro p d(P1 , P2 ) = (x2 − x1 )2 + (y2 − y1 )2 Universidad de Guanajuato, DCI, Campus León 17 / 17 Programcaión Básica Arreglos y Estructuras de Datos