Академический Документы
Профессиональный Документы
Культура Документы
Guia 5 Arreglos
Introducción
I V
CONVENIO NOTACIONAL
LONGITUD DE UN ARREGLO
I [1,N]
L(A) = LS-LI +1
Ejemplo 1
4 5 6 7 8 9 10 11
void main()
{ int A[10],i;
for(i=0; i < 100; i++)
A[i] = i;
}
este ciclo iterara cien veces incluso aunque A tiene solo diez elementos. Es
responsabilidad del programador asegurar que los arreglos sean suficientemente grandes
para guardar lo que pondra en ellos el programa y de comprobar verificaciones de
entorno cuando sea necesario.
int A[100]
Cada entero ocupa dos bytes en memoria, por tanto se separara 100 x 2 = 200 bytes en
memoria. Sin embaro, durante la ejecucion de programa solo se utilizaran N<=100
espacios, N es denominada tamaño logico, mientras que 100 es el tamaño fisico. Si N es
mayor que 100, faltara espacio en el arreglo para los elelentos mayores a 100. Si N es
pequeño, se desperdiciara los espacios entre N y 100
Como se mencionó al inicio, las posiciones de memoria que utiliza el arreglos son
consecutivas,por lo que cada una es direccionable por direcciones contiguas.
Conociendola direccion base del arreglo , es posible obtener la dirección de cada
elemento. Esto permite el acceso a cada elemento en forma directa sin tener que hacer
una exploración secuencial como ocurre con las filas secuenciales.
Definimos
Si consideramos
Ejemplo 2
4 5 6 7 8 9 10 11
A
LI =4 LS =11 L(A) =11-4 = 8
Si consideramos Base(A) =100 w =3
Un arreglo es una secuencia de datos del mismo tipo que se referencian utilizando un
nombre comun. Cada elemento se accesa por medio de un indice
Un arreglo se conoce tambien como una variable dimensionada, pues se referencia por un único
nombre, diferenciando sus elementos por un indice
int edad[10]
float peso[12]
char nombre[30]
Ejemplo 3
void main()
{ int i;
int X[10]; // reserva espacio para diez primeros enteros
for(i=1; i<=10; i++)
X[i] = i;
}
Ejemplo 9.4
void main()
{ int i,dato;
int X[10]; // reserva espacio para diez elementos enteros
for(i=1; i<=10; i++)
{ cin>>dato;
X[i] = dato;
}
Recorrido de un arreglo
En muchas aplicaciones se queire realizar alguna operacion con cada uno de los
elementos del arreglo, y aunque estos se pueden accesar en cualquier orden, es
conveniente hacer un recorrido secuencial desde el inicio hata el final.
Ejemplo 4
Crea un arreglo de longitud M, y luego muestra el arreglo
Ejemplo 5
Un obra de hidráulica requiere de un equipo de tecnicos. Cada tecnico registra su nombre,
edad, especialidad
arregloObra [] tipo especialista
Registro Persona
string Código
string Nombre
fechaFecha nacimiento
String especialidad
FinReg
JosePerez
24/12/1987
topografo
Registro Obra 7
string Código
Persona P[] 3
FinReg
Ejemplo 6
Verificar si un arreglo la suma de los elementos pares es
igual a la suma de los elementos impares.
Especificacion:
A:vector b:boleana
Precondicion: A: vector
i,n : entero
SI, SP: real
funcion arreglo: ( A:vector) dev( b:boleana)
Postcondicion:
b= ᴲ iE 1..n /
b si SP=SI "se cumple"
sino SP≠SI "No cumple"
funcion arreglo()
inicio
leer vector
vector=A[i]
SP=0
SI=0
Para i=1 hasta i=n
si A[i] mod 2=1
SI=SI+ A[i]
fin_si
si A[i] mod 2=0
SP=SP+ A[i]
fin_si
fin_para
si SI=SP
escribir("si cumple")
sino
escribir("no cumple")
fin_si
fin
Codificacion c++
#include <cstdlib>
#include <iostream>
for(int i=1;i<=n;i++)
{
cout<<"Ingrese numero"<<i<<": ";
cin>>A[i];
}
sp=0;
si=0;
for(int i=1;i<=n;i++)
{
if(A[i]%2==0)
{sp=sp+A[i];}
else if(A[i]%2!=0)
{si=si+A[i];}
}
cout<<"suma de pares :"<<sp<<endl;
cout<<"suma de impares :"<<si<<endl;
if (sp==si)
cout<<"se cumple\n";
else cout<<"No se cumple\n";
system("PAUSE");
return 0;
}
Ejemplo 7
Verificar si un arreglo la suma de los valores de posición pares es igual a
la suma de los valores de posiciones impares.
Especificacion:
A:vector b:boleana
Precondicion: A: vector
i ,n: entero
SI, SP: real
funcion arreglo2: ( A:vector) dev( b:boleana)
Postcondicion:
b= ᴲ kE 1..n / SI=∑ ,∑
b si SP=SI "se cumple"
sino SP≠SI "No cumple"
funcion arreglo2()
inicio
leer vector
vector=A[i]
SP=0
SI=0
Para i=1 hasta i=n incr=2
SI=SI+ A[i]
fin_para
Para i=2 hasta i=n incr=2
SP=SP+ A[i]
fin_para
si SI=SP
escribir("si cumple")
sino
escribir("no cumple")
fin_si
fin
Codificacion c++
#include <cstdlib>
#include <iostream>
for(int i=1;i<=n;i++)
{
cout<<"Ingrese numero"<<i<<": ";
cin>>A[i];
}
sp=0;
si=0;
for(int i=1;i<=n;i=i+2)
{
si=si+A[i];}
for(int i=2;i<=n;i=i+2)
{
sp=sp+A[i];}
Arreglos bidimensionales
Un arreglo bidimensional es un arreglo de arreglos unidimensionales. Es decir es un
arreglo unidimensuional cuyos elementos son arreglos unidimensionales
Si el arreglo se referencia por dos índices se denomina arreglo bidimensional.
I V
A es de tamaño M X N
CONVENIO NOTACIONAL
Independientemente los numeros i,j reciben el nombre de indices y Aij, A(i,j) o A[i,j]
indica la variable subindicada.
A puede interpretarse matemáticamente como una matriz de orden MxN donde M
representa el numero de filas y N representa el numero de columnas. El elemento A(i,j)
representa el valor correspondiente a la fila i y la columna j.
En una representacion por filas V contiene los elementos de A dispuestos fila por fila.
...
Definimos
Si consideramos
BASE(A) la direccion del A
W numero de palabras que ocupa la celda A(i) en memoria
Entonces
Ejemplo 8
Entero A[5][2] ={ 1,1,
2,4,
3,9,
4,16,
5,25
};
Ejemplo 9
Ejemplo 10
Verifica si una matriz la suma de los elementos de la diagonal principal es igual a la suma
de los elementos de la diagonal secundaria
Ejemplo 12
1 2 1 2 3 9 12 15
* =
3 4 4 5 6 19 26 33
#define MAX 10
void main ()
{ int A[MAX][MAX], B[MAX][MAX],P[MAX][MAX];
int i,j,k,m1,n1,m2,n2;
cout <<"multiplicaciones de matrices \n\n";
cout << "Matriz A :\n";
cout <<"Numero de Filas = "; cin>>m1;
cout <<"Numero de Columnas = "; cin>>n1;
cout <<"ingrese los datos:\n";
for (i=1; i<=m1; i++)
{cout << "fila" <<i<< ":\t";
for (j=1; j<=n1; j++)
{cin>> A[i][j] ;cout <<"\t";}
}
cout << "Matriz B :\n";
cout <<"Numero de Filas = "; cin>>m2;
cout <<"Numero de Columnas = "; cin>>n2;
cout <<"ingrese los datos:\n";
for (i=1; i<=m2; i++)
{cout << "fila" <<i<< ":\t";
for (j=1; j<=n2; j++)
{cin>> B[i][j] ;cout <<"\t";}
}
if (n1 != m2)
{cout <<"no se puede multiplicar ";
cout <<"las matrices no son compatibles ";
}
else
{
for (i=1;i<=m1;i++)
for(j=1; j<=n2; j++)
{ P[i][j]=0;
for(k=1; k<=n1; k++)
P[i][j]=P[i][j]+A[i][k]*B[k][j];
}
}
cout <<"\n\n Matriz producto :\n";
for (i=1; i<=m1;i++)
{for (j=1;j<=n2;j++)
cout <<P[i][j]<<"\t";
cout <<endl;
}
}
matriz de dimension 3*4 y una de 4*5; pero no se puede multiplicar una matriz de
dimension 4*5 por otra de 3*4, pues no son compatibles.
Ejercicios resueltos
Construya una solución para
Referencias bibliográficas
1) [CEVALLOS 1996] Javier Cevallos Sierra “ Curso de Programacion C++”; Edit Rama
Universidad de Alcala Madrid España.
2) [CORTEZ 1999] Cortez Vasquez,Augusto. ”Matematica Discreta”, Edit San Marcos Lima 2011
3) [CORTEZ 2010] Cortez Vásquez,Augusto. ”Algorítmica”, EDit EsVega Lima Peru 2010.
4) [CORTEZ 2013] Cortez Vasquez,Augusto. ”Algoritmia, Tecnicas Algoritmicas”, Edit
CEPREDIM UNMSM Lima 2013
5) [JOYANES 1999] Joyanes Aguilar Luis ”Estructura de datos, Algoritmos, abstracción y
objetos”; Mc Graw Hill 1999.