Linguaxe de programación C (VIII). Estruturas de datos (II)

Nesta ocasión analizaremos tres novos tipos de datos: estruturas ou rexistros, texturas e enumerados.

ESTRUTURAS, EMBALAXES E ENUMERADOS

SINÓNIMOS

No capítulo anterior comezouse a analizar os datos estruturados, nos que se expuxeron táboas e demostradores. Nesta ocasión analizaremos tres novos tipos de datos: estruturas ou rexistros, texturas e enumerados.

Estruturas

Mentres que na táboa todos os datos son do mesmo tipo, na estrutura ou rexistro hai un conxunto de datos que non deben ser do mesmo tipo. Os datos que compoñen a estrutura corresponden a unha unidade ou elemento, o tipo de datos máis común que se almacena no disco. No ficheiro da biblioteca, por exemplo, hai un rexistro (ou estrutura) de cada libro, onde hai código, título, escritor, número de páxinas, etc. (datos de distinto tipo).

Programa 1. Definición e manexo de estruturas.

Dado que é imposible utilizar un índice paira determinar un dato na estrutura comparándoo coas táboas, a cada dato ou campo asígnaselle un nome, polo que paira identificar un dato deberase especificar a estrutura e os nomes do campo.

A linguaxe C utiliza a palabra crave e o operador “struct” paira manexar estruturas.

Do mesmo xeito que noutros tipos de datos, diferenciaremos a definición e uso das estruturas, pero neste caso a definición realizarase en dous pasos, xa que mentres no primeiro defínese a estrutura abstracta cos campos correspondentes (definición da estrutura), no segundo definirase a (s) variable (s) deste tipo.

No programa 1 definimos e utilizamos o rexistro do ficheiro da biblioteca.

Por tanto, como se pode observar, os nomes e tipos dos campos da definición da estrutura aparecen entre os distintos reis e}, struct e nome por diante e por detrás. No uso, pola contra, una vez definida inicialmente a variable deste tipo, especifícase a variable de representación dos campos, o operador e o nome do campo.

Se existen dúas variables do mesmo tipo de estrutura, a asignación entre elas cuns compiladores é posible por unha soa asignación, mentres que con outros se debe completar zonalmente. Con todo, en contra do que ocorría coas táboas, o nome dunha variable de tipo estrutural indica o seu valor e non a súa referencia. Por tanto, ao determinar una estrutura como parámetro especificaráselle previamente e o que se intercambiará será o seu índice.

Estruturas e demostradores

Pódense combinar estruturas e demostradores. Por unha banda, o compoñente dunha estrutura pode ser un demostrador e, por outro, como xa se comentou anteriormente, na estrutura utilízanse demostrativos, sobre todo nas chamadas de funcións.

A modo de exemplo, pensemos que paira escribir a estrutura anterior, a da biblioteca, temos una función e como parámetro a referencia da estrutura do libro. Esta función defínese no programa 2 e en lugar de utilizar o operador utilizarase o operador Previa, xa que (* demostrador). o campo e o campo de demostradores son equivalentes a C. No primeiro programa substituiríase a orde printf pola seguinte chamada:

print_lib_bat ( liburu)

Estruturas cavadas

Programa 2. Función que imprime a estrutura do libro.

A utilización de demostradores estruturais permite referenciar nunha estrutura outra variable da mesma estrutura. Isto é moi utilizado paira definir e utilizar listas, filas, pilas, etc.

No programa 3 preséntase una estrutura e una función utilizada paira definir a árbore binario de strings. A función escribe a árbore de esquerda a dereita utilizando o algoritmo recursivo.

Programa 3. Exemplo dunha estrutura complexa.

Embalaxes

Os mesmos axentes analizados nas estruturas de definición e uso das embalaxes (. A pesar da utilización de - ), o obxectivo deste tipo de datos é radicalmente distinto, xa que aínda que os campos descritos en ambos poden ser de distinto tipo, nas recompilacións estes campos son interpretacións diferentes do tipo que corresponde a un único campo, mentres que nas estruturas son compoñentes dun conxunto. Por tanto, ao ler un dato de tipo recompilación só se poderá utilizar un dos campos definidos no mesmo. Aínda que este tipo utilízase pouco, o seu uso máis estendido débese a que se gasta menos memoria paira tratar o lido dun ficheiro como un tipo diferente de datos. Por exemplo, no programa 4 imprímese un anaco de memori de 80 bytes, pero segundo un código son 80 caracteres ou 20 números enteiros.

Programa 4. Exemplo de recollida.

Como se ve no programa, as envolturas pódense combinar con exhibidores e taboleiros. Desta forma enviouse o índice dunha recollida á función e os campos da recollida son táboas. As envolturas tamén se poden combinar con estruturas, xa que é posible que dentro de una estrutura haxa algunha que outra, e viceversa, que haxa estruturas dentro da envoltura.

Enumerados

Este tipo de datos utilízase cando o valor posible dunha variable é un dos compoñentes dun grupo curto. O que se fai neste tipo pódese facer con caracteres ou números enteiros (asignando un código a cada valor), pero para que o programa sexa legible ocorre un tipo de dato moi apropiado. A definición da lista componse da palabra crave enum, o nome do tipo e os posibles valores, separados por comas e entre chaves.

No programa 5 pódese ver a súa aplicación cunha función que aplica una tarifa diferente segundo o día da semana:

Programa 5. Función que utiliza enumerados.

Como dixemos no anterior, C non ten capacidade paira definir novos tipos de datos, pero algo parecido pódese facer coa posibilidade de definir sinónimos a través do operador typedef.

Con este método os programas melloran a legibilidad, pero non se crea un novo tipo de datos real, xa que a única conclusión é que en tempos de compilación trátase dunha mera tradución de strings

como no caso das macros

Desta forma pódese definir o tipo de datos booleano como se pode observar no Programa 6:

Programa 6. Uso typedef paira simular o tipo booleano.
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila