You are on page 1of 31

ARREGLOS (ARRAYS)

• TIPOS DE DATOS ESTRUCTURADOS: Variables definidas que


pueden almacenar en memoria varios valores al mismo
tiempo.
• ARREGLOS: Colección de un número fijo de componentes
que son del mismo tipo de dato.
– Arreglos Unidimensionales (Vectores)
– Arreglos Bidimensionales (Matrices)

– Forma general para declarar un arreglo de una dimensión:


» tipoDato nombreArray [intExp];
• Donde intExp es cualquier expresión constante que al evaluarse
produce un número positivo entero. También, intExp especifica el
número de componentes del arreglo.

1
Arrays Vectores
• Ejemplos:
– La instrucción: int num[5]; declara un arreglo
llamado num de cinco componentes, cada uno de
tipo int.
num

num[0] num[1] num[2] num[3] num[4]


Arrays Vectores
• Para acceder a los componentes de un arreglo,
la forma general utilizada es:
– nombreArray [indexExp]
• Donde indexExp, también llamado el indice, es cualquier
expresión cuyo valor debe ser un entero positivo.
Especifica la posición de un componente dentro del
arreglo.
– Ejemplo:
• int list[10]; //declara un arreglo
34
llamado list de 10 componentes

• list[5] = 34; // almacena el valor 34 en la sexta posición del arreglo list


[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Arrays Vectores
 Suponer que a es una variable de tipo int. Las
instrucciones:
a = 3;
list[a] = 63;
asignan el valor de 3 a la variable a, y luego le asigna el
valor 63 a la cuarta posición del arreglo list. De la misma
forma, si el valor de la variable a es 4, entonces la
instrucción
list[2 * a – 3] = 58;
almacena el valor 58 dentro de list[5] porque 2*a-3
evalua a cinco.
Arrays Vectores
 Analicemos las siguientes instrucciones:
list[3] = 10; //asigna el valor de 10 al cuarto componente de list
 list [6] = 35; //asigna el valor de 35 a la posición siete de list
 list [5] = list[3] + list [6] ; //añade el contenido de list[3] y de list[6] a list[5]

10 45 35

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Arrays Vectores
• Uso práctico de arreglos en C++
– Problema: Hacer un programa que en C++ que lea
cinco números, los sume, y luego los escriba en el
orden inverso como se entraron.
• Se necesitan declarar al menos cinco variables todas del
mismo tipo para almacenar en memoria los números que
se van a entrar.
 Solución Programa #1
#include<iostream>
using namespace std;

int main()
{
int num1, num2, num3, num4, num5;
int sum;

cout << “Ingrese cinco numeros enteros: “;


cin >> num1>>num2>>num3>>num4>>num5;
cout << endl;

sum = num1 + num2 + num3 + num4 + num5;

cout << “La suma de los numeros ingresados es = “ << sum << endl;
cout << “Los numeros insertados en orden inverso son: “;
cout << num5 << “ “ << num4 << “ “ << num3 << “ “ << num2 << “ “ << num1<< endl;
system(“pause”);
return 0;
}
Arrays Vectores
• Hacer el mismo programa pero para que lea 100
números en lugar de solo cinco.
– En vez de definir cien variables del mismo tipo en el
programa, es más conveniente definir un arreglo de
cien posiciones donde se pueda acumular cada valor
en su lugar correspondiente, leerlos, sumarlos, y por
último escribirlos en el orden inverso como se
entraron.
 Solución:
#include<iostream>
using namespace std;

int main()
{
int list[100];
int sum = 0;

cout << “Ingrese 100 numeros enteros: “;


for (int i = 0; i < 100; i ++)
{
cin >> list[i];
sum = sum + list[i];
}
cout << endl;
cout << “La suma de los numeros es = “ << sum << endl;
cout << “Los numeros insertados en forma inversa serian: “;
for(int i = 99; i >=0; i --)
cout << list[i] << “ “;

cout << endl;

system(“pause”);
return 0;
}
Ejercicios Propuestos
• Diseñe un programa que dado un vector de magnitud X, busque y
muestre la posición en la que se encuentra un valor N, dentro del
vector
• Se tiene dos vectores A y B, diseñe una solución, en la cual, en un
tercer vector se guarde la multiplicación de los vectores A y B, y
luego se impriman los tres vectores, uno a la par del otro, en forma
vertical
• Diseñe un programa en C++, en el cual guarde un vector de 10
números, determine el promedio de dichos números.
• Diseñe un algoritmo y programa en C++ que lea dos vectores A y B
de 20 elementos cada uno y sume el primer elemento de A con el
ultimo elemento de B y luego el segundo elemento de A por el
diecinueveavo elemento de B y así sucesivamente hasta llegar al
veinteavo elemento de A por el primer elemento de B. El resultado
de la suma almacenarlo en un vector C.

10
METODOS DE ORDENAMIENTO
• Estos métodos son simples de entender y de
programar ya que son iterativos, simples ciclos
y sentencias que hacen que el vector pueda
ser ordenado. Dentro de los Algoritmos de
ordenamiento iterativo encontramos:
• – Burbuja
• – Inserción
• – Selección

11
Analizando Método de la Burbuja

12
Burbuja Simple
• La burbuja mas simple de todas es la que
compara todos con todos, generando
comparaciones extras, por ejemplo, no tiene
sentido que se compare con sigo mismo o que
se compare con los valores anteriores a el, ya
que supuestamente, ya están ordenados.

13
Burbuja Mejorada
• Una nueva versión del método de la burbuja
seria limitando el numero de comparaciones,
es inútil que se compare consigo misma. Si
tenemos una lista de 10.000 elementos,
entonces son 10.000 comparaciones que
están sobrando. Imaginemos si tenemos
1.000.000 de elementos. El método seria
mucho mas optimo con “n” comparaciones
menos (n = total de elementos).
14
Implementando Método Burbuja
Mejorado
USO DE VECTORES APLICANDO LA CLASE
VECTOR (se debe incluir #include vector)
• Podemos declarar vectores de cualquier tipo.
• El vector puede estar vacio o tener un
tamaño.
vector <float> num(20);
//Vector de 20 elementos de tipo float
vector <int> numeros;
// Vector de numeros de tipo entero sin tamaño
especifico
INSERTAR Y ELIMINAR ELEMNTOS EN EL
VECTOR(se debe incluir #include vector)
nombreVector.push_back(elemento);
//Insertar un elemento en el vector
vector<float>temp; //Declarando vector
temp.push_back(88.5);//Insertando valor al vector
temp.push_back(88.5); //Insertando valor al vector

nombreVector.pop_back();
//Elimina un elemento en el vector
Temp.pop_back(); //Elimina valor en el vector
EJERCICIOS PROPUESTOS
• Escriba un algoritmo que lea dos arreglos de
números enteros de tamaño n y/o m
(desiguales y/o iguales), y luego produzca la
lista (en otro vector) ordenado
ascendentemente de la mezcla de los dos
arreglos.Ejemplo: Si en los dos arreglos se
digitan los números 3 1 9 6 17 y 2 4 10 17,
respectivamente, el vector tres desplegado en
pantalla debe mostrar 1 2 3 4 6 9 10 17 17.
EJERCICIOS PROPUESTOS
• Escriba un algoritmo que lea un arreglo de números enteros positivos de
tamaño N, y calcule el valor de las variables estadísticas (Moda, Media
(Promedio), y Mediana), y visualice el arreglo ordenado.
Moda = Valor que más se repite, en caso de que no haya alguno que se
repita debe visualizar un mensaje estipulando la inexistencia de moda.
Aclaración: No tenga en cuenta el concepto bimodal (moda compartida).
Media (Promedio) = Calculo del promedio de los valores de los
elementos del arreglo.
Mediana= si N (impar) elemento en la posición central del arreglo
ordenando. Si N (par), suma de los valores de las dos posiciones
centrales del arreglo ordenado divida en dos.
Ejemplo: Si en el arreglo se digitan los números 3 1 9 6 17 2 4 10 17.
Arreglo ordenado seria: 1 2 3 4 6 9 10 17 17. La respuesta del algoritmo
debe ser:
Moda = 17, Media = 7,66 y Mediana = 6
PROGRAMACION EN C++ UIS – II - 2018

ARREGLOS BIDIMENSIONALES
(MATRICES)
Definición de matríz

Se llama matriz de orden m×n a todo conjunto rectangular de elementos aij dispuestos
en m líneas horizontales (filas) y n verticales (columnas) de la forma:

 a00 a01 a02  a0 n 


 
 a10 a11 a12  a1n 
A = (ai,j)=  a20 a21 a22  a2 n 
 
     
a  
 m0 am1 am 2 amn 
Abreviadamente suele expresarse en la forma A =(aij), con i =0, 1, ..., m, j =0, 1,
..., n. Los subíndices indican la posición del elemento dentro de la matriz, el primero
denota la fila ( i ) y el segundo la columna ( j ). Por ejemplo el elemento a25 será el
elemento de la fila 3 y columna 6.
El orden es el número de filas y columnas que tiene la matriz, se representa por m x n.
Expresión matricial: ejemplo

2 x  5 y  3z  1
El sistema 
 x - 4y  z  2

 2 5 –3 
Tiene la siguiente matriz de los coeficientes: A = 
 1 –4 1 


* 2 5 –3 1 

Tiene la siguiente matriz ampliada: A = 1 –4 1 –2 

 

  x  
 
 2 5 –3    1
 
Tiene la siguiente expresión matricial: y  =  – 2

 1 –4 1  



 z 
Clasificación de matrices: Forma

 Matriz fila: A = (1 3 5 7 9 ) • Matriz simétrica: es una matriz cuadrada que


verifica que:
aij  a ji  A = AT
2
   1 2 4 
 Matriz columna: A=  4  
6  2 3 5 
 4 5 -1 
 
 1 3 5  • Matriz antisimétrica: es una matriz cuadrada
  que verifica que:
 Matriz cuadrada: A=  2 4 6 
 1 1 1  aij  -a ji  A = –AT
Diagonal  0 2 -4 
secundaria  
Diagonal  -2 0 3 
principal  4 -3 0 
 
Clasificación de matrices: Elementos

• Matriz nula: es una matriz en la que todos los • Matriz unidad o identidad: es una matriz escalar,
elementos son nulos. cuya diagonal principal es 1.

0 0 0 0 0 1 0 0
     
O  0 0 0 O  0 0 I3   0 1 0 
0 0 0 0 0  0 0 1
    
3 3 3 2
• Matriz diagonal: es una matriz cuadrada, en la que • Matriz triangular superior: es una matriz donde
todos los elementos no pertenecientes a la diagonal todos los elementos por debajo de la diagonal son
principal son nulos. ceros.

 2 0 0 1 3 6
   
D   0  3 0 T   0  2 3
0 0 1  0 0 4
   

• Matriz escalar: es una matriz diagonal • Matriz triangular inferior: es una matriz donde
donde todos los elementos de ella son iguales. todos los elementos por encima de la diagonal son
ceros.
 2 0 0
  1 0 0
A  0 2 0  
T  3  2 0
 0 0 2
  3 5 4
 
Matrices en C++
• Las matrices se declaran de forma análoga, con corchetes
independientes para cada subíndice. La forma general de la
declaración es:
• tipoDato nombre[numero_filas][numero_columnas];
• donde tanto las filas como las columnas se numeran también
a partir de 0.
• La forma de acceder a los elementos de la matriz es utilizando
el nombre, seguido de las expresiones enteras
correspondientes a los dos subíndices, entre corchetes.
En C++ tanto los vectores como las matrices admiten los tipos
de las variables escalares (char, int, long, float, double, etc.),
Las matrices en C++ se almacenan por filas, en posiciones
consecutivas de memoria.
En cierta forma, una matriz se puede ver como un vector de
vectores-fila.
Si una matriz tiene N filas (numeradas de 0 a N-1) y M
columnas (numeradas de 0 a la M-1), el elemento (i, j) ocupa
el lugar: posición_elemento(0, 0) + i * M + j
A esta fórmula se le llama fórmula de direccionamiento de la
matriz.
POSICIONAMIENTO DE ELEMENTOS DIAGONALES (PRINCIPAL Y SECUNDARIA)
POSICIONAMIENTO DE ELEMENTOS TRIANGULOS ARRIBA Y DEBAJO DE
DIAGONALES
Ejemplo: Programa donde se ingresan 6 números en una matriz de 3X2 y se
ordenan los números de cada columna
#include <iostream> if(matriz[j][1] > matriz[j+1][1]){
#include<stdlib.h> temp = matriz[j][1];
using namespace std; matriz[j][1] = matriz[j + 1][1];
matriz[j+1][1] = temp;
main() { }
//Variables }
int temp, i, j, limite, F = 3, C = 2; }
int matriz[F][C]; //Mostrando matriz ordenada
//ingresando los numeros en la matriz cout<< “La matriz con sus columnas ordenadas es \n”;
cout<< “Ingrese 6 numeros para la matriz \n”; for(i = 0; i < F; i++){
for(i = 0; i < F; i++){ for(j = 0; j < C; j++){
for(j = 0; j < C; j++){ cout<<matriz[i][j]<<“\t”;
cin>> matriz[i][j]; }
} cout<<endl;
} }
//Ordenamiento system(“pause”);
limite = C;
for(i = 0; i < limite; i++){ }
for(j = 0; j < limite; j++){
if(matriz[j][0] > matriz[j+1][0]){
temp = matriz[j][0];
matriz[j][0] = matriz[j + 1][0];
matriz[j+1][0] = temp;
}
Ejercicios Propuestos
• Se desea conocer la suma de la diagonal principal y la diagonal secundaria
de una matriz de F*F, e indique la diferencia matemática entre ambos
resultados.
• Se tienen dos Matrices de tamaño 4x4, se pide escriba un programa en el
cual, mediante un menú, se puedan sumar, multiplicar o dividir las
matrices elemento a elemento.
• Ingrese 6 números en una matriz de 3x2 y obtenga el promedio aritmético
• En una matriz de 2x3 ingrese 6 números, multiplique su contenido por un
valor K y obtenga la suma de los números de la matriz.
• En una matriz de MxN ingrese números enteros y obtenga los números
mayores de cada columna.
• Escribir un algoritmo que lea un valor N, luego defina una matriz de
tamaño [N][N], llene los valores de la diagonal principal con los números
1, 2, 3, 4,…N, llene las posiciones debajo de la diagonal principal con los
números 2N, 3N, 4N, 5N,…, y llene las posiciones arriba de la diagonal
principal con los números 2N-1, 3N-1, 4N-1, 5N-1…., Adicional a esto, debe
visualizar la diferencia entre la sumatoria de los valores en la diagonal
principal y la sumatoria de los valores en la diagonal secundaria.

31