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 - Mario R. Rancel

Páginas: 1 ... 19 20 21 22 23 [24] 25 26 27 28 29 ... 32
461
De acuerdo. Para implementarlo con Visual Basic te aconsejo que utilices la instrucción inputbox cuando tengas que pedir datos como forma de hacer que el bucle se detenga en el momento de petición de datos. Si lo hicieras con textbox, el bucle no se detendrá y tendrías que forzarlo de alguna forma poco ortodoxa.


462
El pseudocódigo que has planteado es correcto y lo puedes dar por bueno.

Lo que al mirarlo he pensado que carece de utilidad es la línea 3. Yo diría que si la eliminas no pasa nada. Revísalo tú y si piensas lo mismo la eliminas. Si piensas que debe mantenerse, mantenla y coméntame el por qué.


Código: [Seleccionar]
1. Inicio
2. RespuestaAcertada=falso
3. Clave=”Albert Einstein”
4. Mientras E <> 3 Hacer y RespuestaAcertada=falso Hacer
4.1 Mostrar “Menú: 1. Intentar averiguar nombre secreto  - 2. Ver pista - 3. Salir”
4.2 Pedir E
4.3 Si E = 1 Entonces
4.3.1 Mostrar “Por favor, introduzca el nombre secreto”
4.3.2 Pedir Clave
4.3.3 Si Clave = “Albert Einstein” entonces
4.3.4 RespuestaAcertada=verdadero
Mostrar “ Has acertado.”
Sino
Mostrar “Has fallado”
FinSi
4.4 Si E=2 Entonces
Mostrar “Es el físico más influyente del siglo XX”
FinSi
Repetir
5. Fin

Sobre la duda "Lo que no entiendo es por qué me pusiste en tus notas la linea Si RespuestaAcertada = verdadero Entonces detrás de la linea Repetir"

Es porque hay varias alternativas para plantear el pseudocódigo, es decir, no hay una sola solución sino muchas soluciones según cómo se plantee el problema. La que yo te proponía era algo similar a esto:

Código: [Seleccionar]
1. Inicio
2. RespuestaAcertada = falso;
3. Clave = “Albert Einstein”
4.   Mientras (E <> 3 y RespuestaAcertada=falso) Hacer  [El bucle se repetirá siempre que E sea distinto de 3 y RespuestaAcertada sea igual a falso. En el caso de que E valga 3 ó de que RespuestaAcertada sea verdadero, el bucle no se repetirá)

Mostrar “Menú: 1. Intentar averiguar nombre secreto  - 2. Ver pista - 3. Salir”


Si E = 1 Entonces
    Mostrar “Por favor, introduzca el nombre secreto”
    Pedir ClaveUsuario
    Si ClaveUsurio = Clave Entonces
        RespuestaAcertada = verdadero
    FinSi
FinSi

Si E=2 Entonces
Mostrar “Es el físico más influyente del siglo XX”
FinSi

[Si E valiera 3 no hay nada que hacer sino dejar que se repita el bucle]

Repetir

[El bucle ha terminado: hay dos posibles motivos para que haya terminado. O bien que el usuario haya acertado la clave, o bien que haya escogido salir. ¿Cómo sabemos qué ha ocurrido? Porque en el bucle tenemos una variable que controla si el usuario ha acertado, la variable RespuestaAcertada. Después de la ejecución del bucle esta variable tendrá un valor según qué haya ocurrido. Ahora tenemos que comprobar qué ha pasado]

Si RespuestaAcertada = verdadero Entonces
Mostrar “ Has acertado, enhorabuena.”
SiNO

Mostrar “Adiós, gracias por utilizar este programa.”
FinSi
Fin

Ambos pseudocódigos son similares. La diferencia está en si durante el bucle una vez detectas que ocurre algo ejecutas ciertas instrucciones estando dentro del propio bucle, o si por el contrario durante el bucle una vez detectas algo guardas esa información de que ha ocurrido algo en una variable, y una vez fuera del bucle compruebas esa variable para saber lo que ha pasado y ejecutas las instrucciones oportunas.

En este caso, lo que ha pasado dentro del bucle lo sabemos a través de la variable RespuestaAcertada. Pero cuando salimos del bucle no sabemos si se ha salido porque se ha acertado la respuesta o porque se ha elegido la opción "Salir". ¿Cómo averiguarlo? Haciendo la comprobación:

Si RespuestaAcertada = verdadero Entonces
    [El usuario acertó]
SiNO
    [El usuario eligió salir]
FinSi

Mira ambos códigos con detenimiento y si te quedan dudas coméntalas para aclararlas.

Saludos.


463
Hola, paso a comentar las cuestiones que habría que tener en cuenta.

- Unload Form no es una forma sintáctica válida en pseudocódigo, en su lugar podrías escribir Finalizar.

- Si se elige la opción 1, habrá que pedir al usuario que introduzca el nombre que él propone, por tanto ten en cuenta la necesidad de dos líneas: una para mostrar un mensaje al usuario y otra para pedir que el usuario introduzca la respuesta y se almacene en una variable, por ejemplo:

Mostrar "Intente averiguar el nombre secreto. Introduzca el nombre: "
Pedir Clave

- Si el usuario acierta el programa debe terminar. Esto debes controlarlo a través del bucle principal mejor que con una instrucción Finalizar.

- Cada instrucción Mientras tiene que tener un cierre (en otra línea del código) con Repetir, de la misma forma que cada Si ... debe llevar su cierre FinSi. Esto independientemente de que exista un SalirMientras, aunque es preferible que no existan SalirMientras porque es una forma de salida anómala de un bucle. Recuerda que el formato es:

Código: [Seleccionar]
Mientras [Condición] Hacer
Instrucción 1
Instrucción 2
.
.
.
Instrucción n

Repetir


- Tienes que probar el pseudocódigo mentalmente. Por ejemplo con tu pseudocódigo voy a probar a entrar al programa y entrar la respuesta correcta. El proceso sería el siguiente: El programa se inicia. Entramos en el bucle Mientras E<>3 ya que E valdrá cero (no establecido). En el bucle se muestra el menú. Se pide al usuario la elección y se almacena en la variable E. Supongamos que elijo la opción 1. Se cumple E=1, ahora Clave = "Albert Einstein". En la siguiente línea comprueba si la clave es Albert Einstein, y como es así, muestra "Has acertado" --- PROCESO ERRÓNEO ¿Por qué muestra has acertado si el usuario no ha introducido una respuesta? --- Con la revisión mental de lo que hace el algoritmo somos capaces de comprobar si funcionará o no, en este caso hemos comprobado que no funcionará bien.

Te doy una estructura de programa para que tú la completes.

Código: [Seleccionar]
1. Inicio
2. RespuestaAcertada = falso;
3. Clave = “Albert Einstein”
4.   Mientras (E <> 3 y RespuestaAcertada=falso) Hacer  [El bucle se repetirá siempre que E sea distinto de 3 y RespuestaAcertada sea igual a falso. En el caso de que E valga 3 ó de que RespuestaAcertada sea verdadero, el bucle no se repetirá)

Mostrar “Menú: 1. Intentar averiguar nombre secreto  - 2. Ver pista - 3. Salir”


Si E = 1 Entonces

[ // Complétalo tú: ¿qué debería ocurrir cuando el usuario elige la opción 1 ]


Si E=2 Entonces
[ // Complétalo tú: ¿qué debería ocurrir cuando el usuario elige la opción 2 ]
FinSi

[Si E valiera 3 ¿hacemos algo o simplemente dejamos que el bucle vaya al comienzo a comprobar si se cumple la condición para repetirse?]

Repetir

[El bucle ha terminado: hay dos posibles motivos para que haya terminado. O bien que el usuario haya acertado la clave, o bien que haya escogido salir. ¿Cómo sabemos qué ha ocurrido? Porque en el bucle tenemos una variable que controla si el usuario ha acertado, la variable RespuestaAcertada. Después de la ejecución del bucle esta variable tendrá un valor según qué haya ocurrido. Ahora tenemos que comprobar qué ha pasado]

Si RespuestaAcertada = verdadero Entonces

[ //Mostrar un mensaje de felicitación]

SiNO

[ // Mostrar un mensaje de despedida, en este caso estamos en la opción de que el usuario eligió la opción 3 para salir del programa ]
FinSi
Fin

Importante: fijarse cómo lo que ha ocurrido en el bucle lo comprobamos después de salir del bucle, no dentro y forzando su finalización de forma no natural.

Inténtalo y responde aquí mismo con la solución que plantees para volver a revisarla, o si no puedes completarlo, comenta dónde están las dudas para irlas resolviendo.

Saludos

464
Hola Sniper, creo que llegas al final del curso Java por lo que más abajo te haré algunos comentarios además de los propios del ejercicio en sí. Este ejercicio en líneas generales lo veo bien, sólo te haré comentarios por si te pueden ser útiles para reflexionar y mejorar.

En la respuesta a la pregunta, donde indicas "esto es lo que podríamos llamar "herencia múltiple", la respuesta la veo correcta pero para expresarlo más claramente veo preferible escribir: "esto es un tipo de relación que se asemeja a la herencia múltiple" (para dejar claro que en Java no existe la herencia múltiple como tal, pero sí algo que se asemeja a la herencia múltiple).

La interface InstalacionDeportiva: código conforme.

La interface Edificio: código conforme.

La clase polideportivo: querrás decir ancho, setAncho, etc. porque hancho, setHancho ¿?

En el método getSuperficieEdificio has escrito return (largo * ancho * altura) * 6; ... supongo que esto lo pones como ejemplo de fórmula que podría aplicarse, pero sin haberle prestado atención, ya que un largo por ancho por altura devuelve un volumen, no una superficie. Más lógico hubiera sido largo * ancho (superficie de un rectángulo), pero esto no era el objetivo del ejercicio...

La clase de test:

Donde has escrito

       InstalacionDeportiva poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
       Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
       PoliDeportivo poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
       Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
       EdificioDeOficinas edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);

Lo más adecuado hubiera sido:

       Edificio poliDeportivo1 = new PoliDeportivo("Felix Sanchez", "100 mts con ballas", 48F, 28F, 50F);
       Edificio poliDeportivo2 = new PoliDeportivo("Estadio Quisqueya", "Baseball", 57F, 32.7F, 60F);
       Edificio poliDeportivo3 = new PoliDeportivo("Club san carlos", "Basketball", 46F, 33F, 50.4F);
       Edificio edificioDeOficinas1 = new EdificioDeOficinas(20, 39.5F, 31F, 55F);
       Edificio edificioDeOficinas2 = new EdificioDeOficinas(35, 56F, 37.3F, 57.9F);

Así es como le sacas partido al polimorfismo. Por los comentarios creo que lo tienes claro, pero conviene aclararlo por si hay personas que lean o revisen el ejercicio y esto les lleve a dudas.

El resto del código poco más que comentar.

En relación al final del curso, creo que puedes estar orgulloso de haber mantenido la constancia para llevar adelante un curso de estas características. También has tenido la suerte de tener moderadores y compañeros que te han dado su apoyo, pero el trabajo y el mérito es tuyo, así que enhorabuena. Por otro lado, por parte de los responsables de la web tenemos que agradecer tu actitud de colaboración, por ejemplo este mensaje de hace un par de meses: https://www.aprenderaprogramar.com/foros/index.php?topic=952.0

También tu algoritmo while(estesVivo) nos ha parecido de lo más acertado... esperamos que tú nos recuerdes al equipo de la web y al resto de personas que han colaborado dándote apoyo conforme dice este algoritmo tuyo. De la misma forma que le hemos planteado a otras personas desde el equipo de moderadores, te planteamos que continúes participando del foro ahora como profesor o tutor de apoyo para personas que se están iniciando, o simplemente para seguir hablando de programación y formación en programación. Con esta línea de trabajo por parte del equipo de la web tratamos de dejar puertas abiertas con vistas al futuro a las personas que destacan por su actitud de colaboración, cosa que sin duda has hecho. Saludos cordiales.

465
Totalmente en lo correcto y perfectamente explicado sniper. Aquí has dicho una cuestión que es importante y que puede ayudar a quienes tengan problemas para comprender la herencia y el polimorfismo:

"Esto porque de manera indirecta mediante la herencia de Class1 en Class2, la Class2 adquiere (hereda) el tipo definido por la Interface"

Trabalenguas decodificado  ;D

466
Hola, la pregunta c2 tiene "su complejidad". La respuesta de sniper la veo correcta, pero quizás debería acompañarse de un comentario en el sentido de que no se puede responder "sí, en cualquier caso", sino "sí, pero sólo en el caso de que la clase que no implemente la interface directamente adquiera el tipo definido por la interface mediante herencia a través de una clase que sí implementa la interface". Dicho así, puede parecer un trabalenguas, quizás lo más fácil para entenderlo es el ejemplo en código que ha puesto sniper. Saludos,

467
Hola, tu ejercicio está perfecto, así que ánimo y adelante con el curso. Saludos,

468
Hola Sniper, he revisado el ejercicio y te dejo mis comentarios por si te sirven de ayuda.

Sobre la pregunta a): tu razonamiento es correcto, pero prueba el siguiente código.


Código: [Seleccionar]
public class test {

    public static void main (String[] Args){

        Vehiculo v1 = new Vehiculo();
        Taxi t1 = new Taxi();
        v1 = t1;
        t1 = (Taxi)v1;
        System.out.println("Ejecuta");
    }
}


Te remito a repasar CU00689B donde dice: Conversión hacia abajo (...) Esto no siempre es posible. El supertipo admite cualquier forma (es polimórfico) de los subtipos: si el supertipo almacena el subtipo al que queremos realizar la conversión, será posible usando lo que se denomina “Enmascaramiento de tipos” o “Hacer Casting” (cast significa “moldear”). Si el supertipo no almacena el subtipo al que queremos convertirlo, la operación no es posible y saltará un error. Ejemplo: ...

Razona tú mismo: ¿el objeto de tipo estático declarado Taxi en el código de ejemplo anterior contiene a un objeto Vehículo en tiempo de ejecución?

¿Responderías ahora sí a la pregunta?



Sobre la pregunta b): correcto.

Sobre la pregunta c): correcto.

Sobre la pregunta d): correcto.

Sobre la pregunta e): correcto. La cuestión del método toString: correcto, has hecho una buena interpretación de cómo java realiza la ligadura de métodos.

Saludos,

469
Sí, ahora veo que lo hicistes con intención, perdona porque no me había dado cuenta  ::)


470
Hola, el código está bien planteado. Sobre el nombre de la clase, lo ya comentado. Sería más adecuado CombinadorDeSubcadenas o algo así en vez de InicialesDePalabras.

Más cosas para que reflexiones sobre ellas:

- Una clase no siempre tiene que tener atributos. En particular si su misión es procesar información que le llega desde fuera es posible que no debamos declarar atributos en la clase. Una clase normalmente tiene atributos, pero puede no tenerlos. Esta clase posiblemente hubiera quedado mejor sin atributos (aunque dependería del diseño global dentro del programa más amplio donde estuviera).

- ¿Estás haciendo un buen diseño de nombres de variables? Por ejemplo escribes palabra1 = 2; ¿Crees que esto describe bien la variable? Una palabra es una cadena de texto, pero tú estás diciendo que es un número. ¿No hubiera sido mejor usar longitudMinimaPalabra1 = 2; ?

Trata siempre de crear un código entendible y eficiente, además de que funcione. Si lo vas practicando con pequeños programas lo irás aprendiendo para cuando tengas que enfrentarte a grandes programas. En estos casos no tiene demasiada importancia, pero para ir mejorando hay que intentarlo...

Saludos,

471
El código está perfecto. Fíjate que aquí: public String getNombre(){return this.nombre;} el uso de this es opcional, ya que no hay parámetro que pueda generar ambiguedad. De todas formas utilizarlo está bien, porque así has dejado claro que te estás refiriendo al atributo.

Saludos,

472
Hola, el código está perfecto, simple y eficiente. Te recomendaría que empieces a acostumbrarte a pensar en cómo nombrar adecuadamente a las clases. El nombre normalmente debe ser descriptivo, en singular, y reflejar lo que representa o hace la clase. En el caso de que la clase represente algo de la vida real será "Rueda" o "Vehiculo", etc. En el caso de que represente algo no real podrá ser "Pensamiento" o "Duda" o "Reunion". Cuando las clases están destinadas más que a representar a realizar procesos, como es este caso, los nombres suelen ser del tipo -or, por ejemplo CombinadorInicialesPalabras, Exponenciador, ConstructorDeMultillaves, ExtractorDeAtributos, ReductorDeFlujo, etc.

En este caso podrías haber usado CombinadorInicialesPalabras: un objeto de esa clase es un objeto que se dedica a combinar iniciales de palabras.

Saludos,

473
Hola, si tienes una clase muy larga adjúntala como archivo pulsando debajo del editor del foro en "Opciones Adicionales".

No veo que te refieras a algo concreto, sino a nivel general a cómo acceder a propiedades o métodos específicos de subclases que no existen en las superclases. 

Podemos fijarnos en este código en concreto:

if (obj instanceof SobreMesa){ ..., pienso que sí puede ser correcto.

O fijarnos en este otro código:

if (((SobreMesa)obj).getDvd()){... una manera por la que podrías ahorrártelo sería definiendo el método getDvd en la superclase y sobreescribiéndolo en las subclases, aunque no sea aplicable a algunas de ellas. En caso de no ser aplicable puedes hacer que el método devuelva null. De ese modo podrías acceder como si se tratara de un método común.

El asunto es que de alguna manera vas a tener que identificar el subtipo concreto con el que estás trabajando o al menos si alguna de sus propiedades y métodos son null: por tanto vas a necesitar condicionales, posiblemente instanceof, posiblemente hacer uso de casting... Por tanto no veo que el enfoque que estás utilizando, a nivel general, sea malo. Sí veo algunas expresiones que parecen excesivamente complicadas y eso suele ser indicativo de mal diseño, pero tampoco puede valorarse sin hacer un análisis detallado que llevaría tiempo.

Esto a nivel general, en cuanto a diseño tendrás que irlo mejorando a medida que vayas adquiriendo más destreza en la programación java.


Nota: Hay un detalle que deberías mejorar al nombrar las clases: en vez de Computadoras, usar Computador. La clase define un tipo y responde a la pregunta ¿de qué tipo es este objeto? Respondemos mejor en singular que en plural: <<es de tipo Computador>>, no <<es de tipo Computadoras>>.

Saludos,

474
En general implementar y usar interfaces conlleva ventajas que se van descubriendo a medida que se profundiza en la programación. Los programadores novatos suelen usar expresiones como ArrayList miLista = new ArrayList(); mientras que los más avanzados en general usarán List miLista = new ArrayList(); para hacer uso de las ventajas del polimorfismo.Fíjate que List es una interface que es implementada por distintas clases (échale un vistazo al api de java si quieres). Los conceptos son un tanto complejos y hay que ir asimilándolos dando un margen de tiempo para que "se vayan asentando". A partir de ahí, creo que vas en la buena línea y es interesante que pruebes código y distintas situaciones como has hecho en este caso. Saludos,

475
Crea el código de las clases, postéalo y revisándolo veremos si se puede hacer de mejor manera de la que estás pensando. Como te digo, el casting sólo debe usarse cuando no hay mejores alternativas de diseño...


476
A) No. Daría "ClassCastException", el compilador no sabe si la variable Vehiculo almacena un taxi o una ambulancia.

La respuesta no es correcta. Te respondo citando el texto del propio curso:

<<Se trataría de poner lo que está arriba abajo, por ejemplo poner un Profesor como ProfesorInterino. Esto no siempre es posible. El supertipo admite cualquier forma (es polimórfico) de los subtipos: si el supertipo almacena el subtipo al que queremos realizar la conversión, será posible usando lo que se denomina “Enmascaramiento de tipos” o “Hacer Casting” (cast significa “moldear”). Si el supertipo no almacena el subtipo al que queremos convertirlo, la operación no es posible y saltará un error.>>

Por tanto sí sería posible (ser posible, es posible).


B)Si --> Correcto



E)El toString si esta sobre escrito
  -- > Correcto

Aclaración: Se ejecuta el método toString() del tipo contenido en el objeto (Taxi) aunque se declarara como tipo Vehiculo
Porque en tiempo de ejecución, el compilador verifica el tipo que contiene el objeto y ejecuta sus métodos, solo si no los encuentra en el tipo instanciado los busca el tipo estático.


Sobre tu razonamiento:

Pero un objeto Persona no puede recibir ni las propiedades ni los metédos de sus clases extendidas o "hijas", a no ser que un objeto declarado Persona he instanciado Mujer, tenga los metédos sobre escritos o hagas un "Molde".

Esto no es correcto: un objeto puede ser de dos tipos al mismo tiempo.

Por ejemplo: Persona p1 = new Mujer();

El objeto p1 es de tipo Persona y de tipo Mujer: por eso se dice que Java hace uso de polimorfismo (distintas formas o tipos para una variable). La sobreescritura de métodos es una cuestión aparte. El objeto p1 tendrá acceso a métodos de Persona si Persona es una superclase (otra opción sería que Persona fuera una interface).

Puedes declarar sin problemas y trabajar sin hacer casting List lista1 = new ArrayList(); ó Persona p1 = new Mujer();

Sólo tendrás que hacer casting en circunstancias muy concretas, como el caso de tratar de poner una instancia de Persona en un objeto de tipo estático Mujer.

A modo de resumen y como recomendaciones prácticas:

- Declara los objetos con el supertipo, por ejemplo List, e instáncialos con el subtipo que desees, por ejemplo ArrayList

- No te preocupes por hacer casting constantemente. Sólo si te saltan errores y en casos concretos


Saludos,

477
Hola toni, las respuestas a), b), c1) y c3) las veo correctas.

En relación a la pregunta c1), tener en cuenta que los objetos pueden tener un tipo estático definido por una interface, pero no un tipo dinámico (es decir, no se puede usar new sobre un tipo definido por una interface porque son definiciones abstractas sin constructor).

La respuesta c2) la veo discutible. Haz la prueba tú mismo: declara una interface Interface1, una clase Clase1 que implemente la interface, y una clase Clase2 que herede de Clase1.

Luego en una clase con el main trata de generar lo siguiente:

Interface1 miVar = new Clase1();

Y compáralo con lo que ocurre si escribieras lo siguiente:

Interface1 miVar = new Clase2();

Creo que a partir de ese resultado tú mismo serás capaz de sacar conclusiones y comentárnoslas.

La respuesta c2) en principio sería que no es posible, aunque si encuentras un contraejemplo habría que revisarla.

Saludos!!!

478
Efectivamente el tipo estático es Profesor, pero el tipo dinámico puede ser otro.

Creo que leyendo CU00690B te quedará más claro: una variable puede ser de más de un tipo a la vez. En concreto hablamos de tipo estático para el tipo declarado y tipo dinámico para el tipo que recibe en tiempo de ejecución.

CU00690B: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=660:sobreescribir-metodos-en-java-tipo-estatico-y-dinamico-ligadura-metodos-polimorficos-ejercicio-cu00690b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Saludos

479
Aprender a programar desde cero / Re:practica CU006342B
« en: 02 de Septiembre 2014, 13:07 »
Hola, en programación las cosas se pueden hacer de muchas maneras. Si te fijas en las observaciones que te había hecho en  el ejercicio CU00641B si te fijas en la forma 1 y forma 2 te puse entre paréntesis (Trabajando con objetos) y en la forma 3 te puse (recibiendo parámetros primitivos)

>>quieres decir que el metodo del fragmento no esta mal pero para acostumbrarme a trabajar con objetos utilice la forma 2?

Exactamente, acostúmbrate a trabajar con objetos.

Has entendido bien y tu definición del código es ahora mejor.

Fíjate que ya que tienes constructores con parámetros podrías hacer:

    public void setCocina (CocinaCasa objetoCocina) {
        cocina = new CocinaCasa(objetoCocina.getEsIndependente(), objetoCocina.getNumeroDeFuegos() );
    }

Pruébalo a ver si te funciona. En caso de que te funcione, piensa que en general será mejor usar dos líneas de código antes que cuatro  ;)

Saludos

480
Hola, el link de la imagen no responde bien, pero cambiando ftp:// por http:// sí he logrado verlo.

No entiendo muy bien cuál es el objetivo, pero aquí te dejo un código para desplazar un texto fuera de su contenedor, en este caso usando dos div, uno externo para envolver y otro interno que se desplaza con el texto, no sé si te servirá

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Curso desarrollo aplicaciones móbiles</title>
<meta charset="utf-8">
<style type="text/css">
*{font-family:arial;}
body{width:800px; border-style:solid; border-color:#DCDCDC; border-width:15px; background-color:#FFAF0; margin:250px 0 0 500px;}
div{margin:15px;}
#cabecera{border-color:red; background-color:#696969; margin:0 15px 15px 15px;}
h1{color:#FF0000; position:relative; left:15px; top:10px;}
h4{color:#F8F8FF; position:relative; left:15px; bottom:15px;}
#columna{width:200px; background-color:#808080; float:right; margin:0 15px 15px 15px;}
#texto{width:550px; margin:15px; padding:3px; background-color:#DCDCDC;}
.bloque{border-style:dotted; border-color:#F8F8FF; border-width:5px; margin:15px; padding:0;}
#pie{border-color:blue; background-color:#696969; color:#F8F8FF; padding:3px;}
#parrafo{position:relative; left:15px;}
.hazDeFondo {position: relative; width: 100%; height:50px; background-color:blue; margin-left:-40px; }

</style>
</head>
<body>
<div id="cabecera">
<h1>CABECERA</h2>
<h4>Subtítulo de la cabecera</h3>
</div>
<div id="columna">
<p id="parrafo">Esta es la columna de la derecha</p>
</div>
<div id="texto">
<div class="bloque">
<div class="hazDeFondo">Esto es Bloque 1.Esto es Bloque 1.Esto es Bloque 1.Esto es Bloque 1.Esto es Bloque 1.Esto es Bloque 1.Esto es Bloque 1.</div>
</div>
<div class="bloque">Esto es Bloque 2</div>
</div>
<div id="pie">
<p id="parrafo">Esto es el pie de página</p>
</div>
</body>
</html>

Páginas: 1 ... 19 20 21 22 23 [24] 25 26 27 28 29 ... 32

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".