Programación Básica Arreglos y Estructuras de Datos (2)

Anuncio
Programación Básica
Arreglos y Estructuras de Datos (2)
Arturo Vega González
[email protected]
Division de Ciencias e Ingenierı́as
Universidad de Guanajuato
Campus León
Sesión 7
Universidad de Guanajuato, DCI, Campus León
1 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
#i n c l u d e
#i n c l u d e
#i n c l u d e
< s t d i o . h>
<math . h>
” O t r a s F u n c i o n e s . h”
” b i b l i o t e c a . h”
Universidad de Guanajuato, DCI, Campus León
3 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
Librerı́as o Biblioteca de Funciones
Librerı́as o Biblioteca de funciones
Algunas Librerı́as comunes:
stdio.h
stdlib.h
math.h
string.h
time.h
Provee las funciones básicas de entrada/salida del lenguaje C.
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
Contiene las funciones matemáticas más comunes
Contiene funciones para la manipulación de cadenas de caracteres
Contiene funciones para la manipulación de fecha y hora
Universidad de Guanajuato, DCI, Campus León
4 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
Librerı́as o Biblioteca de Funciones
Librerı́a math.h
Algunas funciones que incluye math.h son:
double
double
double
double
double
double
double
double
double
pow(double x, double y)
sqrt(double x)
sin(double x)
sinh(double x)
tan(double x)
tanh(double x)
ceil(double x)
cos(double x)
exp(double x)
double fabs(double x)
double floor(double x)
Devuelve el valor de x elevado a y.
Devuelve la raı́z cuadrada no negativa de x.
Devuelve el seno de x, donde x está dado en radianes.
Regresa el seno hiperbólico de x.
Devuelve la tangente de x
Devuelve la tangente hiperbólica de x.
Redondea x hacia arriba al entero más cercano.
Devuelve el coseno de x
Devuelve el valor de e (la base de los logaritmos naturales) elevado a la potencia x
Devuelve el valor absoluto del número en punto
flotante x.
Redondea x hacia abajo al entero más cercano.
y varias más...
Universidad de Guanajuato, DCI, Campus León
6 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
8 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
9 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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]= ” 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
12 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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 ) {
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
13 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
Arreglos
Más sobre cadenas
Cadenas de caracteres
ejemplo de getchar y scanf para leer mientras exista un dato.
c h a r 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
...
c h a r 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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
Arreglos
Más sobre cadenas
Cadena de caracteres
char ∗ s1 = ” Hola ” ;
char ∗ s2 ;
int longitud ;
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 , s 1 ) ;
...
char ∗ s1 = ” Hola ” ;
char ∗ s2 = 2 ;
int longitud = 2;
( v o i d ) s t r n c p y ( s2 , s1 , l o n g i t u d ) ; /∗ s 2 = ”Ho” ∗/
No olvidar incluir string.h
Universidad de Guanajuato, DCI, Campus León
16 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
Arreglos
Areglos en Fortran
Declaración de arreglos
Fortran
real , dimension (3) : : x
real , dimension (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
real
: : xx ( 3 ) , z z ( 4 , 5 )
Universidad de Guanajuato, DCI, Campus León
17 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
integer :: 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 n t o a e l e m e n t o
c=a+b
c=−c
b=c ∗ a
v2=s i n ( v1 )
v1=t ∗ v1+5∗v2 ! c o m b i n a c i o n l i n e a l
print ∗ ,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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
...
20 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
21 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
22 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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 = { 2 1 , ” Marzo ” , 2 0 1 2 } ,
V a r F e c ha ;
...
V a r F e c ha = Hoy ;
Hoy . Dia = 2 1 ;
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
24 / 29
||
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
25 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
26 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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
27 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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 ( ” Teclea l o s v a l o r e s d e l punto A ( x , y )
s c a n f ( ”% l f % l f ” , &A . x , &A . y ) ;
p r i n t f ( ” Teclea l o s v a l o r e s d e l punto B ( x , y )
s c a n f ( ”% l f % l f ” , &B . x , &B . y ) ;
Universidad de Guanajuato, DCI, Campus León
28 / 29
\n” ) ;
\n” ) ;
Programcaión Básica
Arreglos y Estructuras de Datos (2)
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 p u n t o s .
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 ) ;
return (0);
}
Para crear el ejecutable incluir la libreria math.h en el enlazador (caso
particular de fedora)
g c c d i s t a n c i a . c −lm −o d i s t a n c i a . o u t
Universidad de Guanajuato, DCI, Campus León
29 / 29
Programcaión Básica
Arreglos y Estructuras de Datos (2)
Descargar