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 ... 9 10 11 12 13 [14] 15 16 17 18 19 ... 32
261
Buenos días Francisco para poner título a los temas recomendamos seguir las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Al poner un título no descriptivo es más difícil que alguien te responda porque no se sabe sobre qué es la consulta.

Tienes el error en esta línea if(conDescuento = false)

Las comparaciones se hacen con ==, debes escribir if(conDescuento == false)

Puedes ver los detalles de por qué en este curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos

262
Buenos días, tanto tu código como las respuestas a las preguntas son adecuadas.

Señalarte que en el bucle con el for extendido no se recomienda el uso de un contador

Código: [Seleccionar]
        for (Integer valor: lista1) {
            System.out.println ("lista1[" + i + "]= " + valor);
            i++;
        }

Esto se encuentra comentado en https://www.aprenderaprogramar.com/foros/index.php?topic=3210.0

Saludos

263
Hola Pedro, ejercicio interesante y muy bien resuelto por tu parte. En lugar de embeber el código de respuesta javascript en el html, asociamos el código de respuesta cuando se produce el evento onload sobre window, es decir, cuando carga la página. Esto te permite dotar de más independencia al código html. Poco que comentar, hace todo lo que se pedía y bien.

Saludos

264
Hola Dan tratando de explicar lo que ocurre podríamos decir lo siguiente.

La clase login definida con .login tiene un posicionamiento absoluto respecto a su contenedor. Cuando existe el div con id cuerpos, el contenedor del div con class login es el otro div

Cuando no existe el div con id cuerpos, el contenedor del div con class login es el body

Al tener definido para cuerpos un posicionamiento absoluto con un desplazamiento hacia arriba con margin-top de -350px, el div con class login queda oculto fuera de la pantalla (digamos que queda dentro de la parte desplazada).

En este código se ve cómo aparece el div que estaba oculto (anulando algunas reglas css):

Código: [Seleccionar]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Tienda de Videojuegos</title>
    <style type="text/css">
body {
    background-color: black;
    font-family: 'Lucida Console';
    font-size: 25px;
}


#cuerpos{
    position: absolute;
top:10%;
left:49%;
width:500px;
/*margin-left:-500px;*/
height:1300px;
/*margin-top:-350px;*/
border:1px solid #808080;
padding:5px;
    background-color:#0B0B61;
}

.login{
    width:300px;
    height:80px;
    background-color:red;
    border: 5px solid;
    border-color: aliceblue;
    /*margin-left: 680px;*/
    /*position:absolute;*/
}

</style>
</head>
<body>
   <div id="cuerpos">

        <div class="login"> Probando

        </div>
     </div>
</body>
</html>

Realmente el problema está en tu forma de definir estilos en este ejemplo, ya que aparentemente estás haciendo cosas un tanto confusas o difíciles de entender, como desplazar a la derecha usando left:49%; y luego desplazar a la izquierda usando margin-left:-500px; esto no parece "razonable"

Saludos cordiales

265
Tienes razón, creo que el quid está en que la expresión regular establece las condiciones de inicio de la cadena, pero no establece una condición de fin.

El razonamiento sería entonces el siguiente:

inicioHaceMatch + cualquier cosa -- > El test devuelve true

Por ejemplo: ¿Contiene "Adriano es muy guapo y no hace frío" el patrón? : true

Por tanto esta expresión regular obliga a que la cadena comience de una determinada manera, pero puede terminar como sea porque no se establece condición de terminación.

Para establecer una condición de terminación habría que indicarla específicamente, por ejemplo:

 ^a..e$

Cadenas que empiezan por a y terminan con e, y que contienen exactamente cuatro caracteres (la a inicial, dos intermedios, más la e final), aquí si se ha especificado una condición de terminación usando el $

He editado el post anterior, si ves algo erróneo avísame

Saludos

266
Hola Pasandav, todo correcto tanto el código como las respuestas, además tu código es ingenioso porque reunes en un solo bucle todo lo que pide el ejercicio, si ves el resto de respuestas en los foros suele hacerse en dos bucles, pero tú lo has sintetizado, así que ¡perfecto!

Saludos

267
Hola Javier tu código es correcto. Hay un detalle interesante: los métodos set reciben un objeto del tipo que establecen, por ejemplo si es para establecer un String, el set recibe un String. Tu método setMarca es para establecer un tipo Marca pero sin embargo recibe un String. Te recomiendo leer este hilo: https://www.aprenderaprogramar.com/foros/index.php?topic=3140.0 y adaptar tu ejercicio para que tu método set reciba una Marca en lugar de un String, en el hilo que te he indicado está la explicación

Saludos

268
Hola Pedro la expresión /^[A-C]\w+\ses\s\w+/ la leeríamos así:

Cadenas que empiezan por A, B ó C -------- ^[A-C]

Seguidas de uno o más de uno caracteres cualquiera (solo letras o números) -------------- \w+

Seguidas de un espacio en blanco ----------------- \s

Seguida de las letras <<es>> ---------------- es

Seguidas de un espacio en blanco ----------------- \s

Seguidas de uno o más de uno caracteres cualquiera (solo letras o números) -------------- \w+

Seguidas de cualquier cosa, ya que no se especifica una condición de terminación


Y las respuestas:

a) Juan es guapo ------------- No cumple por no empezar por A, B ni C
b) Adriano no es feo ------------ No cumple por tener más de dos espacios en blanco que después del primer espacio no viene <<es>>
c) Adriano deja de ser guapo ------------- No cumple por no contener es
d) Adriano ya es guapo ------------ No cumple por tener más de dos espacios en blanco que después del primer espacio no viene <<es>>
e) No es ahora ------------- No cumple por no empezar por A, B ni C
f) Ahora es no ------------ Sí cumple
g) Adriano es guapo ------------ Sí cumple

El código lo tienes bien pero tienes repetido dos veces "Adriano es guapo"

Saludos

269
Hola Pasandav

Ejercicio bien resuelto, todo bien ya que no se pedía rellenar con código sino solo establecer la organización de las clases

Saludos

270
Hola Pasandav

Tu ejercicio está bien resuelto, todo bien, tanto el código como la respuesta a las preguntas. Usar la clase Math también es correcto si bien en este caso no era estrictamente necesario. Una recomendación: intenta usar nombres de métodos que describan lo que hace el método usando un verbo, por ejemplo getRadio usa el verbo get (aunque sea en inglés, sería "conseguir" u "obtener"). Por eso para el método que devuelve el área del círculo podrías usar getAreaCirculo u obtenerAreaCirculo y lo mismo para la longitud del círculo.

Saludos

271
Hola Pedro en el ejercicio 1 tu código resuelve exactamente lo que se pedía.

Sobre la duda de por qué si colocar miArrayOriginal obtienes siempre la ordenación de menor a mayor, la respuesta que le daría (no lo consideres un 100% seguro) es la siguiente:

La función sort modifica el array sobre el que se aplica, de ahí que en el ejercicio se trabaje con distintas copias, de esta manera lo que se haga con cada copia no afecta a las otras.

Si escribes esto:

Código: [Seleccionar]
deMayorAMenor = miArrayOriginal.sort(function(elem1, elem2){return elem2-elem1;});
deMenorAMayor = miArrayOriginal.sort(function(elem1, elem2){return elem1-elem2;});

Estarías diciendo: deMayorAMenor contiene el array miArrayOriginal (que después de aplicar sort queda de determinada manera)

deMenorAMayor contiene el array miArrayOriginal (que después de aplicar sort queda de determinada manera)

Tanto deMayorAMenor como deMenorAMayor estarían apuntando a lo mismo: al objeto miArrayOriginal. Por eso cuando los muestras por pantalla ves lo mismo, porque están apuntando a lo mismo.

En este caso se trataría de un detalle de la función sort: no te devuelve algo nuevo, sino que modifica el array sobre el que se aplica.

Para el ejercicio 2 había distintas maneras de resolverlo, tú lo has hecho usando localeCompare() que por su definición:

The localeCompare() method compares two strings in the current locale.
The locale is based on the language settings of the browser.
The localeCompare() method returns a number indicating whether the string comes before, after or is equal as the compareString in sort order.


Tu solución funciona bien y ser capaces de resolver problemas que se nos plantean es positivo así que por mi parte lo veo bien.

Saludos

272
Hola Javier tu código y respuestas son perfectas; como indicas el array almacena datos de tipo int (tipo primitivo) mientras que el ArrayList almacena datos tipo Integer (objetos, envoltorio o wrapper del tipo primitivo).

Un saludo

274
No sé, yo lo que veo es que el contenido del parámetro es un texto que pasas tú, por tanto el nombre de parámetro más lógico sería "mensaje", no veo que sea un tipo de profesor ni un tipo de mensaje, simplemente lo veo como una cadena de texto. Pero bueno, está claro que es una simple cuestión de nombres, no veo motivo para darle más vueltas...

Saludos

275
Hola Pedro, lo veo bien planteado y estructurado. En el ej. 1 creas un objeto medicoEspecialista, y eres capaz de acceder al método mostrarNacionalidad() sobre este objeto gracias a la cadena de herencia.

En el ejercicio 2 hay algo que no entiendo. El método saludar lo has definido como

Persona.prototype.saludar = function(tipoProfesor){
            alert('Hola, me llamo ' + this.nombre + ' y trabajo en ' + this.institucionAcademica + tipoProfesor);
         }


Pero después lo llamas como profesorTitular1.saludar(' desde hace ' + profesorTitular1.annosTrabajados + ' años.');

El parámetro tipoProfesor sería (' desde hace ' + profesorTitular1.annosTrabajados + ' años.')

¿Qué tiene que ver eso con un tipo de profesor? No sé si es por los nombres o si cambiaste algo a última hora.


Saludos

276
Hola,

lib.ID_libro AS lib_id se lee así: "De la tabla lib selecciona el campo ID_libro, y en el contexto de esta expresión sql dicho campo de dicha tabla es renombrado como sinónimo como lib_id"

El AS se usa para crear sinónimos dentro de la expresión sql.

Por ejemplo, supón esta expresión:

Código: [Seleccionar]
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Esto da un resultado con tres columnas: OrderID, CustomerName y OrderDate

Se puede reescribir así:

Código: [Seleccionar]
SELECT Orders.OrderID AS ordenes, Customers.CustomerName AS clientes, Orders.OrderDate AS fecha
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Esto da un resultado con tres columnas: ordenes, clientes, fecha (es el mismo resultado pero las columnas están renombradas)

El renombramiento se usa por varios motivos.

Saludos

277
Hola Pedro, todo correcto, bien creada la jerarquía de herencia. Yo hubiera puesto los valores calóricos como numéricos en lugar de como cadenas de texto this.valorCalorico = 45; ya que se trata de valores que podrían usarse en operaciones de cálculo, pero esto en este ejercicio no tiene importancia.

Saludos

278
Hola Pedro

Para el punto a) hay una respuesta aclaratoria en www.aprenderaprogramar.com/foros/index.php?topic=3167 creo que ahí queda explicado este punto

Para  b) con la definición del objeto operaciones que has dado no acabo de ver que sea instanciable, parece que usaras lo que en el curso se indica como definición y creación simultánea de un objeto e indica "con esta sintaxis no se pueden crear objetos adicionales del tipo definido" (no se puede instanciar).

He modificado el código para que quede instanciable:

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<style>
#pulsador {padding:15px; width: auto; display: inline-block; margin: 25px; cursor: pointer; color: yellow; border-radius: 40px; background: purple;}
</style>
<script type="text/javascript">
function plus(x, y){
return x + y;
}
function minus(x, y){
return x - y;
}
function multiplicacion(x, y){
return x * y;
}
function division(x, y){
return x / y;
}

function operaciones (x, y){
this.sumado=plus(x,y);
this.restado=minus(x,y);
this.multiplicado_por=multiplicacion(x,y);
this.dividido_por = division(x,y);
}

function calcular(x,y){
var objOperaciones = new operaciones(x, y);
for(nombrePropiedad in objOperaciones){
alert(x + ' ' + nombrePropiedad + ' ' + y + ' = ' + objOperaciones[nombrePropiedad]);
}
}
function operacionMatematica(){
var x = prompt('Introduce primer número: ');
var y = prompt('Introduce segundo número: ');
calcular(Number(x), Number(y));
var otrox = 6;
var otroy = 2;
calcular(otrox, otroy);
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2></div>
<div id ="pulsador" onclick="operacionMatematica()"> Probar </div>
</body>
</html>

Saludos

279
Hola Pedro, sí que me has entendido bien. Cuantas menos referencias a números concretos tengas mejor, de esa forma el código trabaja "en función de lo que exista en un momento dado" y no de un número concreto. En tu anterior código si alterabas el orden de una fila (por ejemplo en lugar de arándano-cereza-plátano-fresa ponías arándano-plátano-cereza-fresa) ya no funcionaba bien. En cambio con el código actual ya funciona bien. Dejo todo el código unido en un solo archivo para quien quiera probarlo con la última versión que has hecho:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<style type="text/css">
/* Curso CSS estilos aprenderaprogramar.com*/

body {font-family: Arial, Helvetica, sans-serif;}
#tabla1{background-color: #FFFF99; padding: 11px; margin: 45px auto; width: 750px;}
table { width: 700px; text-align: center; border-collapse: collapse; margin: 0 auto; color: #0066FF;}
th {background-color: #0099FF; border-bottom: 1px solid white; color: #3300FF; }
td {padding: 11px; background-color: #00FFFF; border-bottom: 1px solid white; color: #3300FF; border-top: 1px solid white; }
tr:hover td { background-color: #3300FF; color: #00FFFF; }
.botonForm{margin: 11px 22px; background-color: #3300FF; color: #00FFFF;}
.editar{color: #3300FF; cursor: pointer;}
#texto1{margin: 0 22px;}

</style>
<script type="text/javascript">
var datos = new Array();
var enEdicion = true;
var ultimoNodoEditado;
function editarFila(nodo){
var nodoTd = nodo.previousSibling;
if (enEdicion==true){
cambiarEnEdicion(nodo);
creaCajasTexto(nodoTd);
var nodoDiv = document.getElementById('botonesForm');
nodoDiv.innerHTML = '<span id=\'texto1\'>Pulse Aceptar para guardar los cambios o cancelar para anularlos.</span><br/>' +
'<input type=\'submit\' value=\'Aceptar\' class=\'botonForm\'><input type=\'reset\' value=\'Cancelar\' class=\'botonForm\' onclick=\'reiniciarFila()\'>';
enEdicion = false;
}else{
alert('Solo se puede editar una línea. Recargue la página para poder editar.')
}
}
function creaCajasTexto(nodoTd){
var nameForm = ['alimento', 'calorias', 'grasas', 'proteina', 'carbohidratos'];
var instruccion = new Array();
for(var i=0; i<5; i++){
datos[i] = nodoTd.textContent;
instruccion = '<input type=\'text\' style=\'width:70px\' name=\'' + nameForm[i] + '\' value=\'' + nodoTd.textContent + '\'>';
nodoTd.innerHTML = instruccion;
if(i<4){nodoTd = nodoTd.previousSibling;}
}
ultimoNodoEditado = nodoTd;
}
function reiniciarFila(){
var nodoDiv = document.getElementById('botonesForm');
for(var i=4; i>-1; i--){
ultimoNodoEditado.innerHTML = datos[i];
ultimoNodoEditado = ultimoNodoEditado.nextSibling;
}
cambiarEnEdicion(ultimoNodoEditado);
enEdicion = true;
nodoDiv.innerHTML = '';
}
function cambiarEnEdicion(nodo){
if(enEdicion==true){
nodo.textContent = 'En edición';
nodo.style.color = 'gray';
}else{
nodo.textContent = 'Editar';
nodo.style.color = '#3300FF';
}
}
</script>
</head>
<body>
<div id="tabla1">
<form action="https://www.aprenderaprogramar.com" method="get">
<table>
<caption>Contenido nutricional por cada 100g de alimento.</caption>
<tr>
<th>Alimento</th><th>Calorias<br/>(kCal)</th><th>Grasas<br/>(g)</th><th>Proteina<br/>(g)</th><th>Carbohidratos<br/>(g)</th><th>Opciones</th>
</tr>
<tr>
<td>Arándano</td><td>49</td><td>0.2</td><td>0.4</td><td>12.7</td><td class="editar" onclick="editarFila(this)">Editar</td>
</tr>
<tr>
<td>Plátano</td><td>90</td><td>0.3</td><td>1.0</td><td>23.5</td><td class="editar" onclick="editarFila(this)">Editar</td>
</tr>
<tr>
<td>Cereza</td><td>46</td><td>0.4</td><td>0.9</td><td>10.9</td><td class="editar" onclick="editarFila(this)">Editar</td>
</tr>
<tr>
<td>Fresa</td><td>37</td><td>0.5</td><td>0.8</td><td>8.3</td><td class="editar" onclick="editarFila(this)">Editar</td>
</tr>
</table><br/>
<div id="botonesForm"></div>
</form>
</div>
</body>
</html>

Saludos

280
Comunidad / Re:Me presento...
« en: 15 de Octubre 2015, 08:15 »
Hola vicmx, darte la bienvenida a los foros donde nos encontramos personas de multitud de países. Como bien comentas la programación web, aunque tiene en común la base de la programación, tiene sus aspectos concretos bastante distintos a la programación de escritorio.

En este artículo tienes una explicación sobre la formación aconsejada para un programador web: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=702:ique-es-y-que-estudiar-para-ser-programador-web-itinerario-de-formacion-plan-de-estudios-o-de-carrera&catid=39:orientacion-academica&Itemid=189

Recomendamos ir siguiendo los tutoriales disponibles en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86 en este orden: HTML, CSS, JavaScript, PHP.

Esperamos tu participación en los foros tanto en consultas como en respuestas a otros usuarios.

Saludos cordiales.

Páginas: 1 ... 9 10 11 12 13 [14] 15 16 17 18 19 ... 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".