04 Arreglos Unidimensionales
-
Upload
elena-arce -
Category
Documents
-
view
453 -
download
1
Transcript of 04 Arreglos Unidimensionales
Profesores
Programación 1Unidad 04Arreglos Unidimensionales
•Jonathan Abril•William Bravo•Carlos Candela•Franklin Gonzáles•Juan Ramírez•Percy triveño
Unidad 04Arreglos UnidimensionalesObjetivos
• 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
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;
}
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;}
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.
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
Declaración de un arreglo unidimensional
•Forma general:
<tipodedato> Nombre_del_arreglo [N];
Donde N es un número entero fijo o una constante
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
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
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];
}
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];
}
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];
}
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
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 . . . . . .
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.
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
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
Tareas básicas para trabajar con Arreglos Unidimensionales
o Vectores
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();
}
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();
}
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();}
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();}
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();
}
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?
Hallar el mayor elemento
Vec 29 18 59 75 91
Mayor elemento
29 18 59 75 91
<
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?....
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
Algo más de 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
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
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
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
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
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
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
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
Ordenamiento
89 36 15Vec
0
1
2
i j0
1
2
Vec[i]> Vec[j]
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;}
}
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
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
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
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();}
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.
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;
}
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.