Logo Studenta

Tema8

¡Este material tiene más páginas!

Vista previa del material en texto

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
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 rubik
Contiene 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.
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
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.
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;
}
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 elemento
10 al puntero list
Lleno los siguientes 10 elementos
usando el puntero list
Muestra los 20 elementos del
arreglo lista
7
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 máximo de una lista de 10 elementos
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;
}
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
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.
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 estructurado
STRING
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 */
13
String con espacios
#include<stdio.h>
int main(){
char str[80];
printf(“escribir string”);
gets(str);//con espacios
return 0;
}
Asignación de String
• Para asignar un carácter a un char se utiliza 
la comilla simple
14
Librería para menejo de string
La librería string.h, permite hacer
operaciones 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 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
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, intentede 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;
}
16
String.h
strcat 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.
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];
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]

Continuar navegando

Materiales relacionados