Unidad III Arreglos en C++
Unidad III Arreglos en C++
Unidad III Arreglos en C++
PROGRAMACION
Ing. Elctrica
Unidad 3 Arreglos
Arreglos en C++
Un arreglo es una coleccin ordenada de variables del mismo tipo. Las variables que
pertenecen a un arreglo se conocen por el nombre de elementos. El trmino ordenado
significa que en la coleccin hay un primer elemento, un segundo elemento, un tercer
elemento, y as sucesivamente. Adems, los elementos pueden a su vez organizarse en
subgrupos llamadas dimensiones.
En resumen, un arreglo:
No es una variable; es un grupo de variables conocidas como elementos
Cada elemento ocupa una posicin dentro del grupo
Todos los elementos son del mismo tipo
El nombre del arreglo indica donde se localiza el grupo en la memoria de la computadora.
Los arreglos se clasifican de acuerdo a las dimensiones que tengan
Las dimensiones no tienen relacin con el plano Cartesiano; nada que ver con matemtica
Las dimensiones indican como estn organizados los elementos dentro del grupo
Los arreglos de dos dimensiones pueden visualizarse como tablas
Los valores que se guarden en el arreglo se almacenan en los elementos ya que los
elementos son las variables
Para crear arreglos en C++, hay que indicar el tipo de los elementos (ejemplo, int, char,
double, bool o un tipo definido por el programador)
2. el nombre del arreglo
3. la cantidad de dimensiones y sus tamaos; cada dimensin comienza con el signo
[ seguido por el tamao de la dimensin y termina con el signo ]
Para crear un arreglo de una dimensin, el formato es el siguiente:
<tipo de los elementos> <nombre del arreglo> [ <tamao primera dimensin> ]
Para determinar la cantidad de elementos en un arreglo, hay que multiplicar el tamao de
cada una de las dimensiones indicados en la declaracin. El tamao debe ser un literal de
tipo entero o el nombre de una constante de tipo entero.
Para nombrar un elemento en un arreglo hay que indicar el nombre del arreglo, seguido de
tantas parejas de corchetes [ ] como dimensiones declaradas. Dentro de cada pareja de
corchetes tiene que haber un ndice. La combinacin de los ndices indica la posicin del
elemento dentro del grupo. El valor mnimo para un ndice es 0. El valor mximo es uno
menos que el tamao de la dimensin correspondiente en la declaracin del arreglo.
Arreglo unidemensional
Declaracin
int a[3]; // forma una secuencia de tres elementos
Nombre del grupo
a Nombre de los elementos
a[0] primer elemento
a[1] segundo elemento
a[2] tercer elemento
Declaracin.
La declaracin de un arreglo unidimensional consiste en establecer las caractersticas del
arreglo y sus elementos, por medio de la siguiente sintaxis:
Donde:
el par de corchetes, [ ], representa la dimensin del arreglo y encierra un nmero entero que
corresponde al nmero de elementos del arreglo.
Ejemplos:
int [ ] a ;
float [ ] distancia ;
Observe que, en la declaracin, el espacio entre los corchetes est vaco. Esto se debe a que,
durante dicha operacin, no se reserva espacio en la memoria.
Creacin.
La creacin de un arreglo unidimensional consiste en reservar espacio de memoria para
todos sus elementos, utilizando la siguiente sintaxis:
INSTITUTO TECNOLOGICO DE ORIZABA
Donde:
Ejemplos:
distancia = new float[ 5] ; // Se crea el arreglo distancia , con 5 elementos de punto flotante
y precisin sencilla .Artculo [] art = new Artculo[3];
Artculo [ ] art = new Artculo[ 3]; // Se crean 3 referencias a objetos de la clase Artculo
Inicializacin.
Si el tipo del arreglo es numrico, a sus elementos se les asigna el valor cero.
Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'.
Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false.
Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.
Cuando se requiere asignar valores iniciales diferentes de los predeterminados, es posible
agrupar las operaciones de declaracin, creacin e inicializacin en una sola instruccin,
por ejemplo:
INSTITUTO TECNOLOGICO DE ORIZABA
Acceso.
Se puede acceder a los valores de los elementos de un arreglo a travs del nombre del
arreglo y un subndice. El subndice debe escribirse entre corchetes y representa la posicin
del elemento en el arreglo. As, podemos referirnos a un elemento del arreglo escribiendo el
nombre del arreglo y el subndice del elemento entre corchetes. Los valores de los
subndices empiezan en cero para el primer elemento, hasta el tamao del arreglo menos
uno.
Ejemplo:
float [ ] distancia = new float[5] ; // Crea el arreglo distancia con 5 elementos.
float x = 25F, y = 10F ; // Crea dos variables de punto flotante y precisin sencilla.
Aplicaciones.
Listas.
Resolvamos el problema de manejar dos listas: una con los nombres de un grupo de
alumnos y otra con una calificacin para cada uno de los alumnos.
Primero se debern leer los nombres de los alumnos y la calificacin que corresponde a
cada uno de ellos y despus habr que desplegar dos columnas: una con los nombres de los
alumnos y la otra con sus respectivas calificaciones.
INSTITUTO TECNOLOGICO DE ORIZABA
Nmero de alumnos: 30
Nombre [0] :
Calificacin[0] :
Nombre [1] :
Calificacin[1] :
Nombre [2] :
Calificacin[2] :
...
...
Nombre [29] :
Calificacin[29] :
using System;
using C = System.Console;
int nAlumnos;
INSTITUTO TECNOLOGICO DE ORIZABA
nAlumnos = Convert.ToInt32(C.ReadLine());
//alumnos.
Vectores.
tipo_elemento nombre[largo];
Esto declara la variable nombre como un vector de tipo_elementos que podr contener
largo cantidad de elementos, y cada uno de estos elemento podr contener un valor de tipo
tipo_elemento.
Por ejemplo:
double valores[128];
En este ejemplo declaramos un vector de 128 elementos del tipo double, los ndices de los
elementos iran entre 0 (para el primer elemento y 127 para el ltimo).
De la misma forma que con las otras declaraciones de variables que hemos visto se le puede
asignar un valor iniciar a los elementos.
tipo_elemento elemento;
...
elemento = nombre[2];
Asumiendo que tenemos el vector anterior definido estaramos guardando valor_2 en
elemento.
/*
* Ejemplo : El producto escalar de dos vectores
*/
#include <stdio.h>
int main()
INSTITUTO TECNOLOGICO DE ORIZABA
{
const int largo = 3;
double vector_1[] = {5,1,0};
double vector_2[] = {-1,5,3};
// imprime el resultado
printf("(%f, %f, %f) . (%f, %f, %f) = %f\n",
vector_1[0], vector_1[1], vector_1[2],
vector_2[0], vector_2[1], vector_2[2],
resultado);
return 0;
}
double suma=0;
for (int i=0;i<largo;i++) {
suma+=valores[i];
}
return suma/largo;
}
Cuando una funcin recibe un vector por parmetro y cambia su contenido y el cambio es
permanente (se ve an fuera de la funcin). Esto puede parecer extrao despus del nfasis
que pusimos en resaltar que todos los parmetros de una funcin se reciben por valor, pero
se aclarar en el siguiente capitulo.
Mientras tanto usemos esto para definir una funcin que le aplique otra funcin que recibe
por parmetro a cada elemento del vector, guardando el resultado en el mismo vector y una
llamada de ejemplo a esta.
int matriz[3][7];
int tabla[3][4]={ { 1, 2, 3, 4},
{ 5, 6, 7, 8}, /* los espacios y saltos de lneas no son tomados en cuenta */
{ 9,10,11,12} };
double v[2][2][2];
...
printf("tabla[0][1]: %i\n", tabla[0][3]); // Imprime 4
printf("tabla[2][0]: %i\n", tabla[2][0]); // Imprime 9
...
En este ejemplo tabla es un vector de longitud 3, cuyos elementos son vectores de longitud
4 de elementos de tipo int.
En resumen, suponiendo que v[n] es un vector de cualquier tipo de dato con n cantidad de
posiciones, al vector v se le aplican las siguientes reglas:
Arreglo bidimensional
Un arreglo de dos dimensiones se subdivide en arreglos de una dimensin. Un arreglo
bidimensional tiene dos dimensiones y es un caso particular de los arreglos
multidimensionales. En C#, las dimensiones se manejan por medio de un par de corchetes,
dentro de los que se escriben, separados por comas, los valores de las dos dimensiones.
Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito
ordenado y homogneo. El acceso a ellos tambin es en forma directa por medio de un par
de ndices.
La representacin en memoria se realiza de dos formas: almacenamiento por columnas o
por renglones.
Declaracin.
La declaracin de un arreglo consiste en establecer las caractersticas del arreglo y sus
elementos, por medio de la siguiente sintaxis:
Donde:
el par de corchetes y la coma, [ , ], representan las dimensiones del arreglo y encierra dos
nmeros enteros, cuyo producto corresponde al nmero de elementos del arreglo.
Ejemplos:
double [ , ] matriz ;
int [ , ] ubicacin ;
INSTITUTO TECNOLOGICO DE ORIZABA
Observe que, en la declaracin, el espacio entre los corchetes est vaco. Esto se debe a que,
durante dicha operacin, no se reserva espacio en la memoria.
Creacin.
La creacin de un arreglo bidimensional consiste en reservar espacio en la memoria para
todos sus elementos, utilizando la siguiente sintaxis:
Donde:
dim1 y dim2 son valores enteros que representan las dimensiones del arreglo.
Ejemplos:
matriz = new double [2, 3] ; // Se crea el arreglo matriz, con 6 elementos de tipo
Inicializacin.
INSTITUTO TECNOLOGICO DE ORIZABA
Si el tipo del arreglo es numrico, a sus elementos se les asigna el valor cero.
Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'.
Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false.
Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.
Cuando se requiere asignar valores iniciales diferentes de los predeterminados, es posible
agrupar las operaciones de declaracin, creacin e inicializacin en una sola instruccin,
por ejemplo:
{ "Lus","ayudante"} };
Acceso.
Se puede acceder a los valores de los elementos de un arreglo bidimensional a travs del
nombre del arreglo y dos subndices. Los subndices deben escribirse entre corchetes y
representa la posicin del elemento en el arreglo. As, podemos referirnos a un elemento del
arreglo escribiendo el nombre del arreglo y los subndices del elemento entre corchetes. Los
valores de los subndices empiezan en cero para el primer elemento, hasta el tamao del
arreglo menos uno.
Ejemplo:
int [ , ] posicin = new int[5, 10] ; // Crea el arreglo posicin , con 50 elementos de tipo
entero.
int x;
posicin[ 3, 5] = 3 ;
x = posicin[ 3, 5] ;
Aplicaciones.
INSTITUTO TECNOLOGICO DE ORIZABA
Matrices.
Una matriz es un arreglo rectangular de dos dimensiones, donde el acomodo de los
elementos est dispuesto en renglones y columnas.
Ejemplo 1:
Se debe controlar la ubicacin de los asistentes a una sala de conferencias por medio de un
gafete que tiene escrito el nombre del asistente, la fila y la columna donde se ubica su
asiento.
// Captura los nombres de todos los asistentes y les asigna sus asientos,
asistente[ i , j ] = System.Console.ReadLine( );
System.Console.WriteLine( asistente[ i , j ] );
Ejemplo 2 :
Dada la matriz A :
895
632
INSTITUTO TECNOLOGICO DE ORIZABA
y la matriz B :
714
503
using System;
using C = System.Console;
namespace Sumatrices
{
class Matriz
{
const int r = 2, c = 3;
int i, j;
C.Clear();
C.WriteLine("\nMatriz S = A+B\n");
C.WriteLine();
Programas
#include<stdio.h>
#include<conio.h>
void main ()
{
int num[20]={5,67,8,90,345,12,33,45,78,1,2,78,900,67,345,12,21,5,98,1000};
int i,dato;
clrscr();
printf("de un numero entero : \n");
scanf("%d",&dato);
for (i=0;i<=19;i++){
if (dato==num[i]){
textcolor(RED);
cprintf("\nEl %d se encuentra en la posicion %d del arreglo \n",dato,i);
}
else {
printf("\nEl %d NO se encuentra en la posicion %d del arreglo \n",dato,i);}}
getch();
}
#include<stdio.h>
#include<conio.h>
void main ()
{
int num[20]={5,67,8,90,345,12,33,45,78,1,2,78,900,67,345,12,21,5,98,1000};
int i,dato,bandera=0;
clrscr();
printf("de un numero entero : \n");
scanf("%d",&dato);
for (i=0;i<=19;i++){
if (dato==num[i]){
printf("\nEl %d se encuentra en la posicion %d del arreglo \n",dato,i);
bandera=1;
}
}
if (bandera==0){
printf("\nNO");
}
getch();
}
#include<stdio.h>
#include<conio.h>
void main ()
{
int num[20];
int i,dato,bandera;
INSTITUTO TECNOLOGICO DE ORIZABA
char resp;
clrscr();
for (i=0;i<=19;i++){
printf("\nDame el elemento %d ",i);
scanf("%d",&num[i]);
}
do{
bandera=0;
printf("\nde un numero entero : \n");
scanf("%d",&dato);
for (i=0;i<=19;i++){
if (dato==num[i]){
printf("\nEl %d se encuentra en la posicion %d del arreglo \n",dato,i);
bandera=1;
}}
if (bandera==0){
printf("\nNO");}
printf("\nQuieres buscar otro numero en el arreglo s/n");
resp=getch();
}while(resp=='s');
getch();}
INSTITUTO TECNOLOGICO DE ORIZABA
2. REGISTRO: grupo de informacin relacionada que se usa para almacenar datos acerca
de un tema o actividad;
Sintxis:
1. define un registro de nombre <nombre> donde los diferentes campos son definidos
dentro de Bloquev. Este bloque solo debe contener definicin de variables;
2. define los las variables <var1> a <varN> como de tipo: struct <nombre>. Se puede
definir una variable de tipo, de una estructura dada, donde quiera que la estructura este
definida;
Operaciones estructuras:
Uso de un campo:
struct libro {
INSTITUTO TECNOLOGICO DE ORIZABA
Para accesar los campos de lib1 y lib2 se usa el operador . de la forma siguiente:
lib1.titulo[i] o lib2.titulo[i]
para accesar el (i+1) caracter del ttulo
lib1.autori[i] o lib2.autor[i]
para accesar el (i+1) caracter del autor
lib1.num o lib2.num
para el nmero del libro
#include <stdio.h>
int main()
{
struct triangulo {
int base;
int altura;
int l1, l2, l3;
float area;
float perimetro;
}