Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kjg en 1 Diciembre 2016, 06:45 am



Título: no se que esta mal
Publicado por: kjg en 1 Diciembre 2016, 06:45 am
no se que esta mal, se supone que debe poner 6 "1" , sin sobre esribir ninguno, pero no se porque no se puede

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<time.h>
  4. #define N 5
  5. #define M 5
  6. int main()
  7. {
  8.  int tablero[N][M];
  9.  int i,j,k;
  10.  int numbarcos=(N*M)/4;
  11.  printf("se colocaran %d barcos",numbarcos);
  12.  for(i=0;i<N;i++)
  13.      for(j=0;j<M;j++)
  14.           tablero[i][j]=0;
  15.           printf ("tablero original\n");
  16.           for(i=0;i<N;i++)
  17.           {
  18.           for(j=0;j<M;j++)
  19.          printf("%i\t",tablero[i][j]);
  20.          printf("\n");
  21. }
  22.  int hora,r,col;
  23.  hora=time(NULL);
  24.  srand(hora);
  25.  for(k=0;k<numbarcos;k++){
  26.  if(tablero[rand()%N][rand()%M]==0){
  27.  tablero[rand()%N][rand()%M]=1;
  28.  }else {
  29.  while(tablero[rand()%N][rand()%M]==1){
  30.  if(tablero[rand()%N][rand()%N]==0){
  31.  tablero[rand()%N][rand()%M]=1;}
  32.  break;
  33. }
  34. }
  35.  int c=0;
  36.  
  37.  for(i=0;i<N;i++)
  38.      for(j=0;j<M;j++)
  39.             if (tablero[i][j]==1)
  40.             c=c+1;
  41.  
  42.              printf("se colocaron %d barcos\n",c);
  43.  
  44.             printf("tablero con barcos\n");
  45.             for(i=0;i<N;i++)
  46.             {
  47.             for(j=0;j<M;j++)
  48.             printf("%i\t",tablero[i][j]);
  49.             printf("\n");
  50.             }
  51.  
  52.                                                                          }
  53.  system("PAUSE");
  54.  return 0;
  55. }

Mod: Los códigos van entre etiquetas GeSHi. Temas sobre C/C++ van al subforo de C/C++


Título: Re: no se que esta mal
Publicado por: engel lex en 1 Diciembre 2016, 06:49 am
muestra una pantalla del programa en ejecución porque tu codigo no es justamente el más facil de leer


Título: Re: no se que esta mal
Publicado por: MAFUS en 1 Diciembre 2016, 20:59 pm
Como dice engel lex tu código es demasiado complicado. Debes aprender a refactorizar tus bucles para simplificarlos y los códigos que se repiten y siempre son los mismos ponlos dentro de una función. Y cuida de las identaciones: además de funcional debe ser bonito visualmente para que se pueda seguir bien.

Tu código rehecho y funcional quedaría así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define FILAS 5
  6. #define COLUMNAS 5
  7. #define MAX_BARCOS (FILAS * COLUMNAS / 4)
  8.  
  9. void mostrar_tablero(int tablero[][COLUMNAS]) {
  10.    int x, y;
  11.  
  12.    for(y = 0; y < FILAS; ++y) {
  13.        for(x = 0; x < COLUMNAS; ++x)
  14.            printf("%i ", tablero[y][x]);
  15.        putchar('\n');
  16.    }
  17. }
  18.  
  19. int main() {
  20.    int tablero[FILAS][COLUMNAS] = {0};
  21.    int i;
  22.    int x, y;
  23.    int num_barcos = 0;
  24.  
  25.    srand(time(NULL));
  26.  
  27.    printf("se colocaran %d barcos\n", MAX_BARCOS);
  28.    puts("tablero original\n");
  29.  
  30.    mostrar_tablero(tablero);
  31.  
  32.    for(i = 0; i < MAX_BARCOS; ++i) {
  33.        x = rand() % COLUMNAS;
  34.        y = rand() % FILAS;
  35.  
  36.        if(tablero[y][x] == 0) {
  37.            tablero[y][x] = 1;
  38.  
  39.            printf("\nse colocaron %d barcos\n", ++num_barcos);
  40.            puts("tablero con barcos\n");
  41.  
  42.            mostrar_tablero(tablero);
  43.        }
  44.        else
  45.            --i;
  46.    }
  47.  
  48.    return 0;
  49. }