ARREGLOS
ARREGLOS
Introduccin
Un arreglo es un conjunto de variables que son del mismo tipo de datos. A cada
parte de un arreglo se le denomina elemento. Los cuales se hacen referencia con el
mismo nombre y se almacenan en posiciones consecutivas.
ARREGLOS UNIDIMENSIONALES
Introduccin
Los arreglos unidimensionales, tambin llamados listas, tienen un solo subndice.
Son datos estructurados de una coleccin finita y ordenada de datos del mismo tipo.
Cada tem del arreglo se denomina elemento, si el nombre del arreglo es b, el primer
elemento seria b[0] y si tiene n elementos se denominara b[0] b[1] b[2] b[n-1] .
Para manejar un arreglo, las operaciones a efectuarse son:
ARREGLOS
tiponombre_arreglo[tamao];
Tipo: declara el tipo de base del arreglo que es el tipo de cada elemento del mismo
Nombre_arreglo: es el nombre del arreglo
Apuntadores y arreglos
Existe una corta relacin entre apuntadores y arreglos. Una variable de tipo arreglo
puede considerarse como una apuntadora de tipo arreglo. Los apuntadores pueden ser
usados en cualquier operacin de involucre subndices de arreglos.
Ejemplo:
main()
{ int tabla[10],i,x,*pt,*ptr;
pt=&tabla[0];
x=*pt;
for(i=0; i!10;i++)
*(pt+i)=random();
ptr=tabla;
ARREGLOS
printf(%d nn,*(ptr+i),tabla[i];
Arreglos de apuntadores
Declaracin:
Las cadenas no estn situadas en el arreglo, ah tan solo estn almacenados los
apuntadores. A pesar de que los arreglos, como explicamos anteriormente, tienen
tamao finito, permite el acceso a cadenas de cualquier tamao.
Primero se deben guardar todas las lneas en un arreglo de tipo char grande.
Observando que \n marca el fin de cada lnea. Ver figura 1.1.
Guardar los apuntadores en un arreglo diferente donde cada apuntador apunta al
primer caracter de cada lnea.
ARREGLOS
Arreglos y funciones
Usamos arreglos como argumento a la funcin, se pasa slo la direccin del arreglo y
no la copia del arreglo entero. Para fines prcticos podemos considerar el nombre del
arreglo sin ningn ndice como la direccin del arreglo.
ARREGLOS
Observar que en la funcin imp_rev se usa la funcin strlen para calcular la longitud
de la cadena sin incluir el terminador nulo. Por otra parte, la funcin imp_rev no usa la
sentencia return ni para terminar de usar la funcin, ni para regresar algn valor.
ARREGLOS
main()
{
float numeros[]={2.3, 8.0, 15.0, 20.2, 44.01, -3.0, -2.9};
Ejercicios Desarrollados
1. Escribir un programa que tiene un arreglo con los nmeros comprendidos entre
4 y 14.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(int argc, char *argv[ ])
{ int a[11];
int n=4;
for (int i=0; i<1; i++)
{ a[ i ] = n++;
cout<< a[ i ]<<endl;
}
system(PAUSE);
return 0;
}
ARREGLOS
2. Escribir un programa que llene un arreglo con los nmeros pares comprendidos
entre 1 y 100.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ int a[100];
int n=1, acum=0;
cout<<Los nmeros pares menores que cien: <<endl;
for( int i=0; i<100; i++)
{ a[ i ] = n++;
if( a[ i ]%2 == 0)
{ cout<<a[ i ]<<endl;
}
}
system(PAUSE);
return 0;
}
3.
Escribir un programa que llene un arreglo con los nmeros comprendidos entre
0 y 99 divisibles por 3.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ int x=0, y=0;
ARREGLOS
int m[33];
do{
if( x%3==0 && x!=100){
m[y++]=x;
}
} while (x++<100);
for (y=0; y<33; y++){
cout<< m[y] <<endl;
}
system(PAUSE);
return 0;
}
4.
ARREGLOS
10
ARREGLOS
11
ARREGLOS
}
7.
8.
Escribir un programa que tras asignar los nmeros, -2, 5, 8, -9, 10, 15 y 4 a un
arreglo calcule, independientemente, la suma de los elementos positivos y
negativos.
12
ARREGLOS
#include<iostream>
#include<stdlib.h>
using namespace std;
const int TAM=10;
int main( int argc, char *argv[ ])
{ int arc(TAM);
int acum1=0; acum2=0;
for (int i=0; i<TAM; i++)
{ cout <<ingrese un numero<<endl;
cin>>arr[ i ];
}
for ( int i=0; i<TAM; i++)
{ if (arr[ i ]>0)
acum1+=arr[ i ];
}
for (int i=0; i<TAM;i++)
{ if (arr[ i ]<0)
acum2+=arr[ i ];
}
cout<<positivos: <<acum1<<endl;
cout<<negativos: <<acum2<<endl;
system(PAUSE);
return 0;
}
13
ARREGLOS
9.
14
ARREGLOS
system(PAUSE);
return 0;
}
10. Escribir un programa que genera la inversa de una cadena de caracteres. La
cadena original y la invertida deben almacenarse en arreglos independientes.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ char cad[30];
char cadinv[30];
cout<<Inversion de cadena de caracteres<<endl<<endl;
cout<<Ingrese una palabra o frase<<endl;
cin.getline (cad,30);
cout<<endl;
cout<<Cadena inversa<<endl;
cout<<strrev(cad);
cout<<endl;
system(PAUSE);
return 0;
}
11. Escribir un programa que cuente las maysculas de una cadena de caracteres.
#include<iostream>
#include<cstdio>
using namespace std;
15
ARREGLOS
int main();
char cad[30];
int cont=0;
for(int i=0; i<10; i++)
{ cad[ i ]=\0;
}
cout<<Ingrese una cadena de texto:<<endl;
cin.getline(cad,30);
for(int i=0; i<30; i++)
{ if( isupper(cad[ i ] ) )
{ cont++;
}
}
cout<<La cadena : <<cad<<tiene <<cont<<maysculas <<endl;
system(PAUSE);
return 0;
}
12. Escribir un programa que encripte los caracteres de una cadena sumando 2 a los
que situados en posiciones pares y 3 a los situados en posiciones impares.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ char cad[30];
16
ARREGLOS
char cop[30];
for (int i=0; i<30; i++)
{ cad[ i ]=\0;
cop[ i ]=\0;
}
cout<<Ingrese una cadena de texto: ;
cin.getline( cad,30 );
for ( int i=0; i<30; i++ )
{ if ( cad[ i ]! = \0)
{ if( i%2==0)
{ cop[ i ]=cad[ i ]+2;
}
else
{ cop[ i ]=cad[ i ]+3;
}
}
}
cout<<La cadena: <<cad<<endl;
cout<<Fue encriptada en: <<cop<<endl;
system(PAUSE);
return 0;
}
13. Decir el nmero de vocales que aparecen en una frase introducida por el usuario.
#include<iostream>
17
ARREGLOS
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ char cad[30];
for( int i=0; i<30; i++)
{ cad[ i ]=\0;
}
cout<<Ingrese una cadena de texto: ;
cin.getline(cad,30);
cout<<endl<<endl;
int cont=0;
for ( int i=0; i<30;i++)
{ if ( cad[ i ]==a ( cad[ i ]==e ( cad[ i ]==i ( cad[ i ]==o (
cad[ i ]==u
cont++;
}
cout<<En la cadena <<cad<< hay <<cont<< vocales <<endl;
}
system(PAUSE);
return 0;
}
14. Escribir un programa que lea una frase introducida desde el teclado y la escriba
al revs.
#include<iostream>
18
ARREGLOS
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ char cad[30];
cout<<Frase invertida<<endl;
for( int i=0; i<30; i++)
{ cad[ i ]=\0;
}
cout<<Ingrese la frase: ;
cin.getline(cad,30);
cout<<La frase invertida: <<endl;
cout<< strrev(cad);
cout<<endl;
system(PAUSE);
return 0;
}
15. Escribir un programa que compare dos arreglos de caracteres y nos diga si son
idnticos o no.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ char cad1[30];
char cad2[30];
for( int i=0; i<30; i++)
19
ARREGLOS
{ cad1[ i ]=\0;
cad2[ i ]=\0;
}
cout<<Ingrese la cadena de texto 1: <<endl<<endl;
cin.getline(cad1,30);
cout<<Ingrese la cadena de texto 2: <<endl<<endl;
cin.getline(cad2,30);
int igual=0;
for( int i=0; i<30; i++)
{ if ( strcrp( cad1,cad2 )==0 )
{ igual=2
}
}
if ( igual==1 )
cout<<La cadena <<cad1<< y la cadena <<cad2<< son
idnticas<<endl;
if ( igual==0 )
cout<< Las cadenas no son identicas<<endl;
system(PAUSE);
return 0;
}
16. Escribir un programa que encripte una cadena de caracteres sumando 2 al cdigo
ASCII de cada uno de sus caracteres.
20
ARREGLOS
#include<iostream>
#include<stdlib.h>
using namespace std;
int main( int argc, char *argv[ ])
{ char cad1[30];
char cad_con[30];
for( int i=0; i<30; i++)
{ cad1[ i ]=\0;
cad_con[ i ]=\0;
}
cout<<Cadena encriptada sumando dos a cada caracter <<endl<<endl;
cout<<Ingrese una cadena de texto:;
cin.getline(cad1,30);
cout<<endl<<endl;
cout<<Cadena encriptada: <<endl<<endl;
for( int i=0; i<30; i++)
{ if (cad[ i ]!=\0;
{ cad_con[ i ]= cad[ i ]+2;
cout<< cad_con[ i ];
}
}
cout<<endl<<endl;
system(PAUSE);
return 0;
}
21
ARREGLOS
17. Realizar un programa que lea la temperatura al medio da, durante todos los das
de un mes y luego informar la temperatura promedio mensual, as como el da
ms caluroso y el da ms fro.
#include<iostream>
usingnamespace std;
int main()
{ int temp[31], min, max, media;
int dias;
cout<<Cuantos dias tiene el mes <<endl;
cin>>dias;
for( i=0; i<dias; i++){
cout<<Introduzca la temperatura de mediodia del dia <<i+1<<:<<endl;
cin>>temp[ i ];
}
media=0;
for( i=0; i<dias; i++){
media= media+ temp[ i ];
}
cout<<Temperatura media: <<media/dias<<endl;
min=60;
max=-90;
for( i=0; i<dias; i++){
if ( min>temp[ i ])min=temp[ i ];
if ( max<temp[ i ])max=temp[ i ];
}
22
ARREGLOS
23
ARREGLOS
VN = 0;
for(i=0;i<G+1;i=i+1)
{
VN = VN + Poli[i] * pow(X,i) ;
}
cout<<"Valor numerico = "<<VN<<endl;
getch();
}
19. Hacer un programa que lea los nombres, edades y tallas de N atletas. N es
declarado como constante. Trabaje con 10 atletas .El programa debe calcular:
a) El promedio de las edades y de las tallas.
b) Determinar cuntos atletas son menores de edad (menores de 18 aos) y
cuantos atletas son mayores de edad.
c) Determinar los nombres de los atletas que son ms altos que el promedio.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
const int N = 3;
void main()
{
char Nom[N][25];
int Edad[N], i, CanMenEdad, CanMayEdad, SumEdad;
double Talla[N], PromTalla, SumTalla, PromEdad;
for(i=0;i<N;i=i+1)
24
ARREGLOS
{
gets(Nom[i]);
cin>>Edad[i];
cin>>Talla[i];
}
SumEdad = 0;
SumTalla = 0;
for(i=0;i<N;i=i+1)
{
SumEdad=SumEdad+Edad[i];
SumTalla = SumTalla + Talla[i];
}
PromEdad = SumEdad/N;
PromTalla = SumTalla/N;
CanMenEdad = 0;
CanMayEdad = 0;
for(i=0;i<N;i=i+1)
{
if ( Edad[i] < 18 )
{ CanMenEdad = CanMenEdad + 1; }
else
{ CanMayEdad = CanMayEdad + 1; }
}
for(i=0;i<N;i=i+1)
{
25
ARREGLOS
cout<<setw(25)<<Nom[i]<<setw(10)<<Edad[i]<<setw(10)<<Talla[i]<<endl;
}
cout<<setw(35)<<PromEdad<<setw(10)<<PromTalla<<endl;
cout<<"Numero de atletas menores de edad : "<<CanMenEdad<<endl;
cout<<"Numero de atletas mayores de edad : "<<CanMayEdad<<endl;
cout<<"Los atletas mas altos al promedio son: "<<endl;
for(i=0;i<N;i=i+1)
{
if(Talla[i] > PromTalla)
cout<<Nom[i]<<endl;
}
getch();
}
20. Hacer un programa que inicialice nombre, direccin y telfono de 5 amigos y
muestre datos de uno de ellos, si se ingresa por teclado el ndice del arreglo.
Debe mostrar repetidamente los datos de un amigo. Hacerlo hasta que se ingrese
por teclado un ndice fuera del rango (0-4).
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
char nomb[5][30] = {"Ada Lugo","Alberto C.", "Jorge B.", "Andre F.",
"Miura F."};
char direc[5][30] = {"Av.Los Naranjos 120", "Av,Sucre 115", "Av. Lima
26
ARREGLOS
cin>>i;
while ((i>=0) && (i<5))
{ cout<<setw(30)<<nomb[i]<<setw(30)<<direc[i]<< setw(10) << telef[i]
<<endl;
cout<<"ingrese el indice : ";
cin>>i;
}
getch();
}
Ejercicios Propuestos
1.
27
ARREGLOS
2.
3.
4.
5.
Escribir un programa, que lea una lista de nmeros enteros positivos y los
muestre en pantalla. Luego, si hay nmeros repetidos, deben eliminarse de la
lista y dejar slo uno de cada nmero e imprimir la nueva lista.
6.
- preUni
7.
a)
b)
28
ARREGLOS
9.
10.
11.
12.
14.
29
ARREGLOS
15.
16.
17.
18.
30
ARREGLOS
19.
20.
ARREGLOS MULTIDIMENSIONALES
Arreglos Bidimensionales
Un arreglo bidimensional es un array de arrays unidimensionales. Se puede
visualizar a un arreglo bidimensional como una matriz con filas y columnas. El
primer ndice indica la fila y el segundo indica la columna
Un array bidimensional es aquel en donde los componentes son accesibles
por medio de una pareja de ndices que apunten a la fila y a la columna del
componente requerido. Los arrays de este tipo son conocidos tambin con el
31
ARREGLOS
nombre de matrices.
Conceptualmente, podemos
pensar
en un
array
<NOMBRE_matriz>
[<M>] [<N>];
tipo
variable[filas][columnas];
32
ARREGLOS
33
ARREGLOS
34
ARREGLOS
year += 2000;
else
year += 1900;
if ((dia < 32) && (dia > 0) && (mes < 13) && (mes > 0))
printf("\n\n%d de %s de %d\n\n", dia, meses[mes-1],year);
else
printf("\nError en la fecha\n");
}
else
printf("\nError en el formato\n");
system("pause");
return 0;
}
4. En un arreglo tridimensional se almacenan las ventas mensuales de los
ltimos 8 aos de los tres departamentos de una empresa textil: hilos, lanas y
licra. Escribe un programa en C que obtenga la venta de la empresa en el
segundo ao.
float ventas(float textil[][MONTH][YEAR],
int mes, int depart, int year)
{
35
ARREGLOS
int i,j;
float suma=0;
for(i=0; i < depart; i++)
for(j=0; j < mes; j++)
suma += textil[i][j][year-1];
return suma;
}
5.
Que rellene un array con los 100 primeros nmeros enteros y los muestre en
pantalla en orden ascendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,tabla[100];
for (x=1;x<=100;x++)
{
tabla[x]=x;
}
for (x=1;x<=100;x++)
{
36
ARREGLOS
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
6.
Que rellene un array con los nmeros primos comprendidos entre 1 y 100 y
los muestre en pantalla en orden ascendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,cont,z,i,tabla[100];
i=0;
for (x=1;x<=100;x++)
{
cont=0;
for (z=1;z<=x;z++)
{
if (x%z==0)
37
ARREGLOS
{
cont++;
}
}
if (cont==2 || z==1 || z==0)
{
tabla[i]=x;
i++;
}
}
for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
7. Que lea 10 nmeros por teclado, los almacene en un array y muestre la suma,
resta, multiplicacin y divisin de todos.
38
ARREGLOS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,tabla[10];
int sum,res,mul,div;
for (x=0;x<10;x++)
{
printf("Introduzca nmero\n");
scanf("%d",&tabla[x]);
}
sum=tabla[0];
res=tabla[0];
mul=tabla[0];
div=tabla[0];
for (x=1;x<10;x++)
{
sum=sum+tabla[x];
res=res-tabla[x];
mul=mul*tabla[x];
39
ARREGLOS
div=div/tabla[x];
}
printf("Suma: %d\n",sum);
printf("Resta: %d\n",res);
printf("Multiplicacin: %d\n",mul);
printf("Divisin: %d\n",div);
system("PAUSE");
return 0;
}
8.
Que lea 10 nmeros por teclado, los almacene en un array y los ordene de forma
ascendente.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float aux, numeros[10];
int i,j,n=10;
for (i=0;i<n;i++){
printf("Escriba un nmero");
40
ARREGLOS
scanf("%f",&numeros[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(numeros[i]<numeros[j])
{
aux=numeros[i];
numeros[i]=numeros[j];
numeros[j]=aux;
}
}
}
for (i=n-1;i>=0;i--){
printf("%f\n",numeros[i]);
}
system("PAUSE");
return 0;
41
ARREGLOS
}
9. Que lea 5 nmeros por teclado, los copie a otro array multiplicados por 2 y
muestre el segundo array.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int aux, numeros1[5],numeros2[5];
int i,j;
for (i=0;i<5;i++){
printf("Escriba un nmero");
scanf("%d",&numeros1[i]);
}
for(i=0;i<5;i++)
{
numeros2[i]=numeros1[i]*2;
}
for (i=0;i<5;i++){
printf("%d\n",numeros2[i]);
42
ARREGLOS
}
system("PAUSE");
return 0;
}
10. Que muestre los primeros 100 nmeros de izquierda a derecha usando un
array de dos dimensiones.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
for (y=0;y<10;y++)
{
numeros[x][y]=(x*10)+1+y;
}
}
for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
}
printf("%d ",numeros[x][y]);
43
ARREGLOS
printf("\n");
}
system("PAUSE");
return 0;
}
11. Que rellene un array de dos dimensiones con nmeros pares, lo pinte y
despus que pida una posicin X,Y y mostrar el nmero correspondiente.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num=num*2;
}
44
ARREGLOS
45
ARREGLOS
cin>>valor;
matriz[i][j] = valor;
}
}
for(int i=0;i<3;i++)
{
cout<<"|";
for(int j=0; j<2;j++)
{
cout<<"\t"<<matriz[i][j]<<"\t";
}
cout<<"|"<<endl;
}
return 0;}
13. Desarrolle un programa que lea una cadena y diga cuantas vocales hay.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int sum=0,x;
46
ARREGLOS
char frase[50];
switch (frase[x])
{
case 'a':
sum++;
break;
case 'e':
sum++;
break;
case 'i':
sum++;
break;
case 'o':
sum++;
break;
47
ARREGLOS
case 'u':
sum++;
break;
default:
break;
}
}
printf("\n\nEn la frase hay %d vocales\n\n",sum);
printf("\n\n");
system("PAUSE");
return 0;
}
Ejercicios Propuestos
1. Escribir una funcin que acepte como parmetro un vector que puede contener
elementos duplicados. La funcin debe sustituir cada valor repetido por -5 y
devolver al punto donde fue llamado el vector modificado y el nmero de
entradas modificadas.
2.
Escribir una funcin a la que se le proporcione una fecha (da, mes, ao), as
como un nmero de das a aadir a esta fecha. La funcin debe calcular la nueva
fecha y visualizarla.
48
ARREGLOS
3.
Escribir una funcin conversin que reciba como parmetro una cadena
representando una fecha en formato dd/mm/mm, como 17/11/91 y la devuelve
en forma de texto: 17 de Noviembre de 1991.
4.
5.
6.
7.
8.
Escribir un programa que lea una frase, sustituya todas las secuencias de 2 o
+ blancos por un solo blanco y visualice la frase restante.
9.
Escribir un programa que desplace una palabra leda del teclado desde la
izquierda hasta la derecha de la pantalla.
10.
Escribir una funcin que intercambie la i-esima por j-esima de un array MxN.
11.
49
ARREGLOS
13.
14.
Y lo visualice como:
15.
Un vector se dice que es simtrico si el elemento que ocupa la posicin iesima coincide con el que ocupa la posicin n-iesima, siempre que el nmero de
elementos que almacena el vector sea n. Por ejemplo el vector que almacena los
valor 2,4,5,4,2 es simtrico. Escribir una funcin que decida si el vector de n
datos que recibe como parmetro es simtrico.
50
ARREGLOS
16.
Escribir una funcin que reciba como parmetro, una matriz cuadrada de
orden N, y calcula la transpuesta de la matriz almacenando el resultado en la
propia matriz.
17.
18.
Escribir una funcin que reciba como parmetro una matriz cuadrada de
orden N y decida si es simtrica. Una matriz cuadrada de orden N es simtrica si
A[i][j]==A[j][i] para todos los valores de los ndices i,j.
19.
Codificar un programa C++ que lea una frase y decida si es palndroma. Una
frase se dice que es palndroma si despus de haber eliminado los blancos, se
puede leer de igual forma en los 2 sentidos.
20.
CARACTERES Y CADENAS
Introduccin
Despus de haber aprendido como manejar TEXTO en C++, ya que hasta el
momento solo sabemos cmo mostrar un texto en pantalla mediante el comando cout.
En C++ se usaran arrays de caracteres para almacenar texto ya que C++ no tiene un tipo
de datos bsico para almacenar datos como lo es el tipo string.
Caracter
51
ARREGLOS
Cadena de caracteres
Una cadena en C++ es un conjunto de caracteres, o valores de tipo char, terminados
con el carcter nulo, es decir el valor numrico 0. Internamente, en el ordenador, se
almacenan en posiciones consecutivas de memoria. Este tipo de estructuras recibe un
tratamiento muy especial, ya que es de gran utilidad y su uso es continuo.
La manera de definir una cadena es la siguiente:
char<identificador>[<longitud mxima>];
Arreglos y Cadena de caracteres
Ejemplo de declaracin:
Ejemplo de declaracin:
52
ARREGLOS
En esta declaracin inicializamos cada uno de los elementos del arreglo de manera
individual. Notar que inicializamos explcitamente en el elemento 7 del arreglo al
carcter nulo '\0'.
Ejemplo de declaracin:
Podemos utilizar cin >> arregloCadena para asignar a un arreglo (desde el teclado o
entrada estndar), pero debemos tener en cuenta que cin >>leer y asignar hasta
detectar el primer carcter en blanco (espacio).
53
ARREGLOS
Ejemplo
Manejo de excepciones
Las excepciones son en realidad errores durante la ejecucin. Si uno de esos errores
se produce y no implementamos el manejo de excepciones, el programa sencillamente
terminar abruptamente. Es muy probable que si hay ficheros abiertos no se guarde el
contenido de los buffers, ni se cierren, adems ciertos objetos no sern destruidos, y se
producirn fugas de memoria.
En programas pequeos podemos prever las situaciones en que se pueden producir
excepciones y evitarlos. Las excepciones ms habituales son las de peticiones de
memoria fallidas.
Veamos este ejemplo, en el que intentamos crear un array de cien millones de enteros:
#include<iostream>
using namespace std;
int main()
{ int *x=NULL;
int y= 100000000;
x= new int[y];
54
ARREGLOS
x[10] = 0;
cout<<Puntero: <<(void*) x<<endl;
delete[] x;
return 0;
}
El sistema operativo se quejar, y el programa terminar en el momento que
intentamos asignar un valor a un elemento del array.
String
Las strings son un caso especial de arreglo de caracteres, las cuales presentan ciertas
peculiaridades que no son posibles de resolver con mtodos usuales.
Por ejemplo no es vlido usar simples sentencias de asignacin o comparacin.
1.
Para casos como estos se debern usar ciertas funciones de manipulacin de strings que
provee el lenguaje C, estas funciones son:
#include <string.h>
a) STRCPY (string destino, string original): Se utiliza para copiar el contenido de
un string original en un string de destino. Ejemplo:
char nombre[30],copia[30];
nombre= getstring(nombre);
strcpy(copia,nombre);
strcpy(nombre,pato);
b) STRCAT (string1,string2): Encadena o agrega al final de la string1 la string2.
Ejemplo: char nombre[30],copia[30];
55
ARREGLOS
strcpy(nombre,pepe);
strcat(nombre,lopez);
c)
d)
56
ARREGLOS
Espacio de nombres
Si necesitramos aadir una clase ms para las compras que registre el ttulo del
libro, el nombre ms idneo sera Titulo, pero este nombre ya est siendo utilizado, as
que para evitar problemas de duplicidad, deberamos elegir otro que puede que no se
ajuste a definir la funcionalidad de la clase.
57
ARREGLOS
documento existen palabras con el mismo nombre (p.e. "capital"), pero con diferentes
significados y espacios semnticos (trmino geogrfico/trmino econmico-financiero).
Veamos un ejemplo en el que se produce ambigedad:
capital
<pas nombre=Espaa>
capital
<inversin>
<capital>Madrid</capital> <capital>2000</capital>
</pas>
</inversin>
Bibliografia
Aranguren E. (Mayo 27, 2007). Apuntadores. 2014, de Rincn del vago Sitio
web: http://html.rincondelvago.com/apuntadores-en-lenguajes-deprogramacion.html
58
ARREGLOS
Annimo. (Octubre 10, 2013). Caracter (tipo de dato). 2014, de Wikipedia Sitio
web: http://es.wikipedia.org/wiki/Car%C3%A1cter_%28tipo_de_dato%29
59
ARREGLOS
60