UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 ARREGLOS UNIDIMENSIONALES Y BIDIMENSIONALES ARREGLOS Un arreglo es una estructura de datos, o más técnicamente, un espacio de memoria que permite almacenar una colección de elementos, todos del mismo tipo. Conviene imaginar un arreglo como una secuencia contigua de celdas (espacios de memoria), o casillas, en cada una de las cuales se puede guardar un elemento de la colección. Además, es usual dibujarlo como lo ilustra la figura siguiente: 0 1 2 3 4 5 6 Esta figura representa un arreglo de siete casillas cada una de las cuales se puede utilizar para guardar un dato. La dimensión o tamaño de un arreglo es el número de casillas que lo conforman. Debe ser claro, entonces, que la figura anterior corresponde a un arreglo de dimensión 7. Cada una de las casillas de un arreglo tiene asociado un número que la identifica de manera única. A este número se le llama índice o dirección. En la figura anterior, debajo de cada casilla, aparece su índice. En lenguajes como C, C++ y java, la primera casilla del arreglo tiene índice 0, la segunda tiene índice 1, la tercera índice 2, y así sucesivamente. Es muy importante tener presente que si el arreglo es de dimensión N, la última casilla tiene índice N-1. ARREGLOS UNIDIMENSIONALES Los arreglos unidimensionales son estructura de datos estática que le permiten almacenar gran cantidad de información bajo un mismo nombre, también recibe el nombre de vectores en álgebra o arreglos unidimensionales en programación Los procesos normales con un vector o con sus elementos incluyen: 1 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 Declarar toda la lista, Capturar sus elementos, Desplegarlos, Realizar operaciones con ellos, entre otros procesos Los lenguajes de programación, permiten que el programador declare arreglos de cualquier tipo y prácticamente de cualquier tamaño. Un arreglo se declara usando el siguiente formato o plantilla: DECLARACION DE UN ARREGLO Tipo de dato nombre_arreglo[numero de elementos] = {elemento 1, elemento 2,...,elemento n}; Otros ejemplos como se pueden hacer la declaración de arreglos es int edades[12]; float sueldos[10]; char carreras[10]; Como se ve, el número de elementos del arreglo estará dado por el número encerrado entre [ ] al declararlo, esto se llama dimensionamiento, es obligatorio, a menos que se dé implícitamente el tamaño del arreglo por medio de la inicialización del mismo como así: char Operador[ ] = {'U', ‘N', 'A', 'D'}; int Enteros[] = { 4, 13, 0, 5, 6, -23, 7, 345, 45, -12}; En el primer ejemplo, Operador será un arreglo de cuatro posiciones, y queda inicializado con los correspondientes caracteres dados entre llaves. En el segundo ejemplo el vector Enteros tendrá 10 posiciones. En un arreglo de “N” elementos organizados en una dimensión donde “N” recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes), el cual indica una posición en particular del vector. Por ejemplo: Vec[x] Donde: 2 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 Vec…………Nombre del arreglo x…………… Numero de datos que constituyen el arreglo Siendo más claros, si queremos manejar un conjunto de 9 elementos de tipo entero, tendremos que definir un arreglo de la siguiente manera: int c[9]; // esquemáticamente queda así: Que es el subíndice? Es el número que hace referencia a una celda específica del arreglo, en el caso de C++ el subíndice es un valor que inicia desde cero y se extiende hasta el valor que se haya definido el arreglo, es importante no confundir el subíndice con el valor que toma el arreglo en esa posición, para el ejemplo anterior el arreglo toma el nombre de c y si queremos referirnos a una posición en especial, por ejemplo a la posición número 4 x= c[4], para este caso la variable x tomara el valor de -200.14 Normalmente un arreglo va acompañado de un ciclo, y el más común para manipular arreglos es el ciclo for, ya que se conoce una dimensión exacta del arreglo. A continuación se muestra un programa sencillo de cómo se debe cargar un arreglo con cinco valores numéricos 3 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 PROGRAMACION EN FALCON C++ #include <iostream> #include <stdlib.h> using namespace std; int a[5], i; int main() { system ("cls"); cout << "Cargar un vector \n"; for (i=0; i<5; i++) cin >> a[i]; cout << "** Vector Cargado \n"; for (i=0; i<5; i++) cout << a[i]; } Ejemplo: mediante la utilización de un arreglo, leer las edades de 10 estudiantes del curso Lógica de programación, encontrar la mayor de las edades, y el promedio de las mismas Recordemos: Recuerdan que, una de las primeras preguntas que me hago al abordar el ejercicio, es definir lo que no conozco de este ejercicio. Perfecto las edades, y el promedio? (ojo, el promedio no lo conozco pero lo puedo calcular con la Σ de las edades sobre el número de encuestados) Manos a la obra Para dar solución al ejercicio se plantea realizar tres pasos sencillos los cuales son: defina las variables de entrada, proceso y salida que se van a utilizar para dar solución al enunciado. Para el caso particular se plantea las siguientes variables y arreglo 4 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 Entrada edad[10] Proceso Salida suma, promedio, promedio, edad_mayor edad_mayor El segundo paso es diseñar el diagrama de flujo o pseudocodigo para este caso nos apoyamos en la herramienta pseint para diseñar el pseudocodigo, se recomienda realizar una prueba de escritorio para verificar los resultados que arroja el ejercicio. A continuación se muestra un pantallazo de las instrucciones utilizadas El tercer paso es codificar en la herramienta Falcon C++ el programa, utilizando las mismas variables, y arreglo utilizados en el pseudocodigo #include <iostream> #include <stdlib.h> 5 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 using namespace std; int edad[10], k, suma=0, promedio, edad_mayor; int main() { system ("cls"); for (k=0; k<10; k++)// ciclo para limpieza, aunque para este caso no sea edad[k]=0; // necesario // Leemos las edades for (k=0; k<10; k++) { cout << "por favor ingrese la edad para el estudiante # " << k+1 << "\n"; cin >> edad[k]; } //calculamos el promedio, aunque lo hubiésemos podido hacer en el ciclo // anterior, también encontraremos la mayor de las edades, mediante una //deducción sencilla, asumiremos que la primera de las edades que ingreso es //la mayor de todas, para luego compararla con las demás e ir intercambiando //su valor edad_mayor= edad[0]; // edad_mayor toma el primer valor del arreglo for (k=0; k<10; k++) { suma=suma+edad[k]; if (edad_mayor < edad[k]) { edad_mayor = edad[k]; } } promedio=suma/10; cout << "el promedio de las edades es: " << promedio << "\n"; cout << "la mayor de las edades es : \t " << edad_mayor; system("pause"); } Realizamos la prueba de escritorio k 0 1 edad[ ] 20 25 suma 20 45 edad_mayor 20 25 promedio 2 9 6 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 2 3 4 5 6 7 8 9 30 15 40 20 20 35 25 20 75 90 130 150 170 205 230 250 30 40 15 17 20.3 23 25 ARREGLOS BIDIMENSIONALES Los arreglos bidimensionales también conocidos como matrices son una estructura de datos, o más técnicamente, un espacio de memoria que permite almacenar una colección de elementos, todos del mismo tipo. La diferencia con los arreglos está en que, en las matrices, los elementos no están organizados linealmente sino que su organización es bidimensional, es decir, en filas y columnas. Conviene imaginar una matriz como una organización de celdas de memoria, o casillas, en cada una de las cuales se puede guardar un elemento de la colección. Además, es usual dibujarla como lo ilustra la figura siguiente: 0 1 2 3 4 5 0 1 2 3 Esta figura representa un matriz de cuatro filas (numeradas verticalmente de 0 a 3) y seis columnas (numeradas horizontalmente de 0 a 5). En cada una de las 24 celdas o casillas se puede guardar un dato. La dimensión o tamaño de una matriz es el número filas por el número de columnas. Debe ser claro entonces que la figura anterior es la gráfica de una matriz de dimensión 4x6. La numeración de las filas y las columnas, determina que cada una de las casillas de una matriz tiene asociados dos números que la identifican de manera única. A estos números se les llama índice de fila e índice de columna, respectivamente. 7 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 En pseudocodigo, y también en C y C++, las filas y las columnas se numeran desde 0. Porque mostrar una imagen de una hoja de cálculo (Excel), como inicio de este tema, es simple es el ejemplo típico de una matriz, como se observa está dividido en filas y columnas, y cada posición se lo conoce como celda, de igual manera se comporta una matriz en C++, solo que las columnas no están identificadas con letras sino con números al igual que las filas. DECLARACION DE UNA MATRIZ Tipo de dato nombre_matriz[numero_filas][numero_columnas] = {elemento 1, elemento 2,...,elemento n}; Otros ejemplos como se pueden hacer la declaración de matrices es int lotes[6][3]; float notas[5][5]; char nom_ape[10][10]; Los índices se crearon para permitir que el programador se pueda referir, de forma específica y directa, a una cualquiera de las casillas de la matriz, tanto para guardar un dato en esa casilla, como para obtener el dato almacenado en ella. Normalmente una matriz va acompañado de un ciclo anidado, y el más común para manipular matrices es el ciclo for, ya que se conoce una dimensión exacta de la matriz. A continuación se muestra un programa sencillo de cómo se debe cargar una matriz de 3x3 con valores numéricos 8 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 PROGRAMACION EN FALCON C++ #include <iostream> #include <stdlib.h> using namespace std; int mat[3][3]; int i,j; int main() { cout << "Cargar matriz: "; cout << "\n"; for (i=0; i<3; i++) for (j=0; j<3; j++) cin >> mat[i][j]; // mostrar matriz cout << "Resultado"; for (i=0; i<3; i++) for (j=0; j<3; j++) { cout << mat[i][j]<< "\t" << i << j; cout << "\n"; } system ("pause"); } Ejemplo: mediante la utilización de una matriz, Un algoritmo que almacene números en una matriz de 5 x 6. Imprimir la suma de los números almacenados en la matriz. Recordemos: Recuerdan que, una de las primeras preguntas que me hago al abordar el ejercicio, es definir lo que no conozco de este ejercicio. Perfecto suma de los números de la matriz (se requiere sumar todos los números de la matriz sumando las filas y las columnas) 9 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 Manos a la obra Para dar solución al ejercicio se plantea realizar tres pasos sencillos los cuales son: definir las variables de entrada, proceso y salida que se van a utilizar para dar solución al enunciado. Para el caso particular se plantea las siguientes variables y matriz Entrada mat[5][6] Proceso i, j Salida sum El segundo paso es diseñar el diagrama de flujo o pseudocodigo para este caso nos apoyamos en la herramienta pseint para diseñar el pseudocodigo, se recomienda realizar una prueba de escritorio para verificar los resultados que arroja el ejercicio. A continuación se muestra las instrucciones utilizadas Proceso suma_matriz definir i, j, sum Como Entero; Dimension mat[5,6]; Escribir "Digite Valor:" Para i<-1 Hasta 5 Con Paso 1 Hacer Para j<-1 Hasta 6 Con Paso 1 Hacer Leer mat[5,6] sum<-sum + mat[5,6] Fin Para Escribir sum Fin Para FinProceso El tercer paso es codificar en la herramienta Falcon C++ el programa, utilizando las mismas variables, y matriz utilizados en el pseudocodigo /*Un algoritmo que almacene números en una matriz de 5 x 6. Imprimir la suma de los números almacenados en la matriz. */ #include "iostream" #include "string" #include <stdlib.h> void cargar(); using namespace std; 10 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 int mat[5][6]; int i, j, sum; int main() { system ("cls"); cargar(); } void cargar() { cout << "Digite valor [][]" << i << j; for (i=0; i<5; i++) for (j=0; j<6; j++) { cin >> mat[i][j]; sum = sum + mat[i][j]; } cout << sum; system ("pause"); } Realizamos la prueba de escritorio i 1 2 j mat[][] sum 1 1 1 2 2 3 3 3 6 4 4 10 5 5 15 6 6 21 1 1 22 2 2 24 3 3 27 4 4 31 11 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 3 4 5 5 5 36 6 6 42 1 1 43 2 2 45 3 3 48 4 4 52 5 5 57 6 6 63 1 1 64 2 2 66 3 3 69 4 4 73 5 5 78 6 6 84 1 1 85 2 2 87 3 3 90 4 4 94 5 5 99 6 6 105 12 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 13