04 Arreglos Unidimensionales

47
Profesores Programación 1 Unidad 04 Arreglos Unidimensionales Jonathan Abril William Bravo Carlos Candela Franklin Gonzáles Juan Ramírez Percy triveño

Transcript of 04 Arreglos Unidimensionales

Page 1: 04 Arreglos Unidimensionales

Profesores

Programación 1Unidad 04Arreglos Unidimensionales

•Jonathan Abril•William Bravo•Carlos Candela•Franklin Gonzáles•Juan Ramírez•Percy triveño

Page 2: 04 Arreglos Unidimensionales

Unidad 04Arreglos UnidimensionalesObjetivos

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

Page 3: 04 Arreglos Unidimensionales

Problema:

Elaborar un programa en Lenguaje C que lea 5 notas de un Alumno y luego las imprima en orden inverso al ingresado

Page 4: 04 Arreglos Unidimensionales

Solución – Sin Arreglosint main(…) { int Nota1,Nota2,Nota3,Nota4,Nota5; // Variables para almacenar las 5 notas

//Ingreso de Datosprintf(“Ingrese Nota 1”); scanf(“%d”,&Nota1);printf(“Ingrese Nota 2”); scanf(“%d”,&Nota2);printf(“Ingrese Nota 3”); scanf(“%d”,&Nota3);printf(“Ingrese Nota 4”); scanf(“%d”,&Nota4);printf(“Ingrese Nota 5”); scanf(“%d”,&Nota5);//Mostrar las notas printf(“Nota 5 : %d”,Nota5); printf(“Nota 4 : %d”,Nota4); printf(“Nota 3 : %d”,Nota3); printf(“Nota 2 : %d”,Nota2); printf(“Nota 1 : %d”,Nota1); _getch();return 0;

}

Page 5: 04 Arreglos Unidimensionales

Solución – Con Arregloint main(…) { int VNotas[5]; // Estructura para almacenar las 5 notas //Ingreso de Datos for(int i=0;i<5;i++)

{ printf(“Ingrese Nota %d”,i+1); scanf(“%d”,&VNotas[i]);}

//Mostrar las notas for(int i=4;i>=0;i--)

printf(“Nota %d es: %d ”,i+1, VNotas[i]); _getch(); return 0;}

Page 6: 04 Arreglos Unidimensionales

Definición de Arreglo

• Un arreglo es una estructura de datos que permite almacenar “N” 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.

Page 7: 04 Arreglos Unidimensionales

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

Page 8: 04 Arreglos Unidimensionales

Declaración de un arreglo unidimensional

•Forma general:

<tipodedato> Nombre_del_arreglo [N];

Donde N es un número entero fijo o una constante

Page 9: 04 Arreglos Unidimensionales

Declaración de un arreglo unidimensional

Veamos el siguiente ejemplo:

Sea Vec un arreglo de enteros con 7 posiciones:

int Vec[7];

Si suponemos que un dato entero ocupa 2 bytes.

Tendríamos lo siguiente:

Page 10: 04 Arreglos Unidimensionales

Declaración de un arreglo unidimensional

0

1

2

3

4

5

6

AB001

AB003

AB005

AB007

AB009

AB00A

AB00C

La dirección donde se inicia Vec es : AB001

La dirección de &Vec[0] es AB001

Vec <-> &Vec[0]

Dirección en Memoria

Índice del Arreglo

Valor en Vec[0]

Valor en Vec[4]

Vec

Último valor del índice (N-1)

Primer valor del índice

20

15

Arreglo de 7 valores

Page 11: 04 Arreglos Unidimensionales

Ejemplo de declaración de arreglos unidimensionales

Definir un arreglo de 10 datos enteros:

Opción 1: Sin constantesint main(array<System::String ^> ^args){

int ArregloEnteros[10];

}

Page 12: 04 Arreglos Unidimensionales

Ejemplo de declaración de arreglos unidimensionales

Definir un arreglo de 10 datos enteros:

Opción 2: Con constantesint main(array<System::String ^> ^args){

const int N=10;int ArregloEnteros[N];

}

Page 13: 04 Arreglos Unidimensionales

Ejemplo de declaración de arreglos unidimensionales

Definir un arreglo de 10 datos enteros:

Opción 3: Con macros#define N 10int main(array<System::String ^> ^args){

int ArregloEnteros[N];

}

Page 14: 04 Arreglos Unidimensionales

Elementos de un Arreglo

Para acceder a un elemento del arreglo

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

Vec0 1 2 3 4 5 6 7 8 9i

89 36 15 64 37 29 18 59 75 91

Sea Vec un arreglo de 10 valores enteros

Page 15: 04 Arreglos Unidimensionales

Elementos de un Arreglo

De manera general:

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

Vec0 1 2 3 . . . . . N-1i

89 36 15 64 . . . . . .

Page 16: 04 Arreglos Unidimensionales

Inicializar un arreglo unidimensional

•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.

Page 17: 04 Arreglos Unidimensionales

Inicializar un arreglo unidimensional

Sea el Vec un arreglo de enteros de 7 posiciones

int Vec[7];

Que luego de declararlo tiene lo siguientes valores:

0

1

2

3

4

5

6

Índice del Arreglo

14

5

19

20

11

10

16

Vec

Page 18: 04 Arreglos Unidimensionales

Inicializar un arreglo unidimensional

0

1

2

3

4

5

6

Si deseamos inicializar con 0, por ejemplo, cada celda del arreglo debemos hacer lo siguiente:

for(int i=0; i<7; i++){ Vec[i]=0;}

Índice del Arreglo

14

5

19

20

11

10

16

Vec

0

0

0

0

0

0

0

Page 19: 04 Arreglos Unidimensionales

Tareas básicas para trabajar con Arreglos Unidimensionales

o Vectores

Page 20: 04 Arreglos Unidimensionales

Ingresar datos a un ArregloPor 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[10]; // Arreglo que almacenara las edades//Lectura y Validación del Numero de elementosdo{

printf(“Ingrese el numero de alumnos: ”);scanf_s(“%d”,&nele);

}while(nele<=0 || nele>10); //Lectura de edades en el arreglofor(int i=0;i<nele;i++) //el índice empieza en 0{ printf(“Ingrese Edad %d”,i+1); scanf_s(“%d”,&Vec[i]); //ingreso de datos}_getch();

}

Page 21: 04 Arreglos Unidimensionales

Mostrar datos de un ArregloSiguiendo con el ejemplo anterior, si deseamos mostrar las edades almacenadas en el arreglo. int main(…){ int nele; //numero de elementos del arreglo

int Vec[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

printf(“El arreglo tiene los siguientes datos :”);for(int i=0;i<nele;i++) printf(“Edad [%d] = %d \n ”,i+1, Vec[i]);_getch();

}

Page 22: 04 Arreglos Unidimensionales

Generar Aleatoriamente datos a un ArregloOpció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[10]; // Arreglo que almacenara los datos//Lectura y Validación del Numero de elementos…//Generar aleatoriamente los datos del arreglosrand(time_t(0));

for (int i=0;i< nele;i++) X[i]=rand() ;

_getch();}

Page 23: 04 Arreglos Unidimensionales

Generar Aleatoriamente datos a un ArregloOpción 2:

Por ejemplo, si deseamos generar notas al azar en un arreglo usando el método Random::Random().Next( , ).

int main(…) {int nele; //numero de elementos del arreglo

int X[10]; // Arreglo que almacenara los datos//Lectura y Validación del Numero de elementos…//Generar aleatoriamente los datos del arreglofor(int i=0;i<nele;i++)

{ Vec[i]=Random::Random().Next(0,20); Sleep(20); } _getch();}

Page 24: 04 Arreglos Unidimensionales

Sumar los elementos de un arreglo

int main(…){ int nele; //numero de elementos del arreglo

int Vec[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 elementossuma=0;for(int i = 0; i< nele; i++)

suma + = Vec[i];

printf(“la suma es : %d ”,suma);_getch();

}

Page 25: 04 Arreglos Unidimensionales

Hallar el mayor elemento

Vec0 1 2 3 4i

29 18 59 75 91

Sea Vec un arreglo de 5 valores enteros

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

Page 26: 04 Arreglos Unidimensionales

Hallar el mayor elemento

Vec 29 18 59 75 91

Mayor elemento

29 18 59 75 91

<

Page 27: 04 Arreglos Unidimensionales

Mayor de un arregloint main(…){ int nele; //numero de elementos del arreglo

int Vec[10]; // Arreglo que almacenara los datosint 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];

printf(“El mayor elemento es : %d ”,max);_getch();

}

Y el menor elemento?....

Page 28: 04 Arreglos Unidimensionales

Buscar un elemento

89 36 15 64 37 19 28Vec0 1 2 3 4 5 6

//Lectura y Validación del Numero de elementos … //Lectura de los datos del arreglo … //Búsqueda de un dato

encontrado=0; //falsofor(int i = 0; i < nele; i++){

if(Vec[i] == num)encontrado=1; //verdad

}if (encontrado ==1) printf(“Se encontró el dato”);else printf(“No se encontró el dato”);

i

64num

Page 29: 04 Arreglos Unidimensionales

Algo más de Arreglos Unidimensionales…

Page 30: 04 Arreglos Unidimensionales

Arreglos Unitarios – Opciones Avanzadas

int x[] = {89,36,15,64,37,29,18,59,75,91};

x0 1 2 3 4 5 6 7 8 9i

89 36 15 64 37 29 18 59 75 91

• Si se desea definir un arreglo de “N” posiciones, indicando un valor inicial para cada celda, se puede realizar lo siguiente:

Resultado Obtenido luego de ejecutada la instrucción

Page 31: 04 Arreglos Unidimensionales

Arreglos Unitarios – Opciones Avanzadas

int x[10] ={0};

x0 1 2 3 4 5 6 7 8 9i

0 0 0 0 0 0 0 0 0 0

• Si se desea inicializar un arreglo de “N” posiciones con 0 al momento de definirlo, se puede realizar lo siguiente:

Resultado Obtenido luego de ejecutada la instrucción

Page 32: 04 Arreglos Unidimensionales

Ejercicios …

Page 33: 04 Arreglos Unidimensionales

Ejercicio 1 – Repetido

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

Page 34: 04 Arreglos Unidimensionales

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 a 13

Page 35: 04 Arreglos Unidimensionales

Ejercicio 3 - Promedio

Elaborar un programa que devuelva el promedio de notas de un alumno. Sabiendo que la menor nota no debe ser considera para el promedio

Para ello el programa debe solicitar:• El Numero de elementos nele del Arreglo• Un Arreglo de notas del alumno Vnotas

Page 36: 04 Arreglos Unidimensionales

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

Page 37: 04 Arreglos Unidimensionales

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

Page 38: 04 Arreglos Unidimensionales

Ordenamiento

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

• Para ordenarlo descendentemente, en está ocasión, vamos a hacer lo siguiente

89 36 15

Page 39: 04 Arreglos Unidimensionales

Ordenamiento

89 36 15Vec

0

1

2

i j0

1

2

Vec[i]> Vec[j]

Page 40: 04 Arreglos Unidimensionales

OrdenamientoDado 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;}

}

Page 41: 04 Arreglos Unidimensionales

Arreglos Paralelos

• Los arreglos paralelos son estructuras de datos que se usan cuando se desea manejar información, simultanea o en paralelo, relacionadas por la posición.

• Por ejemplo, si deseo guardar los pesos y edades de 5 alumnos del Salón de Ingles deberé usar 2 arreglos , uno para los pesos y otro para las edades

Page 42: 04 Arreglos Unidimensionales

Arreglo Paralelo Gráficamente

Se aprovecha la variación del índice para ingresar datos a los dos arreglos unitarios

Int Vedades[5],Vpesos[5];

Vedades

0 1 2 3 4

VPesos 89

18

55

17

46

15

65

16

64

18

Page 43: 04 Arreglos Unidimensionales

Arreglo Paralelo Gráficamente

La variable i es como un índice que controla:- El ingreso de datos para el alumno i-esimo- La siguiente alumno por ingresar

Int Vedades[5],Vpesos[5];int i = 0;

Vedades

0 1 2 3 4 5 6 7 8 9

89 46 55 64

1 2 3 4

VPesos

18 1715 18

Page 44: 04 Arreglos Unidimensionales

Arreglo Paralelo – Solución en Código

int main(…) { int Vedades[5],Vpesos[5]; //Llenar Arreglos Paralelos for(int i=0;i<=4;i++) {printf(“Ingrese Edad del alumno %d”,i+1);

scanf(“%d”,&Vedades[i]); printf(“Ingrese Peso del alumno %d”,i+1);

scanf(“%d”,&Vpesos[i]);}

//Mostrar Arreglos Paralelos for(int i=0;i<=4;i++) printf(“Edad y Peso %d son:%d %d\n”,i+1,VEdades[i], Vpesos[i]); _getch();}

Page 45: 04 Arreglos Unidimensionales

Ejercicio 1 – Notas de Adultos

Elaborar una programa en Lenguaje C que lea las Notas y las Edades de 10 estudiantes universitarios e imprima solo las Notas de aquellos que son mayores de edad.

Page 46: 04 Arreglos Unidimensionales

Arreglo Paralelo – Notas de Adultosint main(…) { int Vnotas[10],Vedades[10]; //Llenar Arreglos Paralelos for(int i=0;i<=9;i++) {printf(“Ingrese Nota %d”,i+1);

scanf(“%d”,&Vnotas[i]); printf(“Ingrese Edad %d”,i+1);

scanf(“%d”,&Vedades[i]);}

//Mostrar Notas for(int i=0;i<=9;i++)

if(Vedades[i]>=18) printf(“Nota %d: \n”,i+1, Vnotas[i]);_getch();return 0;

}

Page 47: 04 Arreglos Unidimensionales

Ejercicio 2 – Peso PromedioElaborar una programa en Lenguaje C que usando arreglos paralelos lea las Categorías y las Edades de 10 empleados de la empresa ABC.

Las categorías pueden ser: A, B o C

El programa luego deberá solicitar una categoría dada por el usuario y calcular el promedio de las edades de los empleados que pertenecen a dicha categoría.