PRÁCTICAS de Lenguaje C Curso 2002-2003 E.P.S.

Anuncio
INGENIERÍA INFORMÁTICA
Lenguajes de Programación
E.P.S.
PRÁCTICAS de Lenguaje C
Curso 2002-2003
Tema:
Estructuras o Registros
Lenguajes de programación
Estruc turas
1. Estructuras (o Registros)
En C (y en la mayoría de los lenguajes), una estructura es un nuevo tipo de variable
formado por una colección de variables más sencillas y que se referencia usando un
único nombre. De está forma se consigue mantener agrupada la información
relacionada. Las variables que componen esta estructura se denominan campos o
miembros de la estructura
1.1 Declaración
Las estructuras se declaran como se muestra a continuación:
struct nombre_estructura{
tipo_1 variable1 ;
tipo_2 variable2 ;
·
·
·
tipo_N variableN ;
};
Obsérvese que la declaración acaba con un punto y coma. La declaración de una
estructura forma una plantilla que se utiliza para crear variables de tipo “struct
nombre_estructura”. En general cada campo de la estructura está relacionado con los
demás. Por ejemplo: la información relativa a un CD de música estaría normalmente
representada por una estructura. En código siguiente muestra como declarar una
estructura con los campos adecuados
sruct CD{
char nom_grup[20];
char nom_disc[50];
char discografica[20];
};
La palabra struct indica al compilador que se está declarando una estructura.
Este código NO crea la variable, tan sólo define la forma que tendrán los datos. Si
deseamos declarar una variable de tipo struct CD necesitan escribir:
struct CD Disc_1;
Ahora, acabamos de crear una variable de tipo struct CD denominada Disc_1.
También es posible declarar una (o más) variables de tipo struct CD en el momento de la
declaración de la estructura:
struct CD{
char nombre_grupo[20];
char nombre_disco[50];
char discografica[20];
} Disc_1, Disc_2, ··· , Disc_M;
Practicas
Pàg. 2
Lenguajes de programación
Estruc turas
Ejercicio 1:Añadir a la estructura struct CD un campo en el que figure el año en
que se publicó el disco.
1.2 Acceso a los miembros de una estructura
A los miembros individuales de una estructura se accede mediante el operador punto .
La sintaxis es:
nombre_de_la_variable_estructura.nombre_del_camp
De esta forma, cualquier campo puede ser tratado como una variable normal y corriente.
Así podemos asignar el valor “Vomito” al campo nombre_grupo CD de la variable
Disc_2 usando la sentencia:
Disc_2.nombre_grupo = ”Vomito”;
Y si deseamos mostrar el contenido de la variable por pantalla usaremos:
printf(“%s”, Disc_2.nombre_grupo);
Ejercicio 2: Escribir un programa en el que (i) definamos una estructura de tipo CD
(la que usamos en el ejercicio 1) y una variable tipo struc CD. (ii) Se pregunte al
usuario por el valor de cada campo, (iii) Se rellene la estructura con estos valores y
(iv) se muestren estos valores por pantalla. (No te olvides de adjuntar todos los
programas que escribáis o modifiquéis con la memoria de la práctica )
1.3 Arrays de estructuras.
Sigamos trabajando con la estructura CD. Por ahora, para almacenar la información
relativa a cada CD necesitamos declarar una variable tipo struct CD. Así, por ejemplo, para
definir cinco CDs escribimos:
struct CD Disc_1, Disc_2, Disc_3, Disc_4, Disc_5 ;
En este caso en el que estamos trabajando con 5 CDs la solución es aceptable pero, que
pasa si tenemos 256 CDs? Tenemos que declarar 256 variables? Afortunadamente no es
necesario puesto que es posible declarar arrays de estructuras. Para ello se usa el código
struct CD Disc[256];
Con esta última línea hemos definido un vector que contiene 256 variables de tipo
struct CD como se muestra en la siguiente figura
Practicas
Pàg. 3
Lenguajes de programación
Estruc turas
Disc
Disc[0] Disc[1] Disc[2]
Disc[255]
nombre_grupo
nombre_disco
Discografica
Agno
Disc[3]
Disc[3]
Disc[3]
2. Enumeraciones
Una enumeración es un conjunto de constantes enteras a las cuales hemos asignado un
nombre. Y que especifican todos los valores válidos que una variable puede adquirir. El
siguiente ejemplo aclarará la idea
Ejemplo 1 :
Supongamos que deseamos definir una variable que almacene el día de la semana.
Usando la palabra reservada enum declaramos:
enum Semana{lunes,martes,miercoles,jueves,viernes,sabado,domingo}dias;
Lo que acabamos de hacer es declarar una variable llamada dias de tipo struct
semana. Concretamente hemos asignado:







el valor
el valor
el valor
el valor
el valor
el valor
el valor
0
1
2
3
4
5
6
al nombre
al nombre
al nombre
al nombre
al nombre
al nombre
al nombre
lunes
martes
miércoles
jueves
viernes
sábado
domingo
( Recordad que en C siempre se empieza a contar a partir de 0)
De esta forma a partir de ahora a la variable días podremos asignarle indistintamente
los valores: lunes, martes, miercoles, jueves, viernes, sábado,
domingo ó 0, 1, 2, 3, 4, 5, 6. Esta forma de programar mejora la calidad del
código y facilita su comprensión.
Practicas
Pàg. 4
Lenguajes de programación
Estruc turas
Ejemplo 2 : Edita y ejecuta el siguiente código
#include <stdio.h>
void main(void)
{
enum
Semana{lunes,
martes,miércoles,jueves,viernes,sabado,domingo} dias;
int dia;
for(dia=lunes;dia<=domingo;dia++)
if (dia<=viernes)
printf("A currar!!!!\n");
else
printf("FIESTA!!!!!!!\n");
}
Ejercicio 3 : Escribe un programa similar al anterior utilizando los doce meses del
año en lugar de los días de la semana. Modificar el bucle anterior de forma que
imprima “vacaciones” para los meses de Julio, Agosto y Septiembre y “A currar”
para el resto de los meses.
3. typedef
C permite definir explícitamente nombres nuevos para cualquier tipo de datos usando la
palabra reservada typedef. Realmente no se crean nuevos tipos de datos sino que damos
un alias a un tipo ya existente. La sintaxis es:
typedef tipo_existente nuevo_nombre;
Ejemplo 3 :
typedef int TipoEntero;
typedef float TipoReal;
typedef char TipoCaracter;
En estas lineas decimos que declarar una variable como int o TipoEntero es lo
mismo. (Lo mismo ocurre con float o TipoReal y char o TipoCaracter)
Las declaraciones hechas en el ejemplo 3 no son particularmente útiles pero hay un caso
en el que typedef es especialmente útil: cuando se utiliza en conjunción con
estructuras y enumeraciones.
Por ejemplo:
Ejemplo 4 :
En lugar de definir una variable de tipo struct complex usando el código:
struct complex{
float part_real;
float part_imaginaria;
};
Practicas
Pàg. 5
Lenguajes de programación
Estruc turas
struct complex NumComplex;
Podemos usar typedef y escribir
typedef struct{
float part_real;
float part_imaginaria;
} complex;
complex NumComplex;
De esta forma no tenemos que usar la palabra struct cada vez que queramos definir
una variable de tipo complex.
El uso de typedef hace el código más legible y cómodo de escribir (typedef también
se aplica a enumeraciones
RECORDAD typedef NO crea variables nuevas, tan solo crea alias de tipos ya
existentes.
Ejercicio 4 : Escribir un programa que: (i) declare un array (de no más de 10
elementos) tipo CD (usando typedef), (ii) rellene esta estructura con datos
suministrato desde el teclado por el usuario, (iii) Una vez los datos esten
suministrados el programa entrará en un bucle while que: (a) solicitará un nombre
de grupo al usuario y en el caso de que exista algún/os CDs grabados por este grupo
muestre el resto de los datos de ese/esos CD/CDs por pantalla, (b) Si el usuario
introduce la palabra clave FIN el programa debe terminar.
Para hacer comparaciones de cadenas la función strcmp()es muy util. No os
olvideis de agregar la libreria string.h.
Practicas
Pàg. 6
Lenguajes de programación
Estruc turas
Agradecimientos: Esta práctica está basada en las prácticas de Ingeniería informática
realizadas por el Dept. Informàtica, Escola Tècnica Superior d'Enginyeria, Universitat
Autònoma de Barcelona
Practicas
Pàg. 7
Descargar