Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Solo entra una ves en la funcion, ayuda

Estas en el tema de Solo entra una ves en la funcion, ayuda en el foro de C/C++ en Foros del Web. Pues, estoy haciendo el hundir la flota en C, y nada con la funcion rand() imprimo en la matriz los barquitos, pero entra solo una ...
  #1 (permalink)  
Antiguo 02/09/2008, 03:32
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Solo entra una ves en la funcion, ayuda

Pues, estoy haciendo el hundir la flota en C, y nada con la funcion rand() imprimo en la matriz los barquitos, pero entra solo una vez es decir, yo llamo a la funcion y m imprime el barquito, la llamo otra ve y se muestra lo mismo... pero esque llamo a otra funcion q imprime barquitos de menos o mas casillas y nada, m imprime el anterior..., la verda q no se que puede pasar, ademas, quise poner un bucle para que me hiciera dos veces el barquito, pero nada! aqui les dejo el codigo aver si alguien me puede ayudar


#define M 10
#define N 10
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
time_t time( time_t *time );
int rand( void );

char rellena ( char matriz[][N]){
char cadena[1]=".";
int i,j;
for (i=0; i<M; i++){
for(j=0; j<N; j++){
matriz[i][j]=cadena[0];
}
}
}

char barco_cuatro ( char matriz1[M][N] ){
char cad[1]="#";
int numero, num;
int vert, hor;
do{
srand( time(NULL) );
numero = rand() % 7;
num = rand()%10;
hor = rand()%7;
vert = rand()%2;
}
while ((matriz1[numero][num-1]==cad[0] && matriz1[numero][num+1]==cad[0] && matriz1[numero-1][num]==cad[0] && matriz1[numero][num]==cad[0] && matriz1[numero+1][num]==cad[0] && matriz1[numero+1][num+1]==cad[0] && matriz1[numero+1][num-1]==cad[0] && matriz1[numero+2][num]==cad[0] && matriz1[numero+2][num-1]==cad[0] && matriz1[numero+2][num+1]==cad[0] && matriz1[numero+3][num]==cad[0] && matriz1[numero+3][num-1]==cad[0] && matriz1[numero+3][num+1]==cad[0] && matriz1[numero+4][num]==cad[0]) || ( matriz1[num][hor]==cad[0] && matriz1[num][hor-1]==cad[0] && matriz1[num-1][hor]==cad[0] && matriz1[num+1][hor]==cad[0] && matriz1[num][hor+1]==cad[0] && matriz1[num+1][hor+1]==cad[0] && matriz1[num-1][hor+1]==cad[0] && matriz1[num][hor+2]==cad[0] && matriz1[num+1][hor+2]==cad[0] && matriz1[num-1][hor-2]==cad[0] && matriz1[num][hor+3]==cad[0] && matriz1[num-1][hor+3]==cad[0] && matriz1[num+1][hor+3]==cad[0] && matriz1[num][hor+4]==cad[0]));
{
}

if ( matriz1[numero][num-1]!=cad[0] && matriz1[numero][num+1]!=cad[0] && matriz1[numero-1][num]!=cad[0] && matriz1[numero][num]!=cad[0] && matriz1[numero+1][num]!=cad[0] && matriz1[numero+1][num+1]!=cad[0] && matriz1[numero+1][num-1]!=cad[0] && matriz1[numero+2][num]!=cad[0] && matriz1[numero+2][num-1]!=cad[0] && matriz1[numero+2][num+1]!=cad[0] && matriz1[numero+3][num]!=cad[0] && matriz1[numero+3][num-1]!=cad[0] && matriz1[numero+3][num+1]!=cad[0] && matriz1[numero+4][num]!=cad[0] && vert<=0){
matriz1[numero][num]=cad[0];
matriz1[numero+1][num]=cad[0];
matriz1[numero+2][num]=cad[0];
matriz1[numero+3][num]=cad[0];
}
else if ( matriz1[num][hor]!=cad[0] && matriz1[num][hor-1]!=cad[0] && matriz1[num-1][hor]!=cad[0] && matriz1[num+1][hor]!=cad[0] && matriz1[num][hor+1]!=cad[0] && matriz1[num+1][hor+1]!=cad[0] && matriz1[num-1][hor+1]!=cad[0] && matriz1[num][hor+2]!=cad[0] && matriz1[num+1][hor+2]!=cad[0] && matriz1[num-1][hor-2]!=cad[0] && matriz1[num][hor+3]!=cad[0] && matriz1[num-1][hor+3]!=cad[0] && matriz1[num+1][hor+3]!=cad[0] && matriz1[num][hor+4]!=cad[0] && vert>0){
matriz1[num][hor]=cad[0];
matriz1[num][hor+1]=cad[0];
matriz1[num][hor+2]=cad[0];
matriz1[num][hor+3]=cad[0];
}
}

char barco_tres ( char matriz[M][N] ){
char cad[1]="#";
int numero, num;
int i=0;
int vert, hor;
do{
srand( time(NULL) );
numero = rand() % 7;
num = rand()%10;
hor = rand()%7;
vert = rand()%2;
}
while ((matriz[numero][num-1]==cad[0] && matriz[numero][num+1]==cad[0] && matriz[numero-1][num]==cad[0] && matriz[numero][num]==cad[0] && matriz[numero+1][num]==cad[0] && matriz[numero+1][num+1]==cad[0] && matriz[numero+1][num-1]==cad[0] && matriz[numero+2][num]==cad[0] && matriz[numero+2][num-1]==cad[0] && matriz[numero+2][num+1]==cad[0] && matriz[numero+3][num]==cad[0]) || ( matriz[num][hor]==cad[0] && matriz[num][hor-1]==cad[0] && matriz[num-1][hor]==cad[0] && matriz[num+1][hor]==cad[0] && matriz[num][hor+1]==cad[0] && matriz[num+1][hor+1]==cad[0] && matriz[num-1][hor+1]==cad[0] && matriz[num][hor+2]==cad[0] && matriz[num+1][hor+2]==cad[0] && matriz[num-1][hor-2]==cad[0] && matriz[num][hor+3]==cad[0]));
{
}

if ( matriz[numero][num-1]!=cad[0] && matriz[numero][num+1]!=cad[0] && matriz[numero-1][num]!=cad[0] && matriz[numero][num]!=cad[0] && matriz[numero+1][num]!=cad[0] && matriz[numero+1][num+1]!=cad[0] && matriz[numero+1][num-1]!=cad[0] && matriz[numero+2][num]!=cad[0] && matriz[numero+2][num-1]!=cad[0] && matriz[numero+2][num+1]!=cad[0] && matriz[numero+3][num]!=cad[0] && vert<=0){
matriz[numero][num]=cad[0];
matriz[numero+1][num]=cad[0];
matriz[numero+2][num]=cad[0];
}
else if ( matriz[num][hor]!=cad[0] && matriz[num][hor-1]!=cad[0] && matriz[num-1][hor]!=cad[0] && matriz[num+1][hor]!=cad[0] && matriz[num][hor+1]!=cad[0] && matriz[num+1][hor+1]!=cad[0] && matriz[num-1][hor+1]!=cad[0] && matriz[num][hor+2]!=cad[0] && matriz[num+1][hor+2]!=cad[0] && matriz[num-1][hor-2]!=cad[0] && matriz[num][hor+3]!=cad[0] && vert>0){
matriz[num][hor]=cad[0];
matriz[num][hor+1]=cad[0];
matriz[num][hor+2]=cad[0];
}
return matriz[M][N];
}

char imprimir_tablero ( char matriz1[M][N], char matriz2[M][N]){
int i, j;
printf (" |0123456789\t\t |0123456789\n");
printf ("------------\t\t------------\n");
for (i=0; i<M; i++){
printf ("%d|", i);
for (j=0; j<N; j++){
printf ("%c", matriz1[i][j]);
}
printf("\t\t");
printf ("%d|", i);
for (j=0; j<N; j++){
printf ("%c", matriz2[i][j]);
}
printf ("\n");
}
printf ("\n\n");
}

main (){
int i, j;
char miflota[M][N];
char mistiradas[M][N];
char suflota[M][N];
char sustiradas[M][N];
rellena (miflota);
rellena (mistiradas);
rellena (suflota);
rellena (sustiradas);
barco_cuatro (mistiradas);
imprimir_tablero (miflota, mistiradas);
}


bueno y si ven alguna cosa que se pueda mejorar...pues bienvenida sea la correcion, gracias de antemano
  #2 (permalink)  
Antiguo 02/09/2008, 03:34
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Solo entra una ves en la funcion, ayuda

por cierto, lo que esta en el while y el if-else... es para que el barquito no pise a ninguno o se vaya a otro lao xD, no hace falta que mireis eso, puesto que lo e probado y va perfectamente, el caso esque llamo a la funcion barcos_cuatro y m lo imprime, la segunda ves imprime lo mismo.. y si llamo a la barcos_tres pues m siogue imprimiendo la de cuatro, pasa de mi la funcion vamos, ayuda por favor que lo tengo q terminar esta semana
  #3 (permalink)  
Antiguo 02/09/2008, 04:27
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Solo entra una ves en la funcion, ayuda

sin embargo si llamo a la funcion barcos 3, despoues de la 4 y lo ago cn otra matriz si k lo hace, el problema esque si utilizo la misma funcion dos veces se copia el valor anterior...vamos kreo yo
  #4 (permalink)  
Antiguo 02/09/2008, 09:17
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Solo entra una ves en la funcion, ayuda

si quito srand( time(NULL) ); y la pongo en la funcion main, entra aora en las funciones, pero aveces m imprime todo, aveces m imprime solo un barco...porque pasa esio=?
  #5 (permalink)  
Antiguo 02/09/2008, 17:38
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Solo entra una ves en la funcion, ayuda

lo que pasa es que la llamada a srand( time(NULL) ) inicializa el sistema generador de números aleatorios según el tiempo, pero la función time(NULL) retorna el tiempo en segundos, así que al llamarlo dentro del do{}while las llamadas se hacen antes de que transcurra un segundo por lo que la función time siempre retorna el mismo número lo que causa que la función srand siempre se inicialize igual, lo correcto es solo hacer una llamada a srand( time(NULL) ) en la función main cuando el programa está empezando.

Cita:
aveces m imprime solo un barco...porque pasa esio=?
Hay algunos errores en las funciones que colocan los barcos, específicamente al comprobar la colisión de los barcos, yo he probado la función barco_cuatro y esto es lo que he cambiado para que funcione bien:

Primero cambié el do{}while para comprobar las colisiones de los barcos por lo siguiente:
Código:
bool continuar;
for(;;) {
numero = rand() % 7;
num = rand()%9;
hor = rand()%7;
vert = rand()%2;
continuar=true;
for(int i=0; i<4; i++) { // For de comprobación de colisiones
	if(vert<=0 && matriz1[numero+i][num]==cad[0]) { // Comprobación para el caso de las verticales
		continuar=false; // No se debe continuar, hay que lanzar números aleatorios de nuevo
		break; // Salir del for de comprobación
	}
	if(vert>0 && matriz1[num][hor+i]==cad[0]) { // Comprobación para el caso de las horizontales
		continuar=false; // No se debe continuar, hay que lanzar números aleatorios de nuevo
		break; // Salir del for de comprobación
	}
}
if(continuar) break; // La comprobación de colisiones pasó, se debe continuar
}
y en los if para colocar los barcos comenté la comprobación de colisión:

Código:
if (/* matriz1[numero][num-1]!=cad[0] && matriz1[numero][num+1]!=cad[0] && matriz1[numero-1][num]!=cad[0] && matriz1[numero][num]!=cad[0] && matriz1[numero+1][num]!=cad[0] && matriz1[numero+1][num+1]!=cad[0] && matriz1[numero+1][num-1]!=cad[0] && matriz1[numero+2][num]!=cad[0] && matriz1[numero+2][num-1]!=cad[0] && matriz1[numero+2][num+1]!=cad[0] && matriz1[numero+3][num]!=cad[0] && matriz1[numero+3][num-1]!=cad[0] && matriz1[numero+3][num+1]!=cad[0] && matriz1[numero+4][num]!=cad[0] && */vert<=0){
matriz1[numero][num]=cad[0];
matriz1[numero+1][num]=cad[0];
matriz1[numero+2][num]=cad[0];
matriz1[numero+3][num]=cad[0];
}
else if (/* matriz1[num][hor]!=cad[0] && matriz1[num][hor-1]!=cad[0] && matriz1[num-1][hor]!=cad[0] && matriz1[num+1][hor]!=cad[0] && matriz1[num][hor+1]!=cad[0] && matriz1[num+1][hor+1]!=cad[0] && matriz1[num-1][hor+1]!=cad[0] && matriz1[num][hor+2]!=cad[0] && matriz1[num+1][hor+2]!=cad[0] && matriz1[num-1][hor-2]!=cad[0] && matriz1[num][hor+3]!=cad[0] && matriz1[num-1][hor+3]!=cad[0] && matriz1[num+1][hor+3]!=cad[0] && matriz1[num][hor+4]!=cad[0] &&*/ vert>0){
matriz1[num][hor]=cad[0];
matriz1[num][hor+1]=cad[0];
matriz1[num][hor+2]=cad[0];
matriz1[num][hor+3]=cad[0];
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:19.