Professional Documents
Culture Documents
ARREGLOS
1. Introduccin.
Cuando se tienen problemas que emplean un nmero muy grande de variables del mismo tipo,
dicho manejo puede volverse incontrolable, ocasionar ms trabajo y ser causa de errores; por ello es
necesario un nuevo tipo de datos que permita tratar estos problemas de una manera ms adecuada.
Los tipos de datos estructurados que ayudan a resolver problemas como ste son los arreglos.
2. Definicin de arreglo.
Un arreglo (tambin conocido como vector) se define una estructura de datos que almacena
una coleccin de variables del mismo tipo.
Tambin se define un arreglo como una coleccin finita, homognea y ordenada de elementos.
Finita.- todo arreglo tiene un lmite, es decir, se debe determinar cul ser el nmero
mximo de elementos que podrn formar parte del arreglo.
Homognea.- todos los elementos de un arreglo son del mismo tipo: todos enteros, todos
caracteres, etc., pero nunca una combinacin de distintos tipos.
Ordenada.- se puede determinar cul es el primer elemento, el segundo, el tercero, y el
nsimo elemento.
Un arreglo tiene la caracterstica de que puede almacenar a n elementos del mismo tipo y adems
permite el acceso a cada uno de estos elementos.
Para el ejemplo mostrado, el nombre del arreglo es A, los ndices se indican entre corchetes y es
un arreglo de tamao 5, es decir, puede almacenar 5 valores numricos.
3. Declaracin de un arreglo.
Para declarar un arreglo se especifica el tipo de dato de sus elementos, seguido por el nombre
del arreglo y, finalmente, por el tamao del arreglo que se indica entre corchetes. El tamao del
arreglo es la cantidad mxima de elementos que se puede guardar.
TipoDatoElemento NombreDeArreglo[TamaoArreglo];
int notas[5];
char letras[10];
4. Inicializacin de un arreglo.
Se puede inicializar un arreglo al momento de declararlo escribiendo sus valores entre llaves y
separados por comas. En este caso no es necesario especificar el tamao del arreglo.
La primera lnea inicializa al arreglo de nombre precios, asignndole 4 valores decimales (el
tipo de dato es double), lo que determina que su tamao sea 4. La segunda lnea inicializa al arreglo
de nombre letras, con la asignacin de 5 caracteres (el tipo de dato es char), definiendo su
tamao a 5. Si el arreglo ya ha sido declarado, no pueden asignarse posteriormente valores usando las
llaves.
En este caso, en la primera posicin del arreglo (la posicin 0) se asigna el valor 13, las
restantes 9 posiciones se inicializan todas a 0.
Si el arreglo ha sido declarado, pero no inicializado, los valores se asignan en cada posicin del
arreglo generalmente a travs de una estructura repetitiva.
#define TAM 5
int edad[TAM];
void ingresarElemento(int n) {
for(int i=0; i<n; i++){
cout<<Ingrese una edad: ;
cin>>edad[i];
}
}
Ejemplo 2. Mostrar los datos ingresados en el arreglo edad del ejemplo previo.
void listarElementos(int n)
{
for(int i=0; i<n; i++){
cout<<Edad[<<i<<] = <<edad[i]<<endl;
}
}
Para insertar un elemento en un arreglo en el cual se han ingresado datos debe conocerse la
posicin en la cual se desea insertar el nuevo elemento. Este procedimiento implica que el nmero de
elementos del arreglo se incremente en uno o que el valor de la ltima posicin del arreglo se pierda.
Conocida la posicin, los elementos que se encuentran a continuacin de esta son desplazados
una posicin hacia abajo. Finalmente el nuevo elemento se inserta en la posicin indicada.
La estructura repetitiva for, realiza el desplazamiento de los elementos una posicin abajo,
empezando desde el ltimo elemento hasta el elemento que se encuentra en la posicin en la cual se
insertar el nuevo valor. Una vez terminado el desplazamiento, se asigna el nuevo elemento en la
posicin indicada y el tamao del arreglo se incrementa en uno.
Debe verificarse que exista el espacio disponible para la insercin a fin de no perder ningn
elemento.
Para eliminar un elemento de un arreglo el cual contiene datos debe conocerse la posicin
que dicho elemento ocupa dentro del arreglo. Este procedimiento implica que el nmero de
elementos del arreglo disminuya en uno. Conocida la posicin, los elementos que se encuentran a
continuacin de esta son desplazados una posicin hacia arriba.
En este caso aplicaremos el mtodo de la Burbuja que es uno de los mtodos ms utilizados por
su facilidad y porque funciona bastante bien cuando se tienen pocos datos que ordenar.
10.1. Hacer un programa que permita ingresar N caracteres en un arreglo, que los ordene y los liste.
Haga uso de subprogramas.
#include iostream
#define TAM 30 // Variable global y constante
char c[TAM]; // Variable global
void Ingreso(int n) {
int cont=0;
while (cont < n) {
cout<<"Ingrese un caracter: ";
cin>>c[cont];
cont = cont+1;
}
}
void Listado(int n) {
int cont;
for (cont=0; cont<=n-1; cont++) {
cout<<"C["<<cont<<"] = "<<c[cont]<<endl;
}
}
void Ordenar(int n) {
int cont, i;
char aux;
for (cont=0; cont<=n-2; cont++) {
for (i=cont+1; i<=n-1; i++) {
if (c[cont] > c[i]) {
aux = c[cont];
c[cont] = c[i];
c[i] = aux;
}
}
}
}
void main() {
int n;
n = Validar();
cout<<endl<<"Ingreso de datos"<<endl;
Ingreso(n);
cout<<endl<<"Listado de datos"<<endl;
Listado(n);
cout<<endl<<"Listado de datos ordenados"<<endl;
Ordenar(n);
Listado(n);
}
10.2. Hacer un programa que permita ingresar N nmeros enteros en un arreglo, que los liste y que
permita que se eliminen elementos mientras el usuario as lo indique y mientras hayan
elementos en el arreglo. La eliminacin se realiza indicando la posicin que ocupa el elemento
dentro del arreglo.
#include iostream
#define TAM 20
int a[TAM];
int Validar();
void Ingreso(int);
void Listado(int);
int Eliminar(int);
int Validar() {
int num;
do {
cout<<endl<<"Cantidad de numeros: ";
cin>>num;
}while (num<1 || num>TAM);
return num;
}
void Ingreso(int n) {
int cont;
for (cont=0; cont<=n-1; cont++) {
cout<<"Ingrese un numero: ";
cin>>a[cont];
}
}
void Listado(int n) {
int cont;
for (cont=0; cont<=n-1; cont++) {
cout<<"A["<<cont<<"] = "<<a[cont]<<endl;
}
}
int Eliminar(int n) {
int cont, pos;
do {
void main() {
int n;
char rpta;
n = Validar();
cout<<endl<<"Ingreso de datos"<<endl<<endl;
Ingreso(n);
cout<<endl<<"Listado de datos"<<endl<<endl;
Listado(n);
cout<<endl<<"Eliminacion de datos"<<endl<<endl;
do {
n = Eliminar(n);
if (n>0) {
cout<<endl<<"Desea eliminar otro numero (S/N)? ";
cin>>rpta;
} else {
cout<<endl<<"Ya no hay datos para eliminar";
}
}while (n>0 && (rpta=='s' || rpta=='S'));
cout<<endl<<endl;
}
10.3. Hacer un programa que permita ingresar N nmeros reales en un arreglo, que los liste y que
permita que se inserten elementos mientras el usuario as lo indique y mientras haya espacio en
el arreglo. La insercin se realiza indicando la posicin que ocupar el elemento que se
insertar as como tambin debe indicarse el nuevo valor a insertar.
#include iostream
#define TAM 6
double r[TAM];
int Validar();
void Ingreso(int);
void Listado(int);
int Insertar(int);
void main();
int Validar() {
int num;
do {
cout<<endl<<"Cantidad de numeros (1-"<<TAM<<") : ";
cin>>num;
}while (num<1 || num>TAM);
return num;
}
void Ingreso(int n) {
int cont;
for (cont=0; cont<=n-1; cont++) {
cout<<"Ingrese un numero real: ";
cin>>r[cont];
}
}
void Listado(int n) {
int cont;
for (cont=0; cont<=n-1; cont++) {
cout<<"R["<<cont<<"] = "<<r[cont]<<endl;
}
}
int Insertar(int n) {
int cont, pos;
double valor;
do {
cout<<endl<<"Posicion del numero a insertar (0-"<<(n-1)<<") : ";
cin>>pos;
}while (pos<0 || pos>n-1);
cout<<"Valor del numero a insertar: ";
cin>>valor;
for (cont=n-1; cont>=pos; cont--) {
r[cont+1] = r[cont];
}
r[pos] = valor;
n = n+1;
if (n <= TAM) {
cout<<endl<<"Listado de datos"<<endl<<endl;
Listado(n);
}
return n;
}
void main() {
int n;
char rpta;
n = Validar();
cout<<endl<<"Ingreso de datos"<<endl<<endl;
Ingreso(n);
cout<<endl<<"Listado de datos"<<endl<<endl;
Listado(n);
cout<<endl<<"Insercion de datos"<<endl<<endl;
do {
n = Insertar(n);
if (n < TAM) {
cout<<endl<<"Desea insertar otro numero (S/N)? ";
cin>>rpta;
} else {
cout<<endl<<"Ya no hay espacio en el arreglo";
}
}while (n<TAM && (rpta=='s' || rpta=='S'));
cout<<endl<<endl;
}
10.4. Hacer un programa que permita ingresar N caracteres en un arreglo, que los liste y que permita:
a. Que se eliminen elementos ingresando el carcter que se desea eliminar.
b. Que se inserten elementos ingresando el carcter que se desea insertar. En este caso el
carcter debe ser insertado en la posicin que le corresponde (en un arreglo ordenado).
#include iostream
#define TAM 20
char c[TAM];
int validar();
void ingresar(int);
void listar(int);
void ordenar(int);
int buscarIgual(int, char);
int eliminar(int, int);
int buscarMayor(int, char);
int insertar(int, int, char);
void main();
void main() {
int n, pos, opcion;
char letra;
n = validar();
cout<<endl<<"Ingreso de datos"<<endl;
ingresar(n);
cout<<endl<<"Listado de datos"<<endl;
listar(n);
do {
cout<<endl<<"1. Eliminar un caracter";
cout<<endl<<"2. Insertar un caracter";
cout<<endl<<"3. Salir";
cout<<endl<<"Elija una opcion (1-3): ";
cin>>opcion;
switch (opcion) {
case 1: cout<<endl<<"Caracter a eliminar: ";
cin>>letra;
pos = buscarIgual(n, letra);
if (pos != -1) {
n = eliminar(n, pos);
if (n > 0) {
cout<<endl<<"Listado de datos"<<endl;
listar(n);
} else {
cout<<endl<<"Arreglo vacio"<<endl;
}
} else {
cout<<endl<<"El caracter no se encuentra en el arreglo"<<endl;
}
break;
case 2: ordenar(n);
cout<<endl<<"Listado de datos"<<endl;
listar(n);
cout<<endl<<"Caracter a insertar: ";
cin>>letra;
pos = buscarMayor(n, letra);
n = insertar(n, pos, letra);
cout<<endl<<"Listado de datos"<<endl;
listar(n);
if (n == TAM) {
cout<<endl<<"Arreglo lleno"<<endl;
}
break;
case 3: break;
default: cout<<endl<<"Opcion no valida"<<endl;
}
}while(opcion != 3);
cout<<endl<<endl;
}
int validar() {
int n;
do {
cout<<endl<<"Caracteres a ingresar (1-"<<TAM<<"): ";
cin>>n;
}while(n<1 || n>TAM);
return n;
}
void ingresar(int n) {
int i;
for(i=0; i<n; i++) {
cout<<"Ingrese un caracter: ";
cin>>c[i];
}
}
void listar(int n) {
int i;
for(i=0; i<n; i++) {
cout<<"C["<<i<<"] = "<<c[i]<<endl;
}
}
void ordenar(int n) {
int i, j;
char aux;
for(i=0; i<n-1; i++) {
for(j=i+1; j<n; j++) {
if(c[i] > c[j]) {
aux = c[i];
c[i] = c[j];
c[j] = aux;
}
}
}
}