tipos de datos estructurados - inf.utfsm.clnoell/iwi-131-p1/tema8.pdf · • los arreglos en c, se...

18
1 Tipos de Datos Estructurados Programación de Computadores IWI-131-p1 Prof.: Teddy Alfaro Olave Departamento de Informática Universidad Técnica Federico Santa María Arreglos (array) • El arreglo es un tipo estructurado de dato, el cual es capaz de almacenar una colección de datos del mismo tipo. Es la estructura de datos más utilizada por los programadores Es la forma más simple de agrupar componentes de un mismo tipo y asociarles un número de orden de cada componente llamado índice. Los arreglos en C, se almacenan en posiciones contiguas de memoria Posee un tamaño

Upload: ngonhu

Post on 06-Feb-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

1

Tipos de Datos Estructurados

Programación de ComputadoresIWI-131-p1

Prof.: Teddy Alfaro Olave

Departamento de InformáticaUniversidad Técnica Federico Santa María

Arreglos (array)

• El arreglo es un tipo estructurado de dato, el cual es capaz de almacenar una colección de datos del mismo tipo.

• Es la estructura de datos más utilizada por los programadores

• Es la forma más simple de agrupar componentes de un mismo tipo y asociarles un número de orden de cada componente llamado índice.

• Los arreglos en C, se almacenan en posiciones contiguas de memoria

• Posee un tamaño

Page 2: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

2

Dimensionalidad

• El arreglo es una estructura multidimensional• En una dimensión puede ser visto como un vector,

necesita de un índice (la posición) 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 rubikContiene 4*4*4 cubos, para acceder a uno de ellos necesito altura, posición horizontal, y profundidad (3 índices)

• En general un arreglo puede ser n-dimensional, y requerirá de n índices para recorrer o acceder a sus elementos.

Page 3: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

3

Ejemplos…

UnidimensionalUnidimensional

int a[20];int a[20];

BidimensionalBidimensional

Int a[6][7];Int a[6][7];

TridimensionalTridimensional

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

Ejemplos• int numeros[]={1,3,34,54}; //su tamaño es 4• char alfabeto[5]={‘A’,’B’,’C’,’D’,’E’};

//arreglo de caracteres de tamaño 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

Page 4: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

4

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 función principal “main()” tendra las dimensiones incluidas.

• Cuando se pasa un arreglo a una función, esta ultima no necesita saber el tamaño.

Arreglos Unidimensionales• Es una lista o vector.• Declaración

Tipo_dato nom_arreglo[tamaño];– Tipo_dato: de que tipo serán los elementos.

Recordar que todo son del mismo tipo– Nom_arreglo: nombre para la variable tipo

arreglos– []: nos indica que su dimensionalidad es uno– Tamaño: la cantidad de elementos que a los

más podrá contener el arreglo.

Page 5: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

5

Accesando a elementos

• Un elemento individual dentro de un arreglo es accedido por el uso de un índice.

• Un índice describe la posición de un elemento dentro de un arreglo.

• En C/C++ el primer elemento tiene el índice cero!

13 34 7 61 1

int V[5];

Posición 0 1 2 3 4

V[2] contiene el 7

V[4] contiene el 1

V[0] contiene el 13

V �

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;}

Page 6: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

6

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 dirección más baja corresponde al primer elemento, y la más alta al último elemento

• La cantidad de bytes del arreglo de tamaño 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 dirección del elemento10 al puntero list

Lleno los siguientes 10 elementosusando el puntero list

Muestra los 20 elementos delarreglo lista

Page 7: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

7

Asignando arreglos

• No se puede asignar un arreglo a otro• Lo siguiente es ilegal:int a[10], b[10];//hacer algoa=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 máximo de una lista de 10 elementos

Page 8: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

8

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 números:\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;

}

Page 9: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

9

Paso de Arreglos unidimensionales a funciones

• Forma 1: Arreglo delimitado#include <stdio.h>func1(int x[10]){ /*Arreglo delimitado*/

……...}int main(){

int a[10];…..func1(a);……...return 0;

}

Se pasa la dirección del primer elemento del arreglo a la función

Se debe especificar el tamaño del arreglo

Paso de Arreglos unidimensionales a funciones

• Forma 1: Arreglo no delimitado#include <stdio.h>func1(int x[]){ /*Arreglo no delimitado*/

……...}int main(){

int a[10];…..func1(a);……...return 0;

}

No se especifica el tamaño del arreglo

Page 10: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

10

Paso de Arreglos unidimensionales a funciones

• Nota:– Al llamar una función pasándole un arreglo como

parámetro, como se le entrega la dirección del primer elemento, entonces si los valores del arreglo son modificados dentro de la función, también son modificados en la función que llama.

Hacia un arreglo dinámico

• Los arreglos de tamaño dinámico no exiten, pero C permite reservar memoria en tiempo de ejecución para determinar el tamaño de un arreglo.

• Para ello se necesita la librería stdlib.h• Las funciones son malloc, calloc, free y

realloc.

Page 11: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

11

Hacia un arreglo dinámico

int main() {int *p,*k,num,i;printf("ingrese el tamaño 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 estructuradoSTRING

Page 12: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

12

String

• El uso más común para un arreglo unidimensional es guardar un arreglo de caracteres

• Un string esta definido como un arreglo de caracteres terminado por un símbolo null (‘\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.

‘‘\\0’0’aalloohh

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 vacío */

Page 13: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

13

String con espacios

#include<stdio.h>int main(){

char str[80];printf(“escribir string”);gets(str);//con espaciosreturn 0;

}

Asignación de String

• Para asignar un carácter a un char se utiliza la comilla simple

Page 14: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

14

Librería para menejo de string

La librería string.h, permite haceroperaciones con string. Los más usados son:• strcpy() : copia caracteres de un string a otro• strcat() : concatenación de string• strlen() : largo del string• strcmp() : comparación de string

Descripción

• Sean s1 y s2 string de largo fijo:Strcpy(s1,s2)�copia s2 en s1 y devuelve s1Strcat(s1,s2)�concatena s2 en s1, retorna s1Strlen(s1)�devuelve el la longitud de s1Strcmp(s1,s2)�compara s1 con s2

si son iguales devuelve 0si s1>s2 devuelve un nº >0si s1<s2 devuelve un nº <0

Page 15: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

15

#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;}

Page 16: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

16

String.hstrcat Appends a string strchr Finds first occurrence of a given character strcmp Compares two strings strcmpi Compares two strings, non-case sensitive strcpy Copies one string to another strlen Finds length of a string strlwr Converts a string to lowercase strncat Appends n characters of string strncmp Compares n characters of two strings strncpy Copies n characters of one string to another strnset Sets n characters of string to a given character strrchr Finds last occurrence of given character in string strrev Reverses string strset Sets all characters of string to a given character strspn Finds first substring from given character set in string strupr Converts string to uppercase

String

• Ejercicio:4.- Realizar un programa que convierta un string a

mayúscula y contar número de dígitos.

Page 17: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

17

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];

Page 18: Tipos de Datos Estructurados - inf.utfsm.clnoell/IWI-131-p1/Tema8.pdf · • Los arreglos en C, se almacenan en posiciones ... altura, posición horizontal, y profundidad (3 índices)

18

#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 declaración de arreglo es

tipo nombre_var[ tamaño1] [ tamaño2]… [ tamañoN]