Está en la página 1de 65

Fundamentos de

Programación
Tema 5
Estructuras estáticas

Administración de Sistemas Informáticos 17/10/08 13:16


Contenido
1. Introducción
2. Concepto de tabla
3. Tablas unidimensionales: Vectores
4. Búsqueda y ordenación interna
5. Cadenas
6. Funciones de E/S para cadenas
7. Funciones para tratamiento de cadenas
8. Macros y funciones para el tratamiento de cadenas
9. Tablas bidimensionales: Matrices
10. Tablas tridimensionales: Poliedros
11. Estructuras

Administración de Sistemas Informáticos 17/10/08 13:16


1. Introducción
 Hasta ahora se han utilizado sólo datos de tipo
simple (numéricos, carácter, ...).
 En numerosas ocasiones es necesario utilizar un
conjunto de datos relacionados entre sí.
 Un conjunto de datos homogéneos (del mismo
tipo) que se tratan como una sola unidad se
denomina estructura de datos.
 Si reside en la memoria central del ordenador se
denomina estructura de datos interna.
 Si reside en un soporte externo, se denomina
estructura de datos externa.
Administración de Sistemas Informáticos 17/10/08 13:16
1. Introducción
 Las estructuras de datos internas pueden ser:

– Estáticas: Tienen un número fijo de elementos


determinado desde la declaración de la estructura en
el comienzo del programa.

– Dinámicas: Tienen un número de elementos que


varía a lo largo de la ejecución del programa.

Administración de Sistemas Informáticos 17/10/08 13:16


1. Introducción
 Las estructuras internas estáticas más habituales
son las tablas (arrays o arreglos).
 Una tabla se corresponde con el concepto
matemático de vector (1 dimensión), matriz (2
dimensiones) y/o poliedro (3 o más
dimensiones). Por tanto, una tabla se puede
estructurar en una, dos o más dimensiones.
 La dimensión de una tabla coincide con el
número de índices que utiliza.

Administración de Sistemas Informáticos 17/10/08 13:16


1. Introducción
 Una tabla consiste en un número fijo y finito
de elementos, todos del mismo tipo y bajo un
nombre común para todos ellos.
0 1 2 3 4 5 6 7 ... N-1
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│Val.1│Val.2│Val.3│Val.4│Val.5│Val.6│Val.7│Val.8│ ... │Val.N│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘

 Se denomina componentes a los elementos de


una tabla, distinguiéndose cada uno por un índice
que complementa al nombre de la tabla.

Administración de Sistemas Informáticos 17/10/08 13:16


1. Introducción
 Longitud o tamaño de una tabla es el
número de componentes que contiene.
 El tipo de una tabla es el tipo de sus
componentes (numéricos, carácter, cadena,
etc).
 Los componentes de una tabla se utilizan
de la misma forma que cualquier otra
variable.

Administración de Sistemas Informáticos 17/10/08 13:16


1. Introducción
 Antes de utilizar una tabla habremos de
definirla en el entorno.
 Las tablas se clasifican según su dimensión
en:
– Unidimensionales
– Bidimensionales
– Multidimensionales

Administración de Sistemas Informáticos 17/10/08 13:16


2. Concepto de tabla
 Se denomina tabla a un conjunto finito y fijo
de elementos del mismo tipo, que se hallan
almacenados en posiciones consecutivas de
memoria.
1. Los elementos de una tabla se referencia por un
nombre común y por uno o varios índices que
determinan su posición relativa en la memoria.
 En C el primer índice que se puede utilizar es el que tiene
el valor 0
 En C el nombre de una tabla es un puntero a la
dirección de memoria de comienzo de la tabla .
 Todos los elementos de la tabla son del mismo tipo.

Administración de Sistemas Informáticos 17/10/08 13:16


2. Concepto de tabla
1. El nombre de una tabla sigue las reglas de
formación de identificadores de variables.
2. Los índices, dependiendo del lenguaje de
programación que se utilice, pueden ir encerrados
entre paréntesis o entre corchetes.
 Concretamente, el lenguaje C utiliza corchetes.
 Los índices deben ser números enteros; señalan el
orden relativo en que están almacenados los
elementos de la tabla. El número de índices
determina la dimensión de la tabla.

Administración de Sistemas Informáticos 17/10/08 13:16


2. Concepto de tabla
 Se llama longitud o tamaño de la tabla al número
total de sus elementos.
 La tabla es una estructura interna.
 La tabla es un conjunto fijo de elementos y el
número de estos elementos depende del valor
definido en el programa. Las tablas son estructuras
estáticas.
 El hecho de que la tabla sea una estructura estática
no representa ningún problema si el número de
elementos que se van a necesitar está
predeterminado. Debemos tender a
sobredimensionar.
Administración de Sistemas Informáticos 17/10/08 13:16
2. Concepto de tabla
– Las operaciones que se suelen realizar son:
– Recorrido: Proceso de cada elemento de la tabla.
– Búsqueda: Obtener la posición ocupada por un elemento
con un determinado valor.
– Ordenación: Organizar los elementos de la tabla de
acuerdo con algún criterio. Solo se realiza sobre tablas
unidimensionales: vectores.
– También se pueden insertar y/o borrar elementos de la
tabla, pero sólo de una forma lógica, nunca física.
 Puesto que las tablas son habitualmente fáciles
de recorrer y de buscar en ellas y de ordenar,
suelen utilizarse para almacenar conjuntos de
datos relativamente fijos.
Administración de Sistemas Informáticos 17/10/08 13:16
3. Tablas unidimensionales
 Los vectores son tablas de una sola dimensión,
 Se referencia con el nombre de la tabla y un índice.
 Los índices son números enteros y consecutivos
que indican la posición relativa de cada uno de
los elementos dentro del vector.
 El valor del primer índice (en el lenguaje C) es el 0 y no se
puede variar.
 El identificador de cada elemento (nombre e
índice) determina la posición de memoria donde
se encuentra almacenado su contenido o valor.
 El vector se denomina tabla unidimensional
porque tiene un sólo índice de referencia.
Administración de Sistemas Informáticos 17/10/08 13:16
3. Tablas unidimensionales:
Vectores
 Definición
– Clase de almacenamiento
– Tipo de cada uno de los elementos
– Identificador del vector
– Número de elementos (entre corchetes, en C).
– Formato:
clase tipo identificador[num_elementos]
– Es importante, pues, recordar que el 1º elemento de
un vector corresponde al índice 0.

Administración de Sistemas Informáticos 17/10/08 13:16


3. Tablas unidimensionales:
Vectores
– La definición de un vector indica al compilador la
cantidad de memoria que tiene que reservar. El
compilador lo calcula multiplicando el número de
elementos por el espacio que ocupa cada uno.
– Pueden inicializarse tanto vectores globales (externos)
como locales, sean estáticos o no. Las tablas estáticas
y las externas son inicializadas a 0 por defecto.
 Para inicializarlos se coloca la lista de valores entre llaves y
separados por comas.
 Ejemplo:
short int meses[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

Administración de Sistemas Informáticos 17/10/08 13:16


3. Tablas unidimensionales:
Vectores
– Cuando el número de valores es menor que el
tamaño del vector, el resto de los elementos no
inicializados lo hacen a 0.
– Si el número de valores es mayor que el
tamaño declarado se produce un error.
– Si se emplean corchetes vacíos en la
inicialización, el compilador cuenta el número
de valores de la lista, y ese será su tamaño.

Administración de Sistemas Informáticos 17/10/08 13:16


3. Tablas unidimensionales:
Vectores
– El operador sizeof proporciona el tamaño
en bytes del vector.
– Para obtener el número de elementos:

sizeof identif_array/(sizeof(tipo_array))

 En C no se comprueban los límites de


las tablas.

Administración de Sistemas Informáticos 17/10/08 13:16


3. Tablas unidimensionales:
Vectores
 Paso de vectores a funciones.
– Cuando se quiere pasar una tabla unidimensional a
una función hay que pasarle la dirección del primer
elemento pues en C no se puede pasar el vector
completo como argumento a una función.
– El parámetro actual puede ser el nombre del vector
o la dirección de memoria del primer elemento.
– El parámetro formal se puede declarar como:
 un vector no delimitado.
 el puntero constante correspondiente al nombre del vector.

 un vector delimitado.

– Todas indican un puntero al primer elemento.


Administración de Sistemas Informáticos 17/10/08 13:16
4. Búsqueda y ordenación interna
 Una de las operaciones más utilizadas con
colecciones de datos es la búsqueda de un dato
concreto de entre todos ellos.
 La eficiencia de una búsqueda dependerá
– del grado de ordenación previa.
– de la idea que podamos tener sobre la ubicación de la
información a buscar.
 Existen una serie de algoritmos comunes tanto
para la búsqueda de un dato como para la
ordenación de una colección de ellos.

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 No hay que desarrollar un algoritmo que
funcione, hay que buscar el que lo haga de
la mejor forma posible.
 Los algoritmos de búsqueda pueden ser:
– Para datos no ordenados:
 Búsqueda lineal
– Para datos ordenados.
 Búsqueda lineal
 Búsqueda binaria o dicotómica

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 Los métodos relacionados aquí se utilizan con
estructuras de datos internas unidimensionales
(tablas), es decir, no se utilizan para el caso de
ficheros en disco.
 Se considera que en los vectores no hay valores
repetidos.
 Utilizaremos estas declaraciones para la
elaboración de todos los algoritmos:
#define N 10
int v[N];

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 Las funciones devuelven el índice del elemento a
buscar o –1 en caso de no encontrarse.

 Intuitivamente, el algoritmo de búsqueda lineal


es el siguiente:
“Se recorre el vector desde el primer elemento al
último hasta encontrar un elemento cuyo
valor coincida con el buscado o hasta que se
acabe el vector. En este último caso, el
algoritmo debe indicar la no existencia de
dicho valor en el vector”
Administración de Sistemas Informáticos 17/10/08 13:16
int Busqueda_Lineal(int v[],int elementos, int valor_a_buscar)
{
int i;
for (i=0;i<elementos-1 && v[i]!=valor_a_buscar;i++);
if (v[i]==valor_a_buscar)
return i;
else
return -1;
}

/*Cuando el vector de búsqueda está ordenado se consigue un algoritmo


más eficiente, cambiando en la comparación de desigualdad (!=) por la de
orden (< o >, dependiendo del tipo de ordenación).*/

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 Búsqueda binaria o dicotómica.
– Este algoritmo es válido sólo y exclusivamente para
vectores ordenados y consiste en “comparar en
primer lugar con el componente central del vector
que, si no es igual al valor buscado, se reduce el
intervalo de búsqueda a la mitad derecha o
izquierda, según donde pueda encontrarse el valor
a buscar. El algoritmo termina si se encuentra el
valor buscado o si el tamaño del intervalo de
búsqueda queda anulado”.

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 En los casos en que existan repeticiones en
el vector, del valor buscado, este algoritmo
obtendrá uno de ellos aleatoriamente según
los lugares que ocupen, los cuales
necesariamente son consecutivos.

Administración de Sistemas Informáticos 17/10/08 13:16


int Busqueda_Dicotomica(int v[],int elementos, int valor_a_buscar)
{
int izq=0, der=elementos-1, cen=(izq+der)/2;
while (v[cen]!=valor_a_buscar && izq<der)
{
if (v[cen]>valor_a_buscar)
der=cen-1;
else
izq=cen+1;
cen=(izq+der)/2;
}
if (v[cen]==valor_a_buscar)
return cen;
else
return -1;
}
4. Búsqueda y ordenación interna
Algoritmos de ordenación:

 Factores de eficiencia:
– El número de comparaciones, C.
– El número de movimientos de las mismas, M.
– Son función del número N de elementos.

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 Clasificación
– Métodos directos:
 Método de inserción directa
 Método de selección directa
– Métodos de intercambio
 burbuja
 burbuja con switch
 sacudida
 con incrementos decrecientes. Método Shell.
– Métodos avanzados
Mucho más complejos que los anteriores. Entre ellos encontramos
el método QuickSort (qsort()), basado en un algoritmo recursivo
(técnica de programación que permite la llamada de funciones a sí
mismas), que veremos en temas posteriores.

Administración de Sistemas Informáticos 17/10/08 13:16


4. Búsqueda y ordenación interna
 Inserción directa (método de la baraja).
– Se toman los elementos del vector desde el segundo
hasta el último y con cada uno de ellos se repite:
 Se copia del vector el elemento I-ésimo.
 Desde el anterior al que estamos tratando y hasta el

primero, desplazamos un lugar a la derecha todos los que


sean mayores para buscar su hueco.
 Encontrado el hueco del elemento, lo insertamos en él.

– Cuando tratamos al elemento i-ésimo, todos los


anteriores se encuentran ordenados.

Administración de Sistemas Informáticos 17/10/08 13:16


void Ordena_Insercion(int v[], int elem)
{
int i,j,aux;
for (i=1;i<elem;i++)
{
aux=v[i];
j=i-1;
while (v[j]>aux && j>0)
{
v[j+1]=v[j];
j--;
}
if (v[j]>aux)
{
v[j+1]=v[j];
} v[j]=aux;
}
else
v[j+1]=aux;
}
}
4. Búsqueda y ordenación interna
 Intercambio directo o “burbuja”
– Se recorre sucesivamente el vector comparando los
elementos consecutivos e intercambiándolos
cuando estén descolocados.
 Se puede hacer de izquierda a derecha (desplazando los
valores mayores hacia su derecha) o de derecha a izquierda
(desplazando los valores menores hacia su izquierda).
– Consiste en realizar pasadas sucesivas direccionando
desde el primer elemento hasta el penúltimo,
comparando cada uno de ellos con el siguiente.
– Se va colocando el menor elemento en la primera
posición, y por tanto excluido del resto.

Administración de Sistemas Informáticos 17/10/08 13:16


void Ordena_Burbuja(int v[], int elem)
{
int i,j,aux;
for (i=0;i<elem-1;i++)
for (j=elem-1;j>i;j--)
if (v[j]<v[j-1])
{
aux=v[j];
v[j]=v[j-1];
v[j-1]=aux;
}
}
}
void Ordena_Burbuja_Switch(int v[], int elem)
{
int i,j,aux,sw;
i=0;
sw=1;
while (i<elem-1 && sw)
{
sw=0;
for (j=elem-1;j>i;j--)
if (v[j]<v[j-1])
{
aux=v[j];
}
v[j]=v[j-1];
v[j-1]=aux;
sw=1;
}
i++;
}
}
4. Búsqueda y ordenación interna
 El método burbuja acerca cada elemento paso a
paso. Para vectores pequeños puede ser
aceptable.
 Shell, denominado así en honor a su inventor
consiste en comparar elementos separados por un
intervalo grande.
– Inicialmente, ese intervalo corresponde con la mitad
de la longitud del vector.
– Posteriormente, cuando ya todos los elementos
separados por esa distancia están ordenados, se divide
ese intervalo por dos y se opera de igual forma hasta
que, finalmente, el salto se reduzca a 1.
Administración de Sistemas Informáticos 17/10/08 13:16
void Ordena_Shell(int v[], int elem)
{
int i,d,sw,aux;
d=elem;
while (d!=1)
{
d/=2;
sw=1;
while (sw)
{
sw=0;
for (i=0;i<elem-d;i++)
if (v[i]>v[i+d])
{
aux=v[i];
v[i]=v[i+d];
}
v[i+d]=aux;
sw=1;
}
}
}
}
4. Búsqueda y ordenación interna
 EJERCICIO
– Ordenación por Selección Directa:
 El método consiste en “repetir el siguiente
proceso desde el primer elemento hasta el
penúltimo: se selecciona el componente de
menor valor de todos los situados a la derecha
del tratado y se intercambia con éste”.

Administración de Sistemas Informáticos 17/10/08 13:16


5. Cadenas
 Las cadenas en C son vectores de caracteres
que terminan con el carácter nulo, o sea, ‘\0‘.
 C soporta la mayoría de las funciones más
potentes de manipulación de cadenas.
 Cadenas constantes
– Caracteres encerrados entre comillas.
– Se almacenan en posiciones adyacentes junto al ‘\0’
que no es necesario añadir.
– El modo de almacenamiento es static.
– Se utilizan cadenas constantes como argumentos de
las funciones puts()-muestra la cadena más un salto
de línea- , printf(), etc..
Administración de Sistemas Informáticos 17/10/08 13:16
5. Cadenas
 Cadenas constantes
– También pueden ser asignadas a macros:
 Ejemplo:

– #define VOCALES "aeiou"


– .........
– puts(VOCALES);
– puts("Esta es una tira");
– printf(“%s\n%s\n”, VOCALES, "Esta es
otra tira");

Administración de Sistemas Informáticos 17/10/08 13:16


5. Cadenas
 Cadenas constantes
– La frase entera entrecomillada actúa como
puntero al lugar donde se ha almacenado la
misma.
 Ejemplo:

– printf("%s,%u,%c\n“,"Domínguez","Delga
do", *"a tí dedicado");
– dará como resultado:
• Domínguez,4239842,a

Administración de Sistemas Informáticos 17/10/08 13:16


5. Cadenas
 Vectores de caracteres.
– Para inicializar un vector de caracteres se escribe...
 char tira1[]= {'L', 'e', 'n', 'g', 'u',
'a', 'j', 'e', ' ', 'C', '\0'};
 static char tira2[]= {'L‘, 'e', 'n', 'g',

'u', 'a', 'j', 'e', ' ', 'B', '\0'};


 extern char tira3[]= {'L', 'e', 'n', 'g',

'.', ' ', 'C', ’+’, ’+’, '\0'};


– Observese el carácter nulo al final de la cadena.

Administración de Sistemas Informáticos 17/10/08 13:16


5. Cadenas
 Vectores de caracteres.
– Existe una forma más corta de inicialización:
 char tira1[] = "Lenguaje C";
 static char tira2[] = "Lenguaje
B";
 extern char tira3[] = "Leng.
C++”;
– No es necesario indicar el tamaño del vector
puesto que el compilador cuenta los caracteres
y prepara el tamaño correspondiente.

Administración de Sistemas Informáticos 17/10/08 13:16


5. Cadenas
 Vectores de caracteres.
– Si especificamos su tamaño, el número de elementos
declarados debe ser como mínimo superior en 1 a la
longitud de la cadena.
 Si el tamaño es inferior se producirá un error; si es superior,
los elementos sobrantes se inicializan a '\0'.
– Para un vector no inicializado:
 char nombre[81];
 Se tiene que declarar obligatoriamente el tamaño.

 Se deberá controlar la entrada de caracteres para que su


número no sobrepase el espacio reservado (el tamaño menos
1).

Administración de Sistemas Informáticos 17/10/08 13:16


6. Funciones de E/S para cadenas
 Función gets()
– Captura cadenas desde el teclado; la entrada termina
al pulsar INTRO.
– La cadena es colocada en la dirección apuntada por su
argumento, un puntero a carácter.
– El último carácter pulsado, el retorno de carro ( ‘\r’ )
no pasa a formar parte de la cadena, siendo sustituido
por el carácter nulo ( ‘\0’ ).
– A diferencia de scanf(), la función gets() sí
permite que se introduzcan espacios en blanco al
entrar la cadena.

Administración de Sistemas Informáticos 17/10/08 13:16


6. Funciones de E/S para cadenas
 Función gets()
– Su prototipo es:
 char *gets (char *cadena);
– Devuelve un puntero a la cadena leída.
– Un problema importante que puede aparecer al usar
esta función es sobrepasar los límites de la tabla que
se le pasa como argumento.
– Como alternativa, y para evitar este tipo de
problemas, se puede usar la función fgets() que se
estudiará más adelante.

Administración de Sistemas Informáticos 17/10/08 13:16


6. Funciones de E/S para cadenas
 Función puts()
– La función puts() da salida sólo a cadenas
más eficientemente que printf().
– puts() añade automáticamente un retorno
de carro.
– Su prototipo es:
int puts (char * cadena) ;
– Devuelve 0 si se ejecuta correctamente y otro
valor en caso contrario.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Funciones para tratamiento
de cadenas
 Utilizan el archivo de cabecera
string.h.
– Función strcat()
char *strcat (char *cad1, const char
*cad2);
 Concatena una copia de cad2 al final de cad1 y
añade carácter \0.
 Esta función devuelve cad1 además en cad1 queda:
cad1 + cad2.
 No se realizan comprobaciones de límites.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Funciones para tratamiento
de cadenas
– Función strcmp()
int strcmp (const char *cad1, const char *cad2);
 Esta función compara, según el orden establecido por la tabla
ASCII, dos cadenas y devuelve un entero que si:
– Menor que 0 cad1 es menor que cad2
– 0 cad1 es igual que cad2
– Mayor que 0 cad1 es mayor que cad2
– Función strcpy()
char *strcpy (char *cad1, const char *cad2);
 copia el cad2 en cad1.
 devuelve un puntero a cad1.

 Si cad1 y cad2 se solapan, el comportamiento de la función


es indefinido.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Funciones para tratamiento
de cadenas
– Función strncat()
char *strncat(char* cad1,const char* cad2,size_t cuenta);
 El tipo size_t está definido, mediante typedef,
como un entero sin signo.
 Concatena a la cadena apuntada por cad1 un

máximo de cuenta caracteres de cad2 y al final


un carácter nulo.
 No modifica la cadena cad2.

 strncat devuelve cad1.

 No realiza comprobaciones de límite.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Funciones para tratamiento
de cadenas
– Función strncpy()
char *strncpy(char *dest,const char *fuente,size_t cuenta);
 Copia un máximo de cuenta caracteres de la fuente al
destino.
 strncpy devuelve un puntero a dest.

 Cuando se solapan las cadenas dest y fuente, el


comportamiento de la función strncpy es indefinido.
 Si fuente tiene menos caracteres que cuenta, se añaden
nulos al final de dest hasta que se hayan copiado cuenta
caracteres.
 Si fuente tiene más caracteres de lo que indica cuenta,
se copian cuenta caracteres al inicio de dest y sigue con
los caracteres que contenía inicialmente la cadena fuente.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Funciones para tratamiento
de cadenas
– Función strnset()
char *str nset (char *cad, int c, size_t cuenta);
 Define los primeros cuenta caracteres de la cadena
apuntada por cad con el valor de c.
 Devuelve cad.

– Función strstr()
char *strstr (const char *cad1, const char *cad2);
 Devuelve un puntero a la primera ocurrencia de la cadena
apuntada por cad2 (sin considerar el carácter nulo de fin de
cadena) dentro de la cadena apuntada por cad1.
 Devuelve un puntero nulo si no encuentra ninguna

coincidencia.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Macros y funciones para
tratamiento de cadenas
 Están
incluidas en ctype.h.
 Macro isalnum()
int isalnum (int c);
– Devuelve un valor distinto de 0 si su argumento es
una letra del alfabeto (mayúscula o minúscula) o un
dígito; en caso contrario devuelve 0.
 Macro isalpha()
int isalpha (int c);
– Devuelve un valor distinto de 0 si su argumento es
una letra del alfabeto (mayúscula o minúscula); en
caso contrario devuelve 0.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Macros y funciones para
tratamiento de cadenas
 Macro isdigit()
int isdigit (int c);
– Devuelve un valor distinto de 0 si su argumento es un
dígito; en caso contrario, devuelve 0.
 Macro islower()
int islower (int c);
– Devuelve un valor distinto de 0 si su argumento es
una letra minúscula; en caso contrario, devuelve 0.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Macros y funciones para
tratamiento de cadenas
 Macro ispunct()
int ispunct (int c);
 Devuelve un valor distinto de 0 si su argumento
es un carácter de puntuación o un espacio en
blanco; en caso contrario, devuelve 0.
 Macro isspace()
int isspace (int c);
– Devuelve un valor distinto de 0 si su argumento es un
espacio en blanco, un retorno de carro, un tabulador
horizontal, un tabulador vertical, un carácter de salto
de línea o un carácter de nueva línea; en caso
contrario, devuelve 0.
Administración de Sistemas Informáticos 17/10/08 13:16
7. Macros y funciones para
tratamiento de cadenas
 Macro isupper()
int isupper (int c);
– Devuelve un valor distinto de 0 si su argumento es
una letra mayúscula (de la «A» a la «Z»); en caso
contrario, devuelve 0.
 Función tolower()
int tolower (int c);
– Si el argumento «c» es un letra mayúscula, esta
función devuelve la letra minúscula equivalente a «c»;
en cualquier otro caso, devuelve «c» sin modificar.

Administración de Sistemas Informáticos 17/10/08 13:16


7. Macros y funciones para
tratamiento de cadenas
 Función toupper()
int toupper (int c);
– Si el argumento «c» es un letra minúscula,
esta función devuelve la letra mayúscula
equivalente a «c»; en cualquier otro caso,
devuelve «c» sin modificar.

Administración de Sistemas Informáticos 17/10/08 13:16


8. Tablas bidimensionales:
Matrices
 Se declaran utilizando el formato general:
tipo nombre_array [primera_dimensión][segunda_dimensión];

– Ejemplo:
float lluvia [5][12];
 Se inicializan colocando los valores de cada fila
entre llaves y separados por comas. Los valores
de diferentes filas se separan por comas. Todo el
conjunto se encierra entre un par de llaves
externo.
– Ejemplo:
int puntos[3][4]={{1,9,3,8},{2,6,4,6},{9,0,1,2}};

Administración de Sistemas Informáticos 17/10/08 13:16


8. Tablas bidimensionales:
Matrices
– Si entre un par de llaves hay más elementos se
producirá un error; si hay menos se inicializan a 0.
 Ejemplo:
int puntos [4][5]={ {1,2} , {5,6,7,2,0} , {9,0,4} };
– Es posible inicializar la matriz colocando sólo el par
de llaves externas.
 Ejemplo:
– int puntos [4] [5] = { 1,2,0,0,0,5,6,7,2,0,9,0,4};
 En este caso la tabla bidimensional se va llenando en orden
por filas.

Administración de Sistemas Informáticos 17/10/08 13:16


8. Tablas bidimensionales:
Matrices
 Paso de tablas bidimensionales a funciones
– Cuando se utiliza una tabla bidimensional como
argumento de una función, se pasa un puntero al
primer elemento del mismo.
– Se debe definir como mínimo la longitud de la
segunda dimensión, debido a que el compilador
necesita conocer la longitud de cada fila para indexar
la tabla correctamente.
– También se puede especificar la primera dimensión,
pero no es necesario.

Administración de Sistemas Informáticos 17/10/08 13:16


9. Tablas tridimensionales:
Poliedros
 Se declaran utilizando el formato general:
tipo nombre_array [tam_1ra_dim] [tam_2da_dim]
[tam_3ra_dim];
 Cuando se pasa una tabla tridimensional a
una función, el argumento efectivo es el
nombre de la tabla y en los argumentos
formales se puede especificar una tabla en
la que hay que especificar
obligatoriamente todas las dimensiones,
excepto la primera.

Administración de Sistemas Informáticos 17/10/08 13:16


11. Estructuras
 Una estructura es un conjunto de variables a las
que se hace referencia bajo un mismo nombre,
siendo una forma eficaz de mantener agrupada
una información relacionada. Las variables que
componen la estructura se llaman miembros de
la estructura, o también, elementos o campos.
 Una declaración de estructura forma una plantilla
que puede utilizarse para crear estructuras de
objetos.
 La palabra reservada struct indica al compilador
que se va a definir una estructura.

Administración de Sistemas Informáticos 17/10/08 13:16


11. Estructuras
 Por ejemplo, en una lista de personas la información
relativa al nombre y teléfono se puede representar como
una estructura.

struct agenda
{
char nombre[30];
char telefono[9];
};

 La declaración anterior determina una “plantilla” que


podremos usar luego para declarar objetos de nuestro
programa. Obsérvese que termina con un punto y coma.

Administración de Sistemas Informáticos 17/10/08 13:16


11. Estructuras
 Para declarar una variable con la estructura
anterior, se debería escribir...

struct agenda mis_amigos;

 Esto declara una variable llamada mis_amigos


del tipo de la estructura agenda, es decir, que
realmente ocupa la memoria suficiente como
para almacenar dos valores, el nombre y el
teléfono.

Administración de Sistemas Informáticos 17/10/08 13:16


11. Estructuras
 Si sólo se necesita una variable de un tipo de
estructura, no es necesario indicar la etiqueta al
definir la estructura. Esto significa que
struct
{
char nombre[30];
char telefono[9];
} mis_amigos;

declara una variable llamada mis_amigos del


tipo de estructura que le precede.
Administración de Sistemas Informáticos 17/10/08 13:16
11. Estructuras
 Un miembro de la estructura se referencia
indicando el nombre de variable de la estructura,
seguido por un punto y, por último, el nombre
del miembro.

strcpy
mis_amigos.telefono,“123456789");
gets(mis_amigos.nombre);
scanf(“%s”, mis_amigos.telefono);
Administración de Sistemas Informáticos 17/10/08 13:16
11. Estructuras
 Posiblemente, la utilización más común de las
estructuras son las tablas de estructuras. Por
ejemplo, para declarar un vector de 100
elementos del tipo mis_amigos:
struct agenda mis_amigos[100];
 Esto crea 100 variables con la organización de la
estructura de tipo mis_amigos.
 Para acceder a una determinada estructura del
vector agenda, se indexa el nombre de la variable
vector. Por ejemplo, para mostrar el telefono de
la tercera estructura, se puede hacer lo siguiente
printf (“%s”, mis_amigos[2].telefono);
Administración de Sistemas Informáticos 17/10/08 13:16

También podría gustarte