Programación Básica Arturo Vega González a.vega@ugto.mx Division de Ciencias e Ingenierías Universidad de Guanajuato Campus León Sesión 7 Universidad de Guanajuato, DCI, Campus León 1 / 29
Contenido 1 Librerías o Biblioteca de Funciones 2 Arreglos Más sobre cadenas Areglos en Fortran 3 Estructuras de Datos Universidad de Guanajuato, DCI, Campus León 2 / 29
Librerías o Biblioteca de Funciones Librerías o Biblioteca de funciones Inclusión de librerías o biblioteca de funciones (Archivos de cabecera) mediante: #i n c l u d e Entonces: #i n c l u d e <s t d i o. h> #i n c l u d e <math. h> #i n c l u d e O t r a s F u n c i o n e s. h #i n c l u d e b i b l i o t e c a. h Universidad de Guanajuato, DCI, Campus León 3 / 29
Librerías o Biblioteca de Funciones Librerías o Biblioteca de funciones Algunas Librerías comunes: stdio.h Provee las funciones básicas de entrada/salida del lenguaje C. stdlib.h Contiene funciones útiles para operaciones como conversión de tipos, generación de números pseudo- aleatorios, gestión de memoria dinámica, control de procesos, funciones de entorno, funciones de ordenación y búsqueda math.h Contiene las funciones matemáticas más comunes string.h Contiene funciones para la manipulación de cadenas de caracteres time.h Contiene funciones para la manipulación de fecha y hora Universidad de Guanajuato, DCI, Campus León 4 / 29
Librerías o Biblioteca de Funciones Librería stdio.h Otras funciones que incluye stdio.h son: getchar(void) putchar(char ch) getc(file *archivo) putc(char ch, FILE *Archivo) fopen(...) fclose(...) fprintf(...) fscanf(...) Lee un caracter de la entrada estándar Escribe un caracter a la salida esándar Lee un caracter de un archivo Escribe un caracter a un archivo Abre un archivo Cierra un archivo Imprime a un archivo Lee de un archivo y varias más... Universidad de Guanajuato, DCI, Campus León 5 / 29
Librerías o Biblioteca de Funciones Librería math.h Algunas funciones que incluye math.h son: double pow(double x, double y) Devuelve el valor de x elevado a y. double sqrt(double x) Devuelve la raíz cuadrada no negativa de x. double sin(double x) Devuelve el seno de x, donde x está dado en radianes. double sinh(double x) Regresa el seno hiperbólico de x. double tan(double x) Devuelve la tangente de x double tanh(double x) Devuelve la tangente hiperbólica de x. double ceil(double x) Redondea x hacia arriba al entero más cercano. double cos(double x) Devuelve el coseno de x double exp(double x) Devuelve el valor de e (la base de los logaritmos naturales) elevado a la potencia x double fabs(double x) Devuelve el valor absoluto del número en punto flotante x. double floor(double x) Redondea x hacia abajo al entero más cercano. y varias más... Universidad de Guanajuato, DCI, Campus León 6 / 29
Librerías o Biblioteca de Funciones Librería stdlib.h Algunas funciones que incluye stdlib.h son: rand(void) srand(unsigned int seed) abs(int x) long int labs(long int x) div t div(int numer, int denom) double atof(const char *cadena) int atoi(const char *cadena) double strtod(const char *cadena, char **finap) double strtol(const char *cadena, char *finap, int base) Devuelve un entero aleatorio Establece la semilla para el generador de números aleatorios Regresa el valor absoluto de x Regresa el valor absoluto de x Calcula el valor numer entre denom y devuelve el cociente y el resto en una estructura llamada div t que contiene dos miembros llamados quot y rem. Convierte una cadena a un valor flotante. Convierte una cadena a un valor entero. Convierte una cadena a un valor de punto flotante. Convierte una cadena a un entero largo de acuerdo a una base dada, la cual deberá estar entre 2 y 36 inclusive. y varias más... Universidad de Guanajuato, DCI, Campus León 7 / 29
Arreglos Arreglos Los arreglos son un conjunto de datos del mismo tipo que tienen un índice para distinguirlos La notación x i 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 8 / 29
Arreglos Declaración de arreglos C f l o a t A [ 2 0 ] ; f l o a t B [ 5 ] = { 0. 0, 2. 0, 1. 5, 1. 0, 0. 5 } i n t a [ 1 0 ] = { 2 } ; Fortran r e a l, d i m e n s i o n ( 3 ) : : x r e a l, d i m e n s i o n ( 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 r e a l : : xx ( 3 ), zz ( 4, 5 ) Universidad de Guanajuato, DCI, Campus León 9 / 29
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 10 / 29
Arreglos Más sobre cadenas 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 11 / 29
Arreglos Más sobre cadenas 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]= h o l a ; char cadena2 [5]={ h, o, l, a, \0 } ; char 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 tu nombre : ) ; s c a n f ( %s, nombre ) ; p r i n t f ( I n t r o d u c e t u s 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 12 / 29
Arreglos Más sobre cadenas 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 ) { } char nombre [ 1 5 ], a p e l l i d o s [ 3 0 ], nombrecompleto [ 5 0 ] ; nombre = Ana Marí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 \ nombrecompleto = 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 13 / 29
Arreglos Más sobre cadenas Cadenas de caracteres ejemplo de getchar y scanf para leer mientras exista un dato. char ch ; w h i l e ( ch=g e t c h a r ( ), ch>=0 ) // s i e s menor que c e r o e n t o n c e s f i n de d a t o s... char ch ; w h i l e ( s c a n f ( %c, &ch ) == 1 ) // s c a n f r e g r e s a c e r o s i e l c a r a c t e r e s n u l o. Universidad de Guanajuato, DCI, Campus León 14 / 29
Arreglos Más sobre cadenas Cadenas de caracteres Las funciones para manejo de cadenas se encuentran definidas en string.h. char *strcpy(const char *dest, const char *orig) int strcmp(const char *s1, const char *s2) int strlen(const char *s) char *strncat(char *s1, const char *s2, size t n) Copia la cadena de caracteres apuntada por orig al vector apuntado por dest. Compara las dos cadenas de caracteres s1 y s2. Devuelve un entero menor, igual o mayor que cero si se encuentra que s1 es, respectivamente, menor que, igual a, o mayor que s2. Calcula la longitud de la cadena de caracteres. Agrega n caracteres de s2 a s1 y varias mas... Universidad de Guanajuato, DCI, Campus León 15 / 29
Arreglos Más sobre cadenas Cadena de caracteres char s1 = Hola ; char s2 ; i n t l o n g i t u d ; l o n g i t u d = s t r l e n ( Hola ) ; ( v o i d ) s t r c p y ( s2, s1 ) ;... char s1 = Hola ; char s2 = 2 ; i n t l o n g i t u d = 2 ; ( v o i d ) s t r n c p y ( s2, s1, l o n g i t u d ) ; / s2 = Ho / No olvidar incluir string.h Universidad de Guanajuato, DCI, Campus León 16 / 29
Arreglos Areglos en Fortran Declaración de arreglos Fortran r e a l, d i m e n s i o n ( 3 ) : : x r e a l, d i m e n s i o n ( 4, 5 ) : : z r e a l : : w( 3 0 ), M a t r i z ( 1 0, 1 0 ) 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 r e a l : : xx ( 3 ), zz ( 4, 5 ) Universidad de Guanajuato, DCI, Campus León 17 / 29
Arreglos Areglos en Fortran Operaciones program o p e r a c i o n e s r e a l : : a ( 3, 3 ), b ( 3, 3 ), c ( 3, 3 ), v1 ( 3 ), v2 ( 3 ), t =3., c1, c2 i n t e g e r : : i, j do i =1,3 do j =1,3 a ( i, j )=( i+j ) end do v1 ( i )= i 6. 5 end do b=t a! p r o d u c t o e l e m e nto a e l e mento c=a+b c= c b=c a v2=s i n ( v1 ) v1=t v1+5 v2! c o m binacion l i n e a l p r i n t, a, b, c end program o p e r a c i o n e s Universidad de Guanajuato, DCI, Campus León 18 / 29
Arreglos Areglos en Fortran Ejercicios (1) Comente el programa anterior Modifique el programa anterior para que imprima la matriz a, b y c en una forma mas entendible (filas y renglones) Escriba un programa en C que pida los datos de dos matrices de 3x3 y las sume Escriba un programa en C que lea una cadena de caracteres en minúsculas y la despliegue en Mayusculas sin usar alguna función de la libreria string.h (tip: ver tabla ASCII) Universidad de Guanajuato, DCI, Campus León 19 / 29
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 int char double float otro_tipo... Universidad de Guanajuato, DCI, Campus León 20 / 29
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 ;... tipon CampoN ; } Alumno ; Alumno es una variable del tipo Nombre Universidad de Guanajuato, DCI, Campus León 21 / 29
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 ;... tipon CampoN ; } ; Declaración s t r u c t Nombre Var1 ; Universidad de Guanajuato, DCI, Campus León 22 / 29
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 23 / 29
Estructuras de Datos Ejemplo de Estructura de Datos s t r u c t Fecha { i n t Dia ; char Mes [ 1 0 ] ; i n t Anio ; } ;... s t r u c t Fecha Hoy = {21, Marzo,2012}, VarFecha ;... VarFecha = Hoy ; Hoy. Dia = 2 1 ; Hoy. Anio = 2 0 1 2 ; p r i n t f ( El mes e s : %s \n, Hoy. Mes ) ; ( Fecha. Anio % 4 == 0) && ( Fecha. Anio % 100!= 0 ) ) ( Fecha. Anio % 400 == 0) Universidad de Guanajuato, DCI, Campus León 24 / 29
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 ) { s t r u c t { i n t i d ; // i d e n t i f i c a d o r d e l alumno char nom [ 2 0 ] ; // nombre f l o a t c a l i f i c a c i o n ; } 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. id, alumno. nom ) ; alumno. c a l i f i c a c i o n =80.0; i f ( alumno. i d > 100) p r i n t f ( E l alumno e s %s \n, alumno. nom ) ; r e t u r n ( 0 ) ; } Universidad de Guanajuato, DCI, Campus León 25 / 29
Estructuras de Datos Arreglos de Estructura de Datos s t r u c t t r a b a j a d o r { char 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 ] ; s t r u c t t r a b a j a d o r A d m i n i s t r a t i v o s [ 2 0 ] ; Universidad de Guanajuato, DCI, Campus León 26 / 29
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 d(p 1, P 2 ) = (x 2 x 1 ) 2 + (y 2 y 1 ) 2 Universidad de Guanajuato, DCI, Campus León 27 / 29
Estructuras de Datos Solución (1) #i n c l u d e <s t d i o. h> #i n c l u d e <math. h> i n t main ( v o i d ) { s t r u c t Punto { double x ; double y ; } ; s t r u c t Punto A, B ; double D i s t a n c i a ; p r i n t f ( T e c l e a l o s v a l o r e s d e l punto A ( x, y ) \n ) ; s c a n f ( %l f %l f, &A. x, &A. y ) ; p r i n t f ( T e c l e a l o s v a l o r e s d e l punto B ( x, y ) \n ) ; s c a n f ( %l f %l f, &B. x, &B. y ) ; Universidad de Guanajuato, DCI, Campus León 28 / 29
Estructuras de Datos Solución (2) // c a l c u l a m o s l a d i s t a n c i a e n t r e ambos puntos. D i s t a n c i a = s q r t ( pow ( (B. x A. x ),2)+ pow ( (B. y A. y ), 2 ) ) ; p r i n t f ( La d i s t a n c i a e s : %l f \n, D i s t a n c i a ) ; r e t u r n ( 0 ) ; } Para crear el ejecutable incluir la libreria math.h en el enlazador (caso particular de fedora) gcc d i s t a n c i a. c lm o d i s t a n c i a. out Universidad de Guanajuato, DCI, Campus León 29 / 29