Está en la página 1de 7

Arreglos

Los arreglos son un tipo de estructura de datos. Una estructura de datos es una coleccin de
datos que se caracteriza por su organizacin y las operaciones que se definen en ella. Las
estructuras de datos son muy importantes en los sistemas de computadora.
Los tipos de datos ms frecuente utilizados son:
Estndar

Numricos

Entero
Real

Carcter
Lgico

Datos simples

Definido por el programador Subrango


Enumerativo

Estticos

Datos estructurados
Dinmicos

Arreglos (vectores, matriz)


Registro
Fichero
Conjunto
Cadena
Lista (pila, cola)
Lista enlazada
rbol
Grafo

Uno de los problemas ms comunes en los diversos sistemas de informacin es el tratamiento


o procesamiento de un gran volumen de datos o de informacin. Variables de tipo arreglo si
permiten almacenar y procesar conjuntos de datos del mismo tipo a la vez.
Los arreglos (arrays) se definen como una coleccin finita homognea y ordenada de
elementos.
Finita: Todo arreglo tiene un lmite, es decir, debe determinarse cual ser el nmero
mximo de elementos que podrn formar parte del arreglo.
Homognea: Todos los elementos de un arreglo son del mismo tipo o naturaleza (eg.
todos enteros), nunca una combinacin de distintos tipos.
Ordenada: Se debe determinar cual es el primer elemento, el segundo, el tercero, el
ensimo.

Sintaxis:
<tipo> <variable> [ N ]
Se declara un arreglo de nombre <variable> con N elementos de tipo <tipo>, (N es una
constante).
Ejemplo: int a[10];
Los arreglos se caracterizan por: almacenan los elementos en posiciones contiguas de
memoria. Tienen un mismo nombre de variable que representa a todos los elementos. Para
hacer referencia a esos elementos es necesario utilizar un ndice que especifica el lugar que
ocupa cada elemento dentro del archivo. El tipo de ndice puede ser cualquier tipo ordinal.
float numero[10]
int k[104]
char ch[300]

Arreglo de 10 nmeros reales


Arreglo de 104 enteros
Cadena de 300 caracteres

int m[23][3] Matriz de 2 dimensiones, con 23 renglones y 3 columnas.

Podemos clasificar las operaciones en las que intervienen arreglos de la siguiente manera:
lectura/escritura, recorrido, asignacin, actualizacin (aadir, eliminar, insertar), ordenacin,
bsqueda. Como los arreglos son datos estructurados, muchas de estas operaciones no
pueden llevarse a cabo de manera global, sino que se debe trabajar sobre cada componente.
Los tipos de arreglos son: unidimensionales (vectores), bidimensionales (matrices),
tridimensionales o multidimensionales.

Vectores
Los vectores son arreglos de N elementos organizados en una dimensin donde N recibe el
nombre de longitud o tamao del vector. Para hacer referencia a un elemento del vector se usa
el nombre del mismo, seguido del ndice (entre corchetes), el cual indica una posicin en
particular del vector.
Por ejemplo: V[x]

Donde: V Nombre del arreglo x Nmero de datos que constituyen el arreglo (tamao).

Archivos
Con los arreglos se puede manejar gran cantidad de datos del mismo tipo al mismo tiempo. El
problema es que el programa retiene los datos mientras est ejecutndose y se pierden al
terminar la ejecucin.
La solucin para hacer que los datos no se pierdan es almacenarlos en un fichero o archivo.
Los archivos son medios que facilita el lenguaje para almacenar los datos en forma
permanente, normalmente en los dispositivos de almacenamiento estndar. Desde el punto de
vista informtico, un fichero es una coleccin de informacin que almacenamos en un soporte
magntico para poder manipularla en cualquier momento. Esta informacin se almacena como
un conjunto de registros.

Los archivos pueden ser de acceso secuencial o de acceso aleatorio. En el caso de los
archivos de acceso secuencial los datos se almacenan de forma consecutiva y no es posible
leer un registro directamente, es decir para leer el registro n hay que leer los n-1 registros
anteriores. Mientras con los archivos de acceso aleatorio se puede acceder a un registro
concreto sin necesidad de leer todos los anteriores.
En los archivos de texto los datos se almacenan usando cdigo ASCII y por tanto, pueden ser
procesados por cualquier editor de texto. En los archivos binarios los datos se almacenan en
binario.
Para poder manipular archivos, C++ dispone de la biblioteca estndar fstream (file stream)
donde se encuentran todas las funciones necesarias para abrir y cerrar archivos, as como para
realizar las operaciones de lectura y escritura de datos en archivos.
#include <fstream>
Operaciones asociadas a archivos

Abrir fichero
Para entrada o lectura
Para salida o escritura
- en modo truncado

- en modo aadir
Cerrar fichero
Lectura y escritura
Funciones de control

El manejo de ficheros desde C++ puede llegar a ser casi tan sencillo como el manejo de la
entrada y salida estndar (pantalla y teclado), con la diferencia de que abrimos el fichero (open)
antes de trabajar con l y lo cerramos (close) al terminar. Por ejemplo, para escribir una frase
en un fichero de texto (que se creara automticamente), podramos usar un fichero de salida
(ofstream), as:
#include <iostream>
#include <fstream>
using namespace std;

int main () {
ofstream ficheroSalida;
ficheroSalida.open ("ficheroTexto.txt");
ficheroSalida << "Texto para el fichero";
ficheroSalida.close();
return 0;
}

Si lo que queremos es leer una lnea de un fichero, sera muy similar, pero usaramos ifstream
en vez de ofstream, y, si la lnea que leemos puede contener espacios (es lo habitual),
usaremos getline en vez de >>, al igual que hacamos con la entrada desde teclado:
#include <iostream>
#include <fstream>
using namespace std;

int main () {
ifstream ficheroEntrada;
string frase;

ficheroEntrada.open ("ficheroTexto.txt");
getline(ficheroEntrada, frase);

ficheroEntrada.close();

cout << "Frase leida: " << frase << endl;


return 0;
}

Podemos querer aadir al final de un fichero que ya existe, o modificar cualquier posicin
intermedia del fichero, o abrir un fichero de forma que podamos tanto leer de l como escribir
en l. Para esas cosas, en vez de usar ofstream o ifstream usaremos un tipo de fichero ms
genrico, el fstream, que nos permite indicar el modo de apertura (lectura o escritura, texto o
binario, etc), con los siguientes "flags" predefinidos:
ios::in

Abrir para entrada (lectura)

ios::out

Abrir para salida (escritura)

ios::binaryAbre en modo binario


ios::ate
ios::app

Escoge el final del fichero como posicin inicial (si no se dice lo contrario, la posicin
inicial al abrir el fichero sera el comienzo del fichero)
Abrir para aadir (append) al final, slo utilizable si se ha abierto el fichero
exclusivamente para escritura

ios::trunc Trunca el fichero si exista, borrando todo su contenido anterior

Estos flags se detallan despus del nombre de fichero, y podemos indicar varios de ellos a la
vez, usando el operador OR a nivel de bits (|): abriramos para lectura y escritura con
fichero.open("fichero.txt", ios::in | ios::out);
Para comprobar si se ha podido abrir (y no intentar leer de un fichero inexistente) usaramos
"is_open":
if (fichero.is_open()) { ... }

Tambin est la alternativa de comprobarlo "al estilo C", menos legible que la anterior: si fichero
es NULL, no estar abierto, luego para comprobar que podemos leer de l, se podra hacer
algo como "if (fichero != NULL) { ... }", o an ms compacto, "if (fichero) { ... }"
Adems lo habitual ser no querer leer una lnea, sino todo el contenido del fichero, ya sean
200 lneas o ninguna. Para comprobar si se ha podido abrir (y no intentar leer de un fichero

inexistente) usaramos "eof", que tpicamente usaremos dentro de un bloque repetitivo "while":
while (! fichero.eof() ) {...}:
As, un fuente que leyera cualquier fichero de texto indicado por el usuario y lo mostrara en
pantalla, avisando en caso de que el fichero no exista (o no se pueda abrir), podra ser:
#include <iostream>
#include <fstream>
using namespace std;

int main () {
fstream ficheroEntrada;
string nombre;
string frase;

cout << "Dime el nombre del fichero: ";


getline(cin,nombre);

ficheroEntrada.open ( nombre.c_str() , ios::in);


if (ficheroEntrada.is_open()) {

while (! ficheroEntrada.eof() ) {
getline (ficheroEntrada,frase);
cout << "Leido: " << frase << endl;
}
ficheroEntrada.close();
}
else cout << "Fichero inexistente o faltan permisos para abrirlo" << endl;
return 0;
}

El nombre de fichero debe ser una cadena "al estilo C", de modo que si no es un texto
prefijado, sino algo que tenemos almacenado en una variable de tipo "string", deberemos
convertir su valor a una cadena al estilo C usando ".c_str()".

Bibliografa
Tema 5 - Ficheros binarios desde C++ - AprendeAProgramar.com. Aprendeaprogramar.com. Recuperado 18 Mayo 2016, de
http://www.aprendeaprogramar.com/mod/resource/view.php?id=345
Archivos en C++. Recuperado de http://www.nebrija.es/~abustind/Informatica/MetodologiaI/Archivos.pdf
Estructura de datos: arreglos. Recuperado de
http://exa.unne.edu.ar/informatica/programacion1/public_html/archivos/estructuras_arreglos.pdf
E. Garca, M. Arreglos: Vectores y Matrices. Recuperado de http://www.utm.mx/~mgarcia/PE4(Arreglos).pdf