Está en la página 1de 31

OBJETIVO

El objetivo de la presente sesión es:

 Conocer los arreglos bidimensionales


 Declaración de un arreglo bidimensional
 Asignación y lectura de datos, arreglos como parámetros en
una función
 Conocer datos tipo cadena
 Declaración de variables tipo cadena
 Funciones predefinidas para el manejo de cadenas
 Implementar su propias funciones de cadena
 Ejemplos de aplicación con cadenas

ALGORITMOS Y PROGRAMACION 1
ARREGLOS BIDIMENSIONALES O TABLAS
El objetivo de la presente sesión es:

Como procesar grandes cantidades de datos y


almacenarlo en memoria.
Identificar un arreglo bidimensional.
Declarar un arreglo bidimensional y a la vez almacenar
datos.
Mostrar los datos y hacer operaciones con arreglos.
Arreglos bidimensional como parámetros en una función y
ejemplos de aplicación

ALGORITMOS Y PROGRAMACION 2
ARREGLOS BIDIMENSIONALES O TABLAS

Un array es un conjunto de datos homogéneos, finito


y del mismo tipo.
Internamente en memoria se reservan M x N
posiciones consecutivas para almacenar todos los
elementos del arreglo.
Se referencia con un único nombre de variable
seguido de los subíndices encerrados entre
corchetes([]).
El primer del índice indica la fila y el segundo indica la
columna.

ALGORITMOS Y PROGRAMACION 3
ARREGLOS BIDIMENSIONALES O TABLAS
Un matriz o tabla matemáticamente esta representado
de la siguiente forma:

ALGORITMOS Y PROGRAMACION 4
ARREGLOS BIDIMENSIONALES O TABLAS

Podemos observar que la matriz es del orden m x n.


Sus elementos son a11, a12, a13,…, a1n, a21, a22, a23,…,
a2n, …, am1, am2, am3,…, amn.
En programación, específicamente en c++, los datos
se guardan desde la posición 0.
Imagínese una matriz que tiene 3 filas por 4
columnas, la distribución de la memoria se muestra
como se indica.

ALGORITMOS Y PROGRAMACION 5
ARREGLOS BIDIMENSIONALES O TABLAS
Matriz A del orden 3 x 4.

Col. 0 Col. 1 Col. 2 Col. 3

Fila 0

Fila 1

Fila 2

ALGORITMOS Y PROGRAMACION 6
ARREGLOS BIDIMENSIONALES O TABLAS

Columnas

Col. 0 Col. 1 Col. 2 Col. 3

Fila 0

Fila 1

Fila 2

Filas

ALGORITMOS Y PROGRAMACION 7
ARREGLOS BIDIMENSIONALES O TABLAS

Col. 0 Col. 1 Col. 2 Col. 3

Fila 0

Fila 1 2.45
Fila 2

A[1][2] Contenido
Nombre Matriz

Posición Posición
Fila Columna
ALGORITMOS Y PROGRAMACION 8
ARREGLOS BIDIMENSIONALES O TABLAS

Col. 0 Col. 1 Col. 2 Col. 3

Fila 0

Fila 1 2.45
Fila 2

La matriz tiene 12 casilleros en donde se


almacenaran los datos.

ALGORITMOS Y PROGRAMACION 9
NOMENCLATURA PARA UNA MATRIZ O TABLA
Para referirse a un elemento en particular, se escribe el
nombre de la matriz.
Los subíndices debe estar encerrado entre corchetes( [ ] ).
Los subíndices debe ser una constante numérica o char,
puede ser un una expresión o una variable.

Subíndices
Subíndices son expresiones
son constantes

A[1][2] A[ i*2+1 ][i*4]

Nombre de Variable
ALGORITMOS Y PROGRAMACION 10
DECLARACION DE UNA MATRIZ
Para declarar se utiliza la siguiente sintaxis:

<Tipo dato> <Nombre de Variable>[M][N];

Donde: M y N, indica el tamaño de la matriz, donde estos


puede ser una variable o una constante numérica
entero y positivo.
Podemos declarar mas de una matriz del mismo tipo,
para ello se separan con comas(,).

ALGORITMOS Y PROGRAMACION 11
DECLARACION DE UNA MATRIZ

Para declarar la variable A se procede así:


float A[20][5];
int B[N][6],C[N][M];

A, es una matriz de 100 elementos que almacenará


números reales.
B almacenara N x 6 elementos y C almacenara N x M
elementos, en ambos casos números enteros.
Para ello es necesario conocer previamente los valores de
M y N.

ALGORITMOS Y PROGRAMACION 12
ASIGNACION DE DATOS A UNA MATRIZ

Un arreglo bidimensional se puede inicializar desde


una instrucción de declaración.
Los valores deben estar delimitados por llaves y
separados por comas.
Además las llaves se emplean para separar las filas
individuales.
Otra alternativa de asignar datos es a través de la
instrucciones de entrada que posee el c++.
Es decir usar la instrucción cin y las funciones de
cadena.

ALGORITMOS Y PROGRAMACION 13
ASIGNACION DE DATOS A UNA MATRIZ
Asumiendo que se tiene la siguiente declaración de la
matriz A

int A[3][4]={{8,16,9,52},
{3,15,27,6},
{14,25,2,10}
};
Los datos se almacenara en la matriz en el orden
indicado en la lista de datos.

ALGORITMOS Y PROGRAMACION 14
ASIGNACION DE DATOS A UNA MATRIZ

La declaración anterior producirá la inicialización tal


como se muestra a continuación:

Col. 0 Col. 1 Col. 2 Col. 3

Fila 0 8 16 9 52

Fila 1 3 15 27 6

Fila 2 14 25 2 10

ALGORITMOS Y PROGRAMACION 15
ARREGLO BIDIMENSIONAL COMO PARAMETROS
DE UNA FUNCION

Una función también puede contener como parámetro un


arreglo bidimensional.
Un arreglo como parámetro de una función siempre
trabaja por defecto por referencia.
Cuando el parámetro es una arreglo no lleva el operador
de dirección (&) que indica que es por referencia.
La declaración del parámetro puede darse de la siguiente
manera:

ALGORITMOS Y PROGRAMACION 16
ARREGLO BIDIMENSIONAL COMO PARAMETROS
DE UNA FUNCION
a) <tipo dato> NombreFuncion(<tipo dato> Variable[N][M]);

b) <tipo dato> NombreFuncion(<tipo dato> Variable[ ][M]);

Tener presente que en la segunda alternativa, se


deja en blanco la primera dimensión.

ALGORITMOS Y PROGRAMACION 17
INICIALIZANDO UNA MATRIZ
#include <iostream>
#define M 4
#define N 3
using namespace std;
//Definicion de funciones
void Inicializar( int x[][N])
{ int i,j,dat[M][N]={{50,10,80}, {45,11,9},
{-5,7,4},
{20,12,5}};
for(i=0;i<M;i++)
for(j=0;j<N;j++)
x[i][j]=dat[i][j];
}

ALGORITMOS Y PROGRAMACION 18
INICIALIZANDO UNA MATRIZ
void Print(int x[][N])
{ int i, j;
cout<<"MATRIZ A"<<endl;
for(i=0;i<M;i++)
{ for(j=0;j<N;j++)
cout<<x[i][j]<<"\t";
cout<<endl;
}
}

//Funcion principal
int main()
{ int A[M][N];
Inicializar(A);
Print(A);
}

ALGORITMOS Y PROGRAMACION 19
MATRIZ TRINGULAR INFERIOR
// Programa que genera un matriz cuadrada triangular inferior
#include <iostream>
using namespace std;
const int N=20;
// Declarando las funciones
void Lectura(int x[][N],int M)
{ int i,j;cout<<endl;
for(i=0;i<M;i++)
{ for(j=0;j<M;j++)
if(i>=j)
{ cout<<"X["<<i<<"]"<<"["<<j<<"]=";
cin>>x[i][j];
}
else
x[i][j]=0;
}
}

ALGORITMOS Y PROGRAMACION 20
MATRIZ TRINGULAR INFERIOR
void Escribir(int x[][N],int M)
{ int i,j;
cout<<endl<<endl<<"Matriz A"<<endl;
for(i=0;i<M;i++)
{for(j=0;j<M;j++)
cout<<x[i][j]<<"\t";
cout<<endl;
}
}

int CantidaDatos()
{ int m; cout<<endl;
cout<<"Cantidad de datos a procesar:";
cin>>m; return m;
}
ALGORITMOS Y PROGRAMACION 21
MATRIZ TRINGULAR INFERIOR
// Funcion principal
int main()
{ int A[N][N], num;
num=CantidaDatos();
Lectura(A,num);
Escribir(A,num);
}

ALGORITMOS Y PROGRAMACION 22
PROGRAMA DE APLICACION
/*Una empresa comercial tiene 1000 productos que
comercializa, por cada producto se ingresa los siguientes
datos: código, cantidad, costo unitario. La compañía tiene 3
almacenes y además el precio unitario de venta por producto
es un 40% mas del costo unitario.
Se pide escribir un programa que realice lo siguiente:
a) Lectura de Datos
b) Mostrar los datos leídos y calculados
c) Cual es el producto que tiene mayor existencia y en que
almacén esta ubicado.
d) Determinar y mostrar el total de la inversión y el total de
los ingresos.*/

ALGORITMOS Y PROGRAMACION 23
PROGRAMA DE APLICACION
#include <iostream>
using namespace std;
const int N=1000;
//Lectura de datos
void Lectura(int c[],float a[][3],float cv[N][2],int m)
{ register int i,j,k;
for(i=0;i<m;i++)
{ cout<<«Procesando datos del producto #:"<<(i+1)<<endl;
cout<<"C["<<i<<"]=";cin>>c[i];
for(j=0;j<3;j++)
{ cout<<"Cantidad en Almacen #:"<<(j+1)<<endl;
cout<<"A["<<i<<"]["<<j<<"]=";cin>>a[i][j];
}

ALGORITMOS Y PROGRAMACION 24
PROGRAMA DE APLICACION

cout<<"Procesando el Costo unitario y precio de venta”;


Cout<<“ de producto #:"<<(i+1)<<endl;
cout<<"CV["<<i<<"]["<<0<<"]=";cin>>cv[i][0];
cv[i][1]=1.40*cv[i][0];
}
cout<<endl;
}

ALGORITMOS Y PROGRAMACION 25
PROGRAMA DE APLICACION
//Determinando el producto con mayor existencia
void ProductoMayor(int c[],float a[][3],int m,int &cp,float &may,int &al)
{ int i,j,k=0;
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{ if(k==0)
{ cp=c[i];may=a[i][j];
al=j;
}
else if(a[i][j]>may)
{ cp=c[i];may=a[i][j];
al=j;
} k++;
}
}

ALGORITMOS Y PROGRAMACION 26
PROGRAMA DE APLICACION
// Determinando el monto total de Inversion e Ingresos
void InversionIngresos(float a[][3],float cv[N][2],int m)
{ register int i,j,k;
float s,ct=0,ti=0;
for(i=0;i<m;i++)
{ s=0;
for(j=0;j<3;j++)
s+=a[i][j];
ct=ct+s*cv[i][0];
ti=ti+s*cv[i][1];
}
cout<<"La inversion total es:"<<ct<<endl;
cout<<"El ingreso total es:"<<ti<<endl;
}
ALGORITMOS Y PROGRAMACION 27
PROGRAMA DE APLICACION

// Mostrando los datos


void VerProductos(int c[],float a[][3],float cv[N][2],int m)
{ register int i,j,k;
cout<<“\nMOSTRANDO LOS PRODUCTOS"<<endl;
for(i=0;i<m;i++)
{ cout<<c[i]<<"\t";
for(j=0;j<3;j++)
cout<<a[i][j]<<"\t";
cout<<cv[i][0]<<"\t"<<cv[i][1]<<endl;
}
}

ALGORITMOS Y PROGRAMACION 28
PROGRAMA DE APLICACION
//Programa principal
int main()
{ int c[N],n,cp,al;
float a[N][3],cv[N][2],may;
cout<<«\nNumero de productos a procesar";cin>>n;
Lectura(c,a,cv,n);
VerProductos(c,a,cv,n);
ProductoMayor(c,a,n,cp,may,al);
cout<<"El codigo del producto mayor es:"<<cp<<endl;
cout<<"La mayor cantidad fisica es:"<<may<<endl;
cout<<"Esta en el almacen #:"<<al<<endl;
InversionIngresos(a,cv,n); cout<<end
}

ALGORITMOS Y PROGRAMACION 29
PROGRAMA DE APLICACION

ALGORITMOS Y PROGRAMACION 30
PROBLEMAS PROPUESTOS
Diseñar un algoritmo que permita sumar cada una de
las filas y columnas de una matriz de orden cuadrada.
El resultado almacenar en vectores independientes,
luego mostrar el contenido de la matriz y los vectores.
Una matriz cuadrada almacena números
pseudoaleatorios de 4 dígitos, se pide diseñar un
algoritmo para generar una matriz, finalmente mostrar la
matriz.
Dado un matriz cuadrada (orden es un numero par
mayor o igual a 4), se pide diseñar un algoritmo que
permita intercambiar la primera fila con la ultima, la
segunda fila con la penúltima y así sucesivamente, el
resultado almacenar en otra matriz. Finalmente mostrar
ambas matrices.

ALGORITMOS Y PROGRAMACION 31