PROGRAMACION ESTRUCTURADA: Tema 4. Arreglosdtorres/cursos/programacionestructu... · 3. Arreglos...
Transcript of PROGRAMACION ESTRUCTURADA: Tema 4. Arreglosdtorres/cursos/programacionestructu... · 3. Arreglos...
PROGRAMACION ESTRUCTURADA:Tema 4. Arreglos
Presenta: David Martínez Torres
Universidad Tecnológica de la Mixteca
Instituto de Computación
Oficina No. 37
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
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};
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];
Un elemento individual de un arreglo se accede mediante un índice.
1. Arreglos unidimensionales
Un índice describe la posición de un elemento dentro del arreglo
El índice inicia en la posición 0
1. Arreglos unidimensionales
La dirección mas baja corresponde al primer elementos y la más alta al último elemento.
Cualquier arreglo es mapeado a localidades de memoria contigua. Todos los elementos de memoria
residen uno junto al otro.
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 *);
int cuenta(char []);
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);
}
1. Arreglos unidimensionales
int cuenta(char cad[]){
int i,cont=0;
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
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;}
strlen(str): Retorna la longitud de la cadena, excluyendo el caracter de fin de cadena ‘\0’.
1. Arreglos unidimensionales
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;}
strcat(s1, s2): agrega s2 al final de s1.
1. Arreglos unidimensionales
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);}
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); }
1. Arreglos unidimensionales
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
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"};
RenglonesColumnas
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.