Administración de memoria continuación -matrices estáticas y dinámicas

12
Administración de memoria (continuación) Arreglos bidimensionales

description

Continuación del uso de memoria dinámica, ocupando mayor cantidad de ésta, mediante ejemplos de matrices (arreglos bidimensionales) estáticos y dinámicos, en C++.

Transcript of Administración de memoria continuación -matrices estáticas y dinámicas

Page 1: Administración de memoria continuación -matrices estáticas y dinámicas

Administración de memoria (continuación)

Arreglos bidimensionales

Page 2: Administración de memoria continuación -matrices estáticas y dinámicas

Arreglos bidimensionales

• Son estructuras de datos que agrupan muchos datos del mismo tipo, en donde cada elemento se puede trabajar individualmente y se puede referenciar con un mismo nombre.

• Se usan para representar datos que pueden verse como una tabla con filas y columnas.

Page 3: Administración de memoria continuación -matrices estáticas y dinámicas

Ahora veamos cómo se almacena un arreglo bidimensional

Page 4: Administración de memoria continuación -matrices estáticas y dinámicas

Declaración:

• Tipo_dato nombre_matriz [índice fila] [índice columna]

• int matriz [2][2]• char mapa [100][100]• int certamen [60][4]

Page 5: Administración de memoria continuación -matrices estáticas y dinámicas

Veamos un video…

• Donde creamos, llenamos y mostramos un arreglo bidimensional en C++

https://www.youtube.com/watch?v=FZ5wJ7sK3OY&feature=youtu.be

Page 6: Administración de memoria continuación -matrices estáticas y dinámicas

//Programa para crear arreglos bidimensionales (matrices) estáticas

//sección de librerías#include <iostream>

//directivas de compiladorusing namespace std;

//constantes globales#define TAM 4

//declaración de funciones/procedimientos definidos por el usuario

void matrizEstatica(void);//void matrizDinamica(void); esta la veremos más adelante

//función principalint main(){

matrizEstatica(); //llamada a procedimiento matrizEstatica system("pause"); //para poder visualizar el resultado sin que se cierre la ventana

return 0; //valor de regreso de la función}//fin de función principal

//definición de funciones/procedimientos definidos por el usuario

void matrizEstatica(void){//variables int matriz[TAM][TAM]; //TAM es una constante, hay que definirla al inicio del programa

//ciclo para llenar la matriz //primer for es para localizar la fila for (int i = 0; i < TAM; i++){ //segundo for es para localizar columna for (int j = 0; j < TAM; j++) //nota que es una matriz cuadrada, filas y columnas tienen el tamaño TAM { cout << "ingresa elemento: " << i << "," << j << "\n"; //pide al usuario ingresar el elemento i,j de la matriz cin >> matriz[i][j]; //se almacena el elemento en el lugar que le corresponde } }//fin de primer for

//ciclo para mostrar la matriz //primer ciclo para localizar la fila for (int i = 0; i < TAM; i++){ cout << "\n";//agregamos esta linea para separar las filas //segundo for para localizar la columna for (int j = 0; j < TAM; j++) cout << matriz[i][j] << "\t"; } cout << "\n"; //agregamos linea en blanco para separar la última fila de la matriz //fin mostrar matriz}//fin de matrizEstatica

Page 7: Administración de memoria continuación -matrices estáticas y dinámicas

Ejemplo de uso

• Si quiero sumar dos matrices, se tiene que especificar (antes de compilar) el tamaño que tendrán las matrices a usar.

Page 8: Administración de memoria continuación -matrices estáticas y dinámicas

#include <iostream>

using namespace std;#define TAM 3

int main(){ int pausa;

//inicio codigo int mat1[TAM][TAM], mat2[TAM][TAM], sumaMat[TAM][TAM]; for (int i = 0; i < TAM; i++) //llena matriz 1 for (int j = 0; j < TAM; j++){ cout << "Escribe elemento mat1[" << i << "][" << j << "]\n"; cin >> mat1[i][j]; } for (int i = 0; i < TAM; i++) //llena matriz 2 for (int j = 0; j < TAM; j++){ cout << "Escribe elemento mat2[" << i << "][" << j << "]\n"; cin >> mat2[i][j]; }

for (int i = 0; i < TAM; i++) //suma matriz 1 más matriz 2 for (int j = 0; j < TAM; j++){ sumaMat[i][j] = mat1[i][j] + mat2[i][j]; cout << "suma [" << i << "][" << j << "] = " << sumaMat[i][j]<<"\n"; }

//fin codigo cin >> pausa; return 0;}

Page 9: Administración de memoria continuación -matrices estáticas y dinámicas

• ¿Pero qué sucede si queremos cambiar el tamaño de las matrices durante el tiempo de ejecución?

Page 10: Administración de memoria continuación -matrices estáticas y dinámicas

Para crear una sola matriz dinámica

• Recuerda que tenemos que usar operadores new y delete.

• Siempre hay que liberar la memoria dinámica usada/apartada.

Page 11: Administración de memoria continuación -matrices estáticas y dinámicas

int filas = 0, columnas = 0;int **datosA;cout << "Escribe el numero de filas y columnas de la matriz" << endl;cin >> filas;cin >> columnas;

datosA = new int*[filas]; //aparta memoria para un apuntador de arreglos//llena valores matriz for (int i = 0; i < filas; i++){ datosA[i] = new int[columnas];//aparta memoria para cada renglón de la matriz for (int j = 0; j < columnas; j++){ cout << "Escribe valor de DatosA[" << i + 1 << "][" << j + 1 << "]"; cin >> datosA[i][j]; } cout << endl;}for (int i = 0; i < filas; i++){ //muestra elementos matriz dinamica for (int j = 0; j < columnas; j++){ cout << "DatosA[" << i << "][" << j << "] = " << datosA[i][j] << " "; } cout << endl;}

//libera memoriafor (int i = 0; i < filas; i++) delete datosA[i];

delete[]datosA;

Page 12: Administración de memoria continuación -matrices estáticas y dinámicas

¿Cómo modificarías el código de suma de matrices para que funcionara con matrices dinámicas?–Realiza ésto de tarea y envíalo por

email al docente (actividad individual).–Entrega el código de suma de matrices

dinámicas, compilado y funcionando, para el lunes 20 de octubre.