Programación 1Unidad 04 Arreglos Unidimensionales Profesores Jonathan Abril William Bravo Carlos Candela Franklin Gonzáles Juan Ramírez Percy triveño Unidad 04 Arreglos Unidimensionales Objetivos Definición Declaración e Inicialización Elementos de un Arreglo Lectura y Escritura de Arreglos Búsqueda Secuencial Arreglos Paralelos Problema: Elaborar un programa en Lenguaje C que lea 5 notas de un Alumno y luego las imprima en orden inverso al ingresado int main ) main( { int Nota1,Nota2,Nota3,Nota4,Nota5; // Variables para almacenar las 5 notas //Ingreso de Datos printf( printf( printf( printf( printf( Ingrese Nota 1 Ingrese Nota 2 Ingrese Nota 3 Ingrese Nota 4 Ingrese Nota 5 ); scanf( ); scanf( ); scanf( ); scanf( ); scanf( %d %d %d %d %d ,&Nota1); ,&Nota2); ,&Nota3); ,&Nota4); ,&Nota5); Solución Sin Arreglos //Mostrar las notas printf( Nota 5 : %d printf( Nota 4 : %d printf( Nota 3 : %d printf( Nota 2 : %d printf( Nota 1 : %d _getch(); return 0; ,Nota5); ,Nota4); ,Nota3); ,Nota2); ,Nota1); } _getch().i--) printf( Nota %d es: %d .i+1).i++) { printf( Ingrese Nota %d . scanf( %d . return 0. VNotas[i]).i>=0. } //Mostrar las notas for(int i=4.&VNotas[i]). // Estructura para almacenar las 5 notas //Ingreso de Datos for(int i=0. } .i<5.i+1.Solución Con Arreglo int main ) main( { int VNotas[5]. etc. double. El tipo más simple de un arreglo es el arreglo unidimensional. Para poder utilizar un arreglo es necesario: declararlo e inicializarlo inicializarlo.). .Definición de Arreglo Un arreglo es una estructura de datos que permite almacenar N datos del mismo tipo (int. char. para poder utilizar un arreglo primero hay que declararlo Al declarar un arreglo unidimensional se reserva.Declaración de un arreglo unidimensional En C. 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 . Donde N es un número entero fijo o una constante .Declaración de un arreglo unidimensional Forma general: <tipodedato> Nombre_del_arreglo [N]. 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: . Declaración de un arreglo unidimensional Dirección en Memoria Índice del Arreglo Arreglo de 7 valores Primer valor del índice Valor en Vec[0] AB001 AB003 AB005 AB007 AB009 AB00A AB00C 0 1 2 3 4 5 20 La dirección donde se inicia Vec es : AB001 Vec 15 La dirección de &Vec[0] es AB001 Vec <-> &Vec[0] Valor en Vec[4] 6 Último valor del índice (N-1) . } .Ejemplo de declaración de arreglos unidimensionales Definir un arreglo de 10 datos enteros: Opción 1: Sin constantes int main(array<System::String ^> ^args) { int ArregloEnteros[10]. int ArregloEnteros[N].Ejemplo de declaración de arreglos unidimensionales Definir un arreglo de 10 datos enteros: Opción 2: Con constantes int main(array<System::String ^> ^args) { const int N=10. } . } .Ejemplo de declaración de arreglos unidimensionales Definir un arreglo de 10 datos enteros: Opción 3: Con macros #define N 10 int main(array<System::String ^> ^args) { int ArregloEnteros[N]. Elementos de un Arreglo Sea Vec un arreglo de 10 valores enteros Vec i 89 36 15 64 37 29 18 59 75 91 0 1 2 3 4 5 6 7 8 9 Para acceder a un elemento del arreglo Primer elemento Segundo elemento Último elemento Vec[0] Vec[1] Vec[9] 89 36 91 . . N-1 De manera general: i-ésimo elemento Para un valor de i entre 0 y N-1 Vec[i] . . . . 0 1 2 3 . . . .Elementos de un Arreglo Vec i 89 36 15 64 . . . cuando declaramos un arreglo el valor inicial de cada celda es el que tiene en ese momento la posición de memoria asignada. .Inicializar un arreglo unidimensional Por defecto. Si deseamos que cada celda tenga un valor inicial debemos de inicializar el arreglo. Inicializar un arreglo unidimensional Sea el Vec un arreglo de enteros de 7 posiciones int Vec[7]. Índice del Arreglo Vec 14 5 19 20 11 10 16 0 1 Que luego de declararlo tiene lo siguientes valores: 2 3 4 5 6 . i++) { Vec[i]=0. i<7. cada celda del arreglo debemos hacer lo siguiente: for(int i=0. por ejemplo. } .Inicializar un arreglo unidimensional Índice del Arreglo Vec 0 14 0 5 0 19 20 0 0 11 0 10 0 16 0 1 2 3 4 5 6 Si deseamos inicializar con 0. Tareas básicas para trabajar con Arreglos Unidimensionales o Vectores . scanf_s(³%d´. int main(«) { int nele. // Arreglo que almacenara las edades //Lectura y Validación del Numero de elementos do{ printf(³Ingrese el numero de alumnos: ´). //numero de elementos del arreglo int Vec[10]. } . }while(nele<=0 || nele>10). scanf_s(³%d´. //ingreso de datos } _getch().i++) //el índice empieza en 0 { printf(³Ingrese Edad %d´.i<nele.i+1).&Vec[i]).&nele).Ingresar datos a un Arreglo Por ejemplo. si deseamos almacenar las edades de los alumnos de un salón de ingles en un arreglo. //Lectura de edades en el arreglo for(int i=0. for(int i=0. int main(«) { int nele. // 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 :´).i<nele.Mostrar datos de un Arreglo Siguiendo con el ejemplo anterior. } . //numero de elementos del arreglo int Vec[10]. si deseamos mostrar las edades almacenadas en el arreglo.i++) printf(³Edad [%d] = %d \n ´. _getch().i+1. Vec[i]). int main(«) { int nele. } . // Arreglo que almacenara los datos //Lectura y Validación del Numero de elementos « //Generar aleatoriamente los datos del arreglo srand(time_t(0)).i++) X[i]=rand() . _getch(). //numero de elementos del arreglo int X[10].i< nele. si deseamos generar números al azar en un arreglo usando el método srand y rand. for (int i=0.Generar Aleatoriamente datos a un Arreglo Opción 1: Por ejemplo. si deseamos generar notas al azar en un arreglo usando el método Random::Random().i<nele.i++) { Vec[i]=Random::Random().20). int main(«) { int nele. ). // Arreglo que almacenara los datos //Lectura y Validación del Numero de elementos « //Generar aleatoriamente los datos del arreglo for(int i=0. } _getch().Next(0.Next( . Sleep(20). } .Generar Aleatoriamente datos a un Arreglo Opción 2: Por ejemplo. //numero de elementos del arreglo int X[10]. //numero de elementos del arreglo int Vec[10]. i++) suma + = Vec[i]. i< nele. printf(³la suma es : %d ´. for(int i = 0. //Lectura y Validación del Numero de elementos « //Lectura de los datos del arreglo « //Suma de los elementos suma=0.Sumar los elementos de un arreglo int main(«) { int nele.suma). // Arreglo que almacenara los datos int suma. } . _getch(). Hallar el mayor elemento Sea Vec un arreglo de 5 valores enteros Vec i 29 18 59 75 91 0 1 2 3 4 Cómo debemos hacer para hallar el mayor valor dentro del arreglo? . Hallar el mayor elemento Mayor elemento Vec 29 < 18 59 75 91 . max).. } Y el menor elemento?. // Arreglo que almacenara los datos int max. printf(³El mayor elemento es : %d ´. //numero de elementos del arreglo int Vec[10].. for(int i = 1.Mayor de un arreglo int main(«) { int nele. i< nele. .. _getch(). i++) if (Vec[i] > max) max = Vec[i]. //Lectura y Validación del Numero de elementos « //Lectura de los datos del arreglo « //Hallar el mayor de los elementos int max = Vec[0]. . //verdad . i < nele. i++){ if(Vec[i] == num) encontrado=1.Buscar un elemento num 64 89 36 15 64 37 19 28 Vec 0 i 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. //falso for(int i = 0. } if (encontrado ==1) printf(³Se encontró el dato´). else printf(³No se encontró el dato´). Algo más de Arreglos Unidimensionales . 15.91}. se puede realizar lo siguiente: int x[] = {89.18. indicando un valor inicial para cada celda.75.29.36.Arreglos Unitarios Opciones Avanzadas Si se desea definir un arreglo de N posiciones. Resultado Obtenido luego de ejecutada la instrucción x i 89 36 15 64 37 29 18 59 75 91 0 1 2 3 4 5 6 7 8 9 .64.59.37. Arreglos Unitarios Opciones Avanzadas Si se desea inicializar un arreglo de N posiciones con 0 al momento de definirlo. Resultado Obtenido luego de ejecutada la instrucción x i 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 . se puede realizar lo siguiente: int x[10] ={0}. Ejercicios . 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 . Aprobados Elaborar un programa que imprima las notas aprobatorias que hay dentro de un arreglo de Notas.Ejercicio 2 . 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 . Promedio Elaborar un programa que devuelva el promedio de notas de un alumno.Ejercicio 3 . 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 . 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 . Para ordenar un arreglo hay que seguir algoritmos establecidos. siendo uno de los más sencillos el de intercambio de valores . ordenada. necesariamente.Ordenamiento Los arreglos son estructuras de datos cuya información no está. vamos a hacer lo siguiente .Ordenamiento Sea Vec un arreglo de 3 datos enteros que tiene la siguiente información 89 36 15 Para ordenarlo descendentemente. en está ocasión. Ordenamiento Vec i 0 1 2 89 36 15 j 0 1 2 Vec[i] > Vec[j] . Vec[i]=Vec[j].i<nele-1.Ordenamiento Dado un vector Vec Vec[] de enteros y un numero de elementos nele. int aux. //un temporal que ayuda al intercambio for(int i=0.i++) { for(int j=i+1.j++) if (Vec[i]>Vec[j]) { aux=Vec[i].j<nele. El código de ordenamiento ascendente sería. Vec[j]=aux. } } . Por ejemplo. relacionadas por la posición.Arreglos Paralelos Los arreglos paralelos son estructuras de datos que se usan cuando se desea manejar información. uno para los pesos y otro para las edades . si deseo guardar los pesos y edades de 5 alumnos del Salón de Ingles deberé usar 2 arreglos . simultanea o en paralelo. Vpesos[5 Vedades VPesos 18 89 15 46 17 55 18 16 64 65 0 1 2 3 4 Se aprovecha la variación del índice para ingresar datos a los dos arreglos unitarios . Vedades[5].Vpesos[5].Arreglo Paralelo Gráficamente Int Vedades[5]. Arreglo Paralelo Gráficamente Int Vedades[5].Vpesos[5]. Vedades[ ].Vpesos[ int i = 0. 1 2 3 ± ±±± 4 Vedades VPesos 18 89 15 46 17 55 18 64 0 1 2 3 4 5 6 7 8 9 La variable i es como un índice que controla: - El ingreso de datos para el alumno i-esimo La siguiente alumno por ingresar . i+1.i<=4.i++) {printf(³Ingrese Edad del alumno %d´. } . scanf(³%d´.i<=4.VEdades[i].i++) printf(³Edad y Peso %d son:%d %d\n´. } //Mostrar Arreglos Paralelos for(int i=0. printf(³Ingrese Peso del alumno %d´. Vpesos[i]). scanf(³%d´. _getch(). //Llenar Arreglos Paralelos for(int i=0.i+1).Vpesos[5].i+1).Arreglo Paralelo Solución en Código int main(«) { int Vedades[5].&Vedades[i]).&Vpesos[i]). Lenguaje C que Edades de 10 e imprima solo son mayores de .Ejercicio 1 Notas de Adultos Elaborar una programa en lea las Notas y las estudiantes universitarios las Notas de aquellos que edad. return 0.i++) {printf(³Ingrese Nota %d´.Arreglo Paralelo Notas de Adultos int main main(«) { int Vnotas[10].i+1. printf(³Ingrese Edad %d´. } //Mostrar Notas for(int i=0.i<=9.&Vedades[i]). scanf(³%d´.i++) if(Vedades[i]>=18) printf(³Nota %d: \n´. Vnotas[i]). } . _getch().i<=9.i+1). //Llenar Arreglos Paralelos for(int i=0. scanf(³%d´.&Vnotas[i]).i+1).Vedades[10]. .Ejercicio 2 Peso Promedio Elaborar una programa en Lenguaje C que usando arreglos paralelos lea las Categorías y las Edades de 10 empleados de la empresa ABC. 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. Las categorías pueden ser: A.