Vous êtes sur la page 1sur 57

Introducción a

la Programación
Tema 3: Arreglos

Conf.: Arreglos unidimensionales


Personalidad
• Mark Zuckerberg.
• 14 de mayo de 1984.
• Programador, filántropo y empresario.
• Estudió en Harvard.
• Microsoft compro el 1,6 % de las acciones.
• Pelicula The Social Network (2010).
Basada en el libro Multimillonarios por
accidente.
• Robo de idea.
Recordando…
• ¿Qué es una variable?

• ¿Qué características tiene?

• ¿Para que la utilizamos?


Introducción
//Programa que calcula el promedio de N notas {
int N, nota, suma = 0;
cin >> N;

for(int i = 1; i <= N; i++) {


cout << "Entre una nota: ";
cin >> nota;
suma += nota;
}
double promedio = suma/N;
cout <<"El promedio de notas es:"<< promedio;
}

¿Qué sucede si se quiere un programa, que determine la


cantidad de notas que superan el promedio de las notas?
Objetivo

Caracterizar los arreglos unidimensionales a


partir de su definición y operaciones básicas;
así como su sintaxis y semántica en el
lenguaje C++, para la solución de problemas
que requieran de su empleo.
Bibliografía

 Colectivo de Autores. Manual de la


asignatura. Capítulo 7 y Capítulo 8.
 La Esencia de la Lógica de Programación.
Capítulo 9. pág. 195 – 206. Omar I. Trejos.
 Algoritmos de ordenación y búsqueda.
Capítulo 6, Páginas: 166-178 y 190-193

6
Sumario
 Arreglos. Declaración
 Acceso a los elementos de un Arreglo.

Ejemplo de problema resuelto.


 Inicialización de un Arreglo.
 Asignación de Arreglos. Algoritmo para copiar el

contenido de un Arreglo en otro.


 Algoritmos comunes sobre los Arreglos.

 Conclusiones.

 Orientación del estudio independiente.

7
¿Qué es un Arreglo?
Es un grupo de posiciones en memoria que
almacena bajo el mismo nombre
(identificador) una colección de datos del
mismo tipo. (Manual de la Asignatura)

Es una colección finita de datos del mismo


tipo, almacenados de forma continua en la
memoria. Donde cada elemento puede ser
referenciado utilizando su posición relativa
respecto al primer elemento de dicha
colección y el nombre de la misma.
8
Diferencias
Arreglos Conjunto Vector

 Elementos de un  Elementos de  dirección (u


mismo tipo. diferentes tipos. orientación)
 Elementos que  Elementos no  módulo (o
pueden estar repetidos. longitud)
repetidos.  Elementos sin
 Elementos orden secuencial.
estructurados de
forma secuencial.
 Elementos que
pueden no estar 9

ordenados.
Arreglos.
Un Arreglo es un grupo de posiciones en memoria
que almacena bajo el mismo nombre (identificador)
una colección secuencial de datos del mismo tipo.

Posiciones 1 2 3 4 5 6 7 8

Notas 2 3 4 5 4 2 3 5

Índices 0 1 2 3 4 5 6 7

Identificador del Arreglo Tamaño


Valor
Posición = Índice +1
Índice = Posición - 1 Elemento
10
Arreglos: Declaración.
Sintaxis:
Arreglo estático
<tipo> <identificador>[<exp_arit>];

Arreglo dinámico
<tipo> * <identificador>;

Ejemplos: Declaración de un Arreglo de notas


enteras.
Ej1: int notas [10];
Ej2: int * notas;

11
Arreglos: Reservar memoria.
Sintaxis:
<identificador> = new <tipo>[<exp_arit>];

int
Ejemplo: Creación del Arreglo notas con 30
espacios.
notas = new int[30];

Esta operación solo puede hacerse


cuando el arreglo fue declarado de
tipo dinámico.

12
Caso de estudio
//Programa que calcula el promedio de N notas
{
int N, suma = 0;
cin >> N;
int notas[N];

for(int i = 1; i <= N; i++) {


IO.print("Entre una nota: ");
nota = IO.readlnInt();
suma += nota;
}
double promedio = suma*1.0/N;
IO.println("El promedio de notas es: " + promedio);
}
Sumario
 Arreglos. Declaración y creación.
 Acceso a los elementos de un Arreglo.

Ejemplo de problema resuelto.


 Inicialización de un Arreglo.
 Asignación de Arreglos. Algoritmo para copiar el

contenido de un Arreglo en otro.


 Algoritmos comunes sobre los Arreglos.

 Conclusiones.

 Orientación del estudio independiente.

14
Acceso a los elementos de un Arreglo
Sintaxis:
<identificador>[<índice>]

exp_arit → int

Los índices estarán en el rango 0..n-1 y las


posiciones de 1..n, donde n es la longitud o tamaño
del Arreglo.

15
Acceso a los elementos de un Arreglo
Sintaxis para obtener un valor:
<tipo> <ident_var> = <ident_arr>[<índice>];

Identificador Identificador
de la del arreglo
variable

Este tiene que ser compatible


con el tipo de lo que almacena
el arreglo

Ejemplo:
int nota = notas[3];
Acceso a los elementos de un Arreglo
Sintaxis para modificar un valor:
<ident_arr>[<índice>] = <valor>;

Identificador
del arreglo

Este tiene que ser


compatible con el tipo de
lo que almacena el arreglo

Ejemplo:
notas[3] = 5;
Sumario
 Arreglos. Declaración y creación.
 Acceso a los elementos de un Arreglo.

Ejemplo de problema resuelto.


 Inicialización de un Arreglo.
 Asignación de Arreglos. Algoritmo para copiar el

contenido de un Arreglo en otro.


 Algoritmos comunes sobre los Arreglos.

 Conclusiones.

 Orientación del estudio independiente.

18
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
char vocales [5];
char * vocales = new char[5];

vocales ‘’ ‘’ ‘’ ‘’ ‘’
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
Ej1: char vocales [5];
Ej2: char * vocales = new char[5];
vocales[0] = ‘a’;

vocales ‘a’ ‘’ ‘’ ‘’ ‘’

20
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
Ej1: char vocales [5];
Ej2: char * vocales = new char[5];
vocales[0] = ‘a’;
vocales[1] = ‘e’;

vocales ‘a’ ‘e’ ‘’ ‘’ ‘’

21
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
Ej1: char vocales [5];
Ej2: char * vocales = new char[5];
vocales[0] = ‘a’;
vocales[1] = ‘e’;
vocales[2] = ‘i’;

vocales ‘a’ ‘e’ ‘i’ ‘’ ‘’

22
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
Ej1: char vocales [5];
Ej2: char * vocales = new char[5];
vocales[0] = ‘a’;
vocales[1] = ‘e’;
vocales[2] = ‘i’;
vocales[3] = ‘o’;

vocales ‘a’ ‘e’ ‘i’ ‘o’ ‘’

23
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
Ej1: char vocales [5];
Ej2: char * vocales = new char[5];
vocales[0] = ‘a’;
vocales[1] = ‘e’;
vocales[2] = ‘i’;
vocales[3] = ‘o’;
vocales[4] = ‘u’;

vocales ‘a’ ‘e’ ‘i’ ‘o’ ‘u’

24
Inicialización de un Arreglo
Si creamos el siguiente Arreglo:
Ej1: char vocales [5];
Ej2: char * vocales = new char[5];
vocales[0] = ‘a’;
vocales[1] = ‘e’;
vocales[2] = ‘i’;
vocales[3] = ‘o’;
vocales[4] = ‘u’;
vocales ‘a’ ‘e’ ‘i’ ‘o’ ‘u’

Lo anterior es equivalente a:
Ej1:char vocales[5] = {‘a’,‘e’,‘i’,‘o’,‘u’};
Ej2:
char * vocales = new char[5]{‘a’,‘e’,‘i’,‘o’,‘u’};
Caso de estudio
//Programa que calcula el promedio de N notas {
int N, nota, suma = 0;
cin >> N;

for(int i = 0; i < N; i++) {


cout << "Entre una nota: ";
cin >> nota;
suma += nota;
}
double promedio = suma/N;
cout << "El promedio es: " << promedio;
}

¿Qué sucede si se quiere un programa, que


determine la cantidad de notas que superan el
promedio de las notas?
Caso de estudio
//Programa que calcula el promedio de N notas{
int N, suma = 0; int N, nota, suma = 0;
cin >> N ; cin >> N ;
int notas[N];

for(int i = 0; i < N; i++) {


cout << "Entre una nota:";
cin >> notas[i]; cin >> nota;
suma += notas[i]; suma += nota;
}
double promedio = (double) suma/N;
cout << "El promedio es: " << promedio;
… Continúa …
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el
promedio son: " << contador;
}
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 0 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 0 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 1 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 2 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 2 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 2 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Caso de estudio
//Programa que calcula la cantidad de notas por encima
del promedio. Recorrido de un arreglo.
int contador = 0;
for(int i = 0; i < N; i++) {
if(notas[i] > promedio){
contador++;
}
}
cout << "La cantidad de notas que superan el promedio
son: " << contador;
}

promedio 3.5 contador 3 N 6

nota 3 5 4 2 2 5

0 1 2 3 4 5
Sumario
 Arreglos. Declaración y creación.
 Acceso a los elementos de un Arreglo.

Ejemplo de problema resuelto.


 Inicialización de un Arreglo.
 Asignación de Arreglos. Algoritmo para copiar el

contenido de un Arreglo en otro.


 Algoritmos comunes sobre los Arreglos.

 Conclusiones.

 Orientación del estudio independiente.

36
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE 2 3 5 7 11 13

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};

primosD 2 3 5 7 11 13

37
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE[3]=20; primosE 2 3 5 20 11 13

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};

primosD[3]=20; primosD 2 3 5 20 11 13

38
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE[3]=20 primosE 2 3 5 20 11 13
int numerosE[];
numerosE

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};

primosD[3]=20; primosD 2 3 5 20 11 13
int * numerosD = new int[6];
numerosD
39
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE[3]=20 primosE 2 3 5 20 11 13
int numerosE[];
numerosE
numerosE = primosE;

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};

primosD[3]=20; primosD 2 3 5 20 11 13
int * numerosD = new int[6];
numerosD = primosD; numerosD
40
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE[3]=20 primosE 2 3 5 20 11 13
int numerosE[];
numerosE

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};

primosD[3]=20; primosD 2 3 5 20 11 13
int * numerosD = new int[6];
numerosD = primosE; numerosD
41
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE[3]=20 primosE 2 3 5 20 11 13
int numerosE[];
numerosE

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};


primosD[3]=20; primosD 2 3 5 25 11 13
int * numerosD = new int[6];
numerosD = primosD; numerosD
numerosD[3] = 25;
41
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};

primosE[3]=20 primosE 2 3 5 25 11 13
int numerosE[];
numerosE

int * primosD = new int[6] {2, 3, 5, 7, 11, 13};


primosD[3]=20; primosD 2 3 5 20 11 13
int * numerosD = new int[6];
numerosD = primosE; numerosD
numerosD[3] = 25;
41
Asignación de Arreglos
int primosE[] = {2, 3, 5, 7, 11, 13};
primosE[3]=20
primosE 2 3 5 25 11 13
int * numerosD = new int[6];
numerosD = primosE; numerosD
numerosD[3] = 25;

A los elementos del


Arreglo primosE se puede
acceder también mediante
el identificador numerosD.
44
Copia de un Arreglo en otro
int primosE[] = {2, 3, 5, 7, 11, 13};
int * numDcopy = new int[6];
int numEcopy [6]

primosE 2 3 5 7 11 13

numDcopy

numEcopy

El arreglo copia debe ser creado con el


mismo tamaño que el original, en este
caso 6. Se puede determinar el tamaño del
arreglo con : sizeof(primosE)/sizeof(int)45
Copia de un Arreglo en otro
int primosE[] = {2, 3, 5, 7, 11, 13};
int * numDcopy = new int[6];
int numEcopy [6]

primosE 2 3 5 7 11 13

numDcopy

numEcopy

for(int i = 0; i < 6; i++){


numD[i] = primos[i];
numE[i] = primos[i];
}
46
Copia de un Arreglo en otro
int primosE[] = {2, 3, 5, 7, 11, 13};
int * numDcopy = new int[6];
int numEcopy [6]

primosE 2 3 5 7 11 13

numDcopy 2

numEcopy 2

for(int i = 0; i < 6; i++){


numD[i] = primos[i];
i=0
numE[i] = primos[i];
}
47
Copia de un Arreglo en otro
int primosE[] = {2, 3, 5, 7, 11, 13};
int * numDcopy = new int[6];
int numEcopy [6]

primosE 2 3 5 7 11 13

numDcopy 2 3

numEcopy 2 3

for(int i = 0; i < 6; i++){


numD[i] = primos[i];
i=1
numE[i] = primos[i];
}
48
Copia de un Arreglo en otro
int primosE[] = {2, 3, 5, 7, 11, 13};
int * numDcopy = new int[6];
int numEcopy [6]

primosE 2 3 5 7 11 13

numDcopy 2 3 5 7 11 13

numEcopy 2 3 5 7 11 13

for(int i = 0; i < 6; i++){


numD[i] = primos[i];
i=5
numE[i] = primos[i];
}
49
Sumario
 Arreglos. Declaración y creación.
 Acceso a los elementos de un Arreglo.

Ejemplo de problema resuelto.


 Inicialización de un Arreglo.
 Asignación de Arreglos. Algoritmo para copiar el

contenido de un Arreglo en otro.


 Algoritmos comunes sobre los Arreglos

 Conclusiones.

 Orientación del estudio independiente.

50
Algoritmos Básicos
1. Conteo y Suma
2. Búsquedas
 Lineal.
 De extremos (mayor/menor)
3. Ordenamiento

IP – Introducción a la Programación
Código Búsqueda lineal.
int BúsquedaLineal( int x ){
int i = 1; pos = -1;
bool encontrado = false;
while (i ≤ N && !encontrado){
if( x = notas[i]){
encontrado = true;
pos = i;
}
i = i + 1;
}
return pos;}
IP – Introducción a la Programación
Búsqueda del Mayor.
...
int mayorNota = notas[0];
int length = sizeof(notas)/sizeof(int);
for(int i = 1; i < length; i++){
if(notas[i] > mayorNota)
mayorNota = notas[i];
}
cout << mayorNota;

IP – Introducción a la Programación
Conclusiones
¿Qué hemos aprendido en la
clase de hoy?
Conclusiones
Un Arreglo se caracteriza por:
• Almacenar los elementos en posiciones de
memoria continuas.
• Tener un único nombre de variable que
representa a todos los elementos.
• Accederse a los elementos con los corchetes
[ ] y un índice que varía de 0 a la longitud.
• Acceso directo o aleatorio a los elementos.
• Ser de tamaño variable.
Estudio independiente
1. Estudiar como se pasa como parámetro un
arreglo y como se retorna en un sub-programa
(CP1)
2. Estudiar los metodos de Busqueda binaria sobre
arreglos en sus versiones iterativa y recursiva.
(CP3).
3. Estudiar los metodos de Ordenamiendo sobre
arreglos. (CP4).
Introducción a
la Programación
Tema 3: Arreglos

Conf.: Arreglos unidimensionales

Vous aimerez peut-être aussi