You are on page 1of 47

Programacin 1

Unidad 04 Arreglos Unidimensionales


Profesores

William Bravo Edson Mendiolaza Juan Ramrez

Unidad 04 Arreglos Unidimensionales


Objetivos

Definicin Declaracin e Inicializacin Elementos de un Arreglo Lectura y Escritura de Arreglos Bsqueda 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() { int Nota1,Nota2,Nota3,Nota4,Nota5; // Variables para almacenar las 5 notas


//Ingreso de Datos
printf(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);

Solucin Sin Arreglos

//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;

Solucin Con Arreglo


int 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;

Definicin de Arreglo
Un arreglo es una estructura de datos que permite almacenar N datos del mismo tipo (int, double, char, etc.). El tipo ms simple de un arreglo es el arreglo unidimensional. Para poder utilizar un arreglo es necesario: declararlo e inicializarlo.

Declaracin 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 tamao del tipo de dato y la cantidad de elementos del arreglo

Declaracin de un arreglo unidimensional


Forma general:

<tipodedato> Nombre_del_arreglo [N];


Donde N es un nmero entero fijo o una constante

Declaracin 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. Tendramos lo siguiente:

Declaracin de un arreglo unidimensional


Direccin en Memoria ndice del Arreglo Arreglo de 7 valores
Primer valor del ndice

AB001
AB003 AB005 AB007 AB009 AB00A AB00C

0 1 2 3

20

Valor en Vec[0]

La direccin donde se inicia Vec es : AB001


Vec
15

La direccin de &Vec[0] es AB001 Vec <-> &Vec[0]

4 5

Valor en Vec[4]

ltimo valor del ndice (N-1)

Ejemplo de declaracin de arreglos unidimensionales Definir un arreglo de 10 datos enteros: Opcin 1: Sin constantes
int main(array<System::String ^> ^args)
{ int ArregloEnteros[10];

Ejemplo de declaracin de arreglos unidimensionales Definir un arreglo de 10 datos enteros: Opcin 2: Con constantes
int main(array<System::String ^> ^args)
{ const int N=10; int ArregloEnteros[N];

Ejemplo de declaracin de arreglos unidimensionales Definir un arreglo de 10 datos enteros: Opcin 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

Para acceder a un elemento del arreglo


Primer elemento Segundo elemento ltimo elemento

Vec[0]

Vec[1] Vec[9]

89 36 91

Elementos de un Arreglo

Vec i

89

36

15

64

. N-1

De manera general:

i-simo elemento
Para un valor de i entre 0 y N-1

Vec[i]

Inicializar un arreglo unidimensional


Por defecto, cuando declaramos un arreglo el valor inicial de cada celda es el que tiene en ese momento la posicin 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];
ndice del Arreglo

Vec
14

5
19 20 11 10 16

Que luego de declararlo tiene lo siguientes valores:

2 3 4 5 6

Inicializar un arreglo unidimensional


ndice del Arreglo

Vec
0 14 0 5

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

1
2 3 4 5 6

0 19
20 0 0 11

0 10
0 16

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

Tareas bsicas para trabajar con Arreglos Unidimensionales o Vectores

Ingresar datos a un Arreglo


Por ejemplo, si deseamos almacenar las edades de los alumnos de un saln de ingles en un arreglo.
int main() { int nele; //numero de elementos del arreglo int Vec[10]; // Arreglo que almacenara las edades //Lectura y Validacin del Numero de elementos do{ printf(Ingrese el numero de alumnos: ); scanf_s(%d,&nele); }while(nele<=0 || nele>10); //Lectura de edades en el arreglo for(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 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[10]; // Arreglo que almacenara las edades //Lectura y Validacin 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 Arreglo


Opcin 1:
Por ejemplo, si deseamos generar nmeros al azar en un arreglo usando el mtodo srand y rand. int main() { int nele; //numero de elementos del arreglo int X[10]; // Arreglo que almacenara los datos //Lectura y Validacin 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(); }

Generar Aleatoriamente datos a un Arreglo


Opcin 2:
Por ejemplo, si deseamos generar notas al azar en un arreglo usando el mtodo Random::Random().Next( , ).
int main() { int nele; //numero de elementos del arreglo int Vec[10]; // Arreglo que almacenara los datos //Lectura y Validacin 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(); }

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 Validacin 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]; printf(la suma es : %d ,suma); _getch(); }

Hallar el mayor elemento


Sea Vec un arreglo de 5 valores enteros

Vec i

29

18

59

75

91

Cmo debemos hacer para hallar el mayor valor dentro del arreglo?

Hallar el mayor elemento

Mayor elemento
Vec
29

<

18 59 75 91

Mayor de un arreglo
int main() { int nele; //numero de elementos del arreglo int Vec[10]; // Arreglo que almacenara los datos int max; //Lectura y Validacin 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
num 64 89 36 15 64 37 19 28

Vec

0
i

//Lectura y Validacin del Numero de elementos //Lectura de los datos del arreglo

//Bsqueda de un dato encontrado=0; //falso for(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);

Algo ms de Arreglos Unidimensionales

Arreglos Unitarios Opciones Avanzadas


Si se desea definir un arreglo de N posiciones, indicando un valor inicial para cada celda, se puede realizar lo siguiente: int x[] = {89,36,15,64,37,29,18,59,75,91};
Resultado Obtenido luego de ejecutada la instruccin

x i

89

36

15

64

37

29

18

59

75

91

Arreglos Unitarios Opciones Avanzadas


Si se desea inicializar un arreglo de N posiciones con 0 al momento de definirlo, se puede realizar lo siguiente: int x[10] ={0};
Resultado Obtenido luego de ejecutada la instruccin

x i

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 saln de 40 alumnos devuelva un Arreglo de Frecuencia de Notas
Para ello el programa debe solicitar:
Un Arreglo de notas del saln VSalon

Ordenamiento
Los arreglos son estructuras de datos cuya informacin no est, necesariamente, ordenada.
Para ordenar un arreglo hay que seguir algoritmos establecidos, siendo uno de los ms sencillos el de intercambio de valores

Ordenamiento
Sea Vec un arreglo de 3 datos enteros que tiene la siguiente informacin

89

36

15

Para ordenarlo descendentemente, en est ocasin, vamos a hacer lo siguiente

Ordenamiento

Vec
i
0 1 2

89

36

15

j
0 1 2

Vec[i] > Vec[j]

Ordenamiento
Dado un vector Vec[] de enteros y un numero de elementos nele. El cdigo de ordenamiento ascendente sera.
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 informacin, simultanea o en paralelo, relacionadas por la posicin.
Por ejemplo, si deseo guardar los pesos y edades de 5 alumnos del Saln de Ingles deber usar 2 arreglos , uno para los pesos y otro para las edades

Arreglo Paralelo Grficamente


Int Vedades[5],Vpesos[5];

Vedades VPesos

18 89

15 46

17 55

18 16 64 65

Se aprovecha la variacin del ndice para ingresar datos a los dos arreglos unitarios

Arreglo Paralelo Grficamente


Int Vedades[5],Vpesos[5]; 1 2 3 4 int i = 0;
Vedades
VPesos 18 89 15 46 17 55 18 64

La variable i es como un ndice que controla:

El ingreso de datos para el alumno i-esimo La siguiente alumno por ingresar

Arreglo Paralelo Solucin en Cdigo


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 lea las Notas y las estudiantes universitarios las Notas de aquellos que edad. Lenguaje C que Edades de 10 e imprima solo son mayores de

Arreglo Paralelo Notas de Adultos


int 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 Promedio


Elaborar una programa en Lenguaje C que usando arreglos paralelos lea las Categoras y las Edades de 10 empleados de la empresa ABC. Las categoras pueden ser: A, B o C El programa luego deber solicitar una categora dada por el usuario y calcular el promedio de las edades de los empleados que pertenecen a dicha categora.

You might also like