no se que esta mal

Iniciado por kjg, 1 Diciembre 2016, 06:45 AM

0 Miembros y 1 Visitante están viendo este tema.

kjg

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++

engel lex

muestra una pantalla del programa en ejecución porque tu codigo no es justamente el más facil de leer
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

#2
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;
}