Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#341

Por cierto amigo engelx, en mi caída te arrastré antes y ninguno pusimos los include de cabecera, lo que nos dice que con la emoción no pusimos atención a los warnings que nos lazaba el compilador. Y es que donde esté un "pique" sanote que se quite todo lo demás.


Código (cpp) [Seleccionar]

#include <stdio.h>
int main (){
   char text[100];
   int i=0,j=0;
   printf("\n Introduce un texto ");
   gets(text);
   while (text[j++]!='\0');
   for(;text[i]==text[j-i-2] && j/2>i++;);
   printf (i>j/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
   return 0;
}


Aunque tengo un while de más, me ahorro la librería string.h y el repetir strlen en tres ocasiones y además, como ya comentaron anteriormente, el código está más optimizado sin calcular tantas veces strlen.

¡¡¡¡ Saluditos! ..... !!!!


#342
Sólo un detalle, el autor del tema quería que el usuario introdujera las minas, de ahí mi propuesta.

Y te recuerdo lo que le comenté a eferion, no se trata de hacerle la tarea al que inició el tema sino de resolverle dudas y orientarlo. Ya luego él debe elegir el camino correcto, de ahí que mis códigos sean casi iguales al de los autores del tema pero funcionales, es decir con los errores corregidos y aclaradas las dudas. Esa es una cosa que me diferencia de otros usuarios, yo suelo contestar con código en lugar de con orientaciones, que la mayor parte de las veces les deja en el limbo, o con enlaces. Como ya comenté una vez, lo que nos parece trivial para algunos, para otros les puede resultar un muro insalvable.

En ningún momento me plantearía resolverlo como propone el autor, ni siquiera tú que indirectamente has seguido mi estela, que era la del autor original, sería "otra cosa".

Otra cosa son las llamadas "aportaciones" que algunos usuario decidan hacer, como es tu caso. Ahí si hay un nivel de exigencia mayor ya que se trata de código propio y se espera de él que esté a la altura de nuestras expectativas.
#343
Cita de: yoel_alejandro en 11 Marzo 2014, 08:33 AM
Totalmente de acuerdo engelx, pero también hay considerar a veces que no sólo el código fuente sea más breve, sino que realmente se ejecute más rápido.

Por ejemplo, usas tres veces el strlen(text) es decir una sobrecarga por llamadas a función. Sería mejor definir una constante y asignarle el valor N = strlen(text), luego usas N. Esto quizá lleve más líneas de código fuente pero se ejecutará más rápido.

Aunque aparentemente sea así, por lo que tengo entendido el compilador se encargará de eso de  forma automática

Ya he comprobado que en otras ocasiones el definir una función como inline no produce las mejoras que se esperan de ello ya que al parecer, aunque no la declares como inline, en ocasiones el compilador hace la misma tarea que al declararla inline.


¡¡¡¡ Saluditos! ..... !!!!



#344
Cita de: yoel_alejandro en 11 Marzo 2014, 04:54 AM
Uy, engelx se me adelantó, justo con la idea de interrupir el ciclo cuando ya se sepa que no es palíndromo. Lo que faltaría es recorrer sólo la primera mitad de la palabra, yeah!!

Pues estrujando un poco más:

Código (cpp) [Seleccionar]

int main (){
   char text[100];
   int  i;
   printf("\n Introduce un texto:\n ");
   gets(text);
   for(i=0;text[i]==text[strlen(text)-i-1] && i<strlen(text)/2;i++);
   printf (i==strlen(text)/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
   return 0;
}


¡¡¡¡ Saluditos! ..... !!!!


#345
Cita de: amchacon en 11 Marzo 2014, 01:58 AM
Eso no funcionaría porque el primer cin lee hasta el espacio. Y como no hay espacio leeria los dos numeros del tirón.

No, pruébalo que funciona. La variable ch se "come" la coma y cada número estará en su sitio. A mí me funcionó.

¡¡¡¡ Saluditos! ..... !!!!


#346
El problema nace con la copia de text, cuando lo que deberías hacer es que text2 sea la copia invertida de text, lo que consigues con la función,. Y ya luego comparar:

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void invertida (char text[],char invertida[]);

int main ()
{
   char text[100], text2[100]={""};
   int j, i;
   printf("\n Introduce un texto ");
   gets(text);
   invertida(text,text2);
   j=strcmp(text2, text);
   if(j==0)
       printf("\n Es un palindromo ");
   else
       printf("\n No es un palindromo ");

printf("\n FIN DEL PROGRAMA \n ");
system("pause");
}

void invertida (char text[],char text2[])
{
   int i, longitud;
   longitud=strlen(text);
   for(i=longitud-1; i>=0; i--)
   {
       text2[i]=text[longitud-1-i];/* AQUI LA COPIAS AL REVES*/
   }
   text2[i]='\0';

}



¡¡¡¡ Saluditos! ..... !!!!







#347
Cita de: amchacon en 10 Marzo 2014, 20:49 PM
Buenas.

Suponte, que quiero leer los números:
Yo haría:

Código (cpp) [Seleccionar]
int numero,numero2;
cin>>numero>>numero2;


Y perfecto. ¿Pero que pasaría si hubiese una coma en lugar de un espacio?
¿Como cambio el delimitador de cin para poder leerlos directamente
?



No sé si es un caso aislado o es una lectura fija, como por ejemplo en la introducción de coordenadas. Si es este último caso valdría:

Código (cpp) [Seleccionar]

.....................................
char ch;
int numero,numero2;
cin>>numero>>ch>>numero2;
cout << numero<<"  "<<numero2<<endl;
..................................



¡¡¡¡ Saluditos! ..... !!!!




#348
Cita de: eferion en 10 Marzo 2014, 17:11 PM
1 En un buscaminas, si abres una mina el programa sabe que ahí hay mina y termina el juego... no te sale un número.

2 La versión que propones incapacita al juego para detectar las minas y las sustituye por números.

3 No digo que esté mal... es otro enfoque... pero yo diría que lo suyo es que el programa conociese en todo momento la ubicación de las minas.

O eso o me estoy perdiendo algo.


Efectivamente, de acuerdo en el primer punto. Por ejemplo en esta situación:

Citar


       *  2  1  *  0

       *  2  *  2  1

       *  1  *  2  *

       1  *  2  1  1

       *  *  *  0  *



si el jugador elige la posición (2,3) ¡¡¡BOOMMM!!!!, salta una mina. Y por qué lo sé, porrque tengo previamente la matriz de las posiciones de las minas, lo que responde a tu segundo punto:

Citar

        1  0  0  0  0

        0  0  1  0  0

        0  0  0  1  0

        0  0  0  0  0

        0  1  0  0  0





Fíjate en la imagen de la respuesta anterior del juego que salen números, como en el mío, casillas levantadas=asteriscos y casillas planas=cuadraditos. Pero lo que yo propongo es un camino para que él termine la tarea, no hacerlo yo todo.

Como ves mi enfoque no está descaminado. como alegas en tu tercer punto.

Pero lo que no iba yo es a hacerle toda la tarea. Quedaba para él guardar la primera matriz, para no perder la situación de las minas originalmente, y usar otra para el engaño, así como el tema de pedir las coordenadas para el juego propiamente.

Tan sólo es un esbozo del juego, aunque creo que me animaré a terminarlo para el nietillo.

Y no, no te estabas perdiendo nada. Era un inicio de la tarea que tenía que realizar xuhipoint , yo sólo pretendía desatascarle el arranque.




¡¡¡¡ Saluditos! ..... !!!!


#349
Cita de: eferion en 10 Marzo 2014, 15:06 PM
Dudo mucho que en el buscaminas puedas encontrar una casilla con el número 9 ( 8 que le rodean más la mina de la propia casilla )



Fíjate en los ejemplos, los números son más bien bajos.

Es un juego y si lo haces entrando a mano las minas "puede" darse el caso, aunque sería tonto ya que declaras a todas las que le rodean como minas. Por eso se eligen las minas más separadas, lo que da como resultado números  bajos para crear mayor incertidumbre.



¡¡¡¡ Saluditos! ..... !!!!



#350
Amigo eferion habrá que repasar el juego del buscaminas y, por favor, no tergiversar o copiar bien el código que cuelgo.

De acuerdo a mi código, un par de mensajes anteriores a este, una salida sería:


Citar
Introduzca la dimension de la matriz: 3

Introduzca numero de minas (numero):2

Colocando la mina : 1
Introduzca fila (1-numero): 1
Introduzca columna (1-numero): 1
       M[1,1]=1


Colocando la mina : 2
Introduzca fila (1-numero): 1
Introduzca columna (1-numero): 2
       M[1,2]=1

                1  1  0

                0  0  0

                0  0  0



                2  2  1

                2  2  1

                0  0  0


               
               2  *  1

               2  2  *

               █  *  *
*



Otro ejemplo:


1  0  0  0  0

1  0  0  0  0

0  0  0  0  1

0  0  0  0  0

0  0  0  0  0



2  2  0  0  0

2  2  0  1  1

1  1  0  1  1

0  0  0  1  1

0  0  0  0  0



2  2  █  █  █

*  2  *  *  *

*  1  █  1  1

*  *  *  *  1

*  █  █  *  █




En la matriz del juego cada casilla se obtiene sumando las minas que tiene alrededor.

La primera matriz anterior es donde están colocadas las minas, la segunda matriz es la que resulta de sumar a cada casilla las ocho, como máximo, que le rodean y la tercera fue una improvisación de ocultar algunas de las casillas. Como ves las matrices tienen toda su lógica con arreglo a las reglas del juego.



¡¡¡¡ Saluditos! ..... !!!!



REEDITADIDO:

Cita de: eferion en 10 Marzo 2014, 13:27 PM
.................................................................
contador += ¿¿que??
A ver, si en Matriz las minas se representan con asteriscos... por qué no buscas asteriscos para contarlos?? la transformación que estás haciendo ahí no tiene ningún sentido. Dicho de otra forma:

'*'-'0' == '#'

¿Te suena el caracter '#' si solo pones una mina? Ya sabes de dónde sale.[/size]

* Los asteriscos no representan las minas sino los 1 de la matriz inicial. Los asteriscos son para ocultar información.

* El cuadrado que sale es porque en el juego parte del tablero no es seleccionable.

* contador+= él más los que tiene alrededor.

*  '#' no es '*'-'0' sino el caracter '35' que xuhipoint estimó coger, no sé por qué diablos lo hizo.


Observar la siguiente captura de un juego del buscaminas:


Se ve que en ciertas casillas salen números, las minas totales de él y los que le rodean, otras casillas están levantadas y serían el equivalente a los ateriscos, hay que seleccionar y que no te estalle una mina y, por último, hay otras casillas que son planas, las que no intervienen en el juego, no se puede picar en ellas, o sí se puede pero no aportan nada.