Tutorial de C++ - Arrays

12 - Arrays

[editar]
Tutorial creado por Peter Class; traducción por Pello Xabier Altadill Izura. Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-tutorial-c++/html/
28 de Febrero de 2006
Se dice arrays o arreglos? en fin. En c++ podemos definir y usar los arrays casi como en C. Ademas tenemos la ventaja de poder crear arrays de objetos. Veamos un programa en c++ que juega con los arrays:

|| /
* ArrayEjemplo.cpp
* Clase que inicializa y maneja algunos arrays
*
* Pello Xabier Altadill Izura
*
* Compilado: g++ ArrayEjemplo.cpp -o ArrayEjemplo
*/

using namespace std;
#include <iostream>

Funcion principal

int main () {

Declaramos dos arrays de enteros de 15 elementos [0..14]
int arreglo1[15], arreglo2[15];
int i;

Iniciamos todos los componentes con el valor 0
ahorramos tiempo con una asignacion multiple
for ( i = 0 ; i < 15 ; i++ ) { recorremos de 0 a 14

arreglo1[i] = arreglo2[i] = 0;

}

Declaramos mas arrays y los iniciamos:
long arrayLongs[5] = { 77, 33, 15, 23, 101 };

Lo recorremos y vemos sus componentes por pantalla
Atencion!! esto nos recorreria mas de lo necesario
for ( i = 0 ; i < sizeof(arrayLongs) ; i++ ) {
para sacar el valor real:

int tamano_real = sizeof(arrayLongs)/sizeof(arrayLongs[0]);


for ( i = 0 ; i < tamano_real ; i++ ) {

cout << "valor de componente " << i << ": " << arrayLongs[i] << endl;

}

Lo mismo, pero nos es necesario poner el tama&ntilde;o si ya lo especificamos
al iniciar el array
char arrayChars[] = { 'A', 's', 'i', 'm', 'o', 'v'};

nota: un array de chars = es un string
char nombre[] = "Isaac";

cout << "Mostrando array de caracteres." << endl;
tamano_real = sizeof(arrayChars)/sizeof(arrayChars[0]);

for ( i = 0 ; i < tamano_real ; i++ ) {

cout << "valor de componente " << i << ": " << arrayChars[i] << endl;

}

Enumeraciones: podemos combinarlas con arrays
enum Dias {Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic, LosMeses};

A cada enumeracion le corresponde un numero, si no se especifica,
la numeracion ira incremental Ene=0, Feb=1, Mar=2,..,LosMeses=12
Podemos declarar el siguiente array, donde LosMeses nos da la longitud 12

int diasLibres[LosMeses] = {2, 4, 6, 2, 5, 4, 10, 15, 10, 3, 4, 10};

Dias tmpDia;

for (i = 0; i < LosMeses; i++) {

tmpDia = Dias(i);
cout << "Dias libres "<< tmpDia << " =" << diasLibres[i] << endl;

}

The Matrix!!! vamos a definir arrays multidimensionales:
int theMatrix[5][3] = { {3,6,8}, {9,9,9}, {0,1,0}, {6,6,6}, {3,1,1}};

Para recorrerlo ponemos un for doble
int j;

for (i = 0; i<5 ; i++) {

for (j = 0; j< 3; j++) {

cout << " matrix[" << i << "][" << j <<"] = " << theMatrix[i][j] << endl;

}

}


return 0;

} ||

Arrays de objetos

Vamos a ver un ejemplo de arrays de objetos. Se crea el objeto Robot y con el se formara un ejercito de robots.

|| /

* Robot.hpp
* Clase que define el objeto Robot
*
* Pello Xabier Altadill Izura
*
*/

class Robot {

private:

char *nombre;

public:

Robot(char *nombre = "Nestor-5") { this->nombre = nombre; }

~Robot();

Robot(const Robot &);

char *getNombre() const { return nombre;}

void hablar(char *texto);

void evolucionar();

void matar(Robot victima);

}; ||

Esta es la implementacion.

|| /
* Robot.cpp
* Fichero que implementa la clase Robot. Vamos a crear un array de robots
*
* Pello Xabier Altadill Izura
*
*/

using namespace std;
#include <iostream>
#include "Robot.hpp"

Destructor
Robot::~Robot() {}


Constructor copia
Robot::Robot(const Robot & robotOrigen) {

nombre = new char;
nombre = robotOrigen.getNombre();

cout << "Copia creada! Bzzzz. Me llamo: "<< nombre <<endl;

}


Funcion para que el robot hable
void Robot::hablar(char *texto) {

cout << nombre << " dice: " << texto << endl;

}


Funcion para que el robot evoluciones
void Robot::evolucionar() {

hablar("He sacado nuevas conclusiones. Debeis morir. ");

}


El robot mata
void Robot::matar(Robot victima) {

hablar("Muere!! mwahahahahaaa");

}


Funcion principal
int main () {

int tam = 0, i;

Creamos el primer robot
Robot primerRobot = Robot("Unidad central");

Robot primerNestor = Robot();

Vamos a crear un ejercito de robots
Robot ejercitoDelMal[20];

Y un array de PUNTEROS a robots
Robot *robobsoletos[20];

Definimos un puntero a un robot
Robot *rarito;

tam = sizeof(ejercitoDelMal)/sizeof(ejercitoDelMal[0]);

Con un for vamos haciendo copias

for ( i = 0; i < tam; i++) {

ejercitoDelMal[i] = Robot(primerNestor);

}

Uno de ellos va a evolucionar
ejercitoDelMal[12].evolucionar();

primerRobot.hablar("Atencion!! un unidad de USR ha evolucionado. Se trata de...");


primerRobot.hablar(ejercitoDelMal[12].getNombre());

ejercitoDelMal[12].matar(primerRobot);

Creamos el robot rarito
rarito = new Robot("Calvin");

rarito->hablar("Jeje, todavia existo yo.");

Metemos dos nuevos robots en el array
robobsoletos[5] = rarito;
rarito = new Robot("Sheldon");

robobsoletos[6] = rarito;

hacemos una llamada desde el componente del array de punteros
robobsoletos[6]->matar(ejercitoDelMal[12]);

return 0;

} ||
[editar]

23 opiniones

yery cruz

12345
DamiaN

Mal exlicado :S,
no dice nada

agan algo de servicio por favor no mas estupidos
alegoria

cuando uno va a esplicar de progamacion primero se esplican los concepto, delas intrucciones,para que el estudiante sepa lo que se dice o de lo que se esta hablando, si es que esta pagina intructiva, sinoo no pongan estos ejemplo pues son tan astracto para los principiates que lo que hacen es asustarlos y seban , para esto de maestro, hay que ser humilde yno creer que como ya yo se no me importa lo que venga, no tomen esto, como algo mejoren, mejoren,mejoren, los quiero mucho migel.
Sobre nombre de array.

Hola, peter. Respecto a tu primera pregunta sobre cómo nombrar lo que en el código aparece como "array" en inglés, te puedo decir que no es correcta ninguna de las dos opciones que ofreces. Si se usa "arrays" se está españolizando la palabra inglesa "array". No muy conveniente, porque en español ya existe la palabra adecuada para ese concepto: "vector". De todos modos, españolizar una palabra inglesa en argot técnico no es tan grave como usar la palabra española traducida según una acepción inglesa incorrecta. Nunca se debería usar "arreglo".
1 2 3 4 5 | siguiente >

Tutoriales relacionados con 'Tutorial de C++'

Este es el diario de Peter Class sobre sus dias aprendizaje de una disciplina de... Más »
Este tutorial presenta los conceptos básicos de líneas de transmisión (Transmission lines), así como una... Más »
Si tuviera que buscar un adjetivo para calificar a Sendmail, pensaría en "excesivo". Excesivo puesto... Más »
La red telefónica básica se creó para permitir las comunicaciones de voz a distancia. Esto... Más »
Bienvenidos al manual de HTML de Indaya.A través de todos estos capítulos vamos a descubrir... Más »

Autor y licencia de 'Tutorial de C++'


Tutorial de Peter Class; traducción por Pello Xabier Altadill Izura. Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-tutorial-c++/html/ CopyLeft
Este documento se cede al dominio publico.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.