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 - pedro,,

Páginas: 1 ... 48 49 50 51 52 [53] 54 55 56 57 58 ... 65
1041
Buenas, otra solución más.

A partir del siguiente código:

Citar
<HTML><HEAD><TITLE>JavaScript Index</TITLE><script Language="JavaScript">
function goback(){alert("Good Bye!");history.go(-1);}
function getthedate() {Todays = new Date();
TheDate = "" + (Todays.getMonth()+ 1) +" / "+ Todays.getDate() + " / " +
Todays.getYear()
document.clock.thedate.value = TheDate;
}
 
var timerID = null;
var timerRunning = false;
function stopclock (){
                if(timerRunning)
                               clearTimeout(timerID);
                timerRunning = false;
}
 
function startclock () { stopclock(); getthedate()
                showtime();
}
 
function showtime () {
                var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes();
                var seconds = now.getSeconds()
                var timeValue = "" + ((hours >12) ? hours -12 :hours)
                timeValue += ((minutes < 10) ? ":0" : ":") + minutes
                timeValue += ((seconds < 10) ? ":0" : ":") + seconds
                timeValue += (hours >= 12) ? " P.M." : " A.M."
                document.clock.face.value = timeValue;
                timerID = setTimeout("showtime()",1000); timerRunning = true;
}
</script>
</HEAD>
<BODY bgcolor="#00FFFF" onLoad="startclock()">
<CENTER><h2>Esto es un reloj hecho con JavaScript</h2>
<table border><tr>
   <td><form name="clock" onSubmit="0"></td>
</tr>
<tr>
   <td colspan=2>Hoy es: <input type="text" name="thedate" size=12  value=""></td>
   <td colspan=2>La hora es: <input type="text" name="face" size=12
           value=""></td></form>
</tr>
</table>
</CENTER>
<hr>
<center>
<h3>
[<a href="http://aprenderaprogramar.com">Volver</a>]
</h3></center></BODY></HTML>

Citar
a) Reescribe el código HTML que presenta distintas deficiencias y no se ajusta a las normas de estilo habituales.
b) Reescribe el código JavaScript para que cumpla con las normas de estilo que hemos estudiado.
c) Corrige el código del reloj para que se vea una mejor presentación y funcione correctamente.
d) Incluye comentarios en el código indicando qué es lo que hacen las diferentes partes del código JavaScript.
e) Como resultado de este ejercicio debes presentar el código con todos los cambios antes mencionados.

Y la respuesta:
Código: [Seleccionar]
<html>
<head>
<title>JavaScript Index</title>
<meta charset="utf-8">
<style>
*{text-align: center;}
.styleClassReloj{
font-size: 44px;
color: white;
background: green;
margin: 0 auto;
border: solid 3px blue;
border-radius: 180px;
width: 300px;
height: 300px;
}
#fecha{
position: relative;
top: 75px;
}
#hora{
position: relative;
top: 100px;
}
.centrado{
margin: 0 auto;
width: 290px;
}
</style>
<script Language="JavaScript">
'use strict';
var timerID = null;
/*Desde window.onload, después de haber cargado el html, se llama a la función
getTheDate() y showTime().*/
window.onload = function(){
getTheDate();
showTime();
}
/*La función getTheDate() crea un objeto Date, y nos muestra la fecha actual.*/
function getTheDate(){
var nodoFecha = document.getElementById('fecha');
var today = new Date();
var theDate = today.getDate() + " / " + (today.getMonth() + 1);
theDate += " / " + today.getFullYear();
nodoFecha.innerHTML = theDate;
}
/*La función showTime() crea un objeto Date, y nos muestra la hora actual de
forma dinámica.*/
function showTime(){
var nodoHora = document.getElementById('hora');
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var seconds = now.getSeconds();
var timeValue = ((hours >12) ? hours -12 :hours);
timeValue += ((minutes < 10) ? ":0" : ":") + minutes;
timeValue += ((seconds < 10) ? ":0" : ":") + seconds;
timeValue += (hours >= 12) ? " P.M." : " A.M.";
nodoHora.innerHTML = timeValue;
timerID = setTimeout('showTime()',1000);
}
</script>
</head>
<body>
<h2 class="centrado">Esto es un reloj hecho con JavaScript</h2>
<div class="styleClassReloj">
<div id="fecha" ></div>
<div id="hora" ></div>
</div>
<h3 class="centrado">
<a href="http://aprenderaprogramar.com">http://aprenderaprogramar.com</a>
</h3>
</body>
</html>

Según las reglas de estilo debería haber colocado el código javaScript en un archivo independiente y el código CSS lo mismo, aunque lo he dejado junto para que sea mas fácil de leer, en este caso el jercicio.

Saludos.

1042
Buen aporte bermartinv, el ejercicio se podía resolver de varias formas.

Si no la vista ya, en este enlace hay otra forma de resolverlo.

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

Saludos.

1043
Buenas, ejercicio CU01190E del curso JavaScript desde cero.

A partir del siguiente código:

Código: [Seleccionar]
<!DOCTYPE html>
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
var x = 'Hola amigos'; // variable global
function ejemplo(){
 alert( x ); // esperamos el valor global
 var x;
 x = 'Saludos desde Costa Rica'; // redefinimos la variable en contexto local
 alert( x );  // esperamos el nuevo valor local
}
</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 </div>
</body></html>

Citar
a) Realiza una prueba pulsando en “Probar”. ¿Qué resultados obtienes? ¿Cómo se explican esos resultados?
El primer alert muestra 'undefined' y el segundo 'Saludos desde Costa Rica'. Esta linea 'var x;' dentro de la función lo que hace es que sobreescribe la variable global 'x', así que al no darle ningún valor a x, toma como valor 'undefined'.

Citar
b) Cambia el código y declara la variable x dentro de la función al mismo tiempo que la inicializas. ¿Qué resultados obtienes? ¿Cómo se explican esos resultados?
Si la linea 'var x;' que se encuentra dentro de la función, la cambiamos por esta 'var x='Hola';'. Se siguen obteniendo los mismos resultados.Sigue dando 'undefined' porque el valor que le damos a x, se lo damos después del primer alert.

Citar
c) De los dos casos anteriores ( a y b ). ¿En cuáles se produce hoisting: en el a), en el b) ó en ambos?
En ambos.

Citar
d) En este caso, ¿el hoisting está afectando a los resultados obtenidos? ¿Por qué? ¿Cuáles serían los resultados de ejecutar estos códigos si no existiera hoisting?
Si. Porque al existir el hosting, provoca que la variable x se sobreescriba nada mas empezar la función. Al ejecutar el código, si no existiera el hosting, se mostraría 'Hola amigos' y después 'Saludos desde Costa Rica'. Esto sucedería así porque el primer alert, mostraría el valor de la variable global x.

Saludos.

1044
Hola Mario.

Gracias a vosotros que nos dais la oportunidad de aprender y poder mostrar lo aprendido en este gran foro.

Gracias también por las felicitaciones, pero aún me queda un poquito para acabar.  ;D. Lastima no tener mas tiempo.

En cuanto a lo de seguir, la idea que tenía era continuar con PhP. Así que Ajax lo dejaré para mas adelante.

Saludos.


1045
Aprender a programar desde cero / Re:Padding y margin CSS. CU01029D
« en: 17 de Febrero 2016, 22:52 »
Hola Lorenzo.

a) No es correcto.

width +margin left+margin right + border-right  + border-left+ padding left  + padding right

250px+ 20px + 20px + 10px + 40px + 60px + 45px = 445px

b) Bien.

c) No es correcto, sería 890px

Saludos.

1046
Hola bermartinv.

En el ejercicio 1, solo decir que no se muestra el array original, porque cuando lo muestras ya lo has ordenado usando sort, para solucionarlo, te valdría con inicializar la variable deMayorAMenor de la misma forma que los otros arrays.
Código: [Seleccionar]
var deMayorAMenor  = [33, 2, 36, 55, 4, 1];y cambiando esta linea:
Código: [Seleccionar]
var deMayorAMenor = miVector.sort(function (elem1,elem2){return elem2-elem1;});por esta:
Código: [Seleccionar]
deMayorAMenor = deMayorAMenor .sort(function (elem1,elem2){return elem2-elem1;});
Y otra cosa sería que has creado dos veces las mismas variables, en estas dos líneas te sobrarían los 'var'.
Código: [Seleccionar]
var deMayorAMenor = miVector.sort(function (elem1,elem2){return elem2-elem1;});
   
    var deMenorAMayor = deMenorAMayor.sort(function (elem1,elem2){return elem1-elem2;});

En definitiva, el código quedaría así:
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<script>
function ordenar(){
    var miVector = [33, 2, 36, 55, 4, 1];
    var deMenorAMayor = [33, 2, 36, 55, 4, 1];
var deMayorAMenor = [33, 2, 36, 55, 4, 1];
    deMayorAMenor = deMayorAMenor.sort(function (elem1,elem2){return elem2-elem1;});
    deMenorAMayor = deMenorAMayor.sort(function (elem1,elem2){return elem1-elem2;});
var texto1 = document.createElement('p');
    document.body.appendChild(texto1);
    texto1.innerHTML= miVector.valueOf();
    var texto2 = document.createElement('p');
    document.body.appendChild(texto2);
    texto2.innerHTML = 'El resultado de ordenar de mayor a menor es : '+deMayorAMenor.valueOf();
    var texto3 = document.createElement('p');
    document.body.appendChild(texto3);
    texto3.innerHTML= 'El resultado de ordenar de menor a mayor es: '+deMenorAMayor.valueOf();   
}
</script>
</head>
<body>
    <button onclick="ordenar()">Ordenar</button>
</body>
</html>

En cuanto al segundo ejercicio, está bien, hace lo que pide el enunciado, pero ¿podrías explicar el significado de estas dos líneas?, porque yo he probado el código sin ellas y funciona correctamente también.

Código: [Seleccionar]
.replace(/[Áá]/gi,"a").replace(/[Éé]/gi,"e").replace(/[Íí]/gi,"i")
                 .replace(/[Óó]/gi,"o").replace(/[Úú]/gi,"u").replace(/[Ññ]/gi,"nzz");

Saludos.

1047
Hola bermartinv.

Las respuestas a, b y d, son correctas.

En la pregunta c, si se introduce un valor que no coincida con ningún color válido para background-color, el ternario ejecutará su primera condición y no la segunda, con la única diferencia que no se cambiará el color de fondo al no ser un nombre de color válido.

El código de las respuestas e y f eta bien, exceptuando que escribiste 'yelow' dentro del condicional ternario y el if, vamos, que te comiste una 'l'.

Por cierto, el tema es el CU01152E.

Saludos.

1048
Buenas.

Citar
EJERCICIO 1
Dado este fragmento de código. Revísalo y responde a las siguientes preguntas:

var persona1 = {};
Object.defineProperty(persona1, "edad", { value: 42, writable: false });
persona1.edad = 19;
 
a) Explica paso a paso el significado de este código (busca información en internet si te es preciso).
b) Crea un pequeño script donde se ejecute este código y se muestre un mensaje por pantalla informando del valor de la edad. Activa la consola para comprobar si aparece algún error.
c) Crea el mismo script pero usando strict mode. Activa la consola y comprueba si aparece algún error. ¿Qué diferencias observas entre la ejecución con strict mode y sin strict mode? ¿Qué explicación le darías a estas diferencias? ¿Crees que sería positivo que este código se escribiera en strict mode o no? ¿Por qué?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com CU01189E</title><meta charset="utf-8">
<script type="text/javascript">
function testEjercicio1(){
'use strict';
var persona1 = {};
Object.defineProperty(persona1, 'edad',{value:42, writable:false});
persona1.edad = 19;
alert(persona1.edad);
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div style="color:blue;" id ="pulsador" onclick="testEjercicio1()">Pulse aquí.</div>
</body>
</html>


a)Se crea un objeto persona1, vacío. Se le añade la propiedad edad con valor 42 al objeto persona1. Y se establece que no se podrá editar el valor de dicha propiedad, mediante writable:false. La última linea intenta dar un nuevo valor a la propiedad edad del objeto persona1.

b)No dá ningún error.

c)Aparece el siguiente error: "TypeError: "edad" is read-only", y en otro navegador: Uncaught TypeError: Cannot assign to read only property 'edad' of object '#<Object>'". Que vienen a decir que no se puede cambiar el valor de una propiedad que es de solo lectura. En este caso la única diferencia es que con strict mode da error la linea "persona1.edad = 19;". Creo que si sería positivo, porque nos evitaríamos usar código innecesario.

Citar
EJERCICIO 2
Crea y ejecuta un script que use with y que esté:
a) En modo normal. ¿Cuál es el código y cuál es el resultado que obtienes?
b) En strict mode. ¿Cuál es el código y cuál es el resultado que obtienes?


Código: [Seleccionar]
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
function testEjercicio2(){
'use strict';
with(document.body.style){
backgroundColor = 'black';
}
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div style="color:blue;" id ="pulsador" onclick="testEjercicio2()">Pulse aquí.</div>
</body>
</html>


a)Que se ejecuta el código y cambia el color de fondo.

b)Que no se ejecuta el código porque da un error. "SyntaxError: strict mode code may not contain 'with' statements"

Saludos.

1049
Hola,

El primer código ahora ya está completado satisfactoriamente.

En cuanto al segundo, te da undefined, porque farenheit no esta definido como propiedad ni como función de cometa. Vamos, que no existe.

Cuando haces esto en la linea del alert ...
Código: [Seleccionar]
cometa1.farenheitEstá intentando acceder a la propiedad farenheit, la cual no existe. Lo mismo te pasa en los tres alert.

Saludos.

1050
En realidad si, si te pide que devuelva algo, debería ser usando return.

Saludos.

1051
Hola nuevamente. Aquí dejo mi solución. A partir del siguiente código...

Código: [Seleccionar]
function createCookie(name,value,days) {
                if (days) {
                               var date = new Date();
                               date.setTime(date.getTime()+(days*24*60*60*1000));
                               var expires = "; expires="+date.toGMTString();
                }
                else var expires = "";
                document.cookie = name+"="+value+expires+"; path=/";
}
 
function eraseCookie(name) { createCookie(name,"",-1); }


Citar
a) ¿Para qué sirve la función createCookie? Explica paso a paso qué es lo que hace esta función.

Sirve como su nombre indica para crear una cookie. Esta función recibe tres datos, name,value y days. Si days contiene algo se ejecutará el if y se crea una fecha tomando la fecha actual y sumándole los días que contenga el 'days' que será la fecha de expiración de la cookie, si 'days' no contuviese un valor válido, la cookie se crearía igualmente con la única diferencia de que cuando se cierre el navegador la cookie se borrará.


Citar
b) ¿Para qué sirve la función eraseCookie? Explica paso a paso qué es lo que hace esta función.

Sirve para borrar una cookie, especificandole el name de dicha cookie. Lo que hace es invocar a la función createCookie() enviandole como valor de dias '-1',de esta manera se creará una cookie con la fecha de expiración ya rebasada y esta se borrará automaticamente.


Citar
c) Escribe el código de una función de nombre mostrarTodasLasCookies() que muestre el nombre y valor de todas las cookies existentes. Por ejemplo, si hay dos cookies deberá mostrarse algo como esto:

Hay 2 cookies en el documento

Cookie 1 con nombre: cookieNombreUsuario y valor: Alberto
Cookie 2 con nombre cookieEdadUsuario y valor 8

d) Usando las funciones createCookie, eraseCookie y  mostrarTodasLasCookies() crea un script que pida 3 nombres y valores de cookies al usuario, y cree las cookies correspondientes. A continuación deberá mostrar las cookies existentes y sus valores. Finalmente, deberá borrar la última cookie existente y volver a mostrar todas las cookies y sus valores.


Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com JavaScript CU01188E</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 createCookie(name,value,days) {
                if (days) {
                               var date = new Date();
                               date.setTime(date.getTime()+(days*24*60*60*1000));
                               var expires = "; expires="+date.toGMTString();
                } else {
var expires = "";
}
                document.cookie = name+"="+value+expires+"; path=/";
}
function eraseCookie(name) { createCookie(name,"",-1); }
function mostrarTodasLasCookies(){
var misCookies = [];
misCookies = document.cookie.split(';');
var msg = 'Actualmente hay ' + misCookies.length + ' cookies en el documento.<br/>';
for(var i=0; i<misCookies.length; i++){
msg += 'Cookie nº' + (i+1) + ' con nombre: ' + misCookies[i].split('=',1) + ' y valor: ';
var nombre = misCookies[i].split('=',1) + '=';
var valor = misCookies[i];
msg += valor.substring(nombre.length,valor.length) + '<br/>';
}
return msg;
}
function pedirDatosCookies(){
var nombre = [], valor = [];
for (i=0; i<3; i++){
nombre[i] = prompt('Inserte el nombre para la cookie número ' + (i+1) + ': ');
valor[i] = prompt('Insete el valor para la cookie número ' + (i+1) + ': ');
createCookie(nombre[i], valor[i], 1);
}
document.getElementById('contenedorCookies').innerHTML = 'Lista de cookies: <br/>' + mostrarTodasLasCookies() + '<br/><br/>';
var misCookies = document.cookie.split(';');
document.getElementById('contenedorCookies').innerHTML += 'Ahora borraremos la última cookie creada, que es: ' + misCookies[misCookies.length-1];
eraseCookie(misCookies[misCookies.length-1].split('=', 1));
document.getElementById('contenedorCookies').innerHTML += '<br/><br/>La lista de cookies queda asi: <br/>' + mostrarTodasLasCookies();
}
</script>
</head>
<body>
<h3>Crearemos 3 cookies e interactuaremos sobre ellas</h3>
<div id ="pulsador" onclick="pedirDatosCookies()"> Probar </div>
<div id="contenedorCookies"></div>
</body>

Saludos.

1052
Hola dimiste.

Veo todo bien.

Por comentar algo, podrías mejorar el código usando algún bucle, imagina que en vez de ser 3 cometas fueran 300. :o

Saludos.

1053
Aprender a programar desde cero / Re:Color de fondo. CU01021D
« en: 15 de Febrero 2016, 10:34 »
Hola Lorenzo.

Te faltó separarlo con una coma:

Código: [Seleccionar]
div, span{text-align:center;}
Lo que tu escribiste, dice que todas las etiquetas span que estén dentro de etiquetas div, centren el texto.

Aunque con solo referirnos a los div en este caso valdría, además, como la propiedad border también se repite en todos los div, esa linea podría quedar así:

Código: [Seleccionar]
div{text-align:center; border: 1px solid #000; height:16.6%;}
Saludos.

1054
Hola jbodenser.

El primer ejercicio está bien.

En el segundo no hace lo que pide el enunciado.
Citar
dos botones que pongan “Adelante” y “Atrás”, de modo que cuando se pulsen den lugar a que se llame la función componer(sentido). En esta función, a través de la función eval se ejecutará moverImagen('adelante') ó moverImagen('atras') según el parámetro recibido. La función moverImagen(sentido) puede contener un simple mensaje indicando el valor del parámetro <<sentido>> recibido.

Has creado la función componer(), pero no llamas a la función moverImagen() en ningún momento dado que no la has construido. Te dejo un ejemplo para que lo veas mas claro, basado en el código que tu has propuesto.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Botones con eval</title>
<style>
div {
width: 300px;
height: 450px;
margin: auto;
overflow: hidden;
background: rgba(146, 212, 24, .5);
text-align: center;
}
a {
width: 90%;
height: 350px;
background: rgba(245, 245, 245, .8);
margin: 10px auto;
display: block;
}
button {
display: inline-block;
padding: 15px;
margin: 10px 20px 0 20px;
}
</style>
<script type="text/javascript">
function moverImagen(sentido){
alert('Has pulsado el boton ' + sentido);
}
function componer (sentido) {
eval ('moverImagen(\''+ sentido + '\')');
}
</script>
</head>
<body>
<div>
<a href="#"></a>
<button type="button" onclick="componer('Atras');">Atrás</button>
<button type="button" onclick="componer('Adelante');">Adelante</button>
</div>
</body>
</html>

En tu ejemplo, "aEvaluar" contiene una simple cadena de texto, por eso da igual que quites la última linea.
Sin embargo esta linea:
Código: [Seleccionar]
eval ('moverImagen(\''+ sentido + '\')');Aunque es una cadena de texto también, en este caso eval dará lugar a que se llame a la función moverImgen(sentido).

Espero que te sirva.

Saludos.

1055
Hola dimiste.

Solo apuntar una cosa, cuando se introduce un correo electrónico del tipo:
"pepe at gml.com"
Primero da error de que falta @ y no debería dar ese error puesto que posteriormente se sustituye "at" por "@" automáticamente.

Saludos.


1056
Todo correcto bermartinv.

Saludos.

1057
Buenas dimiste.

Lo veo todo bien.

Saludos.

1058
Buenas.

Ahora si está completo y bien representado.

A seguir adelante.

1059
Ahora todo perfecto.

Saludos.

1060
Hola dimiste.

Tu código hace lo que pide el enunciado.

Tus dos funciones tienen bastantes lineas iguales, aquí te dejo otra manera de resolverlo basado en tu código pero con una sola función y sin tanta repetición.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="description" content="Curso JavaScript"/>
<meta name="keywords" content="programar,cursos,aprenderaprogramar.com"/>
<title>JavaScript</title>
<style>
body{
font-family: sans-serif;
text-align: center;
}
div{
border-style: solid;
margin: 20px;
padding: 15px;
display: inline-block;
}
</style>
<script type="text/javascript">
var click=1;
function crearNodo(lugarCreacion){
var nodoHijo=document.createElement('div');
var nodoText=document.createTextNode('Nodo Creado '+click);
var nodoPadre=document.getElementsByTagName(lugarCreacion);
nodoPadre[0].appendChild(nodoHijo);
nodoHijo.appendChild(nodoText);
click++;
}
</script>
</head>
<body>
<div>
Curso JavaScript aprenderaprogramar.com
</div><br/>
<input type="button" value="Añadir al final" onclick="crearNodo('html')"/>
<input type="button" value="Anidar" onclick="crearNodo('div')"/><br/>
</body>
</html>

Saludos.

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

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