Función que devuelva un array (javascript)

Iniciado por Fox_Neo, 10 Diciembre 2010, 13:26 PM

0 Miembros y 1 Visitante están viendo este tema.

Fox_Neo

Hola gracias por leer el post, estoy inciandome en javascript en una asignatura de la universidad y tengo que hacer un programa. Una parte parte de dicho programa he pensado hacerlo mediante una función. Tengo que crear varios arrays y había pensado hacerlo con una función porque mirando en manuales he visto que una función puede devolver un array, he creado un código pero no funciona correctamente. Me permite ingresar los números en el vector pero a la hora de imprimir  los valores del vector no se me imprimen, el código es el siguiente:
Código (javascript) [Seleccionar]
<HTML>
<HEAD>
<TITLE> Creado por Fox_Neo (si copias el code pon la fuente)</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="javascript">

function Polinomio(grado) //creo la funcion para crear el vector y rellenarlo la variable grado me va a determinar la longitud del vector
{
var vector=new Array(); //declaración de vector para la función

for(var i=0;i<grado;i++) //introducir los números en el vector hasta que llegue hasta el graso marcado
{
  vector[i]=window.prompt("Introduce los numeros");
  }
  return vector; // Devuelve el vector obtenido
}
var grado= window.prompt("introduce el grado del polinomio"); //introduce la longitud del vector
Polinomio(grado);  //llamada a la función
for(i=0;i<grado1;i++) //imprimir valores del vector
{
document.write(vector[i]);
}
</SCRIPT>
</BODY>
</HTML>


Gracias.

Shell Root

Es porque el array vector[], se encuentra con vida, -por así decirlo-, dentro de la función, no fuera de ella. Lo puedes corregir de la siguiente forma,
Código (javascript,12,13) [Seleccionar]
<script language="javascript">

function Polinomio(grado){
 var vector = new Array();
 for(var i=0; i<grado; i++){
   vector[i] = prompt( "Introduce los numeros", "" );
 }
 return vector;
}

var grado = prompt( "introduce el grado del polinomio", "" );
var vectorAux = new Array();
vectorAux = Polinomio(grado);
for(var i=0; i<grado; i++){
 document.write( vectorAux[i] + "<br />" );
}
</script>

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Fox_Neo

#2
Ok gracias Shell Root, me has quitado un dolor de cabeza que tenía desde anoche :P no entendiá por qué no funcionaba, ahora funciona perfectamente, le he añadido unas instrucciones para que si se introduce un caracter no numérico me de una ventana de alerta. Funciona perfectamente. ;)

Claro lógicamente el valor de retorno había que cargarlo en otro vector que no estubiera contenido en la función!! :xD  

Ahora seguiré con el programa esto solo era el principio. Cuando termine el programa y lo entrege lo publicaré por si a alguien le resulta de utilidad.

Gracias.

Salu2.

Shell Root

Y que función usaste para validar esos caracteres?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Fox_Neo

#4
Cita de: Shell Root en 10 Diciembre 2010, 19:14 PM
Y que función usaste para validar esos caracteres?
Hola  no es una función (creo que dije unas instrucciones) ;), es un bucle con un while:
Código (javascript) [Seleccionar]
vector[i]=window.prompt("Introduce los numeros", "" );//introducimos los numeros
while(isNaN(vector[i])==true) //verifica si el contenico es un número si es así devuelve false (0), si no es un número true (1)
{
window.alert("Valor no admitido. Solo permitido valores numéricos");
vector[i]= window.prompt("introduce los numeros", "" );
}


tengo otro problema con otra parte del codigo, con el producto de dos vectores me devuelve la función un vector de 23 posiciones,  el code:
Código (javascript) [Seleccionar]
function multiplicacion(p1,p2,g1,g2)
{
var m=new Array();
arrayaux= new Array();
for(i=g1+g2;i>=0;i--) //inicialización del vectorauxiliar a 0
{arrayaux[i]=0;}
for(a=g1;a>=0;a--)
{
for(i=g1+g2;i>=0;i--) //inicialización del vector m a 0
{
m[i]=0;
}
for(b=g2;b>=0;b--)
{
m[a+b]=p1[a]*p2[b]
}
for(i=(g1+g2);i>=0;i--)
{
arrayaux[i]=parseFloat(arrayaux[i])+parseFloat(m[i]);
}
}
return m;
}
var vectormultiplicacion = new Array();
vectormultiplicacion= multiplicacion(Polinomio1,Polinomio2,grado1,grado2);

Los vectores que introduzco en la función  son correctos ya que he hecho otras operaciones y no he tenido ningún problema, no se, creo que el razonamiento para realizar la operación está bien, no veo por que me da un vector de de mucha posiciones depende de los datos introducidos (lo he sabido por que he insertado window.alert(vectormultiplicacion.length); al final del code
Gracias.
PD: Ya me he dado cuenta que hay otro  en el foro (y en otros foros) que tiene que  hacer un code muy parecido a lo que tengo que hacer yo, por eso cuando lo entregue  pongo el code completo.    

Fox_Neo

#5
Bueno ya solucioné el problema de la multiplicación del polinomio las operaciones las realiza correctamente pero en la pagina no las imprime correctamente, para visualizar los resultados muestro el valor del vector en una ventana, los resultados son los coeficientes de las x y la posición que ocupen el vector es el grado de la x  Aquí os dejo el code por si a alguien le interesa.
Salud2.


Fox_Neo


Código (javascript) [Seleccionar]
<HTML>

<HEAD>

<TITLE> Creado por Fox_Neo (si copias el código pon la fuente) </TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE="javascript">



function Polinomio(grado) //creo la funcion para crear el vector y rellenarlo la variable grado me va a determinar la longitud del vector

{

var vector=new Array(); //declaración de vector para la función

for(var i=grado;i>=0;i--) //introducir los números en el vector hasta que llegue hasta el grado marcado

{

vector[i]=window.prompt("Introduce los numeros", "" );//introducimos los numeros

     while(isNaN(vector[i])==true)//en esta parte se comprueba si lo introducido es un número o un caracter
//mediante la instrución isNaN que si es un caracter devuelve 1 (true)

{

window.alert("Valor no admitido. Solo permitido valores numéricos");

parseFloat(vector[i])= window.prompt("introduce los numeros", "" );

}

}

return vector; // Devuelve el vector obtenido

}

function gradopolinomio() //creación de función para introducir el grado y validarlo

{

var g=window.prompt("introduce el grado del polinomio"); // aqui se introduce el grado del polinomio

while(isNaN(g)==true) //valida la variable introducida si es numerica la acepta si no sale un mensaje
//de error hasta que se introduzca un numero

{

window.alert("Valor no admitido. Solo permitido valores numericos");

g=window.prompt("introduce el grado del polinomio");

}

return parseInt(g);

}

function suma(p1,p2,g1,g2) //declaracion de la funcion suma

{

var s=new Array(); //decalaración del vector interno del la función

if(g1>g2)  //aqui se compara cual grado es mayor  para que se genere un vector
//del tamaño adecuado y no queden operaciones sin reañizar

{

for(var b=(g2+1);b<=g1;b++)

{

var c=p2.push(0);

}

for(i=g1;i>=0;i--)

{

s[i]=parseFloat(p1[i])+parseFloat(p2[i]); // es necesario pasar los caracteres a valores de coma flotante
// porque sino une los números y no los suma

}

}

else

{

for(var b=(g1+1);b<=g2;b++)

{

var c=p1.push(0);

}

for(i=g2;i>=0;i--)

{

s[i]=parseFloat(p1[i])+parseFloat(p2[i]);

}

}

return s; //la función retorna el valor del vector suma

}

function resta(p1,p2,g1,g2)

{

var r=new Array(); //decalaración del vector interno del la función

if(g1>g2)  //aqui se compara cual grado es mayor  para que se genere un vector del tamaño adecuado
//y no queden operaciones sin reañizar

{

for(var b=(g2+1);b<=g1;b++) //otra manera de ordenar el vector sin tener que inicializar el vector a 0,
//aunque siempre es mejor inicializar el vector

{

var c=p2.push(0);

}

for(i=g1;i>=0;i--)

{

r[i]=parseFloat(p1[i])-parseFloat(p2[i]); // es necesario pasar los caracteres a valores de coma flotante
//porque sino une los números y no los suma

}

}

else

{

for(var b=(g1+1);b<=g2;b++)

{

var c=p1.push(0);

}

for(i=g2;i>=0;i--)

{

r[i]=parseFloat(p1[i])-parseFloat(p2[i]);

}

}

return r; //la función retorna el valor del vector resta

}

function multiplicacion(p1,p2,g1,g2)

{

var m= new Array(); // declaro los dos arrays necesarios

var arrayaux= new Array();



for(var i=parseInt(g1+g2);i>=0;i--) //pongo a cero los dos vectores para que luego puedadn sumar corectamente
//g1 es grado del polinomio1 y g2 grado de polinomio2

{

m[i]=0;

arrayaux[i]=0;

}

for(var a=g1;a>=0;a--)  

{

for(var b=g2;b>=0;b--)  //multiplica el 1º monomio por el segundo polinomio luego se guarda en el vector auxiliar

{

m[a+b]=parseFloat(p1[a])*parseFloat(p2[b]);



}

for(var i=parseInt(g1+g2);i>=0;i--)       //guardo el resultado de la multiplicacion del monomoio para luego sumarlo

{

arrayaux[i]=parseFloat(arrayaux[i])+parseFloat(m[i]);

}

for(var i=parseInt(g1+g2);i>=0;i--) //cuando acaba de sumar el polinomio la variable donde se ha realizado
//la multiplicación del monomio por el polinomiose pone a 0 para evitar errores

{

m[i]=0;

}

}

return arrayaux;

}

function imprimir(P,g)

{

for(var i=g;i>=0;i--) //imprimir valores  actualmente no imprime correctamente debiera de imprimir
//el valor del vector junto el signo y la x (menos si es 0 o 1) y la posición
//del vector como grado del polinomio imprimido como subindice (exceptuando 0 y 1)

{

var z=g;

if(i==z&&P[i]>1)

{

document.write( P[i] + "x<sup>"+i+"</sup>");

}

if(i==g&&P[i]==1)

{

document.write(  "x<sup>"+i+"</sup>");

}

if(i>1&&z>P[i]>1)

{

document.write("+");

document.write( P[i] + "x<sup>"+i+"</sup>");

}

if(i>1&&P[i]==1)

{

document.write("+");

document.write("x<sup>"+ i +"</sup>");

}

if(i==1&&P[i]==1)

{

document.write("+");

document.write("x");

}

if(i==1&&P[i]>1)

{

document.write("+");

document.write(P[i] +"x");

}

if(i==0&&P[i]>0)

{

document.write("+");

document.write(P[i]);

}

if(i==0&&P[i]<0)

{

document.write("-");

document.write(Math.abs(P[i]));

}

if(i>1&&P[i]==-1)

{

document.write("-");

document.write("x<sup>"+i+"</sup>");

}

if(i>1&&P[i]<-1)

{

document.write("-");

document.write( Math.abs(P[i]) + "x<sup>"+i+"</sup>");

}

if(i==1&&P[i]<-1)

{

document.write("-");

document.write(Math.abs(P[i]) +"x");

}

if(i==1&&P[i]==-1)

{

document.write("-");

document.write(Math.abs(P[i]) +"x");

}

}



}



var grado1 = gradopolinomio(); //llamada a la función para introducir el grado del 1º polinomio

var Polinomio1 = new Array(); //declaración del vector Polinomio1 con el que se va a trabajar

Polinomio1 = Polinomio(grado1); //se llama a la función de creación del vector y se almacena en un vector
//global Polinomio1 para dejar a la función libre

window.alert("A continuación introduce los datos del 2º polinomio"); //mensaje que indica que se procedad a introducir el segundo polinomio

var grado2 = gradopolinomio(); //llamada a la función para introducir el grado del 2º polinomio

var Polinomio2 = new Array();//declaración del vector Polinomio2 con el que se va a trabajar

Polinomio2 = Polinomio(grado2);//se llama a la función de creación del vector  y se almacena en un vector global
// Polinomio2 para dejar a la función libre

var vectorsuma= new Array(); //se crea un vector suma  

vectorsuma = suma(Polinomio1,Polinomio2,grado1,grado2); // se llama a la funcion suma y el resultado se guarda en vectorsuma

var vectorresta= new Array();

vectorresta = resta(Polinomio1,Polinomio2,grado1,grado2);

var vectormultiplicacion = new Array();

vectormultiplicacion= multiplicacion(Polinomio1,Polinomio2,grado1,grado2);

window.alert("La suma tiene los siguientes valores de menor a mayor grado de exponente" +vectorsuma); //estas ventanas se ponen para
//ver realmente el resultado de la operación

window.alert("La resta tiene los siguientes valores menor a mayor grado de exponente" +vectorresta);

window.alert("La multiplicacion tiene los siguientes valores menor a mayor grado de exponente" +vectormultiplicacion);

</SCRIPT>

<H2>Polinomios con los que operar:</H2>

<SCRIPT>

document.write( "Polinomio1: ");

imprimir(Polinomio1,grado1);

document.write("</BR>");

document.write( "Polinomio2: ");

imprimir(Polinomio2,grado2);

</SCRIPT>

<H2>Resultado de la suma:</H2>

<SCRIPT>

imprimir(vectorsuma,vectorsuma.length);

document.write("</BR>");

</SCRIPT>

<H2>Resultado de la resta:</H2>

<SCRIPT>

imprimir(vectorresta,vectorresta.length);

document.write("</BR>");

</SCRIPT>

<H2>Resultado de la multiplicación:</H2>

<SCRIPT>

imprimir(vectormultiplicacion,vectormultiplicacion.length);

document.write("</BR>");

</SCRIPT>

</BODY>

</HTML>