Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ARREGLOS
Contenido
Definición de arreglos ................................................................................................................... 3
Índices de un array ........................................................................................................................ 3
Un arreglo en C++.......................................................................................................................... 4
Dimensiones .................................................................................................................................. 4
Sintaxis .......................................................................................................................................... 4
Asignación de un arreglo ............................................................................................................... 4
Tipos de arreglos. .......................................................................................................................... 5
Cantidad de elementos en un arreglo ........................................................................................... 6
Arreglos de una dimensión ........................................................................................................... 6
Arreglo de dos dimensiones .......................................................................................................... 7
Ejemplos de arreglos de dos dimensiones: ................................................................................. 10
Declaración de una matriz con sus correspondientes elementos: ............................................. 12
Recorrer una matriz 2D en C++ ................................................................................................... 13
Arreglo de tres dimensiones. - .................................................................................................... 14
EJERCICIOS ARREGLOS DE UNA DIMENSION: ............................................................................. 18
EJERCICIOS ARREGLOS DE DOS DIMENSIONES: .......................................................................... 32
EJERCICIOS CON ARREGLOS DE TRES DIMENSIONES: ................................................................. 48
APLICACIONES. ............................................................................................................................ 58
PROBLEMAS PROPUESTOS.- ........................................................................................................ 58
BIBLIOGRAFIA Y WEBGRAFIA ...................................................................................................... 59
UNIDAD 3 ARREGLOS
Definición de arreglos
Índices de un array
Los índices son números que se utilizan para identificar a cada uno de los
componentes de un array. A modo de ejemplo, podemos pensar que los índices
son como los números de habitaciones de un hotel, es decir, para poder
dirigirnos a un hotel específico es necesario saber el nombre del mismo, luego,
si queremos llegar a una habitación específica de dicho hotel necesitaremos,
además del nombre del hotel, el número de habitación deseado.
Un arreglo en C++
Dimensiones
Sintaxis
<tipo> nombre_variable[longitud];
Con esto diremos que nombre variable es un arreglo de longitud elementos del
tipo <tipo> . Cabe destacar que longitud debe ser cualquier expresión entera
constante mayor que cero.
Asignación de un arreglo
En resumen, un arreglo:
Tipos de arreglos.
Unidimensionales
Multidimensionales
Observaciones
Para nombrar un elemento en un arreglo hay que indicar el nombre del arreglo,
seguido de tantas parejas de corchetes [ ] como dimensiones declaradas. Dentro
de cada pareja de corchetes tiene que haber un índice. La combinación de los
índices indica la posición del elemento dentro del grupo. El valor mínimo para un
índice es 0. El valor máximo es uno menos que el tamaño de la dimensión
correspondiente en la declaración del arreglo.
Declaración:
int factores[30];
char codSexo[20];
Los nombres deben cumplir con las normas para los identificadores. La primera
línea indica que se han reservado 80 posiciones para números doble precisión.
Estas posiciones son contiguas. Es importante recalcar que en C, a diferencia
de otros lenguajes, el primer elemento es x[0], el segundo es x[1], el tercero es
x[2], y así sucesivamente; el último elemento es x[79]. En x hay espacio
reservado para 80 elementos, pero esto no obliga a trabajar con los 80; el
programa puede utilizar menos de 80 elementos. La segunda línea indica que se
han reservado 30 posiciones para números enteros, y la tercera línea indica que
se han reservado 20 posiciones de tipo caracter.
Los arreglos de dos dimensiones también son conocidos como matrices o como
"arreglos multidimensionales" son una estructura de datos bastante similar a los
vectores o arreglos. De hecho, una matriz no es más que una serie de vectores
contenidos uno en el otro (u otros), es decir, una matriz es un vector cuyas
posiciones son otros vectores.
Ahora, un vector posee una única fila y de este modo un grupo de vectores
unidos conforman una matriz. Viéndolo desde el punto de vista de la
programación, una matriz es un vector cuyas posiciones (de la cero a la n) son,
cada una de ellas, otro vector.
Declarar una matriz en C++ es muy similar a la de un vector, se deben seguir las
mismas normas para declarar una variable, pero una vez más con un pequeño
cambio en la sintaxis. Primero necesitaremos saber el tipo de los datos que irán
al interior de este (números, decimales o cadenas de texto, etc.) necesitamos
también, como siempre, un nombre para la matriz y un tamaño máximo tanto
para las filas como para las columnas. La sintaxis para declarar una matriz en
C++ es la siguiente:
tipoDato nombreMatriz[filas][columnas];
Nota: En C++, no es posible crear de una manera sencilla un vector (y por ende
tampoco una matriz) capaz de almacenar una cantidad de información indefinida,
es necesario ingresar con antelación la cantidad de datos (filas y columnas) que
la matriz tendrá.
Tenemos entonces, que la sintaxis es casi la misma excepto que ahora se tiene
dos pares de corchetes "[][]" y al interior de éstos debemos poner el número de
filas y columnas máximas de la matriz, respectivamente.
Declaración:
char m[2][3]; // forma una tabla de dos filas y tres
columnas con cada elemento de tipo carácter.
Por ejemplo:
m[0][0] = “a”
m[0][1] = “b”
m[0][2] = “c”
m[1][0] = “d”
m[1][1] = “e”
m[1][2] = “f”
int miMatriz[10][5];
La primera definición:
int miMatriz[10][5];
define una matriz que tendrá 10 filas y 5 columnas y cada una de las 50 casillas
tendrá datos de tipo entero.
Por ejemplo:
Matriz de 10 x 5 con datos enteros cualquiera
La segunda:
float miMatriz2[5][10];
que tendrá 5 filas y 10 columnas y cada una de las 50 casillas tendrá datos de
tipo flotante. Por ejemplo:
La tercera:
Mimatriz3 que tendrá 15 filas y 15 columnas (una matriz cuadrada) y cada una
de las 225 casillas tendrá datos de tipo string (cadena).
La cuarta:
bool miMatriz4 [1000][3];
Esta línea contiene la declaración de una matriz llamada miMatriz4 que tendrá
1000 filas y 3 columnas y cada una de las 3000 casillas tendrá datos de tipo
booleano.
Aquí hemos declarado una matriz de tipo int de dos filas y dos columnas y la
hemos inicializado con diferentes valores. El valor inicial corresponde a la casilla
0,0 (fila cero, columna cero) y tiene el valor de 1, en la fila cero, columna uno
tenemos el valor de 2, en la fila uno columna cero el valor de 3 y finalmente en
la fila uno columna uno el valor de 4. Es importante notar que el primer tanto la
fila como la columna comienzan desde cero y no desde uno, por esto la primera
casilla corresponde a la fila y columna cero.
Para acceder al valor de una casilla nuevamente haremos uso de los corchetes,
pero esta vez no para declarar tamaños (porque eso ya lo hicimos) sino para
indicar posiciones (fila y columna).
Para obtener todos los datos que se encuentran al interior de una matriz,
debemos acceder a cada posición y esto se hace fácilmente con dos ciclos for
(anidados). La lógica de este procedimiento es la siguiente, el primer ciclo for
comenzará desde cero e ira hasta el número de filas, de modo que la variable de
control que generalmente llamamos "i", será la que va a ir variando entre cero y
el tamaño del array, de esta forma al poner la i al interior de los corchetes,
estaremos accediendo al valor de cada fila y el segundo ciclo irá de cero al
número de columnas y normalmente se usa la variable llamada j para acceder a
cada columna, veamos:
cout<<edades[i][j]<<endl;
}
Arreglo de tres dimensiones. -
Las matrices que tienen tres dimensiones, se ven como los valores de un espacio
tridimensional. Este tipo de matriz utiliza tres índices que, en este caso,
representan las coordenadas x, y, z del espacio físico:
Por ejemplo, podemos definir una matriz W como una matriz de asientos,
supongamos que tenemos 6 salones, cada salón tiene 5 filas de 8 asientos por
cada fila, la matriz se vería como sigue, donde cada salón estaría representado
como un eje o tabla:
Declaración
Primera forma:
int M[3][3][3] = {111, 112, 113, 121, 122, 123, 131, 132,
133, 211, 212, 213, 221, 222, 223, 231, 232, 233, 311,
312, 313, 321, 322, 323, 331, 332, 333 ;
int M[3][3][3] =
},
},
},
};
Ejercicio 1.- Crear un arreglo con 5 elementos e imprimir en pantalla todos los
elementos del arreglo.
Definición:
Inicializamos el array:
Dicha instrucción declara un arreglo que puede ser representado como sigue:
Sin embargo, el número de valores entre llaves {} no debe ser mayor que el
número de elementos en el array. Por ejemplo, en el ejemplo anterior, A se
declaró con 5 elementos (según lo especificado por el número entre corchetes,
[]), y las llaves {} contenían exactamente 5 valores, uno para cada elemento. Si
se declara con menos, los elementos restantes se establecen en sus valores
predeterminados (que para los tipos fundamentales significa que están llenos
con ceros), por ejemplo:
Al inicializar incluso puede no especificarse valor entre corchetes, solo las llaves:
int A [5] = { }; //Se crea un array con cinco valores
enteros, cada uno inicializado con un valor de cero.
Nombre[índice]
A[2]=75;
X=A[2];
En este punto, es importante distinguir claramente los dos usos de los corchetes[]
relacionados a los arreglos. Ellos desempeñan dos tareas diferentes: una es
especificar el tamaño de los arreglos cuando son declarados; y la segunda es
especificar los índices para elementos concretos del arreglo para acceder a estos
elementos. No confundir entre estos dos posibles usos de los corchetes:
Por tanto, después de definir el arreglo y llenar sus datos realizamos las
siguientes instrucciones para recorrer el array y mostrar sus elementos en
pantalla:
cout <<A[n]<<endl;
A[0] = a;
A[a] = 75;
b = A [a+2];
A[A[a]] = A[2] + 5;
result+=foo[n]
Nombre: Edades
Tamaño: 10 elementos
Definimos el arreglo Edades:
if(Edades[i]>mayor){
mayor=Edades[i];
string titulos[5];
string autores[5];
Creamos un bucle repetitivo para poder solicitar al usuario los datos para cada
una de las posiciones de los vectores tanto de libros como de autores, tomando
en cuenta que, para cualquiera de las posiciones del vector de libros, el autor se
guardará en la misma posición, pero del vector de autores:
Por tanto, se ha reemplazado las líneas que usaban cin para leer los datos por
la función getline(...) que recibe como primer argumento el flujo de entrada de cin
y como segundo argumento la variable en la que queremos poner el valor.
Una vez guardados los datos en el array podemos hacer un segundo recorrido
por las posiciones del array para mostrar los elementos en pantalla:
La instrucción:
titulos[i]
autores[i]
nos permite acceder al elemento en la posición i del array títulos y del array
autores respectivamente para mostrarlo junto al mensaje de salida.
Definir el array:
int numeros[5];
sum += numeros[i];
string palabras[N];
Capturamos mediante un bucle repetitivo cada uno de los valores del arreglo:
cin>>buscar;
if(buscar==palabras[i]){
existe++;
if (existe>0)
else
A={2,4,6,5,1}
X=10
A= {12,14,16,15,11}
double VectorA[N];
}
Solicitamos el valor de X:
cin>>X;
VectorA[i]=VectorA[i]+X;
cout<<VectorA[i]<<" ";
primera forma:
El arreglo anterior se llama ‘x’ y sus elementos se definen tipo entero, tiene 3
filas y 2 columnas. Los elementos entre llaves desde la izquierda hacia la
derecha son almacenados en el arreglo también de izquierda a derecha. Los
elementos serán llenados en el array en el orden, los primeros dos elementos de
la izquierda en la primera fila, los siguientes dos en la segunda fila y así
sucesivamente.
0 1
2 3
4 5
Mejor forma:
Ejemplo 11.-
En el siguiente ejemplo pediremos al usuario que ingrese el número de filas y
columnas del array, luego le pediremos que ingrese los elementos del array y
luego el programa desplegara los elementos del array de dos dimensiones:
int arr[10][10]
Pero a continuación pedimos al usuario ingrese los valores para número de filas
y columnas y reemplazamos a los anteriores:
cin>>fila;
cin>>columna;
cin>>arr[i][j];
Iteramos nuevamente con dos bucles repetitivos ahora para mostrar los
elementos del arreglo:
{
for(j=0; j<columna; j++)
cout<<arr[i][j]<<" ";
cout<<"\n";
float M[3][4] =
};
Si el listado de elementos no incluye todos los elementos del grupo, los faltantes
serán reemplazados por el valor cero automáticamente.
Figura que muestra el arreglo rellenado con ceros
int B[][4] =
{ 2, -8 },
{ -3 },
};
/* declaración valida*/
/* declaración valida */
Ejemplo 14.-
bool B[5][5] =
};
Recorrido del arreglo con dos bucles for anidados para buscar en todas las filas
y columnas comparando si el valor en cada posición es igual a true:
for (int i=0; i<5; i++){
if (B[i][j]==true)
contador++;
Luego de completar el recorrido, es decir al terminar los dos bucles anidados mostramos
el valor del contador que ha ido incrementando en tanto se ha contrado valores true, por
tanto, el contador tiene el total de valores verdaderos:
Ejemplo 15.-
Considere para el ejemplo anterior que también se desea contar los valores
falsos, es decir un array de 5x5 de booleanos y se desea contar cuantos valores
verdaderos existen, cuantos falsos y cuantos contados entre falsos y verdaderos
en total (este último total deberá coincidir con el tamaño de la matriz).
bool B[5][5] =
};
Recorrido del arreglo con dos bucles for anidados para buscar en todas las filas
y columnas comparando si el valor en cada posición es igual a true y comparando
si es igual a false (en este caso el valor true es representado también por 1 y
falso por 0):
if (B[i][j]==1)
contadorVerdad++;
if (B[i][j]==0)
contadorFalso++;
1 0 0
0 1 0
0 0 13𝑥3
int I[5][5];
col=fil;
Para llenar los valores a la matriz identidad I podemos considerar que las
coordenadas para cada elemento de la matriz son las siguientes:
Podemos observar que la diagonal principal está marcada de color rojo y las
coordenadas de la diagonal principal tienen los valores de fila y columna iguales
Por lo tanto, al momento de cargar los datos para la matriz identidad solo
tendremos recorrer con dos ciclos for para filas y columnas con los
correspondientes i y j los cuales verificamos que si tienen el mismo valor
asignamos 1 en esa posición caso contrario asignamos 0:
if (i==j)
I[i][j]= 1;
else
I[i][j]= 0;
Salida en pantalla:
1 2 3
Si A= [4 5 6]
7 8 9 3𝑥3
𝟏 4 7
𝑡
𝐴 = [2 𝟓 8]
3 6 𝟗 3𝑥3
#include <iostream>
cout<<endl;
cout<<endl;
int main()
imprimirmatriz(matriz);
traspuesta(matriz);
return 0;
Solo puede multiplicar dos matrices si sus dimensiones son compatibles, lo que
significa que el número de columnas en la primera matriz es igual al número de
renglones (filas) en la segunda matriz. Si A es una matriz a × b y B es una
matriz b × c, el producto AB es una matriz a × c.
Por ejemplo:
1 3 2 4 6
Si matriz A =[ ] y matriz B = [ ]
5 7 2𝑥2 8 10 12 2𝑥3
1 3 2 4 6
A x B =[ ] x[ ]
5 7 2𝑥2 8 10 12 2𝑥3
1.- multiplicar la primera fila por la primera columna y ese resultado será el primer
elemento de la matriz resultante:
Y realizando las operaciones la matriz resultante quedaría con los siguientes valores:
Una vez claro el procedimiento pedimos al usuario las dimensiones de las matrices que
desea multiplicar:
cin>>f1>>c1;
if (c1 == f2)
C[i][j] = 0;
else
De tal forma que la salida en pantalla debe ser por ejemplo así:
EJERCICIOS CON ARREGLOS DE TRES DIMENSIONES:
#include <iostream>
int main()
int test[2][3][2];
Por ultimo recorremos nuevamente por cada posición del arreglo imprimiendo
los valores:
cout<<"\n Despliegue de los valores almacenados:"<<endl;
Segundo mes:
Tercer mes:
Resolviendo:
#include <iostream>
using namespace std;
int main()
{
int meses=4,semanas=4,dias=7;
int suma_mensual1=0,suma_mensual2=0,suma_mensual3=0;
int Ventas[meses][semanas][dias];
suma_mensual2=suma_mensual2+Ventas[i][j][k];
cout<<"suma acumulada mes2 : " <<
suma_mensual2 <<endl;
}
El método mayor() deberá recibir un vector con 7 elementos (los 7 promedios de los
días de la semana) y buscar el mayor de ellos, según la posición del mayor se verificará
si corresponde a día lunes, o día martes, o miércoles, etc.:
if (v[i]>=mayor){
mayor=v[i];//elemento mayor
else if (posm==2)
else if (posm==3)
else if (posm==4)
else if (posm==5)
cout<<"Dia de mas ventas: Sabado";
else if (posm==6)
diademasVenta(Ventas);
Los arrays son usados extensamente por los programadores para contener listas
de datos en la memoria, por ejemplo, los datos almacenados en un disco suelen
leerse y ponerse dentro de un array con el objetivo de facilitar la manipulación
de dichos datos, ya que los datos en memoria pueden ser modificados,
clasificados, marcados para su eliminación, etc. para luego ser reescritos al
disco. Otro ejemplo podría ser el de un menú de opciones que se desplegarán
dentro de una ventana para que el usuario pueda elegir una de éstas, en tales
casos y cuando las opciones son numerosas, solamente se ponen unas cuantas,
de ellas dentro de la ventana, pero se le da al usuario la oportunidad de poder
subir y bajar a su antojo para ver el resto de opciones que, aunque no se vean
en la ventana, forman parte del menú o array de opciones.
PROBLEMAS PROPUESTOS.-
3. Hacer un programa que lea diez valores enteros en un array y los muestre
en pantalla. Después que los ordene de menor a mayor y los vuelva a
mostrar. Y finalmente que los ordene de mayor a menor y los muestre por
tercera vez. Para ordenar la lista usar una función que implemente el
método de la burbuja y que tenga como parámetro de entrada el tipo de
ordenación, de mayor a menor o de menor a mayor. Para el array usar
una variable global.
7. Dada una matriz A y una matriz B, verificar si son iguales y mostrar como
resultado: “iguales” caso contrario mostrar: “distintas”.
BIBLIOGRAFIA Y WEBGRAFIA
http://www.codeblocks.org