You are on page 1of 25

Programacin I

Bloque 1 Parte 2
Curso 2015/2016
SEMESTRE DE OTOO

Contenidos
Tipos de datos compuestos Array:

De una dimensin.
De varias dimensiones.

Estructuras de datos.
El tipo Puntero.

Array. Conceptos
Es una coleccin de elementos (variables) todas ellos del mismo tipo (de

tipo simple o de tipo compuesto), almacenados en posiciones contiguas de


memoria y referenciados por un nico nombre comn.
Ejemplo

Declaracin

<tipo_base> <nombre_array> [nmero_de_elementos];

int serie [5];

El acceso a un elemento individual es a travs del nombre y de un ndice

natural.

Ejemplo

serie [0] = 7;

Ejemplo

serie [4] = serie [2];

Conlleva la declaracin implcita de una variable de direccionamiento que

contiene la direccin donde est ubicado el vector.

Array en C: ejemplo declaracin


Ejemplo: creacin de un array de 5 enteros.
Ejemplo
int serie [5];

Serie

100

Direccin 0
de memoria

100

104

108

112

116

serie

Direccin M
de memoria

Dimensin de un array
Cuidado con exceder la dimensin declarada de un array
El ndice no puede ser negativo

Ejemplo

int serie [5];

Acceso fuera de la memoria reservada

Problema:
Acceso a memoria
fuera de los lmites
del array

serie [5] = 2;

11

Array en C: Asignacin
No existe una accin de asignacin que permita asignar valores a todos los

elementos de un vector de forma simultnea.


La asignacin es elemento a elemento:
Ejemplo
1 serie [2]= 5;
2

serie [3]= 6 + 5;
2

Ejemplo
3 serie [1] = serie [2] + serie [3];
3

11

16

11

Array constante
Definicin de un array constante (despus de ser inicializado no se puede

asignar de nuevo un valor error de compilacin):

const <tipo_base> <nombre_array>[n elementos] = {exp1 ,, expn};


Ejemplo
const int serie [5]= {1, 2, 3, 4, 5};
const char vocales [ ]= {'a', 'e', 'i', 'o', 'u'}; /* No es necesario poner el n de elementos */
Direccin 0
de memoria

100

104

108

112

116

120

121

122

123

124

serie

vocales

Direccin M
de memoria

Array en C: Copiar un array a otro


Deben ser del mismo tipo y dimensin. Se copia elemento a elemento

Se debe copiar elemento a elemento

Error comn

#include <stdio.h>
int main (void) {
const int porcentaje [4]= { 7, 9, 12, 16 };
int iva [4];
int i;

#include <stdio.h>
int main (void) {
const int porcentaje [4]= { 7, 9, 12, 16 };
int iva [4];

for ( i = 0 ; i < 4; i++) {


iva[i]= porcentaje[i];
}
return 0;

iva = porcentaje;
}

return 0;

No se puede asignar
a un array una
nueva direccin a la
que apuntar!!!

Array en C: ejemplo declaracin


Ejemplo: creacin de un array de 5 enteros.
Ejemplo
int serie [5];

direccionArray2

Serie

100

100

Ejemplo
int direccionArray2[] = serie;
Direccin 0
de memoria

100

104

108

112

116

serie

Direccin M
de memoria

Array en C: Comparar dos arrays


Deben ser del mismo tipo y dimensin. Se compara elemento a elemento
Se debe comparar elemento a elemento

#include <stdio.h>
int main (void) {
const int N = 4;
const int porcentaje [N] = { 7, 9, 12, 16 };
int iva [N] = { 7, 9, 12, 16 };
int i;
int iguales ;
i= 0;
do {
iguales = ( iva[i] == porcentaje[i] );
i++;
} while (iguales && i < N)

if (iguales) printf ( "son iguales" );


return 0;

#include <stdio.h>
int main (void) {
const int N = 4;
const int porcentaje [N] = { 7, 9, 12, 16 };
int iva [N] = { 7, 9, 12, 16 };
int i;
i= 0;
while ( (i< 4) && (iva[i] == porcentaje[i]) {
i++;
}

if (i == N ) printf ( "son iguales" );


return 0;

Array en C: Busqueda un elemento en un array


#include <stdio.h>
int main (void) {
const int porcentaje [4] = { 7, 9, 12, 16 };
int buscado;
int i;
/*** lectura del elemento a buscar ***/
scanf (%d, &buscado);
/***proceso de bsqueda ***/
i= 0;
while ( (i< 4) && ( porcentaje[i] != buscado) ) /*en el momento en el que una de las condiciones*/
i++;
/* no se cumpla se hace falso el predicado */
/*** anlisis ***/
if (i == 4)
/*anlisis de la condicin de salida del bucle while*/
printf ( No encontrado" ); /*se ha llegado al final del array sin encontrar buscado */
else
printf ( Encontrado" );
return 0;
}

Arrays de varias dimensiones


Es posible disponer de arrays de ms de una dimensin (2, 3, etc.).
Si un array tiene ms de una dimensin recibe el nombre de matriz o tabla.
La declaracin de una matriz se ajusta a la siguiente sintaxis:

<tipo_base> <nombre_matriz>[expr1] [expr2][exprN];

Tamao de la 1 dimensin
Tamao de la N dimensin

Arrays de varias dimensiones


Ejemplo

int ti [3] [4];


const char tc [2] [5] = {

/* tabla de 3x4 enteros */

{'a', 'e', 'i', 'o', 'u'},


{'b', 'c', 'd', 'f', 'h'}
};
/* tabla de 2x5 caracteres */

2 Dimensin

2 Dimensin
tc[][0] tc[][1] tc[][2] tc[][3] tc[][4]
1 Dimensin

1 Dimensin

ti[][0] ti[][1] ti[][2] ti[][3]


ti[0]
ti[1]

tc[0]

tc[1]

ti[2]

ti

tc

El tipo puntero en C
Las variables de tipo puntero almacenan direcciones de memoria.

Concretamente la direccin de memoria de otra variable.


Declaracin:
<tipo> *<identificador_variable_puntero> ;

Ejemplos:
/ * ENTOR NO */
int *pEntero;
double * pReal;
char * pCaracter;

/* contiene la direccin de una variable int */


/* contiene la direccin de una variable double */
/* contiene la direccin de una variable char */

El valor inicial de un puntero (como cualquier otra variable) es

indeterminado.
Cuando se desea que un puntero no referencie a ninguna variable pero
tenga un valor conocido, se le asigna constante NULL (un 0).

El tipo puntero en C: operadores


Operadores para el manejo de punteros
Operador

Significado

Ejemplo

&

La direccin en memoria de una variable

&numero

La variable cuya direccin es

*mipuntero

Interpretacin:

&: direccin de memoria de la variable numero


*: variable cuya direccin est en mipuntero. Esta variable ser del tipo declarado
(ejemplo: int *mipuntero; => int)

El tipo puntero en C: ejemplo


#include <stdio.h>
int main (void)
{
int num;
/*
/*
int otroNum;
int * pEntero;
/*
int * pOtroEntero; /*

variable de tipo entero*/


variable de tipo entero*/
variable de tipo puntero a entero*/
variable de tipo puntero a entero*/

Direccin

Nombre

Contenido

........

.........

.........

100

num

104

otroNum

108

pEntero

112

pOtroEntero

.........

.......

........

El tipo puntero en C: ejemplo


#include <stdio.h>
int main (void)
{
int num;
/*
/*
int otroNum;
int * pEntero;
/*
int * pOtroEntero; /*
num = 2;
otroNum = 3;
pEntero = NULL;
pOtroEntero = &num;

variable de tipo entero*/


variable de tipo entero*/
variable de tipo puntero a entero*/
variable de tipo puntero a entero*/

Direccin

Nombre

Contenido

........

.........

.........

100

num

?2

104

otroNum

?3

108

pEntero

?0

112

pOtroEntero

100
?

.........

.......

........

El tipo puntero en C: ejemplo


#include <stdio.h>
int main (void)
{
int num;
/*
/*
int otroNum;
int * pEntero;
/*
int * pOtroEntero; /*

variable de tipo entero*/


variable de tipo entero*/
variable de tipo puntero a entero*/
variable de tipo puntero a entero*/

num = 2;
otroNum = 3;
pEntero = NULL;
pOtroEntero = &num;
otroNum = (*pOtroEntero) + 5;
pEntero = pOtroEntero;

Direccin

Nombre

Contenido

........

.........

.........

100

num

?2

104

otroNum

3
?7

108

pEntero

?
NULL
100

112

pOtroEntero

100
?

.........

.......

........

El tipo puntero en C: ejemplo


#include <stdio.h>
int main (void)
{
int num;
/*
/*
int otroNum;
int * pEntero;
/*
int * pOtroEntero; /*

variable de tipo entero*/


variable de tipo entero*/
variable de tipo puntero a entero*/
variable de tipo puntero a entero*/

num = 2;
otroNum = 3;
pEntero = NULL;
pOtroEntero = &num;
otroNum = (*pPtroEntero);
pEntero = pOtroEntero;
num = (*pOtroEntero) * (*pEntero);
otroNum = &num; ?

Direccin

Nombre

Contenido

........

.........

.........

100

num

?
2
4

104

otroNum

3
7
?

108

pEntero

?
NULL
100

112

pOtroEntero

100
?

.........

.......

........

Estructuras. Concepto
Es una coleccin de elementos (variables) que pueden ser de distinto tipo

(simple o compuesto), almacenados en posiciones consecutivas y


ordenadas de memoria y referenciados por un nico nombre comn.

Una declaracin de estructura define una plantilla para la agrupacin, y

por lo tanto ser posible definir variables de tipo estructura bajo esa
plantilla. Cada una de estas variables estar compuesta a su vez por las
variables que se definieron en la plantilla de la estructura.

Estructuras. Concepto
Ejemplo de objetos compuestos basado en tipos simples.

Complejos

Coordenadas

Factor

real
imaginaria

abscisa
ordenada

anio
coeficiente

Entero: Factor.anio
Real: Factor.coeficiente, Complejos.real,
Complejos.imaginaria, Coordenadas.abscisa,
Coordenadas.ordenadas,

Declaracin de estructuras
Complejos
real
imaginaria

Coordenadas
abscisa
ordenada

Factor
anio
coeficiente

struct Complejos
{
double real;
double imaginaria;
};
struct Coordenadas
{
double abscisa;
double ordenada;
};
struct Factor
{
int anio;
double coeficiente;
};

Uso de una variable de tipo estructura


Declaracin. Igual que una variable de los tipos ya vistos

struct Complejos complejoA;


Referencia a cada uno de los atributos de un objeto de tipo estructura

<nombre_objeto> . <nombre_campo>
complejoA.real = 13.5;
complejoA.imaginaria = 4.85;
A todos los efectos, el atributo de un objeto compuesto o estructura es

una variable de un tipo determinado y se puede tratar como tal.


Ej: complejoA.real es una variable de tipo double.

A tener en cuenta
Las variables de tipo estructura, a diferencia de los arrays, no almacenan

la direccin del primer elemento de la estructura sino que almacenan el


conjunto de todos los elementos que la componen.
struct Complejo complejoA;
struct Complejo complejoB;

complejoB = complejoA; /* sentencia vlida sintctica y semnticamente */


Dos variables de tipo estructura son equivalentes si tienen la misma

plantilla.
Se pueden asignar directamente.
NO se pueden comparar directamente (no est definido el operador
de igualdad ( == ) para estructuras)

Programacin I
Bloque 1 Parte 2
Curso 2015/2016
SEMESTRE DE OTOO

You might also like