Está en la página 1de 46

PROGRAMACION ESTRUCTURADA:

Tema 4. Arreglos

Presenta: David Martínez Torres


Universidad Tecnológica de la Mixteca
Instituto de Computación
Oficina No. 37
dtorres@mixteco.utm.mx
Contenido

1. Arreglos unidimensionales
2. Arreglos bidimensionales
3. Arreglos multidimensionales
4. Arreglos como parámetros
Introducción

Los arreglos son otra estructura de datos estática,


pero con mayor beneficio que las variables simples.

La gran mayoría de soluciones por computadora,


no será suficiente con el uso de variables
simples, necesitará de una colección de datos del
mismo tipo (arreglos) o diferentes
tipos(estructuras), incluso archivos.
Introducción

Un arreglo es una colección de variables del mismo tipo que son


referidas por un nombre común.

Los arreglos ofrecen un conveniente


significativo de agrupar varias
variables relacionadas, en una o
más dimensiones:
1. Arreglos unidimensionales

Un arreglo de este tipo es una lista de variables relacionadas. La forma


general de declarar un arreglo de una dimensión es:

Tipo nombreVariable[tamaño];

Ejemplos :

int datos[10];
float numerosReales[100];
char apellido[40];
int numeroPartes[] = {123, 326, 178, 1209};
int puntuaciones[10] = {1, 3, 4, 5, 1, 3, 2, 3, 4, 4};
1. Arreglos unidimensionales

Un elemento individual de un arreglo


se accede mediante un índice. Un índice describe la posición de
un elemento dentro del arreglo

El índice inicia en la posición 0


1. Arreglos unidimensionales

Cualquier arreglo es mapeado a


localidades de memoria contigua. Todos los elementos de memoria
residen uno junto al otro.

La dirección mas baja


corresponde al primer
elementos y la más alta al
último elemento.
1. Arreglos unidimensionales

El siguiente código representa el llenado del arreglo a

int a[8], j;
for(j=0; j<5; j++)
a[j] = 2+2*j;
1. Arreglos unidimensionales

En C no se puede asignar un arreglo a otro.

Lo siguiente es ilegal:

int a[10], b[10];


a = b; // error, no se puede hacer una copia

En lugar, se tiene que hacer la asignación


elemento por elemento:

int i;
for(i=0; i<10; i++)
a[i] = b[i];
Programa
que hace
uso de un
arreglo de
flotantes.
4. Arreglos unidimensionales como parámetros

El paso de parámetros de arreglos completos


a una función es un paso por referencia.
4. Arreglos unidimensionales como parámetros
El paso de parámetros de arreglos completos
a una función es un paso por referencia.
1. Arreglos unidimensionales

Problema. Escriba una función ventasTotales que


reciba en un arreglo con las ventas de productos.
Encuentre y devuelva la suma de todas las ventas, el
producto q más se vendió y el que menos se vendió.
1. Arreglos unidimensionales

Para el caso de arreglos de cadenas, tomar en cuenta de


considerar un elemento para almacenar el caracter
de fin de cadena.

Ejemplos de declaraciones
char cad[]=“UTM”;
char apellido[20]=“Hernández”;
char nombre[5]=“David”;
char *calle=“Benito Juárez”;

¿Son correctas las declaraciones?


1. Arreglos unidimensionales
1. Arreglos unidimensionales
1. Arreglos unidimensionales

Escriba las siguientes funciones:

• Reciba una cadena y regrese la misma cadena


pero sin espacios en blanco
• Reciba una cadena, cuente y devuelva su tamaño
• Reciba una cadena y devuelva la cadena invertida
en otra cadena.
• Reciba las dos cadenas y devuelva 1 si es un
palíndromo y 0 si no lo es.
void eliminaEspacios(char *); 1. Arreglos
int cuenta(char []);
unidimensionales
void invertirCad2(char [], char [], int);
int palindromo(char [], char []);

int main(){
int tam, pal;
char cad[30], cadTemp[30];

printf("Programa que procesa cadenas\n");


printf("\nTeclea una cadena: ");
gets(cad);

eliminaEspacios(cad);
tam=cuenta(cad);
invertirCad2(cad,cadTemp,tam);
pal=palindromo(cad,cadTemp);
}
int cuenta(char cad[]){
1. Arreglos
int i,cont=0;
unidimensionales
for(i=0; cad[i]!='\0';i++)
cont++;
return cont;
}

void invertirCad2(char cad[], char cadTemp[], int tam){


int i=tam-1, j=0;
while(i>=0){
cadTemp[j]=cad[i];
i--;
j++;
}
cadTemp[j]='\0';
}
1. Arreglos unidimensionales

int palindromo(char cad1[], char cad2[]){


int band=0,i=0;
while(cad1[i]!='\0' && cad1[i]==cad2[i])
i++;
if(cad1[i]=='\0')
band=1;
return band;
}
1. Arreglos unidimensionales

 Funciones más comunes para el tratamiento de cadenas.


Se encuentran en la librería string.h

 strcpy() : copia caracteres de una cadena a otra


 strcat() : concatenación de cadenas
 strlen() : longitud de cadenas
 strcmp() : comparación de cadenas
1. Arreglos unidimensionales

 strcpy(str1,str2): copia str2 en str1

int main() {
char cad[10];
strcpy(cad, “Hola”);
printf(“%s”, cad);
return 0;
}
1. Arreglos unidimensionales

 strlen(str): Retorna la longitud de la cadena, excluyendo


el caracter de fin de cadena ‘\0’.

int main(){
char cad[80];
printf(“Introduce una cadena: ”);
gets(cad);
printf(“\nLa longitud de la cadena %s es: %d”,cad,strlen(cad));
return 0;
}
1. Arreglos unidimensionales
 strcat(s1, s2): agrega s2 al final de s1.

int main(){
char s1[50], s2[30];
strcpy(s1, “Universidad”);
strcpy(s2, “ Tecnológica de la Mixteca”);
strcat(s1, s2);
printf(“\n%s”,s1);
printf(“\n%s”,s2);
return(0);
}
1. Arreglos unidimensionales

 strcmp(str1, str2) compara las dos cadenas y retorna


los resultados siguientes:
 str1 = = str2 :0
 str1 >str2 :número positivo
 str1 <str2 :número negativo
 Las cadenas son comparadas lexicográficamente (i.e., de
acuerdo al orden del diccionario) :
 a <aa <aaa <…<b <ba <bb <…<bz <bza
1. Arreglos unidimensionales
1. Arreglos unidimensionales

 Todas las cadenas son terminadas con caracter de fin de


cadena.
int main() {
char cadena[80];
int i;
strcpy(cadena, “esta es una prueba”);
printf(“\nCadena inicial: %s”,cadena);
for(i=0; cadena[i]!=‘\x0’; i++)
cadena[i] = toupper(cadena[i]);
printf(“\nCadena procesada: %s”,cadena);
return(0);
}
2. Arreglos bidimensionales

Los arreglos de 2 dimensiones


son muy útiles en la solución de
problemas, sobre todo el uso de
matrices.

Se declaran de la siguiente forma


tipoDato nombreVariable [dim1][dim2];

Para el caso de declarar una matriz

tipoDato nombreVariable [renglon][columna];


2. Arreglos bidimensionales

 Ejemplos de declaraciones de arreglos de 2 dimensiones


Renglones
Columnas

int matriz[2][3];
float materias[5][4];
int vector_coordenadas[4][3] = {{0, 0, 0},{1, 0, 1},
{1, 0, 5},{4, 7, 9}};
char names[][40] ={“Pedro”, “Maria”, “Luisa”, “Juan”,
“Jorge"};
char *ciudades[5]={"Huajuapan","Oaxaca",
"Puebla","Mexico","Tehuacan"};
2. Arreglos bidimensionales

 Escriba una función que llene de


manera automática la siguiente
matriz.
 Escriba una función que imprima la
matriz anterior
2. Arreglos bidimensionales

 Escriba las siguientes funciones


 Que reciba una matriz y la llene de manera aleatoria con
calificaciones de 5 alumnos que cursan 5 materias.
 Reciba la matriz anterior y una matriz con los nombres de
los alumnos e imprima la mayor y menor calificación con el
(los) alumno(s) respectivo(s).
 Reciba la matriz y devuelva el promedio de la diagonal
principal
 Reciba 2 matrices de 3x3 y devuelva en una 3ª matriz del
mismo tamaño, la suma de las dos matrices
2. Arreglos bidimensionales
3. Arreglos multidimensionales

 Arreglos de tres
dimensiones. Es
una
combinación del
arreglo de una
dimensión y de
2 dimensiones.
3. Arreglos multidimensionales

 La primera dimensión se podría esquematizar como el


arreglo unidimensional, un conjunto de elementos; la
segunda y tercera dimensión es un arreglo de dos
dimensiones que constituye a cada elemento de la
primera dimensión.
3. Arreglos multidimensionales

 Ejemplo. Se tiene 2 salas de computo(una dimensión),


cada una con 3 filas (renglones) y 2 computadoras por
fila.
arreglo3d[2][3][2]
3. Arreglos multidimensionales

 Otro ejemplo del uso de arreglos de varias dimensiones.


 Un estacionamiento desea generar estadísticas de los
coches que se han registrado:
 Coches que han entrado al día.
 Coches que han entrado en varios días
 Coches que han entrado en varios meses, etc.
3. Arreglos multidimensionales

 Se puede realizar la representación con arreglos de la


siguiente manera.
4. Arreglos como parámetros

 Muy utilizado en la solución de problemas.


 Recordar que los arreglos como parámetros son paso por
referencia, es decir, se pasa la dirección del primer
elemento.
 Así mismo, facilita la actualización del arreglo de la
función que invoca.
 Se puede recibir en formato arreglo o formato apuntador.

void invertirCad2(char [], char [], int);


void eliminaEspacios(char *);
5. Referencias
1. Joyanes Aguilar, Luis (1996) Fundamentos de
programación, Algoritmos y Estructura de datos.
McGraw-Hill, México.
2. Deitel & Deitel (2001) C++ Como programar en
C/C++. Prentice Hall
3. Kerrighan y Ritchie “El lenguaje de programación”.
Prentice Hall
4. Gottfried, Byron (1999) “Programación en C”
McGrawHill, México.
5. Levine Gutierrez, Guillermo (1990) Introducción a la
computación y a la programación estructurada.
McGraw-Hill, México.
6. Levine Gutierrez, Guillermo (1990) Introducción a la
computación y a la programación estructurada.
McGraw-Hill, México.

También podría gustarte