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 - Dimitar Stefanov

Páginas: 1 ... 18 19 20 21 22 [23] 24 25 26 27 28 ... 30
441
A continuación colgaré la solución del ejercicio CU01155E del curso JavaScript desde cero.

Antes de proceder quiero decir que dicho ejercicio coincide con el ejercicio de la entrega CU01142E del mismo curso. Supongo que nos hacen hacer de nuevo el ejercicio porque ahora sabemos más métodos de JavaScript.

Citar
EJERCICIO

Crea un documento HTML (página web) donde exista un formulario que se envíe por el método GET. Se pedirá al usuario que introduzca nombre, apellidos y correo electrónico. Define dentro de la etiqueta form que cuando se produzca el evento onsubmit (pulsación del botón de envío del formulario) se ejecute una función a la que denominaremos validacionConExpReg que no recibe parámetros.

La función validar debe realizar estas tareas y comprobaciones utilizando expresiones regulares:

a) Comprobar que el nombre contiene al menos tres letras. Si no es así, debe aparecer un mensaje por pantalla indicando que el texto no cumple tener al menos tres letras. Por ejemplo si se trata de enviar Ka como nombre debe aparecer el mensaje: “El nombre no cumple tener al menos tres letras”.

b) Comprobar que el correo electrónico contiene el carácter @ (arroba) y el carácter . (punto). De no ser así, deberá aparecer un mensaje indicando que al correo electrónico le falta uno o ambos caracteres. Por ejemplo si se trata de enviar pacogmail.com deberá aparecer el mensaje: “Falta el símbolo @ en el correo electrónico”.

c) Antes de enviarse los datos del formulario a la página de destino, todas las letras del correo electrónico deben transformarse a minúsculas. Por ejemplo si se ha escrito PACO@GMAIL.COM debe enviarse paco@gmail.com

d) Antes de enviarse los datos del formulario a la página de destino, si el correo electrónico contiene la subcadena “ at “ debe reemplazarse por el símbolo @. Por ejemplo si se ha escrito paco at gmail.com debe enviarse paco@gmail.com


Y el código:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="description" content="Curso JavaScript"/>
<meta name="keywords" content="programar,cursos,JavaScript,aprenderaprogramar.com"/>
<link rel="stylesheet" type="text/css" href="CU01142E.css"/>
<script type="text/javascript">

function validar(){
var nodoNombre = document.getElementById('nombre').value;
var nodoApellido = document.getElementById('apellidos').value;
var nodoCorreo = document.getElementById('email').value;
var pattern1 = /\w{3}/;
var pattern2 = /[@]/;
var pattern3 = /[.]/;

if(nodoNombre.match(pattern1) == null){
alert('El nombre no cumple tener al menos tres letras');
}

if(nodoCorreo.match(pattern2) == null && nodoCorreo.match(pattern3) == null){
alert('Faltan los símbolos @ y . en el correo electrónico');
}else if(nodoCorreo.match(pattern3) == null){
alert('Falta el símbolo . en el correo electrónico');
}else if( nodoCorreo.match(pattern2) == null){
alert('Falta el símbolo @ en el correo electrónico');
}

nodoCorreo = nodoCorreo.replace(/at/g,'@');
nodoCorreo = nodoCorreo.toLowerCase();
alert(nodoCorreo);

}

</script>
</head>
<body>
<div id="contenedor">
<form name="formulario1" method="get" onsubmit="validar()">
<h2>Formulario ejemplo cadenas Texto</h2>
<label for="nombre"><span>Nombre:</span><input type="text" id="nombre" name="nombre"></input></label>
<label for="apellidos"><span></span>Apellidos:<input type="text" id="apellidos" name="apellidos"></input></label>
<label for="email"><span>Correo Electrónico:</span><input type="text" id="email" name="email"></input></label>
<label><input type="submit" value="Enviar"></input><input type="reset" value="Cancelar"></input></label>
</form>
</div>

</body>
</html>


Os dejo también el enlace de la solución del ejercicio CU01142E del mismo curso:

https://www.aprenderaprogramar.com/foros/index.php?topic=3935.msg16672#msg16672

Gracias

442
Buenas tardes, aquí pongo una posible solución del ejercicio CU01154E del curso JavaScript desde cero.

Citar
EJERCICIO

Dada la expresión regular de JavaScript /^[A-C]\w+\ses\s\w+/ indicar cuáles de las siguientes cadenas hacen match con la expresión regular, y en caso de hacer match, qué parte o partes son las que hacen match:

a)  Juan es guapo

b) Adriano no es feo

c) Adriano deja de ser guapo

d) Adriano ya es guapo

e) No es ahora

f) Ahora es no

g) Adriano es guapo

Y el código:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function ejemplo(){
var miExpReg = /^[A-C]\w+\ses\s\w+/;
var msg = 'Patrón: ^[A-C]\w+\ses\s\w+]\n';
var texto = ['Juan es guapo','Adriano no es feo','Adriano deja de ser guapo','Adriano ya es guapo','No es ahora','Ahora es no','Adriano es guapo'];
for(var i=0;i<texto.length;i++){
msg = msg + 'El valor del método match para el texto ' + [i+1] + ' es: ' +texto[i].match(miExpReg) + '\n';
}
alert(msg);
alert('Como vemos, sólo los últimos 2 arrays cumplen con el patrón.');
}
</script>
</head>
<body>
<div id="cabecera">
<p>El patron: /^[A-C]\w+\ses\s\w+/ significa que la subcadena de texto tiene que empezar por A, B o C, le tiene que seguir uno o más caracteres (sólo números o letras), seguido de un espacio en blanco, después de las letras "es", otro espacio en blanco y seguido de uno o más carácteres cualquier (letra o número). </p>
</div>
<div style="color:blue; text-align: center;" id ="pulsador" onclick="ejemplo()"> Probar Ejercicio</div>
</body>
</html>

Gracias.

443
Ai, es verdad, que tonto que soy. Tienes razón Pedro. Tengo que cambiar el texto.

Por cierto, ya lo dije al colgar el ejercicio, pero para el segundo código el mérito es de "pedro,," y no mío. Lo que he hecho es copiarle el código  :-[

444
Buenas, bermartinv.

Realmente quería poner este alert sólo en el código inicial, para entender cómo funciona el operador condicional ternario.

El código así puesto:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la htmlADevolver+colorUsuario vale: '+(htmlADevolver+colorUsuario);
alert(msg);
htmlADevolver+= colorUsuario ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color</h1>';
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

entiendo que quiere decir: la variable "htmlADevolver" no vale nada, y si en variable "colorUsuario" tampoco metemos nada, la condición es: htmlADevolver += colorUsuario ?, lo que yo interpreto que es: htmlADevolver = htmlADevolver + colorUsuario ?, lo que sería (en el caso que no metamos nada en "colorUsuario") nada = nada + nada. Es decir, se debería de iniciar la primera opcion:
Código: [Seleccionar]
'<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>' y no la segunda. Pero pasa justamente lo contrario, se ejecuta la segunda. No lo entiendo.

445
Gracias, bermartinv.

Creo que me ha quedado claro el tema. De todas maneras, si tengo más dudas, os lo preguntaré, que me he dado cuenta que sois personas amables y puedo contar con vuestra ayuda.

Sólo una cuestión, en el código siguiente (que es de tu enlace):

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<script>
   
function persona(nombre){
    this.nombre = nombre || 'desconocido';
    this.saludar = function(mastexto){
        alert ('Te saluda ' +this.nombre+ ' que trabaja en '+this.institucionAcademica+mastexto);
    }
}
persona.prototype.definicion = 'Una persona es un ser vivo que tiene conocimiento';
   
function profesor(institucionAcademica,nombre){
    this.institucionAcademica = institucionAcademica || 'desconocida';
    persona.call(this,nombre);
}
profesor.prototype = new persona();
   
function profesorInterino(mesesContrato,institucionAcademica,nombre){
    this.mesesContrato = mesesContrato || 0;
    profesor.call(this,institucionAcademica,nombre);
}
profesorInterino.prototype = new profesor();

function profesorTitular(anyosTrabajados,institucionAcademica,nombre){
    this.anyosTrabajados = anyosTrabajados || 0;
    profesor.call(this,institucionAcademica,nombre);
}
profesorTitular.prototype = new profesor();


function crearObjeto(){
    profesorTitular1 = new profesorTitular(8,'Universidad de Leon','Juan');
    alert(profesorTitular1.definicion);
    profesorTitular1.saludar(' y lleva '+profesorTitular1.anyosTrabajados+' anyos trabajados');
}

    </script>
</head>
<body>
   <button onclick="crearObjeto()">Profesor Titular</button>
   
</body>
</html>

En la función:

Código: [Seleccionar]
function profesorInterino(mesesContrato,institucionAcademica,nombre){
    this.mesesContrato = mesesContrato || 0;
    profesor.call(this,institucionAcademica,nombre);
}
profesorInterino.prototype = new profesor();

de dónde se le pasa la información de las variablels "institucionAcademica" y "nombre"?
Al principio, al crea el objeto "new profesorTitular" sólo se le pasas a la misma, pero dentro de ella no llamas a la función "profesorInterino" para pasarle los parámetros. Quiero decir, no debería de ser la función "profesorTitular" así:

Código: [Seleccionar]
function profesorTitular(anyosTrabajados,institucionAcademica,nombre){
    this.anyosTrabajados = anyosTrabajados || 0;
    profesor.call(this,institucionAcademica,nombre);
    profesorInterino.call(institucionesAcademica,nombre);
}

en vez de así:

Código: [Seleccionar]
function profesorTitular(anyosTrabajados,institucionAcademica,nombre){
    this.anyosTrabajados = anyosTrabajados || 0;
    profesor.call(this,institucionAcademica,nombre);
}
 
 
Y en la función "profesorInterino" por qué le pasas un parámetro vacío si lo inicias en la misma funcio? Es decir, no debería de ser así:

Código: [Seleccionar]
function profesorInterino(institucionAcademica,nombre){
    this.mesesContrato = 'valorInicializadoAquí';
    profesor.call(this,institucionAcademica,nombre);
}

en vez de así:

Código: [Seleccionar]
function profesorInterino(mesesContrato,institucionAcademica,nombre){
    this.mesesContrato = mesesContrato || 0;
    profesor.call(this,institucionAcademica,nombre);
}

Ya te digo, bermartinv, no te estoy corregiendo, sino que estoy intentando aclararme el lío que tengo en la cabeza con las herencia.

Además, creo que el concepto de "herencia" no es muy adecuado para este tipo de métodos. Yo le llamaría, más bien, pasarse los parámetros de una función a otra. Y si fuera, realmente, herencias, tal y como está en las entregas, las flechas deberían de apuntar al revés. Me explico. Si le vamos pasando parámetros de la función "profesorTitular" a profesor, no debería de ser más correcto decir que la función "profesor" hereda de la función "profesorTitular" y no al revés? Al fin y al cabo, es la función "profesorTitular" que le pasa la información a la función "profesor" por mucho que en la función "profesor" se inicializa el valor del parámetro pasado, que ya pasa a ser una variable con valor.

No sé si me he explicaco bien

446
Buenas noches. A continuación cuelgo las posibles soluciones de los ejercicios de la entrega CU01153E del curso JavaScript desde cero.


Citar
EJERCICIO 1

Crea un script donde a partir del array [33, 2, 36, 55, 4, 1] se realicen los siguientes procesos:

a) Mostrar el array ordenado de menor a mayor y de mayor a menor usando la función sort y definiendo la función de ordenación de forma anónima, es decir, deberás invocar X.sort(function (…) { … } ) definiendo la función de forma anónima en vez de cómo función con nombre.

b) Crea una variable de nombre deMenorAMayor que contenga el resultado de ordenar de menor a mayor los elementos del array.

c) Crea una variable de nombre deMayorAMenor que contenga el resultado de ordenar de mayor a menor los elementos del array.

d) Muestra por pantalla el array original, la variable deMenorAMayor y la variable deMayorAMenor.


El código:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var miArrayOriginal = [33,2,36,55,4,1];
var deMenorAMayor = [33,2,36,55,4,1];
var deMayorAMenor = [33,2,36,55,4,1];
deMenorAMayor = deMenorAMayor.sort(function(elem1,elem2){return elem1-elem2});
deMayorAMenor = deMayorAMenor.sort(function(elem1,elem2){return elem2-elem1});
var msg = 'El array original es: ' + miArrayOriginal + '\n';
msg = msg + 'Ordenar de mayor a menor es: ' + deMenorAMayor + '\n';
msg = msg + 'Ordenar de menor a mayor es: ' + deMayorAMenor + '\n';
alert(msg);
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue; text-align: center; cursor: pointer;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>


Citar
EJERCICIO 2

Crea un script donde sea posible ordenar palabras por orden alfabético sin tener en cuenta la existencia de mayúsculas o minúsculas. Por ejemplo, declarar var miArray=['Moto', 'soto', 'Abaco', 'abeja', 'Sapo', 'nieve', 'Zumba, 'barco'] y tras ordenar obtener =[ 'Abaco', 'abeja', 'barco', 'Moto', 'nieve', 'Sapo', 'soto', 'Zumba].


Y el código:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var miArray=['Moto', 'soto', 'Abaco', 'abeja', 'Sapo', 'nieve', 'Zumba', 'barco'];
alert(miArray.sort(function(a, b){return a.toLowerCase().localeCompare(b.toLowerCase());}));
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue; text-align: center; cursor: pointer;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>


PD: Para la solución del segundo código me he guiado por la solución del "pedro,,". He buscado un montón de soluciones alternativas, pero la suya ha sido la mejor. Os dejo el enlace de su foro:

https://www.aprenderaprogramar.com/foros/index.php?topic=3422.msg14957#msg14957

En el ejercicio 1 tenía las mismas dudas que "pedro,,", pero después de leer los comentarios en su foro ya se desvanecieron.

Gracias.

447
Solución del ejercicio CU01152E del curso JavaScript desde cero.

Código original:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
htmlADevolver+= colorUsuario ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color</h1>';
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

Preguntas:

Citar
a) ¿Qué significa el operador += que se emplea en el código?

Significa sumar lo siguiente. Por ejemplo, si pone: a+=b es lo mismo que: a=a+b

Citar
b) ¿Por qué usamos [ 0 ] para establecer nodoBody?

Porque  "document.getElementsByTagName('body')" devuelve un Array. Y como sólo existe un elemento con etiqueta "body" y es el primero (más que nada, porque no existen más" y los Arrays siempre se empiezan a contar desde "0", pues para referenciarnos al primer Array con etiqueta "body" tenemos que poner el número del Array [ 0 ].

Citar
c) ¿Qué ocurre si dejamos en blanco la respuesta cuando se pide un color? Razona por qué ocurre esto.

Si no entramos ningún valor a la variable "colorUsuario" el compilador no tendrá ningún valor para poner en la propiedad "background-color", por lo tanto será como no puesta y el fondo del h1 se mostrará como está configurada por defecto por nuestro navegador.

Citar
d) ¿Qué ocurre si escribimos pink cuando nos pide el color? Razona por qué ocurre esto.

Realmente, cuando escribimos en el "prompt" nuestro color (siempre y cuando sea un color válido), este se aplica como color para la propiedad "background-color" de la etiqueta h1. Por eso, cuando ponemos "pink" el JavaScript utiliza el valor de la variable como valor para el "background-color" y lee: "background-color: pink".

Citar
e) Modifica el código para que usando el operador ternario, si el usuario no introduce como color red, yellow o blue aparezca el mensaje ‘No eligió color o el color es no válido’

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la colorUsuario vale: '+colorUsuario;
alert(msg);
htmlADevolver = colorUsuario=='yellow' || colorUsuario=='red' || colorUsuario=='blue' ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color o el color no es válido</h1>';
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

Citar
f) Reescribe el código inicial de partida sustituyendo el condicional ternario por if tradicionales.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la colorUsuario vale: '+colorUsuario;
alert(msg);
if(colorUsuario=='yellow' || colorUsuario=='red' || colorUsuario=='blue'){
htmlADevolver ='<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>'
}else{
htmlADevolver='<h1>No elegió color o el color no es válido</h1>';
}
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

PD: En los apartados "e" y "f" coloqué antes de ejecutarse los cambios en el etiqueta "h1" un alert para comprobar los valores de las dos variables. Lo hice con la finalidad de comprobar si se cumplia la función, pero tampoco lo entendí. Supongo que la variable "htmlADevolver" al estar inicializada como una cadena de texto devuelve "true".

Para resolver los apartados "e" y "f" me he servido con la ayuda del foro de "pedro,," desde el siguente enlace:

https://www.aprenderaprogramar.com/foros/index.php?topic=3416.msg14934#msg14934

Gracias.

448
Cuelgo el código del segund ejercicio:

Recuerdo lo que pedía el ejercicio:

Citar
EJERCICIO 2

Crea un código que represente el siguiente esquema de herencia permitiendo instanciar los subtipos pasándole los parámetros necesarios para inicializar las propiedades de los supertipos. Crea un objeto ProfesorTitular profesorTitular1 al que le pases como parámetros 8 (años trabajados), Universidad de León (institución académica), Juan (nombre),  e invoca el método saludar sobre este objeto.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function Persona(){
this.nombre='Juan';
this.saludar=function(){
alert('Hola, soy '+this.nombre);
}
}
Persona.prototype.definicion='Definicion';

function Profesor(){
this.institucionAcademica='Hospital';
}
Profesor.prototype = new Persona();

function ProfesorInterino(mesesContrato){
this.mesesContrato=mesesContrato;
}
ProfesorInterino.prototype = new Profesor();

function ProfesorTitular(añosTrabajados){
this.añosTrabajados=añosTrabajados;
}
ProfesorTitular.prototype = new Profesor();

function ejemploObjetos(){
var unProfesor = new ProfesorTitular(8);
var unInterino = new ProfesorInterino(9);
unProfesor.saludar(); 
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color:blue;" id ="pulsador" onclick="ejemploObjetos()"> Probar Ejercicio</div>
</body>
</html>

Es así?




449
Gracias por dedicarme tanto tiempo, bermartinv.

Ahora creo que me he enterado (hasta el siguiente ejercicio, que la volveré a liar, jejeje)

Saludos.

450
Creo que lo tengo un poquito más claro. Creo que tiene que ver algo con esto:

Citar
Dado que las propiedades y métodos comunes (“de clase”) en JavaScript se establecen a través del prototipo, usar un mismo objeto como prototipo para los profesores interinos y los profesores titulares nos impediría diferenciar propiedades comunes exclusivas de los profesores interinos y propiedades comunes exclusivas de los profesores titulares. Si el prototipo es un mismo objeto, las propiedades comunes lo serían tanto para profesores interinos como para profesores titulares.

:)

451
bermartinv,

creo que me quieres decir que el código tiene que ser así:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function vegetal(){
this.movilidad = 'ser vivo sin movilidad';
}

function plantaCultivada(){
this.nombreCientifico = 'desconocido';
}
plantaCultivada.prototype = new vegetal();

function hortaliza(){
this.tipoHortaliza = 'indefinido';
}
hortaliza.prototype = new plantaCultivada();
hortaliza.prototype.componentePrincipal = 'Agua';

function tomate(){
this.calorias = 39;
}
tomate.prototype= new hortaliza();


function lechuga(){
this.calorias = 31;
}
lechuga.prototype = new hortaliza();


function zanahoria(){
this.calorias = 45;
}
zanahoria.prototype = new hortaliza();


function ejemploObjetos(){
var tomate1 = new tomate();
alert('La propiedad movilidad del objeto tomate1 es: '+tomate1.movilidad);
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemploObjetos()">Probar Ejercicio</div>
</body>
</html>

pero es que no veo la diferencia entre:

Código: [Seleccionar]
function hortaliza(){
this.tipoHortaliza = 'indefinido';
}
hortaliza.prototype = new plantaCultivada();
hortaliza.prototype.componentePrincipal = 'Agua';

y


Código: [Seleccionar]
function hortaliza(){
this.tipoHortaliza = 'indefinido';
this.componentePrincipal = 'Agua';
}
hortaliza.prototype = new plantaCultivada();

Intenté dibujarme todo lo que me explicaste, pero al ser "tomate", "lechuga" y "zanahoria" subobjetos del objeto "hortaliza", no heredan todos la propiedad "componentePrincipal" del mismo? Sea inicializada en el objeto o como "hortaliza.prototye.componentePrincipal". Uf, debo de ser tonto, porque aún no veo la diferencia  :-[

Saludos

452
Buenas, bermartinv.

Gracias por la explicaciones tan extensa, pero sinceramente, si al principio no se me explican las cosas así, no hay manera de que las entienda, jejeje.

Si no he entendido mal, quieres decir que si yo quiero que una propiedad se quede sin modifcaciones siempre la tendré que poner como sigue:

objetoDeseado.prototype.propiedad = valorDeLaPropiedad;

Y si quiero que se modifique la tendría que inicializar en el objeto como una propiedad específica suya. O no? Madre mía, que lío, jejeje. Pero es lo que dices tú, ahora todo lo veo un lío que no veas, pero luego, espero y deseo, lo veré mucho más claro. Lo mismo me pasaba cuando estudiaba el CSS.

Sobre los esquemas, si vieras, tengo todo el escritorio lleno de papelitos con esquemas, pero aún no hay manera, jejejeje.

Es verdad, podría pasar rápido esta entrega e irme a la siguiente, pero si no la he entendido bien, de que me serviría? Además, creo que es un tema muy importante para poder programar después con JavaScript. Es más, a veces, me da la curiosidad de mirar códigos más complejos (creo que a todos los que nos gusta esto) y veo que allí se pasan datos y parámetros de una función a otro como si no costara, jejejeje.

Así que a repasar el código y a ver donde me he equivocado (otra vez). Pero de desanimar, no me desanimo, al fin y al cabo quien no erra no aprende:)

Saludos y gracias

453
Buenos días.

Aquí dejo las posibles soluciones de los ejercicios de la entrega CU01150E del curso JavaScript desde cero.

Citar
EJERCICIO 1

Crea un esquema de herencia que cumpla con estos requisitos:

a) Un Médico especialista tiene una especialidad y es un tipo de Médico.

b) Un Médico trabaja en un centro de trabajo y es un tipo de Persona.

c) Una Persona tiene un nombre y una nacionalidad. Como método común a todas las personas tenemos mostrarNacionalidad, que muestra un mensaje informando de la nacionalidad.

Se desea crear un objeto de tipo MedicoEspecialista pasándole como parámetros para su creación además de sus propiedades intrínsecas las propiedades que hereda de sus supertipos y sobre este objeto invocar el método mostrarNacionalidad(), que deberá ser reconocido por herencia.

Posible código de este ejercicio sería:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function Persona(centro){
this.centro = centro || 'Desconocida';
}

function PersonaConNacionalidad(nombre,nacionalidad){
this.nombre = 'Juan';
this.nacionalidad = 'del mundo';
this.saludar = function(nacionalidad){
alert('Esta es mi nacionalidad: '+this.nacionalidad);
}
}

function MedicoEspecialista(especialidad,centro,nombre,nacionalidad){
this.especialidad = especialidad;
Persona.call(this,centro);
PersonaConNacionalidad.apply(this,[nombre,nacionalidad]);
}
MedicoEspecialista.prototype = new PersonaConNacionalidad();

function ejemploObjetos(){
var unMedico = new MedicoEspecialista('ortopedia','Hospital del Mar','Joan','del mundo');
alert('Hola, mi especialidad es: '+unMedico.especialidad+' trabajo en: '+unMedico.centro);
unMedico.saludar();
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color:blue;" id ="pulsador" onclick="ejemploObjetos()"> Probar Ejercicio</div>
</body>
</html>

El segundo ejercicio exigía lo siguiente:

Citar
EJERCICIO 2

Crea un código que represente el siguiente esquema de herencia permitiendo instanciar los subtipos pasándole los parámetros necesarios para inicializar las propiedades de los supertipos. Crea un objeto ProfesorTitular profesorTitular1 al que le pases como parámetros 8 (años trabajados), Universidad de León (institución académica), Juan (nombre),  e invoca el método saludar sobre este objeto.

Y la solución que he encontrado es:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function Persona(nombre){
this.nombre=nombre;
this.saludar=function(){
alert('Hola, soy '+this.nombre);
}
}
Persona.prototype.definicion='Definicion';

function Profesor(){
this.institucionAcademica=institucionAcademica;
}

function ProfesorInterino(mesesContrato){
this.mesesContrato=mesesContrato;
}

function ProfesorTitular(añosTrabajados,institucionAcademica,nombre){
this.añosTrabajados=añosTrabajados;
Persona.call(this,nombre)
}
ProfesorTitular.prototype = new Persona();

function ejemploObjetos(){
var unProfesor = new ProfesorTitular(8,'Universdidad de León','Juan');
var unInterino = new ProfesorInterino(9);
unProfesor.saludar(); 
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color:blue;" id ="pulsador" onclick="ejemploObjetos()"> Probar Ejercicio</div>
</body>
</html>

Otra posible solución, creo que sería la siguiente:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function Persona(nombre){
this.nombre=nombre;
this.saludar=function(){
alert('Hola, soy '+nombre);
}
}
Persona.prototype.definicion='Definicion';

function Profesor(){
this.institucionAcademica=institucionAcademica;
}

function ProfesorInterino(mesesContrato){
this.mesesContrato=mesesContrato;
}

function ProfesorTitular(añosTrabajados,institucionAcademica,nombre){
this.añosTrabajados=añosTrabajados;
Persona.call(this,nombre)
}
ProfesorTitular.prototype = new Persona();

function ejemploObjetos(){
var unProfesor = new ProfesorTitular(8,'Universdidad de León','Juan');
var unInterino = new ProfesorInterino(9);
unProfesor.saludar(this,'Juan');
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color:blue;" id ="pulsador" onclick="ejemploObjetos()"> Probar Ejercicio</div>
</body>
</html>

Gracias.


454
Buenos días, Pedro.

Sinceramente, no entendí muy bien qué pedía el ejercicio. He corregido el ejercicio mirando de ejemplo la solución de "bermantinv", tal y como me dijiste.

El código quedaría así:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function vegetal(){
this.movilidad = 'ser vivo sin movilidad';
}

function plantaCultivada(){
this.nombreCientifico = 'desconocido';
}
plantaCultivada.prototype = new vegetal();

function hortaliza(){
this.tipoHortaliza = 'indefinido';
this.componentePrincipal = 'Agua';
}
hortaliza.prototype = new plantaCultivada();

function tomate(){
this.calorias = 39;
}
tomate.prototype= new hortaliza();


function lechuga(){
this.calorias = 31;
}
lechuga.prototype = new hortaliza();


function zanahoria(){
this.calorias = 45;
}
zanahoria.prototype = new hortaliza();


function ejemploObjetos(){
var tomate1 = new tomate();
alert('La propiedad movilidad del objeto tomate1 es: '+tomate1.movilidad);
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemploObjetos()">Probar Ejercicio</div>
</body>
</html>

Sólo una cuestión me queda un poco floja. Qué diferencia hay entre:

Código: [Seleccionar]
function hortaliza(){
this.tipoHortaliza = 'indefinido';
this.componentePrincipal = 'Agua';
}
hortaliza.prototype = new plantaCultivada();

y

Código: [Seleccionar]
function hortaliza(){
this.tipoHortaliza = 'indefinido';
}
hortaliza.prototype = new plantaCultivada();
hortaliza.prototype.componentePrincipal = 'Agua';

No se supone que será lo mismo, para los objetos subtipo, que la la propiedad "componentePrinicpal" este inicializada como una propiedad específica del objeto supertipo que abajo como prototipo del mismo objeto.

Me baso en la teoría donde dice:

Citar
El objeto prototype existe como objeto vacío desde que se crea una instancia. ¿Por qué? Porque JavaScript lo crea en segundo plano, como si incluyéramos dentro del código de la clase la sentencia: prototype = {};

Uf, si ese ejercicio lo tenía mal entendido, el siguiente que colgaré (que será en breve) ni me quiero imaginar como lo he hecho, jejejej:)

Saludos.

455
Buenas tardes.

Aquí dejo el código de la posible solución del ejercicio CU01149E del curso JavaScript desde cero.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function hortaliza(){
this.componentePrincipal='Agua';
this.movilidad='Ser vivo sin movilidad';
}

function tomate(){
this.calorias=39;
this.nombreCientifico='desconocido';
}

tomate.prototype= new hortaliza();


function lechuga(){
this.calorias=31;
this.nombreCientifico='desconocido';
}

lechuga.prototype= new hortaliza();


function zanahoria(){
this.calorias=45;
this.nombreCientifico='desconocido';
}

zanahoria.prototype= new hortaliza();


function ejemploObjetos(){
var tomate1 = new tomate();
alert('El objeto la propiedad tipoHortaliza del objeto tomate1 tiene como valor: '+tomate1.tipoHortaliza);

alert('La propiedad movilidad del objeto tomate1 es: '+tomate1.movilidad);

}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemploObjetos()">Probar Ejercicio</div>
</body>
</html>

Gracias

456
Buenas, bermartinv.

Gracias por revisar el código.

Tienes razón. Utilizo Sublime text 3 y como muchas etiquetas las cierra automáticamente, no me había fijado.

Un saludo.

457
Buenos días, chicos.

Gracias por la ayuda. Pensaba que la propiedad "this.farenheit" no tenía porque declararse y que funcionaría de la misma manera que la propiedad "this.definicionSegunDiccionario". Pero es verdad, la propiedad "this.definicionSegunDiccionario" sí es una propiedad, en cambio, "this.farenheit" está dentro de un método estático y no está declarada anteriormente. Vamos, que no existe.

Sobre lo que me comentaste, bermartinv, no se puede llamar una propiedad desde una función si llamar a la función tambien?

Gracias.

458
Buenas a toda la comunidad.

Aquí dejo una posible solución del ejercicio CU01148E del curso JavaScript desde cero.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderarpogramar.com</title>
<script type="text/javascript">

function meteorito(diametro,temperatura,nombre){
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}

meteorito.definicionSegunDiccionario='Es un meteoroide que alcanza la superficie de un planeta debido a que no se desintegra por completo en la atmósfera. La luminosidad dejada al desintegrarse se denomina meteoro.';
meteorito.obtenerRadio=function(diametro){return diametro / 2;};
meteorito.obtenerTemperaturaFarenheit=function(temperatura){return temperatura+32;};


function ejemploObjetos(){
var meteo=new meteorito(400,690,'Giovanni');
var msg='La definición de un meteorito es: '+meteorito.definicionSegunDiccionario;
msg=msg+'\nEl radio del meteorito: '+meteo.nombre+'es de: '+meteorito.obtenerRadio(meteo.diametro)+'m.';
msg=msg+'\nY su temperatura en Farenheit es de: '+meteorito.obtenerTemperaturaFarenheit(meteo.temperatura)+'F.';
alert(msg);
}

</script>
</head>
<body>
<div id="cabecera" style="text-align: center;">
<h2>Cursos Aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<input style="margin-left: 45%;" type="button" value="Info Meteorito" onclick="ejemploObjetos()"></input>
</body>
</html>

Gracias.

459
Creo que el código debería ser así:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function cometa(diametro,temperatura,nombre){
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}

cometa.prototype=new prototipoCometa();

function prototipoCometa(){
this.difinicionSegunDiccionario='Los cometas son cuerpos celestes constituidos por hielo, polvo y rocas que orbitan alrededor del Sol siguiendo diferentes trayectorias elípticas, parabólicas o hiperbólicas. Los cometas, junto con los asteroides, planetas y satélites, forman parte del Sistema Solar.';
this.obtenerRadio=function(){return this.diametro/2;}
this.obtenerFarenheit=function(){return this.temperatura+32;};

}

function ejemploObjetos(){
var cometa1=new cometa(2000,800,'McNaught');
var cometa2=new cometa(3500,900,'West');
var cometa3=new cometa(5500,1000,'Ikeya-Seki');

alert('El diametro del cometa: '+cometa1.nombre+' es de: '+cometa1.diametro+'m, su tempertarua es de: '+cometa1.temperatura+'ºC. \nTiene un radio de :'+cometa1.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa1.obtenerFarenheit()+'ºF.\n\nLa definición del dicho cometa es: '+cometa1.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa2.nombre+' es de: '+cometa2.diametro+'m, su tempertarua es de: '+cometa2.temperatura+'ºC. \nTiene un radio de :'+cometa2.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa2.obtenerFarenheit()+'ºF.\n\nLa definición del dicho cometa es: '+cometa2.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa3.nombre+' es de: '+cometa3.diametro+'m, su tempertarua es de: '+cometa3.temperatura+'ºC. \nTiene un radio de :'+cometa3.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa3.obtenerFarenheit()+'ºF.\n\nLa definición del dicho cometa es: '+cometa3.difinicionSegunDiccionario);
}
</script>
</head>
<body>
<div id="cabecera" style="text-align: center;">
<h2>Cursos Aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<input style="margin-left: 45%;" type="button" value="Info Cometas" onclick="ejemploObjetos()"></input>
</body>
</html>

Es así?

Por qué en el siguiente código la propiedad "farenheit" devuelve un valor "indefined"?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function cometa(diametro,temperatura,nombre){
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}

cometa.prototype=new prototipoCometa();

function prototipoCometa(){
this.difinicionSegunDiccionario='Los cometas son cuerpos celestes constituidos por hielo, polvo y rocas que orbitan alrededor del Sol siguiendo diferentes trayectorias elípticas, parabólicas o hiperbólicas. Los cometas, junto con los asteroides, planetas y satélites, forman parte del Sistema Solar.';
this.obtenerRadio=function(){return this.diametro/2;}
this.obtenerFarenheit=function(){this.farenheit=this.temperatura+32;};

}

function ejemploObjetos(){
var cometa1=new cometa(2000,800,'McNaught');
var cometa2=new cometa(3500,900,'West');
var cometa3=new cometa(5500,1000,'Ikeya-Seki');

alert('El diametro del cometa: '+cometa1.nombre+' es de: '+cometa1.diametro+'m, su tempertarua es de: '+cometa1.temperatura+'ºC. \nTiene un radio de :'+cometa1.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa1.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa1.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa2.nombre+' es de: '+cometa2.diametro+'m, su tempertarua es de: '+cometa2.temperatura+'ºC. \nTiene un radio de :'+cometa2.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa2.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa2.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa3.nombre+' es de: '+cometa3.diametro+'m, su tempertarua es de: '+cometa3.temperatura+'ºC. \nTiene un radio de :'+cometa3.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa3.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa3.difinicionSegunDiccionario);
}
</script>
</head>
<body>
<div id="cabecera" style="text-align: center;">
<h2>Cursos Aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<input style="margin-left: 45%;" type="button" value="Info Cometas" onclick="ejemploObjetos()"></input>
</body>
</html>

Gracias.


460
Bua, me volvería loco, jejeje.

Ahora que lo pienso y releo lo que pedía el ejercicio.

Citar
EJERCICIO

Define un tipo de objeto Cometa cuyas propiedades de instancia (específicas de cada objeto) sean diametro, temperatura y nombre. La temperatura será un valor numérico que suponemos está en grados centígrados. Como propiedad común a todos los objetos de tipo cometa define definicionSegunDiccionario (que debe contener la definición de cometa según el diccionario) y como métodos comunes obtenerRadio (que debe devolver el radio) y obtenerTemperaturaFarenheit (que debe devolver el valor de temperatura expresado en grados Farenheit).  Crea tres objetos de tipo cometa y comprueba que puedes acceder tanto a las propiedades específicas como a las propiedades comunes y métodos comunes desde cada objeto.

Creo que me he equivocado, porque dice: obtenerRadio (que debe devolver el radio) y yo no lo hago devolver, sino que hago una función que lo calculé. Creo que siempre cuando utilizan el término "devuelve" se tiene que poner en la función "return". O no? No sé, allí me pierdo.

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

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