Unidad temtica 5 - PowerPoint PPT Presentation

1 / 37
About This Presentation
Title:

Unidad temtica 5

Description:

Conocer el concepto de fichero y puntero. Conocer las operaciones que pueden ... m s sencilla de declarar pero m s complicada de utilizar (un solo ndice) ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 38
Provided by: Lau9350
Category:

less

Transcript and Presenter's Notes

Title: Unidad temtica 5


1
Unidad temática 5
  • Aspectos avanzados
  • Objetivos
  • Conocer el concepto de fichero y puntero
  • Conocer las operaciones que pueden realizarse con
    ellos
  • Aplicar ambos conceptos a la resolución de
    problemas
  • Contenidos
  • Tema 11. Ficheros
  • Tema 12. Variables dinámicas

2
Tema 10
  • Ficheros
  • Definición de fichero
  • Tipos de ficheros de texto y binarios
  • Tipos de acceso a fichero secuencial y aleatorio
  • Apertura y cierre de ficheros
  • Archivos de texto
  • Lectura y escritura en ficheros de acceso
    secuencial
  • Lectura y escritura en ficheros de acceso
    aleatorio
  • Archivos binarios

Bibliografía - (1) tema 11
3
Definición de fichero
  • Por qué se necesita utilizar almacenamiento
    secundario?
  • Proceso de gran cantidad de datos
  • Limitación de la memoria del ordenador
  • Programas que tratan cierta información de la que
    han de disponer en posteriores ejecuciones

4
Concepto de fichero
  • Fichero o archivo
  • Cadena de bytes consecutivos que termina en un
    carácter especial llamado EOF (End Of File)

5
Ficheros de texto y binarios
  • Forma en la que el programa que trata con el
    fichero va a interpretar la información contenida
    en él.
  • Una vez se ha creado un fichero y la información
    se ha insertado en forma binaria o de texto,
    siempre se deberá trabajar del mismo modo.

6
Tipos de acceso secuencial
  • Leer o escribir datos comenzando siempre desde el
    principio del archivo.
  • Añadir datos a partir del final del archivo.
  • Poco eficiente.

7
Tipos de acceso aleatorio
  • Acceder directamente a cualquier posición dada de
    un archivo para actualizar los valores contenidos
    a partir de dicho punto.
  • Implica la utilización de operaciones nuevas que
    permitan situarse en cualquier punto del archivo.

8
Apertura y cierre de ficheros
  • Apertura
  • FILE fopen (char pathname, char type)
  • pathname cadena de caracteres que indica el
    nombre del fichero, incluido el camino
  • type cadena que contiene el tipo de fichero y
    su modo de apertura
  • Cierre
  • int fclose (FILE file)

9
Modos de apertura
10
Ejemplo apertura y cierre
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • pf fopen(c\\temp\\fichero.txt, w)
  • if (pfNULL)
  • printf (Error en la apertura del fichero\n)
  • exit (-1)
  • ...
  • fclose (pf)

11
Archivos de texto secuenciales Lectura
  • Función fscanf
  • int fscanf (FILE pf, char formato, variables)
  • lee hasta encontrar un blanco o final de línea
  • devuelve el número de ítems leídos o EOF si llega
    a final de fichero
  • Función fgets
  • char fgets (char s, int n, FILE pf)
  • lee n caracteres de pf o hasta que encuentra un
    carácter de final de línea y los almacena en s
    junto con \0
  • devuelve la cadena leída o NULL si llega a final
    de fichero

12
Ejemplo de fscanf
  • Lectura de varias cadenas de caracteres separadas
    por blancos con fscanf
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • char vector50
  • pf fopen(c\\temp\\fichero.txt, r)
  • while (fscanf (pf, s, vector) ! EOF)
  • printf (Leido s\n, vector)
  • fclose (pf)

13
Ejemplo de fgets
  • Lectura de varias cadenas de caracteres con fgets
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • char vector50
  • pf fopen(c\\temp\\fichero.txt, r)
  • while (fgets (vector, 50, pf)!NULL)
  • printf (Leido s\n, vector)
  • fclose (pf)

14
Ejemplo de fscanf (2)
  • Lectura de datos de distintos tipos de un archivo
    de texto.
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • float precio int unidades char pieza50
  • pf fopen(c\\temp\\fichero.txt, r)
  • fscanf (pf, sdf, pieza, unidades,
    precio)
  • printf (Pieza s, cantidad d y precio
    f\n, pieza, unidades, precio)
  • fclose (pf)

15
Archivos de texto secuenciales Escritura
  • Función fprintf
  • int fprintf (FILE pf, char formato, argumentos)
  • escribe el contenido de los argumentos
  • devuelve el número de ítems escritos en el
    fichero o un número negativo en caso de error

16
Ejemplo de fprintf
  • Escritura de datos de distintos tipos en un
    archivo de texto.
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • float precio int unidades char pieza50
  • printf (Introduce pieza, cantidad y
    precio\n)
  • scanf (sdf, pieza, unidades, precio)
  • pf fopen(c\\temp\\fichero.txt, w)
  • fprintf (pf, s d f , pieza, unidades,
    precio)
  • fclose (pf)

17
Archivos de texto aleatorios
  • Se utilizan las mismas funciones para lectura y
    escritura que para ficheros de texto de acceso
    secuencial
  • fscanf
  • fgets
  • fprintf

18
Archivos de texto aleatorios
  • Es necesario utilizar funciones que permitan
    posicionar el puntero del fichero.
  • int fseek (FILE pf, long int desplaz, int modo)
  • desplaz es el desplazamiento en bytes a efectuar
  • modo es el punto de referencia que se toma para
    efectuar dicho desplazamiento
  • SEEK_SET principio del fichero
  • SEEK_CUR posición actual
  • SEEK_END final del fichero
  • devuelve 0 si se ha realizado el desplazamiento o
    distinto de cero si ha ocurrido algún error

19
Ejemplo de fseek
  • Supongamos que el fichero fichero.txt contiene la
    cadena Este es el texto del fichero. Este
    programa lee diversas palabras del mismo.
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • char cadena50
  • pf fopen(c\\temp\\fichero.txt, r)
  • fscanf (pf, s, cadena)
  • printf (Primera palabra s\n, cadena)
  • fseek (pf, 4, SEEK_CUR)

20
Ejemplo de fseek (cont.)
  • fscanf (pf, s, cadena)
  • printf (Tercera palabra s\n, cadena)
  • fseek (pf, -7, SEEK_END)
  • fscanf (pf, s, cadena)
  • printf (Ultima palabra s\n, cadena)
  • fseek (pf, 11, SEEK_SET)
  • fscanf (pf, s, cadena)
  • printf (Cuarta palabra s\n, cadena)
  • fclose (pf)

21
Ejemplo de fseek (cont. 2)
  • La salida del programa sería la siguiente
  • Primera palabra Este
  • Tercera palabra el
  • Ultima palabra fichero
  • Cuarta palabra texto

22
Archivos binarios
  • Se utilizan funciones que leen y escriben sin
    interpretar los datos, es decir, son funciones
    que leen y escriben bytes
  • fread, para lectura
  • fwrite, para escritura

23
Ejemplo archivos binarios
  • include ltstdio.hgt
  • void main()
  • FILE pf
  • float v1.43, 4e-5, 32.01, 0.2e1
  • pffopen (c\\temp\\fichero.dat, wb)
  • fwrite (v, sizeof(float), 4, pf)
  • fread (v, sizeof(float), 4, pf)
  • printf (Los numeros leidos son f f f f\n,
    v0,v1,v2,v3)
  • fclose (pf)

24
Tema 11
  • Variables dinámicas
  • Conceptos básicos
  • Punteros. Ejemplos
  • Paso de punteros a funciones
  • Asignación dinámica de memoria. Ejemplos
  • Punteros y vectores
  • Operaciones con vectores
  • Diferencia entre vectores estáticos y dinámicos
  • Matrices dinámicas

Bibliografía - (1) tema 10
25
Conceptos básicos
  • Operador de dirección de memoria ()
  • sobre objetos en memoria
  • a dirección de memoria de a
  • Operador de indirección ()
  • sobre operandos que representen direcciones de
    memoria
  • (a) contenido de a

26
Punteros
  • Puntero variable que almacena una dirección de
    memoria
  • p a
  • Declaración de punteros
  • tipo_dato nombre_variable_puntero
  • int a, p
  • NULL valor nulo de un puntero
  • librería stdlib.h

27
Ejemplos
  • float v, pvv int v
  • int u, puu int pv
  • v8
  • pvv
  • int u3, v int u1, u2
  • int pv, pu int v3
  • puu int pv
  • vpu pvv
  • pvv u12(v5)
  • printf (ud, vd, pvd, u22(pv5)
  • pud, u,v,pv,pu)

28
Ejemplos (2)
  • int v3, pv
  • pvv
  • pv0
  • printf (\n vd pvd, v, pv)
  • int pv, pu, u, v1
  • pvv
  • pvpv10
  • pvpv1
  • upv2
  • pupv

29
Paso de punteros a funciones
  • Implementa el paso por referencia
  • include ltstdio.hgt
  • include ltstdlib.hgt
  • void fun_invocada (int vble_recibir)
  • vble_recibir vble_recibir1
  • void fun_invocadora ()
  • int vble_enviar4
  • fun_invocada (vble_enviar)
  • printf (Valor de la variable
    d\n,vble_enviar)
  • main() fun_invocadora()

30
Asignación dinámica de memoria
  • Reserva de memoria en tiempo de ejecución
  • Función malloc de la librería stdlib.h
  • void malloc (int num_bytes_memoria)
  • malloc (num_elementossizeof(tipo_dato))
  • Función free de la librería stdlib.h
  • void free (void )

31
Ejemplos
  • include ltstdlib.hgt
  • main ()
  • int dato_simple
  • dato_simple (int ) malloc (1sizeof(int))
  • include ltstdlib.hgt
  • main ()
  • int dato_simple, int num
  • scanf (d, num)
  • dato_simple(int ) malloc (numsizeof(int))

32
Punteros y vectores
  • El nombre del vector es una dirección de memoria
  • Significado físico de un vector
  • int datos3 datos0 dir. datos
  • datos1 dir. (datos1)
  • datos2 dir. (datos2)

33
Operaciones sobre vectores
  • Operador
  • datos0 datos (datos0)
  • datos1 (datos1)
  • Operador
  • datos0 datos
  • datos1 (datos1)
  • Operador (indexación)
  • nombre_vectori (nombre_vectori)

34
Diferencia entre vectores estáticos y dinámicos
  • int datos3
  • int datos
  • datos (int ) malloc (3sizeof(int))
  • free(datos)

35
Ejemplo Lectura de un vector dinámico
  • include ltstdio.hgt
  • include ltstdlib.hgt
  • int leervector(int vector, int longitud)
  • int i
  • for (i0 iltlongitud i)
  • printf (\n Introduce un numero )
  • scanf (d, vectori)
  • main ()
  • int vector, num, val
  • printf (Cuantos numeros seran introducidos?
    )
  • scanf (d, num)
  • vector (int ) malloc (numsizeof(int))
  • leervector (vector, num)
  • free (vector)

36
Matrices dinámicas
  • Método 1 vector de vectores
  • permite usar las matrices con 2 índices
  • int matriz, i, j, filas, cols
  • ...
  • matriz (int ) malloc (filas sizeof(int))
  • for (i0 iltfilas i)
  • matrizi (int ) malloc (cols sizeof(int))
  • matriz02 3

37
Matrices dinámicas (2)
  • Método 2 matriz lineal
  • más sencilla de declarar pero más complicada de
    utilizar (un solo índice)
  • int matriz, indice, filas, cols
  • ...
  • matriz (int ) malloc (filascolssizeof(int))
  • for (i0 iltfilas i)
  • for (j0 jltcols j)
  • indice icols j
  • matrizindice 0
Write a Comment
User Comments (0)
About PowerShow.com