Mostrar Mensajes

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


Mensajes - César Krall

Páginas: 1 ... 47 48 49 50 51 [52] 53 54 55 56 57 ... 68
1022
Aprender a programar desde cero / Re:¿Como empezar?
« en: 04 de Febrero 2014, 09:23 »
Hola, para mejorar las habilidades en programación te daría estas indicaciones:

Para una adecuada comprensión de conceptos recomendamos empezar con pseudocódigo y diagramas de flujo, sabiendo plantear los programas antes de ponerse delante del computador a tratar de desarrollarlos.

Nosotros recomendamos nuestro curso de fundamentos para adquirir la lógica de la programación y las bases necesarias: Curso de fundamentos de programación "Bases de la programación I": https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59

Este curso se ofrece también tutorizado (modalidad de pago en la que cuentas con un tutor que te supervisa).

Si lo empiezas por libre posiblemente te surjan muchas dudas, pero cuenta con que desde los foros intentamos siempre echar una mano en todo lo que se pueda. Es un curso que se puede seguir paso a paso y puedes consultarnos cualquier cosa que no comprendas. Requiere tiempo, pero es que el aprendizaje requiere tiempo, no hay una fórmula mágica que permita convertirse en programador de forma rápida. Saludos.

1023
Aprender a programar desde cero / Re:Duda sobre como empezar
« en: 30 de Enero 2014, 23:12 »
Totalmente acertado, lo adecuado es ir en paralelo con el curso de Visual Basic, no con el de java. En concreto una vez llegues a la entrega CU00136A del curso Bases de la programación ya puedes empezar con el de Visual Basic e ir desarrollando los dos en paralelo, siempre viendo primero los conceptos en el curso de Bases de la programación y luego viendo la aplicación práctica con el curso de Visual Basic.

1024
Aprender a programar desde cero / Re:Duda sobre como empezar
« en: 30 de Enero 2014, 19:19 »
Hola, para empezar o aprender a programar desde cero te recomendaría que le eches un vistazo a mensajes existentes en los foros sobre el mismo tema y que leas los artículos de la sección "Cómo empezar" a los que puedes acceder desde este enlace: https://www.aprenderaprogramar.com/index.php?option=com_content&view=section&layout=blog&id=4&Itemid=18

Sobre el lenguaje recomendamos empezar con pseudocódigo y diagramas de flujo. Si hubiera que elegir un lenguaje para empezar este no sería Java, ya que es un lenguaje orientado a objetos con un grado de dificultad añadida.

Nosotros recomendamos empezar por aquí: Curso de fundamentos de programación "Bases de la programación I": https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59

Este curso se ofrece también tutorizado (modalidad de pago en la que cuentas con un tutor que te supervisa).

Si lo empiezas por libre posiblemente te surjan muchas dudas, pero cuenta con que desde los foros intentamos siempre echar una mano en todo lo que se pueda. Saludos.


1025
De todo un poco... / Re:devolucion y cambio
« en: 26 de Enero 2014, 21:49 »
Hola, NULL puede tener distintos significados en java. Uno de ellos es que un objeto que has creado no tiene contenidos válidos o no ha sido inicializado a contenido alguno.

Te copio "la definición": La palabra clave null indica que un objeto se encuentra vacío, carente de contenido. Esto puede deberse a que no se ha inicializado, a que su contenido ha sido eliminado usando una instrucción del tipo nombreDelObjeto = null;, o a otros motivos.


Si te fijas como atributo de la clase cambio tenemos private static String fichero_salida = null;

El atributo es static (de clase) y se está inicializando como null (vacío).


Suponiendo que invocamos con estos atributos: "-t","-h", "datosCambio.txt","resultadosCambio.txt"

lo que veo que hace el programa es

1) Comprobar si hay atributos (suponiendo que usamos if(args.length>=1) )

2) Recorrer los atributos de entrada almacenados en el vector args y reconocer si viene una h, una t, un nombre de fichero de entrada y/o un nombre de fichero de salida.

3) Si hay fichero de entrada lee los datos y los guarda en el ArrayList lista

4) Crea un String denominado resultado que llama al método calcularCambio y le pasa como parámetro el ArrayList lista

5) El método calcular cambio hace return fichero_solucion; siendo fichero_solucion un atributo de clase, tipo String, que no se ha inicializado y por tanto contiene null. Por tanto resultado contiene null (¿qué significado tiene el uso de este atributo denominado fichero_solucion?)

6) Se invoca guardarSolucion(fichero_salida, resultado);

7) En el método se escribe bufferedWriter.write("resultado: "+ resultado); y como resultado vale null, aparece por pantalla resultado: null


1026
De todo un poco... / Re:devolucion y cambio
« en: 25 de Enero 2014, 12:47 »
Sí, te has explicado bien, lo que te preguntaba es si tú esperabas que este método hiciera algo:

    private static String calcularCambio(ArrayList<String> lista) {
        // TODO Auto-generated method stub
        return fichero_solucion;
    }

Porque a mí la impresión que me da es que no hace nada (o al menos no me parece que haga nada útil), pero no sé si tú estabas suponiendo que debía hacer algo.

De cualquier forma voy a mirarlo con más calma cuando pueda. Saludos.


1027
De todo un poco... / Re:devolucion y cambio
« en: 24 de Enero 2014, 09:54 »
He comenzado a revisar y como primera cuestión me he encontrado la siguiente:

    public static void main(String[] args){
        if(args.length<=1){

      ... aquí se trata de hacer una identificación de los argumentos que recibe el método main


}


La cuestión es: args.length representa el número de elementos en el array de parámetros que recibe el método main y que se supone que indican los parámetros de ejecución. Si pones args.length <=1 (estás considerando el caso de que vengan 0 ó 1 argumentos) después no tiene sentido que trates de comprobar qué parámetros son los que vienen, porque si entras en ese if significa que te vienen cero o un parámetros para ejecutar el programa. Entiendo que lo mínimo que necesitas es 1 argumento que será -h para pedir la ayuda, lo siguiente mínimo serán 2 argumentos que serán el fichero de entrada y el fichero de salida. args.length te devuelve el número de argumentos y no el índice máximo del array args, quizás ahí esté la confusión.

Supongamos un array mesa que tiene como elementos mesa[0] y mesa[1]. Entonces mesa.lenght te devuelve 2 porque es el número de elementos de que consta el array, a pesar de que el índice máximo dentro del array sea 1.


Supongamos que cambiamos la condición por if(args.length>=1){ ...

si sigo la traza de ejecución llegaríamos a String resultado = calcularCambio(lista); y si buscamos este método encontramos:

    private static String calcularCambio(ArrayList<String> lista) {
        // TODO Auto-generated method stub
        return fichero_solucion;
    }

La pregunta es: ¿qué hace el método calcularCambio?


1028
De todo un poco... / Re:devolucion y cambio
« en: 23 de Enero 2014, 23:24 »
Ahora sí entró bien el código. Tengo que mirarlo con calma porque esto no se puede revisar en cinco minutos... iré comentando cuestiones a medida que lo vaya viendo. Saludos.

1029
De todo un poco... / Re:devolucion y cambio
« en: 23 de Enero 2014, 08:41 »
Hola, nuevamente problema con el código al pegarlo, no pasa nada, te indico nuevamente cómo se debe hacer para insertar código. Te lo indico paso a paso para que no haya dudas:

1) Inicia sesión en el foro
2) Sitúate en este último mensaje y pulsa sobre el icono "Responder"
3) A continuación te aparece el editor donde escribir. En la parte de encima del editor aparecen distintos iconos.
4) Escribe el texto que quieras, por ejemplo "Hola, aquí adjunto el código:"
5) Pulsa enter dos veces para dejar una pequeña separación
6) Pulsa el icono con un símbolo # que tienes entre los iconos que aparecen encima del espacio donde se escribe. Cuando pulsas ese icono, te aparecerá en el espacio donde se escribe [code ] [/ code]
7) Pega el código justo en medio de esas dos etiquetas, por ejemplo [code ] public class Test () { ... etc ... etc ...[/ code]
8 ) Pulsa "Previsualizar". Al ver el mensaje debes comprobar que el código aparece así:
Código: [Seleccionar]
public class Test ()
línea 1
línea 2
etc.
etc.
etc.

9) Si todo está correcto, pulsa "Publicar". Si hay algo incorrecto, cambia lo que sea oportuno en el editor y vuelve a pulsar previsualizar tantas veces como sea necesario hasta que todo esté correcto.

He intentado explicarlo lo mejor posible, si tienes algún problema avísame. Saludos!



1030
De todo un poco... / Re:devolucion y cambio
« en: 22 de Enero 2014, 22:34 »
Hola Olga, al poner el código como texto hay determinadas partes que el editor toma como etiquetas y no queda correctamente escrito (por eso lo he borrado de tu anterior mensaje, ya que quedó ilegible). Para insertar el código haz lo siguiente: pulsa el icono # del editor del foro. Cuando lo haces, te aparecerán las metaetiquetas [ code] [ / code] . A continuación escribe el código dentro de esas metaetiquetas, así el editor no te introducirá cambios, sino que el código quedará "tal cual". Ejemplo:

Código: [Seleccionar]
line1
line2
for int i = 0; i<10; i++
etc.
etc.

No he mirado el código por lo que te he comentado, esperaré a ver si lo puedes poner como te he indicado, no obstante hay una primera cosa que llama la atención. ¿Por qué tienes desarrollado el programa en una sola clase java? ¿No sería más lógico usar varias clases?

Por otro lado indicas que no usas estrategia voraz, ¿qué estrategia es la que aplicas?



1031
He vuelto a revisarlo y creo que aunque los problemas anteriores están relacionados el que mejor se ajusta a lo que te piden es otro problema conocido: "El problema del viajante de comercio". El enunciado de este problema es aproximadamente este: Sean N ciudades de un territorio, el objetivo es encontrar una ruta que, comenzando y terminando en una ciudad concreta, pase una sola vez por cada una de las ciudades y minimice la distancia recorrida por el viajante.

La distancia entre cada ciudad viene dada por la matriz D: N*N, donde d[x,y], representa la distancia que hay entre la ciudad x y la ciudad y.

En tu caso podemos considerar que tienes 6 ciudades (6 puntos, uno que es donde se encuentra el taxi al que podemos denominar punto 0 y 5 puntos que es donde tienes que dejar a los viajeros que podemos denominar punto 1, punto 2, punto 3, punto 4 y punto 5).

Las distancias entre ciudades o puntos se pueden representar en un matriz como esta. Un 0 indica que del punto a sí mismo no hay distancia. Un 999 indica que las dos ciudades no están conectadas directamente por lo que simplemente ponemos una distancia muy grande. Entre el punto 0 y el punto 1 hay una distancia de 140 kms, mientras que entre la ciudad 4 y la 5 hay una distancia de 178 kms.


  -     0   1   2   3   4   5
  0     0140110150120160
  1    -  019099988999
  2    -     -077999999
  3    -     -   -   099966
  4    -     -   -   -   0178
  5    -     -   -   -   -   0

La segunda parte de la matriz no la rellenamos porque es simétrica, es decir, de la ciudad 1 a la 3 hay la misma distancia que de la 3 a la 1.

Ahora nos preguntamos. Partiendo del punto 0, ¿cuántos puntos puedo elegir para visitar (teóricamente)? Cinco puntos. Una vez elegido el primer punto, ¿cuántos puntos puedo elegir para visitar? Cuatro puntos (ya que no puedo volver a ningún punto por el que hubiera pasado previamente). Esto significa que para visitar las dos primeras ciudades o puntos puedo elegir entre 5*4 = 20 posibilidades distintas.

Al final resulta que para visitar los cinco puntos puedo elegir entre 5*4*3*2*1 posibilidades, que son 120 posibilidades, esto se expresa en matemáticas como 5! (5 factorial).

Y esto gracias a que tenemos el punto de origen definido (el taxi). Si tuviéramos que elegir también el punto de partida el número de posibilidades sería 6*5*4*3*2*1 (6 factorial).

Aunque no es una solución eficiente, para resolver el problema tendremos que comprobar el coste de todas las posibles combinaciones de formas de visitar puntos. Es decir, tendremos que evaluar como posibles itienerarios (dado que ya tenemos fijo que partimos del punto 0):

0123450: para este itinerario la distancia a recorrer es d[0,1] + d[1,2] +d[2,3]+d[3,4]+d[4,5]+d[5,0]
0213450
0312350
0412350
0512340
0132450
0142350
0152340
0213450
0231450
0241350
0251340
0312450
...
...
así hasta 120 posibilidades

Entre esas 120 posibilidades, hay que elegir la que suponga una menor suma de distancias.

1032
He revisado el programa del maratón y obviamente la presentación está mucho mejor ahora que como estaba antes, aunque los cálculos sean los mismos.

Los cambios que te sugiero (hacerlos o no queda a tu criterio) son:

- En el primer recuadro poner como encabezado ENUNCIADO EJERCICIO 1 (en vez de Programa 1: (Ejercicio 1): )

- Para crear un poco de margen y que no queden los textos pegados a los bordes introduce esta regla CSS:

body,td,th {
   font-family: Times New Roman, Times, serif;
   padding:10px;
}

- En vez de tener recuadros separados "Formulario de ingreso Maratón" y después otro recuadro con los datos, deja eso en un mismo cuadro cuyo encabezado diga FORMULARIO DE INGRESO DE DATOS MARATÓN.

- Presenta los resultados en una tabla o cuadro (igual que pides datos de ingreso en una tabla, puedes presentar los resultados en una tabla) cuyo encabezado diga RESULTADOS. A su vez, puedes subdividir la tabla en dos filas, una que sea Datos recibidos y otra Resultados. La presentación de los resultados tal y como la tienes ahora mismo no se ve con buena presentación (al menos esa es mi opinión). También corregiría el texto que ahora dice Esta Seleccionado para el Maraton de La Yaguara por Está seleccionado para el Maratón de La Yaguara (es decir, poner bien las tildes, mayúsculas y minúsculas, etc.). Saludos.


1033
El problema que indicas se parece mucho a un problema tipo "camino de coste mínimo" que se resuelve con un algoritmo bien conocido: el algoritmo de Dijkstra. También hay otro algoritmo que podría tener cierta similitud: el algoritmo de Prim (o alternativamente el de Kruskal) para determinar árboles de recubrimiento mínimo en grafos.

Aquí tienes una imagen que explica cómo se resuelve el algoritmo de Dijkstra. Puedes considerar que el punto 1 es el punto donde se encuentra el taxi, mientras que los puntos 2, 3, 4, 5 y 6 son los puntos de destino de los viajeros, es decir, los puntos a los que debe llegar el taxista recorriendo la mínima distancia posible. En realidad el algoritmo no está planteado para visitar todos los nodos, sino para ir de un nodo a otro con el coste mínimo (en la imagen el objetivo es ir del nodo 1 al 5 con coste mínimo). Esto podría modificarse para una vez alcanzado el nodo de destino, fijar como nuevo destino un nodo no visitado... y así hasta visitarlos todos.


Si te fijas en la imagen verás la lógica del algoritmo. Los nodos se dividen en dos grupos: por una lado los que ya están en el recorrido (seleccionados) y por otro lado los que todavía no están en el recorrido. Inicialmente el único nodo en el recorrido es el nodo 1. Desde el punto 1 se evalúan los nodos adyacentes que no estén en el recorrido y se elige aquel que se encuentra a una menor distancia. Ese nodo pasa a ser el nodo actual y ya forma parte del conjunto de nodos del recorrido. Seguidamente se repite el proceso, siempre hay que tener en cuenta qué nodos están en el recorrido y cuáles no ya que no puedes volver a tomar un nodo que ya esté en el recorrido.

El algoritmo de Prim (o el de Kruskal) lo que te dice es dado un conjunto de nodos, cuál es el conjunto de aristas o conexiones entre nodos que suman el coste mínimo. En esta imagen se ve:


De todas formas antes de plantear el algoritmo pienso que debe estar claro cuáles son los datos del problema. Tal y como yo lo veo los datos sería las distancias entre los puntos que se ven en la imagen que pongo como archivo adjunto (mira ese archivo), es decir, tendrías 10 datos de distancias. Con esos 10 datos de distancias, tendrías que definir cuáles son los movimientos que debería hacer el taxista para recorrer la menor distancia posible.

Si se confirma que estos son los datos, a partir de ahí puedes empezar a pensar en el algoritmo para solucionarlo.

1034
Te comento algunas cuestiones:

Para trabajar en un lenguaje es importante tener una referencia, ayuda o guía del lenguaje. Creo que esto puede servir para Turbo Basic: http://bitsavers.informatik.uni-stuttgart.de/pdf/borland/Borland_Turbo_BASIC_Owners_Handbook_1987.pdf

Ahí puedes mirar cosas como cómo generar aleatorios entre otras.


Indicas que: variables a utilizar Para las X: "A$", Para las O: "B$"

Esto incumple una regla de fundamentos de programación: debe intentarse que una variable describa su contenido o lo que hace. Si yo te digo A$ ¿te digo algo? En cambio si te digo $JugadaActualX ó si te digo $posicionesOcupadasX ó si te digo $numeroDeCoches sí te estoy diciendo algo, te hago más comprensible el programa. Por tanto una recomendación sería que utilices nombres que informen en la medida de lo posible.

Sobre  ¿no te parece muy burócratico o complejo por así decirlo, hacer por cada programa los diagramas de flujo, esquemas, etc?.

Pues sí y no. Te diré que al principio me sirvió mucho para aprender. Cuando adquieres experiencia ya eres capaz de decidir cuándo es necesario y cuándo no. Como te digo, al principio sirve para que un programador se acostumbre a trabajar con los esquemas adecuados. Una vez "interioriza" estas cuestiones en algunos casos ya no resultan necesarias. Yo sigo escribiendo pseudocódigo antes de programar cuando lo que hay que programar tiene cierta complejidad. Ponerse delante del ordenador puede llevar a perder el tiempo, pero eso son cosas que tiene que decidir cada uno y según el problema que esté abordando.

1035
Si quieres hacerlo todo en una puedes hacerlo. Para que los buscadores no te rastreen las páginas que no te interesen puedes usar disallow en el robots.txt

1036
Para probar este ejemplo de código te indico lo que tienes que hacer:

1) Copia en una clase java este código al que denominamos clase "MenuEscribirLeer" y que es la clase con el método main, es decir, la clase ejecutable

Código: [Seleccionar]
import javax.swing.*;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import java.io.*;

public class MenuEscribirLeer {

    public static void main(String[] args) throws IOException{

        String menu="MENU DE Escribir y Leer\n";
        int n1,n2,n3;
        int op=0;

        menu+="1.  Escribir\n";
        menu+="2.  Leer\n";
        menu+="3.  Fin\n";
        menu+="Escoja Opción:\n";

        while (op!=3){

            op=Integer.parseInt(JOptionPane.showInputDialog(menu));

            switch (op){

                case 1:

                ObjetoEscribir objeto1 = new ObjetoEscribir();
                objeto1.crearCodigoEscribir();

                break;

                case 2:
                ObjetoLeer objeto2 = new ObjetoLeer();
                objeto2.crearCodigoLeer();

                break;

                case 3:

                break;

            }
        }

    } // cierre del  public static void main Ojo !!!! //------------------

    public static void escribir ()throws IOException{
        // TODO code application logic here

        String archivo="nombre.txt";
        FileWriter fw=  new   FileWriter(archivo,true);
        BufferedWriter bw=  new BufferedWriter(fw);     
        PrintWriter  pw= new  PrintWriter (bw);

        String nombre="";     
        int sueldo,edad;
        nombre=JOptionPane.showInputDialog("digite nombre");
        sueldo=Integer.parseInt(JOptionPane.showInputDialog("digite sueldo"));     
        edad=Integer.parseInt(JOptionPane.showInputDialog("digite edad"));     

        pw.println(nombre+"--__--"+sueldo+"--__--"+edad+"--__--");

        JOptionPane.showMessageDialog(null,"los datos se guardaron EXCELENTE");
        pw.close();

    }
}

2) Copia en una clase este código al que denominamos clase ObjetoEscribir y que es la que permite escribir datos a un archivo

Código: [Seleccionar]
import javax.swing.*;
import java.io.*;

public class ObjetoEscribir {

    public void crearCodigoEscribir() throws IOException {
        // TODO code application logic here (algoritmo que escribe archivo)

        String archivo="nombre.txt";
        FileWriter fw=  new   FileWriter(archivo,true);
        BufferedWriter bw=  new BufferedWriter(fw);     
        PrintWriter  pw= new  PrintWriter (bw);

        String nombre="";     
        int sueldo,edad;
        nombre=JOptionPane.showInputDialog("digite nombre");
        sueldo=Integer.parseInt(JOptionPane.showInputDialog("digite sueldo"));     
        edad=Integer.parseInt(JOptionPane.showInputDialog("digite edad"));     

        pw.println(nombre+"--__--"+sueldo+"--__--"+edad+"--__--");

        JOptionPane.showMessageDialog(null,"los datos se guardaron EXCELENTE");
        pw.close();

    }
}

3) Copia en una clase java este código al que denominamos clase ObjetoLeer y que es la que permite leer datos desde el archivo

Código: [Seleccionar]
import javax.swing.*;
import java.io.*;

public class ObjetoLeer {

    public void crearCodigoLeer() throws IOException {

        // TODO code application logic here (algoritmo que lee archivo)

        FileReader fr = new FileReader("nombre.txt");
        BufferedReader br=  new BufferedReader(fr);
        String linea="";
        linea=br.readLine();
        while(linea!=null){
            String vector[]= linea.split("--__--");
            JOptionPane.showMessageDialog(null,"Nombre"+vector[0]+"\nsueldo1:"+vector[1]+"\nsueldo1:"+vector[2]);
            linea=br.readLine();

        }
    }
}

4) Para ver cómo funciona, ejecuta (invoca el método main) de la clase MenuEscribirLeer. Cuando lo hagas te aparecerá un menú que te da las opciones 1. Escribir, 2. Leer y 3. Fin. Elegimos escribir y ponemos como nombre Jose, como sueldo 500 y como edad 33. Debe aparecer un mensaje "Los datos se guardaron". Ahora elegimos otra vez escribir y ponemos como datos paco, 233, 53.

En el mismo directorio donde tengamos los archivos java se habrá creado un archivo denominado "nombre.txt" que contendrá esta información:


Jose--__--500--__--33--__--
paco--__--233--__--53--__--

Donde los símbolos --__-- son símbolos delimitadores.

Ahora si elegimos en el menú "Leer" nos mostrará los datos existentes en el archivo.

Aquí tienes de forma aproximada la lógica para manejar archivos de texto, intenta probarlo a ver si te sale. Saludos!


1037
Hola Olga, paso la conversación a un nuevo tema del foro para no mezclar una cosa con otra, desde el nuevo hilo te respondo. Saludos.

1038
He visto lo que tienes hecho y te comento alguna cosa. En primer lugar, que lo más lógico sería que para el jugador el juego ha de ser lo más simple posible. En lugar de indicarle que introduzca una fila a elegir entre 7, 13 y 19 y columna a elegir entre 29, 42 y 53 sería más lógico decirle que elija fila 1, 2 ó 3 y columna 1, 2 ó 3 (luego si tú tienes que transformar esa información ya sería una cosa interna del programa, pero el jugador no tendría por qué conocer esto).

Luego, ¿cómo seguir? Antes de programar tienes que saber lo que quieres hacer, y esto es bueno plantearlo incluso con el computador apagado.

A mí se me ocurre elegir entre alguna de estas opciones:

a) El ordenador juega "tonto" y pone su símbolo buscando la primera casilla libre en el siguiente orden: (7, 29) (7, 42), (7,53) (13, 29) (13,42) (13,53) (19,29) (19,42) (19,53). Si no hay casilla libre el juego ha terminado.

b) El ordenador juega "a suerte" y pone su símbolo eligiendo una casilla al azar. Comprueba si está libre, si lo está pone ahí su símbolo, si no lo está vuelve a elegir otra casilla al azar y continúa repitiendo hasta colocar su símbolo. Hay que ponerle un límite por ejemplo de 100 repeticiones, de modo que si no encuentra casilla libre el juego se de por terminado. Si no se le pone límite el programa podría bloquearse (bucle infinito).

c) El ordenador juega "inteligente" y trata de poner su símbolo buscando obtener tres en raya. Es la opción más complicada de programar.

Primero tienes que decidir cómo quieres hacerlo, luego deberías plantear cómo tiene que ser la lógica sobre un papel, y finalmente, pasar a programarlo una vez lo tengas claro.


1039
Ahora sí lo he entendido, de hecho conocía el juego pero no como "vieja" sino como "tres en raya"  ;D. Voy a mirarlo. Muevo el asunto a un nuevo hilo del foro para no mezclar cosas.

1040
Hola, pienso que lo mejor para SEO sería tener el menú con las 4 opciones y que cada opción lleve a una nueva página (aunque mantengas el encabezado y el pie si quieres). De este forma tendrías 5 páginas y en cada página deberías poner los meta-tags de title y keywords. Es lo más fácil para que los robots de los buscadores como google te indexen correctamente.

Si quieres mantener una sola página cargando contenido desde otra también puedes hacerlo, pero tendrías que quedarte con unos únicos meta-tags de title y keywords, porque aunque intentaras variarlos dinámicamente no creo que los robots de buscadores interpreten esto correctamente.

En caso de tener que dejar ocultas algunas páginas a los buscadores usa el archivo robots.txt, situado en la raíz del sitio.

Para bloquear un directorio escribe en ese archivo: Disallow: /directorioABloquear/

Para bloquear una página concreta:

Disallow: directorioDondeSeEncuentra/NombreDeArchivo_privado.html

o si el archivo está en la raíz simplemente /NombreDeArchivo_privado.html

Saludos.


Páginas: 1 ... 47 48 49 50 51 [52] 53 54 55 56 57 ... 68

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".