Cazador

  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Cazador as PDF for free.

More details

  • Words: 1,780
  • Pages: 10
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:

#include #include #include //-----------------------------------------------------------// Declaración de constantes //-----------------------------------------------------------#define N 15 #define M 15 #define MAXCOC 15 //-----------------------------------------------------------// Inclusión de funciones de las librerías //-----------------------------------------------------------using namespace std; //-----------------------------------------------------------// Tipos de datos //-----------------------------------------------------------//-----------------------------------------------------------// Prototipos de funciones //-----------------------------------------------------------void llene_matriz(int c[M][N]); void MostrarDatos (int a[M][N], int f, int c, int m, bool b[M][N]); void MostrarMatrizBool (bool b[M][N]); void MostrarMatriz (int a[M][N], int f, int c); void lecturadatos (int a[M][N], int *, int *, int *); void marcarcuarto (bool a[M][N], int, int); void actmunics (int *, int a[M][N], int, int); bool escogercuarto (int, int, int, int, int *, int *, bool a[M][N], int ); int maximomatriz (int c[M][N]); bool es_salida (int, int); //-----------------------------------------------------------// Programa Principal //-----------------------------------------------------------int main (void) { int matcoco[M][N] = {{0}}, f = 0, c = 0, m = 39, max = 0; bool encrucijada = false, marcas[M][N] = { {false} }; srand(time(NULL));

45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88:

f = rand() % M; c = rand() % N; //lecturadatos (matcoco, &f, &c, &m); llene_matriz(matcoco); matcoco[f][c] = 0; max = maximomatriz(matcoco); MostrarDatos(matcoco, f, c, m, marcas); while (!es_salida(f, c) && m > 0 && !encrucijada) { marcarcuarto (marcas, f, c); encrucijada = escogercuarto (matcoco[f - 1][c], matcoco[f + 1][c], matcoco[f][c + 1], matcoco[f][c - 1], &f, &c, marcas, max); actmunics (&m, matcoco, f, c); MostrarDatos(matcoco, f, c, m, marcas); cout << "Encrucijada: " << encrucijada << "\n"; } if (es_salida(f, c)) cout << "El Cazador salio ileso!! 8^)\n\n"; else if (m < 0) cout << "Se acabaron las municiones!! " << "El Cazador no Pudo Salir!! 8^(\n\n"; else if (encrucijada && m > 0) cout << "El Cazador se quedo Encerrado!! 8^| \n\n"; return 0; } //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void llene_matriz(int a[M][N]) //-----------------------------------------------------------// DESCRIPCIÓN: // Llenar una matriz con números aleatorios. // // ENTRADAS: // Ninguna // // SALIDAS: // Datos en la matriz a con números aleatorios entre 0 y MAXCOC // // RETORNO: // Ninguno //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜

89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132:

{ int i = 0, j = 0; for (i = 0; i < M; i++) for (j = 0; j < N; j++) a[i][j] = rand() % MAXCOC; } //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void MostrarDatos (int a[M][N], int f, int c, int m, bool b[M][N]) //-----------------------------------------------------------// DESCRIPCIÓN: // Imprimir por pantalla los datos // // ENTRADAS: // Matriz de cocodrilos, fila y columna del cazador, // munición restante y matriz con las marcas // // SALIDAS: // Ninguna // // RETORNO: // Ninguno //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { char aux = ’ ’; cout << "----------------------------------------\n"; cout << "cuartos [" << m <<"] municiones\n"; MostrarMatriz(a, f, c); cout << "Marcas\n"; MostrarMatrizBool(b); cout << "\n\n"; cout << "Digite [Enter] para continuar"; aux = getchar(); } //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ int

133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176:

maximomatriz (int a[M][N]) //-----------------------------------------------------------// DESCRIPCIÓN: // Encuentra el máximo número en una matriz // // ENTRADAS: // matriz de datos // // SALIDAS: // Ninguna // // RETORNO: // entero con el mayor número en la matriz //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { int i = 0, j = 0, res = 0; res = a[0][0]; for (i = 0; i < M; i ++) for (j = 0; j < N; j ++) if (res < a[i][j]) res = a[i][j]; return res; } //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void MostrarMatriz (int a[M][N], int f, int c) //-----------------------------------------------------------// DESCRIPCIÓN: // Imprime por pantalla una matriz de enteros // // ENTRADAS: // La matriz de enteros y la posición del cazador // // SALIDAS: // Impresión de la matriz sustituyendo la casilla del cazador // por una letra C // // RETORNO: // Ninguno //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { int i = 0, j = 0;

177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220:

for (i = 0; i < M; i ++) { cout << "[ "; for (j = 0; j < N; j ++) { if (i == f && j == c) cout << "C\t"; else cout << a[i][j] << "\t"; } cout << "]\n"; } }

//˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void MostrarMatrizBool (bool b[M][N]) //-----------------------------------------------------------// DESCRIPCIÓN: // Imprime por pantalla una matriz de bools // // ENTRADAS: // La matriz de bools // // SALIDAS: // Impresión de la matriz // // RETORNO: // Ninguno //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { int i = 0, j = 0; for (i = 0; i < M; i ++) { cout << " "; for (j = 0; j < N; j ++) { cout << b[i][j] << " "; } cout << "\n"; } }

221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264:

//˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void lecturadatos (int matcoco[M][N], int *f, int *c, int *munic) //-----------------------------------------------------------// DESCRIPCIÓN: // Carga por teclado los datos del usuario // // ENTRADAS: // Parametros por referencia a ser llenados // // SALIDAS: // matriz de cocodrilos, posicion del cazador y municiones // // RETORNO: // Ninguna //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { int i = 0, j = 0; cout << "En que fila esta el cazador?"; cin >> *f; *f -= 1; cout << "En que columna esta el cazador?"; cin >> *c; *c -= 1; cout << "Cuantas municiones tiene el cazador?"; cin >> *munic; for (i = 0; i < M; i++) for (j = 0; j < N; j++) { cout << "Cuantos cocodrilos hay en el cuarto [" << i << "," << j << "]?"; cin >> matcoco[i][j]; } }

//˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ bool escogercuarto (int nte, int sur, int est, int ost, int *fila, int *colm, bool marcas[M][N], int max) //------------------------------------------------------------

265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308:

// DESCRIPCIÓN: // PROPOSITO: Elige el cuarto con menor cantidad de cocodrilos donde // no ha estado el cazador // ENTRADAS: // cantidad de cocodrilos en los cuartos adyacentes, // posicion del cazador // matriz de marcas // maximo valor de la matriz de cocodrilos // // SALIDAS: // posicion elegida (por referencia en fila y colm) // // RETORNO: // true si está en una encrucijada, false de lo contrario //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { bool res = false; cout << "El cazador está en: [" << *fila << ", " << *colm << "] "; cout << "---> N: " << nte << " S: " << sur << " E: " << est << " W: " << ost << " --->"; //-------------------------------------------------------------------// Si un cuarto adyacente está marcado le asigna la máxima cantidad de // cocodrílos a esa casilla de tal forma que se previene el movimiento // hacia esa casilla (a pesar que hay 0 cocodrilos ahí) //-------------------------------------------------------------------if (marcas[*fila - 1][*colm]) nte = max; if (marcas[*fila + 1][*colm]) sur = max; if (marcas[*fila][*colm + 1]) est = max; if (marcas[*fila][*colm - 1]) ost = max; //-------------------------------------------------------------------// Revisa cual es la casilla adyacente, no marcada, a la cual conviene // moverse. Si no encuentra ninguna actualiza el retorno a true //-------------------------------------------------------------------if (!marcas[*fila - 1][*colm] && nte < sur && nte < est && nte < ost) { cout << "Sale por el norte"; *fila = *fila - 1; } else if (!marcas[*fila + 1][*colm] && sur < est && sur < ost)

309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352:

{ cout << "Sale por el sur"; *fila = *fila + 1; } else if (!marcas[*fila][*colm + 1] && est < ost) { cout << "Sale por el este"; *colm = *colm + 1; } else if (!marcas[*fila][*colm - 1]) { cout << "Sale por el oeste"; *colm = *colm - 1; } else { cout << "ENCRUCIJADA\n" << marcas[*fila-1][*colm] << marcas[*fila+1][*colm] << marcas[*fila][*colm+1] << marcas[*fila][*colm-1]; res = true; } cout << " pasando a: [" << *fila << ", " << *colm << "]\n"; return res; } //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void marcarcuarto (bool marcas[M][N], int f, int c) //-----------------------------------------------------------// DESCRIPCIÓN: // Marca un cuarto // // ENTRADAS: // Matriz de marcas y posición del cazador // // SALIDAS: // Matriz actualizada // // RETORNO: // Ninguno //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ {

353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396:

marcas[f][c] = true; } //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ void actmunics (int *m, int matcoco[M][N], int f, int c) //-----------------------------------------------------------// DESCRIPCIÓN: // Disminuye las municiones dependiendo de la cantidad de // cocodrilos en la casilla // // ENTRADAS: // cantidad de municiones, matriz de cocodrilos, posición de // la casilla // // SALIDAS: // matriz de cocodrilos actualizada y municiones actualizadas. // // RETORNO: // Ninguno //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { *m -= matcoco[f][c]; matcoco[f][c] = 0; }

//˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ bool es_salida (int f, int c) //-----------------------------------------------------------// DESCRIPCIÓN: // PROPOSITO: Revisa si un cuarto es salida o no // // ENTRADAS: // posicion del cuarto // // SALIDAS:

397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407:

// Ninguna // // RETORNO: // {true, false} //˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ { bool res = false; if (f == 0 || c == 0 || f == M || c == N) res = true; return res; }

Related Documents