Administración de memoria continuación -matrices estáticas y dinámicas
description
Transcript of Administración de memoria continuación -matrices estáticas y dinámicas
Administración de memoria (continuación)
Arreglos bidimensionales
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.
Ahora veamos cómo se almacena un arreglo bidimensional
Declaración:
• Tipo_dato nombre_matriz [índice fila] [índice columna]
• int matriz [2][2]• char mapa [100][100]• int certamen [60][4]
Veamos un video…
• Donde creamos, llenamos y mostramos un arreglo bidimensional en C++
https://www.youtube.com/watch?v=FZ5wJ7sK3OY&feature=youtu.be
//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
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.
#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;}
• ¿Pero qué sucede si queremos cambiar el tamaño de las matrices durante el tiempo de ejecución?
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.
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;
¿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.