Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Semana 10 - Arreglos - Unidimensionales

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 45

CC126: Introducción a los Algoritmos

Arreglos
Unidimensionales

07/03/2024 2024-1 1
CC126: Introducción a los Algoritmos

Temario

 Definición
 Declaración e Inicialización
 Elementos de un Arreglo
 Lectura y Escritura de Arreglos
 Búsqueda Secuencial
 Ordenamiento

07/03/2024 2024-1 2
CC126: Introducción a los Algoritmos

Problema:

Imaginemos que estás desarrollando un programa en C++ para


gestionar la información de una tienda de productos
electrónicos.

07/03/2024 2024-1 3
CC126: Introducción a los Algoritmos

Solución

07/03/2024 2024-1 4
CC126: Introducción a los Algoritmos

07/03/2024 2024-1 5
CC126: Introducción a los Algoritmos
Solución con arreglos

07/03/2024 2024-1 6
CC126: Introducción a los Algoritmos

07/03/2024 2024-1 7
CC126: Introducción a los Algoritmos
Definición de Arreglo
 Un arreglo es una estructura de datos que permite
almacenar datos del mismo tipo (int, double, char, etc.).

 El tipo más simple de un arreglo es el arreglo unidimensional.

 Para poder utilizar un arreglo es necesario: declararlo e


inicializarlo.

07/03/2024 2024-1 8
CC126: Introducción a los Algoritmos

Declaración de un arreglo unidimensional


En C, para poder utilizar un arreglo primero hay
que declararlo.

Al declarar un arreglo unidimensional se reserva,


en la memoria RAM, el espacio suficiente para
almacenar todos los valores.

La cantidad de memoria que se reserva esta dada


por el tamaño del tipo de dato y la cantidad de
elementos del arreglo.
07/03/2024 2024-1 9
CC126: Introducción a los Algoritmos

Declaración de Arreglos como punteros

Supongamos que tenemos la siguiente variable:


Tipodato *Nombrepuntero;

Para crear un arreglo debemos hacer uso de New y


sería de la siguiente forma:

Nombrepuntero=new Tipodato[cantidad];

07/03/2024 2024-1 10
CC126: Introducción a los Algoritmos

Declaración y creación de un arreglo


unidimensional

Veamos el siguiente ejemplo:


Sea Vec un arreglo de enteros con 7 posiciones:
int *Vec = new int[7];
Si suponemos que un dato entero ocupa 2 bytes.
Tendríamos lo siguiente:

07/03/2024 2024-1 11
CC126: Introducción a los Algoritmos
Declaración de un arreglo unidimensional
Dirección Índice del Arreglo de
en Memoria Arreglo 7 valores
Primer valor del índice

Valor en Vec[0]
AB001 0 20

AB003 1
La dirección donde se
AB005 inicia Vec es : AB001
2
AB007 3 Vec La dirección de &Vec[0]
es AB001
AB009 15
4
AB00A
Vec <-> &Vec[0]
5
Valor en Vec[4]
AB00C 6

07/03/2024 2024-1 12
Último valor del índice (N-1)
CC126: Introducción a los Algoritmos

Arreglos como punteros


Imaginemos que la memoria se encuentra de esta
forma:

Analizaremos únicamente la Zona


Estática y el HEAP…

El color blanco representa


espacios de memoria libre y el
color rojo espacios de memoria
ocupado.

07/03/2024 2024-1 13
CC126: Introducción a los Algoritmos

Y queremos realizar lo
siguiente:

1. Definir un puntero a float


llamado ptrfloat

float * ptrfloat;

2. Asignar dinámicamente
los espacio de memoria
donde se almacenarán los
10 datos float.

ptrfloat=new float[10];

07/03/2024 2024-1 14
CC126: Introducción a los Algoritmos
1. Definir un puntero a float llamado ptrfloat

float * ptrfloat;

En este caso la variable ptrfloat es una


variable estática, por lo tanto ocupará
una posición de memoria dentro de la
zona estática.

07/03/2024 2024-1 15
CC126: Introducción a los Algoritmos

float * ptrfloat;
Mediante un algoritmo de
selección se busca un
espacio de memoria para
alojar al puntero

Imaginemos que el espacio


de color azul es el asignado
para alojar a la variable
ptrfloat

07/03/2024 2024-1 16
CC126: Introducción
Arreglos a los Algoritmos
como unteros

2. Asignar dinámicamente los


espacio de memoria donde se
almacenarán los 10 datos float.

ptrfloat=new float[10];

Al ser una asignación dinámica se


le asignará un espacio dentro del
HEAP

07/03/2024 2024-1 17
CC126: Introducción a los Algoritmos

Mediante un algoritmo de selección


se busca 10 espacios contínuos de
78A1
78B1 memoria para alojar los 10 datos
según el tipo al que apunta el
puntero

En este caso se ha definido que a


partir del espacio 78A1 existen los
espacios de memoria requeridos

07/03/2024 2024-1 18
CC126: Introducción a los Algoritmos
Sea Vec un arreglo de 10 valores enteros
V
e 89 36 15 64 37 29 18 59 75 91
ci 0 1 2 3 4 5 6 7 8 9

■ Para acceder a un elemento del arreglo

Primer elemento Vec[0] → 89


Segundo elemento Vec[1] → 36
Último elemento Vec[9] → 91

07/03/2024 2024-1 19
CC126: Introducción a los Algoritmos

V
e 89 36 15 64 . . . . . .
N
ci 0 1 2 3 . . . . . -
1
De manera general:

i-ésimo elemento

Vec[i]
Para un valor de i entre 0 y N-1

07/03/2024 2024-1 20
CC126: Introducción a los Algoritmos

Por defecto, cuando declaramos un arreglo el


valor inicial de cada celda es el que tiene en
ese momento la posición de memoria
asignada.
Si deseamos que cada celda tenga un valor
inicial debemos de inicializar el arreglo.

07/03/2024 2024-1 21
CC126: Introducción
Inicializar a los
un arreglo Algoritmos
unidimensional

Sea el Vec un arreglo de enteros de 7 Índice del


Arreglo
Vec
posiciones
0 14
int *Vec = new int[7]; 1 5

2 19

Que luego de declararlo tiene lo 3 20


siguientes valores: 4 11

5 10

6 16

07/03/2024 2024-1 22
CC126: Introducción a los Algoritmos

Índice del Vec Si deseamos inicializar con 0, por ejemplo,


Arreglo
cada celda del arreglo debemos hacer lo
0 0
14 siguiente:
1 0
5

2 0
19 for(int i=0; i<7; i++)
3 20
0 {
4 0
11
Vec[i]=0;
0
10
}
5

6 0
16

07/03/2024 2024-1 23
CC126: Introducción a los Algoritmos

Ejemplo
Asignarle memoria dinámica a un puntero a un dato
del int de 100 posiciones.

int main()
{int *Arreglo;
Arreglo= new int[100];
for (int i=0;i<100;i++)
Arreglo[i]=i;

for (int i=0;i<100;i++)


cout<< Arreglo[i] <<“\n”;

…..
}
07/03/2024 2024-1 24
CC126: Introducción a los Algoritmos

Arreglos como punteros

Si se le asignó dinámicamente la
memoria a un arreglo, cómo se
libera????

07/03/2024 2024-1 25
CC126: Introducción a los Algoritmos

Arreglos como punteros

Si hemos utilizado new para asignar


debemos utilizar delete para liberar.

delete [ ] Nombrepuntero;

Debemos anteponer los corchetes al


nombre de la variable del tipo puntero.

07/03/2024 2024-1 26
CC126: Introducción a los Algoritmos

Tareas básicas para trabajar con


Arreglos Unidimensionales
o Vectores

07/03/2024 2024-1 27
2024-1

CC126: Introducción a los Algoritmos


Ingresar datos a un Arreglo
Por ejemplo, si deseamos almacenar las edades de los alumnos
de un salón de ingles en un arreglo.

int main()
{ int nele; //numero de elementos del arreglo
int *Vec = new int[10]; // Arreglo que almacenara las
edades
//Lectura y Validación del Numero de elementos
do{
cout<<“Ingrese el numero de alumnos: ”;
cin>>nele;
}while(nele<=0 || nele>10);
//Lectura de edades en el arreglo
for(int i=0;i<nele;i++) //el índice empieza en 0
{ cout<<“Ingrese Edad “ << i+1 <<“ : “;
cin>>Vec[i]; //ingreso de datos
}
_getch();
return
07/03/2024 0; 2024-1 28
CC126: Introducción a los Algoritmos
Mostrar datos de un Arreglo
Siguiendo con el ejemplo anterior, si deseamos mostrar las
edades almacenadas en el arreglo.

int main()
{ int nele; //numero de elementos del arreglo
int *Vec = new int[10]; // Arreglo que almacenara las edades
//Lectura y Validación del Numero de elementos

//Lectura de edades en el arreglo

//Mostrar las edades almacenadas en el arreglo
cout<<“El arreglo tiene los siguientes datos :\n”;
for(int i=0;i<nele;i++)
cout<<“Edad “ << i+1 << “ = “ << Vec[i] << “\n ”;
_getch();
return 0;
}
07/03/2024 2024-1 29
2024-1

CC126: Introducción a los Algoritmos


Generar Aleatoriamente datos a un Arreglo
Opción 1:
Por ejemplo, si deseamos generar números al azar en un
arreglo usando el método srand y rand.

int main()
{ int nele; //numero de elementos del arreglo
int *X = new int[10]; // Arreglo que almacenara los datos
//Lectura y Validación del Numero de elementos

//Generar aleatoriamente los datos del arreglo
srand(time_t(0));
for (int i=0;i< nele;i++)
X[i]=rand() ;
_getch();
return 0;
}

07/03/2024 2024-1 30
CC126: Introducción a los Algoritmos
Generar Aleatoriamente datos a un Arreglo
Opción 2:
Por ejemplo, si deseamos generar notas al azar en un arreglo
usando el método Random::Random().Next( , ). En Visual Studio
C++.

int main()
{ int nele; //numero de elementos del arreglo
int *Vec = new int[10]; // Arreglo que almacenara los datos
//Lectura y Validación del Numero de elementos

//Generar aleatoriamente los datos del arreglo
for(int i=0;i<nele;i++)
{ Vec[i]=Random::Random().Next(0,20);
Sleep(20);
}
_getch();
return 0;
} 07/03/2024 2024-1 31
2024-1

CC126: Introducción a los Algoritmos


Sumar los elementos de un arreglo
int main()
{ int nele; //numero de elementos del arreglo
int *Vec = new int[10]; // Arreglo que almacenara los datos
int suma;
//Lectura y Validación del Numero de elementos

//Lectura de los datos del arreglo

//Suma de los elementos
suma=0;
for(int i = 0; i< nele; i++)
suma + = Vec[i];

cout<<“la suma es : ”<<suma;


_getch();
return 0;
}
07/03/2024 2024-1 32
CC126: Introducción a los Algoritmos

Hallar el mayor elemento

Sea Vec un arreglo de 5 valores enteros


V
e 29 18 59 75 91

ci 0 1 2 3 4

Cómo debemos hacer para hallar el mayor valor dentro del


arreglo?

07/03/2024 2024-1 33
CC126: Introducción a los Algoritmos

Hallar el mayor elemento

Mayor
elemento
V
e 29 18 59 75 91

07/03/2024 2024-1 34
CC126: Introducción a los Algoritmos
El mayor de un arreglo
int main()
{ int nele; //numero de elementos del arreglo
int *Vec = new int[10]; // Arreglo que almacenara los
datos
int max;
//Lectura y Validación del Numero de elementos

//Lectura de los datos del arreglo

//Hallar el mayor de los elementos
int max = Vec[0];
for(int i = 1; i< nele; i++)
if (Vec[i] > max)
max = Vec[i];
cout<<“El mayor elemento es : ” << max;
_getch();
return 0;
} Y el menor elemento?....
07/03/2024 2024-1 35
CC126: Introducción a los Algoritmos
num 6
4
Vec 89 36 15 64 37 19 28

0 1 2 3 4 5 6
Buscar un elemento
i

//Lectura y Validación del Numero de elementos …


//Lectura de los datos del arreglo …
//Búsqueda de un dato
encontrado=0; //falso
for(int i = 0; i < nele; i++){
if(Vec[i] == num)
encontrado=1; //verdad
}
if (encontrado ==1) cout<<“Se encontró el
dato”;
07/03/2024 2024-1 36
else cout<<“No se encontró el dato”;
2024-1

CC126: Introducción a los Algoritmos

Ejercicios

07/03/2024 2024-1 37
2024-1

Ejercicio
CC126: Introducción
1 – Repetido a los Algoritmos

Elaborar un programa que busque un numero


dentro de un arreglo e imprima el numero de veces
que se encontró

Para ello el programa debe solicitar:


•El Numero de elementos nele del Arreglo
•Un Arreglo de enteros Vec
•Un Numero num a buscar

07/03/2024 2024-1 38
2024-1

CC126: Introducción a los Algoritmos

Ejercicio 2 - Aprobados

Elaborar un programa que imprima las notas aprobatorias


que hay dentro de un arreglo de Notas.

Para ello el programa debe solicitar:


•El Numero de elementos nele del Arreglo
•Un Arreglo de enteros Vnotas

Se considera aprobado con nota mayor o igual a 13.

07/03/2024 2024-1 39
2024-1

CC126: Introducción a los Algoritmos

Ejercicio 3 - Promedio

Elaborar un programa que devuelva el promedio


de notas de un alumno. Sabiendo que la menor
nota no debe ser considerada para el promedio.

Para ello el programa debe solicitar:


• El Numero de elementos nele del Arreglo
• Un Arreglo de notas del alumno Vnotas

07/03/2024 2024-1 40
2024-1

CC126: Introducción a los Algoritmos

Ejercicio 4 - Frecuencia

Elaborar un programa que dado un Arreglo de


Notas de un salón de 40 alumnos devuelva un
Arreglo de Frecuencia de Notas

Para ello el programa debe solicitar:


•Un Arreglo de notas del salón VSalon

07/03/2024 2024-1 41
2024-1

CC126: Introducción a los Algoritmos

Ordenamiento
Los arreglos son estructuras de datos cuya
información no está, necesariamente, ordenada.

Para ordenar un arreglo hay que seguir


algoritmos establecidos, siendo uno de los más
sencillos el de intercambio de valores

07/03/2024 2024-1 42
2024-1

CC126: Introducción a los Algoritmos

Ordenamiento
• Sea Vec un arreglo de 3 datos enteros que tiene la
siguiente información

89 36 15

• Para ordenarlo ascendentemente, en está ocasión,


vamos a hacer lo siguiente

07/03/2024 2024-1 43
2024-1

CC126: Introducción a los Algoritmos

Ordenamiento
V
e 89 36 15

i j c >
Vec
0 0 Vec[j
[i]
1 1 ]
2 2

07/03/2024 2024-1 44
CC126: Introducción a los Algoritmos
Ordenamiento

Dado un vector Vec[] de enteros y un numero de elementos


nele. El código de ordenamiento ascendente sería.

int aux; //un temporal que ayuda al intercambio


for(int i=0;i<nele-1;i++)
{
for(int j=i+1;j<nele;j++)
if (Vec[i]>Vec[j])
{ aux=Vec[i];
Vec[i]=Vec[j];
Vec[j]=aux;
}
}

07/03/2024 2024-1 45

También podría gustarte