You are on page 1of 18

Departamento de Informtica

Universidad Tcnica Federico Santa Mara

Tipos de Datos Estructurados


Programacin de Computadores
IWI-131-p1
Prof.: Teddy Alfaro Olave

Arreglos (array)
El arreglo es un tipo estructurado de dato, el cual
es capaz de almacenar una coleccin de datos del
mismo tipo.
Es la estructura de datos ms utilizada por los
programadores
Es la forma ms simple de agrupar componentes
de un mismo tipo y asociarles un nmero de
orden de cada componente llamado ndice.
Los arreglos en C, se almacenan en posiciones
contiguas de memoria
Posee un tamao

Dimensionalidad
El arreglo es una estructura multidimensional
En una dimensin puede ser visto como un vector,
necesita de un ndice (la posicin) para recorrer
sus elementos
Un arreglo de dos dimensiones puede
representarse como una matriz, necesita de dos
ndices (fila y columna) para acceder a uno de sus
elementos

Dimensionalidad
Un arreglo de 3 dimensiones podemos
tomarlo como un espacio. Ejemplo: el cubo
de rubik
Contiene 4*4*4 cubos, para acceder a uno de ellos necesito
altura, posicin horizontal, y profundidad (3 ndices)

En general un arreglo puede ser ndimensional, y requerir de n ndices para


recorrer o acceder a sus elementos.

Ejemplos
Unidimensional

int a[20];

Tridimensional
float a[7][7][4];

Bidimensional
Int a[6][7];

Ejemplos
int numeros[]={1,3,34,54}; //su tamao es 4
char alfabeto[5]={A,B,C,D,E};
//arreglo de caracteres de tamao 5
Char nombres[][40]={pedro, pablo, luis,
karina, lisa};
//5 filas y columnas a lo mas de 40 caracteres.
int Coordenadas[2][2]={ {0,0},{1,1}};
//arreglo bidimensional de enteros

Observaciones
Los ndices de los arreglos comienzan en cero,
es decir, el primer elemento, es el elemento
cero.
Si un arreglo es declarado en la funcin
principal main() tendra las dimensiones
incluidas.
Cuando se pasa un arreglo a una funcin, esta
ultima no necesita saber el tamao.

Arreglos Unidimensionales
Es una lista o vector.
Declaracin
Tipo_dato nom_arreglo[tamao];
Tipo_dato: de que tipo sern los elementos.
Recordar que todo son del mismo tipo
Nom_arreglo: nombre para la variable tipo
arreglos
[]: nos indica que su dimensionalidad es uno
Tamao: la cantidad de elementos que a los
ms podr contener el arreglo.

Accesando a elementos
Un elemento individual dentro de un arreglo es
accedido por el uso de un ndice.
Un ndice describe la posicin de un elemento
dentro de un arreglo.
En C/C++ el primer elemento tiene el ndice cero!
int V[5];
V
13
Posicin 0

34
1

7
2

61
3

V[2] contiene el 7

1
4

V[4] contiene el 1
V[0] contiene el 13

Ejemplo
#include <stdio.h>
int main(){
int muestra[10],t;
for(t=0;t<10;t++)
muestra[t]=t*t;
for(t=0;t<10;t++)
printf(muestra[%d]=%d,t,muestra[t]);
return 0;
}

Mapeo de un Arreglo en
Memoria
En C, un arreglo es mapeado a
localizaciones de memoria continua
Todos los elementos de memoria residen
uno al lado del otro
La direccin ms baja corresponde al
primer elemento, y la ms alta al ltimo
elemento
La cantidad de bytes del arreglo de tamao
n est dada por sizeof(tipo_dato)*n

Arreglo y punteros de memoria


#include <stdio.h>
int main( ){
int lista[20],i,*list;
for (i=0;i<10;i++)
lista[i]=i*i;
list = &lista[10];
for(i=0;i<10;i++)
*(list+i)=-i*i;
for(i=0;i<20;i++) {
printf("lista[%d]=%d\n",i,lista[i]);
}
return 0;
}

Lleno los 10 primeros elementos


Pasamos la direccin del elemento
10 al puntero list
Lleno los siguientes 10 elementos
usando el puntero list
Muestra los 20 elementos del
arreglo lista

Asignando arreglos
No se puede asignar un arreglo a otro
Lo siguiente es ilegal:
int a[10], b[10];
//hacer algo
a=b;//error ilegal
En vez, se debe hacer asignaciones por cada
elemento:
int i;
for(i=0;i<10;i++)a[i]=b[i];

Ejemplos
1.- Realizar un programa en el que se ingresen 10
enteros, y luego muestre la suma de ellos y su
promedio
2.- Encontrar el mximo de una lista de 10 elementos

Ejemplo 1.
#include<stdio.h>
int main(){
int i, max=0;
int list[100];
for(i=0;i<100;i++)
list[i]=rand();
for(i=0;i<100;i++)
if(max<list[i])
max=list[i];
printf(max=%d,max);
return 0;
}

Ejemplo 2
#include <stdio.h>
int main(){
int x[10];
int i,suma;
printf ("\n Ingrese 10 nmeros:\n");
for (i=0;i<10;i++)
scanf("%d",&x[i]);//lleva & pq es componente a
componente
suma=0;
for (i=0;i<10;i++)
suma+=x[i];
printf("\n El resultado de la suma es = %d ",suma);
printf("\n El resultado del promedio es = %d ",suma/10);
return 0;
}

Paso de Arreglos unidimensionales


a funciones
Forma 1: Arreglo delimitado
#include <stdio.h>
func1(int x[10]){ /*Arreglo delimitado*/
...
}
Se debe especificar el tamao
int main(){
del arreglo
int a[10];
..
func1(a);
Se pasa la direccin del primer
...
elemento del arreglo a la
return 0;
funcin
}

Paso de Arreglos unidimensionales


a funciones
Forma 1: Arreglo no delimitado
#include <stdio.h>
func1(int x[]){ /*Arreglo no delimitado*/
...
}
No se especifica el tamao del
int main(){
arreglo
int a[10];
..
func1(a);
...
return 0;
}

Paso de Arreglos unidimensionales


a funciones
Nota:
Al llamar una funcin pasndole un arreglo como
parmetro, como se le entrega la direccin del
primer elemento, entonces si los valores del
arreglo son modificados dentro de la funcin,
tambin son modificados en la funcin que llama.

Hacia un arreglo dinmico


Los arreglos de tamao dinmico no exiten,
pero C permite reservar memoria en tiempo
de ejecucin para determinar el tamao de
un arreglo.
Para ello se necesita la librera stdlib.h
Las funciones son malloc, calloc, free y
realloc.

10

Hacia un arreglo dinmico


int main() {
int *p,*k,num,i;
printf("ingrese el tamao del arreglo ");
scanf("%d",&num);
printf("malloc\n");
p= (int *)malloc(sizeof(int)*num);
for(i=0;i<num;i++)
p[i]=rand()%13;
for(i=0;i<num;i++)
printf(" p[%d]=%d\n",i,p[i]);
free(p);

printf("calloc\n");
k = (int *)calloc(num,sizeof(int));
for(i=0;i<num;i++)
k[i]=rand()%13;
for(i=0;i<num;i++)
printf(" k[%d]=%d\n",i,k[i]);

k = (int *)realloc(k,sizeof(int)*num*2);
for(i=0;i<num*2;i++)
k[i]=rand()%13;
for(i=0;i<num*2;i++)
printf(" k[%d]=%d\n",i,k[i]);
free(k);
Return 0;
}

Tipo de dato estructurado


STRING

11

String
El uso ms comn para un arreglo
unidimensional es guardar un arreglo de
caracteres
Un string esta definido como un arreglo de
caracteres terminado por un smbolo null (\0)
h

\0

Para que un arreglo sostenga un string de 10


caracteres, char str[11], ya que 11 hace lugar
para el null al final del string.

Leyendo un string desde un teclado


#include<stdio.h>
int main(){
char str[80];
printf(escribir string);
scanf(%s,str);//no lleva &
return 0;
}/*
Lee un string hasta que
encuentra un espacio vaco */

12

String con espacios


#include<stdio.h>
int main(){
char str[80];
printf(escribir string);
gets(str);//con espacios
return 0;
}

Asignacin de String
Para asignar un carcter a un char se utiliza
la comilla simple

13

Librera para menejo de string


La librera string.h, permite hacer
operaciones con string. Los ms usados son:
strcpy() : copia caracteres de un string a otro
strcat() : concatenacin de string
strlen() : largo del string
strcmp() : comparacin de string

Descripcin
Sean s1 y s2 string de largo fijo:
Strcpy(s1,s2) copia s2 en s1 y devuelve s1
Strcat(s1,s2) concatena s2 en s1, retorna s1
Strlen(s1) devuelve el la longitud de s1
Strcmp(s1,s2) compara s1 con s2
si son iguales devuelve 0
si s1>s2
devuelve un n >0
si s1<s2
devuelve un n <0

14

#include <stdio.h>
#include <stdlib.h>
int main() {
char s[10],c[10]={"iwi131"};
do {
printf("ingrese su clave ");
scanf("%s",s);
if (strcmp(s,c)!=0)
printf("clave incorrecta, intente de nuevo\n");
}while(strcmp(s,c)!=0);
printf("la clave es correcta\n");
return 0;
}

#include <string.h>
#include <stdio.h>
int main(void){
char c1[80],c2[80];
printf("\n Ingrese una cadena de caracteres:");
scanf("%s",c1);
printf("\n Ingrese una cadena de caracteres:");
scanf("%s",c2);
printf("\n Longitudes: %d %d ",strlen(c1),strlen(c2));
if(!strcmp(c1,c2)) printf("\nLas cadenas son iguales");
strcat(c1,c2);
printf("\n %s",c1);
return 0;
}

15

String.h
strcat
strchr
strcmp
strcmpi
strcpy
strlwr
strncat
strncmp
strncpy
strnset
strrchr
strrev
strset
strspn
strupr

Appends a string
Finds first occurrence of a given character
Compares two strings
Compares two strings, non-case sensitive
Copies one string to another strlen Finds length of a string
Converts a string to lowercase
Appends n characters of string
Compares n characters of two strings
Copies n characters of one string to another
Sets n characters of string to a given character
Finds last occurrence of given character in string
Reverses string
Sets all characters of string to a given character
Finds first substring from given character set in string
Converts string to uppercase

String
Ejercicio:
4.- Realizar un programa que convierta un string a
mayscula y contar nmero de dgitos.

16

Arreglos de 2 dimensiones

Arreglo 2-dimensional
Un arreglo bidimensional es una lista de arreglos
unidimensional
Para declarar un arreglo bidimensional de enteros
int matriz[3][4];

17

#include<stdio.h>
int main(){
int fila=3,col=4,matriz[fila][col];
for(fila=0;fila<3;fila++)
for(col=0;col<4;col++)
matriz[fila][col]=fila*col;
return 0;
}

Arreglos Multidimensionales
C permite arreglos con mas de dos
dimensiones
La forma general de una declaracin de arreglo
es
tipo nombre_var[ tamao1] [ tamao2] [
tamaoN]

18

You might also like