Test Foro de elhacker.net SMF 2.1

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

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define N 5
#define M 5
int main()
{
 int tablero[N][M];
 int i,j,k;
 int numbarcos=(N*M)/4;
 printf("se colocaran %d barcos",numbarcos);
 for(i=0;i<N;i++)
     for(j=0;j<M;j++)
          tablero[i][j]=0;
          printf ("tablero original\n");
          for(i=0;i<N;i++)
          {
          for(j=0;j<M;j++)
         printf("%i\t",tablero[i][j]);
         printf("\n");
}
 int hora,r,col;
 hora=time(NULL);
 srand(hora);
 for(k=0;k<numbarcos;k++){
 if(tablero[rand()%N][rand()%M]==0){
 tablero[rand()%N][rand()%M]=1;
 }else {
 while(tablero[rand()%N][rand()%M]==1){
 if(tablero[rand()%N][rand()%N]==0){
 tablero[rand()%N][rand()%M]=1;}
 break;
}
}
 int c=0;
 
 for(i=0;i<N;i++)
     for(j=0;j<M;j++)
            if (tablero[i][j]==1)
            c=c+1;
           
             printf("se colocaron %d barcos\n",c);
             
            printf("tablero con barcos\n");
            for(i=0;i<N;i++)
            {
            for(j=0;j<M;j++)
            printf("%i\t",tablero[i][j]);
            printf("\n");
            }
           
                                                                         }
 system("PAUSE");
 return 0;
}


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í:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define FILAS 5
#define COLUMNAS 5
#define MAX_BARCOS (FILAS * COLUMNAS / 4)

void mostrar_tablero(int tablero[][COLUMNAS]) {
   int x, y;
   
   for(y = 0; y < FILAS; ++y) {
       for(x = 0; x < COLUMNAS; ++x)
           printf("%i ", tablero[y][x]);
       putchar('\n');
   }
}

int main() {
   int tablero[FILAS][COLUMNAS] = {0};
   int i;
   int x, y;
   int num_barcos = 0;
   
   srand(time(NULL));
   
   printf("se colocaran %d barcos\n", MAX_BARCOS);
   puts("tablero original\n");
   
   mostrar_tablero(tablero);
   
   for(i = 0; i < MAX_BARCOS; ++i) {
       x = rand() % COLUMNAS;
       y = rand() % FILAS;
       
       if(tablero[y][x] == 0) {
           tablero[y][x] = 1;
           
           printf("\nse colocaron %d barcos\n", ++num_barcos);
           puts("tablero con barcos\n");
           
           mostrar_tablero(tablero);
       }
       else
           --i;
   }
   
   return 0;
}