Está en la página 1de 29

30/6/2020 8-3525 capítulo 7

Guardar

Iteración
Iteración 11
Las estructuras iterativas, conocidas también como ciclos iterativos, son aquellas que repiten la
ejecución de una o más instrucciones, una o más veces..

Las
Las estructuras
estructuras "while"
"while" yy "do-while"
"do-while"
La estructura while repite la ejecución de la o las instrucciones que contiene mientras la
condición del ciclo sea verdadera.

La lógica de esta estructura, en forma de diagrama de actividades, es:

Siendo su sintaxis en Javascript:

while (condición) {
instrucciones;
}

Por ejemplo, con la siguiente instrucción, se generan e imprimen los número comprendidos entre
3 y 9:

var i = 3;
while (i<=9) {
print("i = "+i);
i++;
};
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9

En este segmento de código, se inicia la variable "i" en 3, luego en el ciclo while, que se repite
mientras el valor de la variable "i" es menor o igual a 9, se imprime (con print) el valor de la variable
"i" y se incrementa su valor en uno (empleando el operador compuesto ++: la instrucción i++,
equivale a i = i+1).

Como de costumbre, no es la única forma de resolver el problema. Por ejemplo, en lugar de


preguntar si el número es menor o igual a 9, se puede preguntar si es menor a 10:

var i = 3;
while (i<10) {
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 1/29
30/6/2020 8-3525 capítulo 7

print("i = "+i);
Guardar
i++;
};
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9

También se puede iniciar la variable "i" en 2 y en el ciclo, que ahora se debe repetir mientras la
variable "i" sea menor a 9, incrementar primero el valor de la variable y luego imprimirla:

var i = 2;
while (i<9) {
i++; print("i = "+i);
};
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9

Y se puede pensar en otras formas mas de resolver el problema.

Además del operador compuesto ++, en Javascript se pueden emplear los siguientes
operadores:

Operadores
Operadores Compuestos
Compuestos
Operador Definición

Incremento
++
(x++ ⟺ x = x + 1)
Decremento
−−
(x − − ⟺ x = x − 1)
Suma compuesta
+=
(x+=5 ⟺ x = x + 5)
Resta compuesta
−=
(x− = 5 ⟺ x = x − 5)
Multiplicación compuesta
*=
(x*=5 ⟺ x = x ∗ 5)
División compuesta
/=
(x/=5 ⟺ x = x/5)
%= Residuo compuesto
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 2/29
30/6/2020 8-3525 capítulo 7

Guardar (x% = 5 ⟺ x = x%5)


Potencia compuesta
**=
(x ∗ ∗ = 5 ⟺ x = x ∗ ∗5)

Por ejemplo, la siguiente instrucción emplea la estructura while y un operador compuesto para
generar e imprimir los números impares comprendidos entre 5 y 17:

var i = 5;
while (i<=17) {
print("i = "+i);
i += 2;
};
i = 5
i = 7
i = 9
i = 11
i = 13
i = 15
i = 17

La estructura do-while, es similar a la estructura while, sólo que la condición se encuentra al final
del ciclo, por lo que en esta estructura las instrucciones del ciclo se ejecutan por lo menos una vez.

La lógica de esta estructura, en forma de diagrama de actividades, es:

Siendo su sintaxis en Javascript:

do {
instrucciones;
} while (condición);

Se prefiere esta estructura cuando, la lógica que resuelve el problema, requiere que las
instrucciones del ciclo sean ejecutadas por lo menos una vez, aunque, en ocasiones, estas
estructuras pueden ser empleadas indistintamente.

Asi el anterior ejemplo (resuelto con la estructura while) se resuelve de la misma forma con la
estructura do-while:

var i = 5;
do {
print("i = "+i);
i += 2;
} while (i<=17);
i = 5
i = 7
i = 9
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 3/29
30/6/2020 8-3525 capítulo 7

iGuardar
= 11
i = 13
i = 15
i = 17

A continuación se presentan algunos ejemplos de problemas resueltos con estas estructuras.

1. Programe una función que reciba un número entero positivo "n" y devuelva la sumatoria de los
primeros "n" números pares positivos.

Básicamente se debe iniciar un acumulador en cero y un contador en 2, luego se inicia el ciclo


iterativo, que debe repetirse mientras el contador sea menor o igual a dos veces el número
recibido, en el ciclo se añade el contador al acumulador y se incrementa su valor en 2, cuando
el ciclo concluye se devuelve el valor del acumulador (la sumatoria).

El algoritmo en forma de diagrama de actividades, es:

El cual, dado que la condición está al inicio del ciclo, puede ser codificado con la estructura
while:

function sumnp(n){
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
let s = 0;
let i = 2;
while (i <= 2*n) {
s += i;
i += 2;
}
return s;
}

Con la cual se obtienen los resultados esperados:


file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 4/29
30/6/2020 8-3525 capítulo 7

sumnp(0)
Guardar
0
sumnp(5)
30
sumnp(12)
156
sumnp(7.3)
El número debe ser entero
sumnp(-10)
El número debe ser positivo

Como se puede ver, al implementar el algoritmo, se valida primero que el número sea entero y
positivo.

Si el algoritmo se implementa directamente con la estructura do-while:

function sumnpab(n) {
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
let s = 0, i = 2;
do {
s += i;
i += 2;
} while (i <= 2*n)
return s;
};

Se obtienen los resultados correctos para números mayores o iguales 1:

sumnpab(5)
30
sumnpab(12)
156

Pero cuando el número es cero, se obtiene el resultado erróneo:

sumnpab(0)
2

Porque como do-while ejecuta las instrucciones al menos una vez, al acumulador se le suma
siempre por lo menos el número 2. Para evitar este error se tendría que añadir la condición: if
(n<1) return 0;, antes del ciclo, lo que sería redundante. Por esa razón, la estructura más
adecuada para implementar este algoritmo (donde la condición está al principio) es while y no
do-while.

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 5/29


30/6/2020 8-3525 capítulo 7

2.Guardar
Programe una función que reciba un número entero y devuelva el mismo pero sin su primer
dígito. Así si el número es 12345, la función debe devolver 2345.

El problema se resuelve si se toma en cuenta que el resíduo del número, entre su potencia en
base 10 equivalente, es el número buscado. Así si el número es 12345, su potencia en base 10
equivalente es: 10000 y el resíduo de 12345/10000, es 2345, es decir el número buscado (el
número sin su primer dígito).

Por lo tanto, el problema se reduce a determinar la potencia en base 10 equivalente del


número recibido y para ello, en un ciclo que se repite mientras el número sea mayor a 10, se
divide el número recibido entre 10 y se multiplica por 10 un acumulador que comienza en 1. De
esa manera, al finalizar el ciclo, el acumulador contiene la potencia en base 10 equivalente al
número recibido.

El algoritmo en forma de diagrama de actividades es:

Dado que la condición está al principio del ciclo, la estructura más adecuada para implementar
el algoritmo es while:

var spd = function(n) {


if (!Number.isInteger(n))
throw "El número debe ser entero";
let m = 1;
let aux = n;
while (Math.abs(aux)>10) {
m *= 10;
aux /= 10;
}
return n%m;
};

Con el cual se obtienen los resultados esperados:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 6/29


30/6/2020 8-3525 capítulo 7

spd(12345)
Guardar
2345
spd(-45678)
-5678
spd(45.67)
El número debe ser entero

3. Programe una función que reciba un número entero y devuelva el mismo, pero con sus dígitos
invertidos, así si el número es 12345, la función debe devolver 54321.

El problema se resuelve tomando en cuenta que, por una parte, el resíduo del número entre 10
es su último dígito, así el resíduo de 12345 entre 10 es 5 y que, por otra, el cociente del
número entre 10 es el número sin su último dígito, así el cociente de 12345 entre 10 es 1234.
Entonces, en un ciclo que se repite mientras el número a invertir tenga dígitos, se añade a un
acumulador (multiplicado por 10) el resíduo del número entre 10 y se quita al número el último
dígito. El acumulador debe ser multiplicado por 10 para que los dígitos recorran una posición a
la izquierda y entre en la última posición el residuo (el último dígito del número residual).

El algoritmo, en forma de diagrama de actividades, es:

Una vez más, como la condición está al principio del ciclo, la estructura más adecuada para
codificar el algoritmo es while:

var invertir = n => {


if (!Number.isInteger(n))
throw "El número debe ser entero";
let ni = 0;
while (n!=0) {
ni= ni*10+n%10;
n = Math.quot(n,10);
}
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 7/29
30/6/2020 8-3525 capítulo 7

Guardarreturn ni;
};

Con la cual se obtienen los resultados esperados:

invertir(12345)
54321
invertir(-65432)
-23456
invertir(8)
8
invertir(23.456)
El número debe ser entero

4. Programe una función que calcule la raíz cuadrada de un número real positivo "n", empleando
la ecuación iterativa deducida con el método de Newton - Raphson:

1
(x1 + )
n
x2 =
2 x1

La solución de esta ecuación es iterativa: a) se asumen un valor inicial x1; b) se calcula x2; c)
se compara x1 con x2 y si son aproximadamente iguales el proceso concluye, caso contrario x1
toma el valor de x2 y el proceso se repite desde el paso (b).

Para determinar si dos valores: x1 y x2, son aproximadamente iguales, se emplea la siguiente
condición:

∣ x1 ∣
∣ − 1 ∣ < 1 × 10−n
∣ x2 ∣
∣ ∣

La cual es verdadera cuando x1 y x2 son iguales en al menos "n" dígitos. Dado que las
estructuras while y do-while se repiten mientras la condición es verdadera y en este caso
deben repetirse mientras los dos números no sean iguales, la condición debe ser cambiada a
su complemento:

∣ x1 ∣
∣ − 1 ∣ ≥ 1 × 10−n
∣ x2 ∣
∣ ∣

En esta solución, el proceso concluye cuando x1 y x2 son iguales en por lo menos 14 dígitos.
Como el proceso debe repetirse al menos una vez (para calcular el valor de x2), la condición
debe estar al final del ciclo.

El algoritmo, en forma de diagrama de actividades, es:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 8/29


30/6/2020 8-3525 capítulo 7

Guardar

En este caso la estructura más adecuada para codificar el algoritmo es do-while (porque la
condición está al final del ciclo):

function rcuad(n) {
if (n<0)
throw "El número debe ser positivo";
if (n==0 || n==1) return n;
let x1, x2 = 1.1;
do {
x1 = x2;
x2 = (x1+n/x1)/2;
} while(Math.abs(x1/x2-1)>=1e-14);
return x2;
}

Con la cual se obtienen los resultados esperados:

rcuad(2)
1.414213562373095
rcuad(12.34)
3.5128336140500593
rcuad(183)
13.527749258468683
rcuad(-32.43)
El número debe ser positivo

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 9/29


30/6/2020 8-3525 capítulo 7

Como se puede ver en esta solución, en lugar de asumir un valor inicial para x1 (como se
Guardar
establece en el algoritmo), se asume un valor inicial para x2, luego x1 toma el valor asumido en
el ciclo. Se procede así porque si x1 toma el valor de x2, después de que es calculado, ambas
variable siempre serían iguales y por lo tanto la condición siempre sería falsa y el ciclo se
repetiría sólo una vez.

En realidad, como se verá en el siguiente capítulo, la estructura más adecuada para resolver
este problema no es do-while sino un ciclo infinito con una condición intermedia.

1. Escriba una instrucción que, empleando la estructura while, genere y muestre (en la forma: "i =
número") los números comprendidos entre 4 y 10.

a)

var i=4;
while(i<=10){
print ("i = "+i);
i++;
};
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10

Nota: 100 Puntos: 10 Repetir

2. Escriba una instrucción que, empleando la estructura while, genere y muestre (en la forma: "i =
número") los números impares comprendidos entre 7 y 19.

a)

var i = 7;
while (i<=19) {
print("i = "+i);
i += 2;
};
i = 7
i = 9
i = 11
i = 13
i = 15
i = 17
i = 19

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 10/29


30/6/2020 8-3525 capítulo 7

Guardar
Nota: 100 Puntos: 10 Repetir

3. Escriba una instrucción que, empleando la estructura do-while, genere y muestre (en la forma:
"i = número") los números 3, 6, 9, ..., 21.

a)

var i = 3;
do {
print("i = "+i);
i += 3;
} while (i<=21);
i = 3
i = 6
i = 9
i = 12
i = 15
i = 18
i = 21

Nota: 100 Puntos: 10 Repetir

4. Programe una función que reciba un número entero positivo y empleando la estructura while
devuelva la productoria de los números enteros que existen entre 1 y el número recibido. La
función debe validar que el número sea entero, lanzando el error "El número debe ser entero"
en caso de no serlo y que sea mayor a cero, lanzando el error "El número debe ser mayor a
cero" en caso de no serlo. Luego calcule la productoria de los números que existen entre 1 y:
a) 5: b) 9; c) 12; d) 36; e) 0; f) 27.5 y g) -15.

a)

function productoria(n){
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<=0)
throw "El número debe ser mayor a cero";
let s = 1;
let i = 1;
while (i <= 1*n) {
s *= i;
i += 1;
}
return s;
}

productoria(5)
120
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 11/29
30/6/2020 8-3525 capítulo 7

productoria(9)
Guardar
362880
productoria(12)
479001600
productoria(36)
3.719933267899012e+41
productoria(0)
El número debe ser mayor a cero
productoria(27.5)
El número debe ser entero
productoria(-15)
El número debe ser mayor a cero

Nota: 100 Puntos: 12 Repetir


Repetir

5. Programe una función que reciba un número entero positivo y que empleando la estructura
while devuelva la suma de los números 1, 4, 7, 10, ..., hasta el número recibido. La función
debe validar que el número sea entero y positivo, lanzando los errores "El número debe ser
entero", en caso de ser real y "El número debe ser positivo" en caso de ser negativo. Luego
calcule la sumatoria de los números que existen entre 1 y: a) 12; b) 53; c) 121; d) 220; e) 0; f)
51.2 y g) -78.

a)

function sumni(n){
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
let s = 0;
let i = 1;
while (i <= 1*n) {
s += i;
i += 3;
}
return s;
}

sumni(12)
22
sumni(53)
477
sumni(121)
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 12/29
30/6/2020 8-3525 capítulo 7

2501
Guardar
sumni(220)
8177
sumni(0)
0
sumni(51.2)
El número debe ser entero
sumni(-78)
El número debe ser positivo

Nota: 100 Puntos: 12 Repetir


Repetir

6. Programe una función que reciba un número entero y empleando la estructura while devuelva
su primer dígito. El primer dígito de un número se obtiene del cociente del número entre su
potencia en base 10 equivalente, así si el número es 6543, su potencia en base 10 equivalente
es 1000 y el cociente de 6543/1000 es 6 (el primer dígito). En consecuencia el problema se
reduce a obtener la potencia en base 10 equivalente. Debe validar que el número sea entero,
lanzando el error "El número debe ser entero" en caso de no serlo. Luego devuelva el primer
dígito de: a) 78634, b) -9652, c) 6 y d) 432.323.

a)

function digito(n){
if(n%1!=0)
throw"El número debe ser entero";
let m=1;
let aux = n;
while (Math.abs(aux)>10) {
m *= 10;
aux /= 10;
}
return Math.quot(n,m);
};

digito(78634)
7
digito(-9652)
-9
digito(6)
6
digito(432.323)
El número debe ser entero

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 13/29


30/6/2020 8-3525 capítulo 7

Guardar

Nota: 100 Puntos: 14 Repetir


Repetir

7. Programe una función que reciba un número entero y empleando la estructura while, con el
operador relacional > y la función abs (en la condición), devuelva el número con sus dígitos
invertidos. Debe validar que el número sea entero, lanzando el error "El número debe ser
entero" en caso de no serlo. Luego devuelva los siguientes números con sus dígitos invertidos:
a) 78634, b) -9652, c) 6 y d) 0 y e) 432.323.

a)

var invert =n=>{


if(n%1!=0)
throw"El número debe ser entero";
let ni=0;
while (Math.abs(n)){
ni=ni*10+n%10;
n= Math.quot(n,10);
}
return ni ;
};

invert(78634)
43687
invert(-9652)
-2569
invert(6)
6
invert(0)
0
invert(432.323)
El número debe ser entero

Nota: 100 Puntos: 14 Repetir


Repetir

8. Programe una función que reciba un número real positivo (n) y empleando la estructura do-
while devuelva la raíz cúbica del mismo, calculada con la ecuación deducida con el método de
Newton-Raphson:

1
(2x1 + 2 )
n
x3 =
3 x1

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 14/29


30/6/2020 8-3525 capítulo 7

El proceso debe repetirse hasta que x1 y x2 sean iguales en por lo menos 11 dígitos. Luego
Guardar
calcule la raíz cúbica de: a) 0, b) 1, c) 4, d) 27, e) 33.67 y f) -15.2.

a)

function rcubica (n){


if (n==0||n==1)return n;
let x1,x2=1.1;
do{
x1=x2;
x2=(2*x1+n/x1**2)/3;

}while(Math.abs(x1/x2-1)>=1e-11);
return x2;
}

rcubica(0)
0
rcubica(1)
1
rcubica(4)
1.5874010519681994
rcubica(27)
3
rcubica(33.67)
3.229096610805293
rcubica(-15.2)
-2.4771246592603418

Nota: 100 Puntos: 15 Repetir


Repetir

Estructura
Estructura "for"
"for"
La estructura for tiene la lógica que se muestra en el siguiente diagrama de actividades:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 15/29


30/6/2020 8-3525 capítulo 7

Guardar

Es decir, primero se ejecutan las instrucciones del sector de iniciación, donde por lo general se
asignan valores iniciales a las variables del ciclo, luego se evalúa la condición y si es verdadera se
ejecutan las instrucciones del ciclo, finalmente se ejecutan las instrucciones del incremento (donde
por lo general se incrementan o modifican las variables del ciclo). El proceso continua hasta que la
condición es falsa, o lo que es lo mismo continúa mientras la condición es verdadera.

La sintaxis de esta estructura en Javascript, es:

for (iniciación; condición; incremento) {


instrucciones;
}

Si el sector de iniciación o de incremento (o inclusive el de condición) constan de más de una


sentencia, deben estar separadas con comas, no puntos y comas (tal como ocurre con el operador
?).

Como se puede ver en el diagrama, la lógica de la estructura for es básicamente una


especialización de la estructura while y puede ser implementada también con la misma, sin
embargo, se prefiere la estructura for cuando se sabe el número de veces que se debe repetir un
proceso y/o se conoce el límite inicial y final del proceso iterativo.

Por ejemplo, con esta estructura, se puede codificar de forma más sencilla y directa, el problema
de mostrar los números impares comprendidos entre 5 y 17:

for (var i=5; i<=17; i+=2) print("i = "+i);


i = 5
i = 7
i = 9
i = 11
i = 13
i = 15
i = 17

5. En este ejemplo se vuelve a programar la función que recibe un número entero positivo "n" y
devuelve la sumatoria de los primeros "n" números pares positivos.

La lógica que resuelve el problema no cambia:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 16/29


30/6/2020 8-3525 capítulo 7

Guardar

El código, empleando la estructura for, es:

function sumnp(n){
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
let s = 0;
for(let i=2; i<=2*n; i+=2) s+=i;
return s;
}

Que, por supuesto devuelve los mismos resultados que con la estructura while:

sumnp(0)
0
sumnp(5)
30
sumnp(12)
156
sumnp(7.3)
El número debe ser entero
sumnp(-10)
El número debe ser positivo

6. Programe una función que reciba un número entero positivo y determine si el mismo es (true) o
no (false) un número primo (un número es primo si sólo es divisible entre 1 y entre sí mismo).

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 17/29


30/6/2020 8-3525 capítulo 7

Para determinar si un número es o no primo, se debe comprobar que no sea divisible entre 2,
Guardar
3, .., hasta la mitad del número (pues ningún número es divisible entre un número mayor a su
mitad). Sin embargo, dado que un número primo sólo debe ser divisible entre 1 y si mismo, si
resulta que es divisible entre cualquiera otro número, se sabe que no es primo y en
consecuencia el resultado debe ser devuelto inmediatamente.

El algoritmo, en forma de diagrama de actividades, es:

El código respectivo, empleando la estructura for, es:

var esPrimo = n => {


if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
if (n<2) return false;
for (let i=2; i<=n/2; i++)
if (n%i==0) return false;
return true;
};

Con el cual se obtienen los resultados esperados:

esPrimo(7)
true
esPrimo(8)
false
esPrimo(21)
false
esPrimo(157)

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 18/29


30/6/2020 8-3525 capítulo 7

true
Guardar
esPrimo(159)
false
esPrimo(67.32)
El número debe ser entero
esPrimo(-121)
El número debe ser positivo

7. Programe una función que reciba un número entero positivo y devuelva el Fibonacci del
mismo. La ecuación de definición del Fibonacci, es:

Fn = Fn−1 + Fn−2

F1 = 1

F2 = 1

Dado que se conoce el valor del primer y segundo Fibonacci, el cálculo comienza a partir del
tercero, es decir se calcula el Fibonacci de 3 (F2+F1), luego el de 4 (F3+F2) y así
sucesivamente. Para ello, en un ciclo que va desde 3 hasta el número entero recibido, se
calcula en cada iteración un nuevo Fibonacci, pero como la función devuelve únicamente el
último Fibonacci calculado (el Fibonacci del número recibido), sólo es necesario guardar ese
valor y los dos anteriores (necesarios para calcular un nuevo valor en la siguiente iteración).

El algoritmo, en forma de diagrama de actividades, es:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 19/29


30/6/2020 8-3525 capítulo 7

Guardar

El código respectivo, empleando la estructura for, es:

var fibonacci = function(n) {


if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<=0)
throw "El número debe ser mayor a cero";
if (n<2) return 1;
let f3, f1=1, f2=1;
for (let i=3; i<=n; i++) {
f3 = f2+f1;
f1 = f2;
f2 = f3;
}
return f3;
};

Con el cual se obtienen los resultados esperados:

fibonacci(5)
5
fibonacci(7)
13
fibonacci(15)

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 20/29


30/6/2020 8-3525 capítulo 7

610
Guardar
fibonacci(25)
75025
fibonacci(75)
2111485077978050
fibonacci(4.56)
El número debe ser entero
fibonacci(0)
El número debe ser mayor a cero

8. Programe una función que reciba un número entero positivo (el orden) y un número real y
devuelva el Legendre enésimo del número real recibido. La ecuación de definición del
Legendre, es:

1 1
Len (x) = (2 − ) ⋅ x ⋅ Len−1 (x) − (1 − ) ⋅ Len−2 (x)
n n
Le0 (x) = 1
Le1 (x) = x

Aunque puede no ser evidente a primera vista, el algoritmo que resuelve este problema es
esencialmente el mismo que el del Fibonacci, excepto que en la ecuación se tiene una variable
adicional (el número real x) y que el orden (el número entero n) es parte de la ecuación de
definición, sin embargo, el algoritmo es esencialmente el mismo: en un ciclo que va desde 2
hasta el número entero recibido, se calcula en cada iteración un nuevo Legendre, pero como la
función devuelve únicamente el último Legendre calculado (el Legendre del número recibido),
sólo es necesario guardar ese valor y los dos anteriores (necesarios para calcular un nuevo
valor en la siguiente iteración).

El algoritmo, en forma de diagrama de actividades, es:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 21/29


30/6/2020 8-3525 capítulo 7

Guardar

El código respectivo, empleando la estructura for, es:

function legendre(n, x) {
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
if (n==0) return 1;
if (n==1) return x;
let le2, le0=1, le1=x;
for (let i=2; i<=n; i++) {
le2 = (2-1/i)*x*le1-(1-1/i)*le0;
le0 = le1;
le1 = le2;
}
return le2;
}

Con el cual se obtienen los resultados esperados:

legendre(2, 1.3)
2.035
legendre(3, 1.5)
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 22/29
30/6/2020 8-3525 capítulo 7

6.1875
Guardar
legendre(7, 3.9)
330031.5920286937
legendre(0, 2.1)
1
legendre(1, 13.1)
2111485077978050
legendre(4.5, 6.1)
El número debe ser entero
legendre(-3, 1.1)
El número debe ser positivo

9. Escriba una instrucción que, empleando la estructura for, genere y muestre (en la forma: "i =
número") los números 3, 6, 9, ..., 21.

a)

for(var i=3;i<=21;i+=3)print("i = "+i);


i = 3
i = 6
i = 9
i = 12
i = 15
i = 18
i = 21

Nota: 100 Puntos: 10 Repetir


Repetir

10. Programe una función que reciba un número entero positivo y empleando la estructura for
devuelva la sumatoria de los números enteros que existen entre 1 y el número recibido. La
función debe validar que el número sea entero, lanzando el error "El número debe ser entero"
en caso de no serlo y que sea mayor a cero, lanzando el error "El número debe ser mayor a
cero" en caso de no serlo. Luego calcule la sumatoria de los números que existen entre 1 y: a)
5: b) 9; c) 12; d) 36; e) 0; f) 27.5 y g) -15.

a)

function su(n){
if (n%1!=0)
throw"El número debe ser entero";
if(n<=0)
throw"El número debe ser mayor a cero" ;
let s=0;
for(let i=1;i<=1*n;i+=1)s+=i;
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 23/29
30/6/2020 8-3525 capítulo 7

return s;
Guardar
}

su(5)
15
su(9)
45
su(12)
78
su(36)
666
su(0)
El número debe ser mayor a cero
su(27.5)
El número debe ser entero
su(-15)
El número debe ser mayor a cero

Nota: 100 Puntos: 12 Repetir


Repetir

11. Programe una función que reciba un número entero positivo y empleando la estructura for
determine si el mismo es (true) o no (false) un número primo (un número es primo si sólo es
divisible entre 1 y entre sí mismo). La función debe validar que el número sea entero y positivo,
lanzando los errores "El número debe ser entero", en caso de ser real y "El número debe ser
positivo" en caso de ser negativo. En la condición de la estructura for debe emplear el operador
relacional >=. Luego determine si son o no primos los números; a) 7, b) 8, c) 21, d) 157, e) 159,
f) 67.32 y g) -121.

a)

var esPrimo = n => {


if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
throw "El número debe ser positivo";
if (n<2) return false;
for (let i=2; (i<=Math.sqrt(n)); i++)
if (n%i==0) return false;
return true;
};
var esPrimo = n => {
if (!Number.isInteger(n))
throw "El número debe ser entero";
if (n<0)
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 24/29
30/6/2020 8-3525 capítulo 7

throw "El número debe ser positivo";


Guardar
if (n<2) return false;
for (let i=2; i<=n/2; i++)
if (n%i==0) return false;
return true;
};

esPrimo(7)
true
esPrimo(8)
false
esPrimo(21)
false
esPrimo(157)
true
esPrimo(159)
false
esPrimo(67.32)

El número debe ser entero


esPrimo(-121)
El número debe ser positivo

Nota: 100 Puntos: 15 Repetir


Repetir

12. Programe una función que reciba un número entero positivo y empleando la estructura while
devuelva el Fibonacci del número (n) recibido. La ecuación de definición del Fibonacci es:

Fn = Fn−1 + Fn−2

F1 = 1

F2 = 1

La función debe validar que el número sea entero y mayor a cero, lanzando los errores "El
número debe ser entero", en caso de ser real y "El número debe ser mayor a cero" en caso de
ser negativo. Luego, calcule el Fibonacci de: a) 5; b) 7; c) 15; d) 25; e) 75; f) 4.56 y f) 0.

a)

var fibonacci=function (n){


if (n%1!=0)
throw"El número debe ser entero";
if(n<=0)
file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 25/29
30/6/2020 8-3525 capítulo 7

throw"El número debe ser mayor a cero" ;


Guardar
if (n<2) return 1;
let f3,f2=1,f1=1;
let i=3
while(i<=n){

f3=f2+f1
f1=f2;
f2=f3;
i++
}return f3
}

fibonacci(5)
5
fibonacci(7)
13
fibonacci(15)
610
fibonacci(25)
75025
fibonacci(75)
2111485077978050
fibonacci(4.56)
El número debe ser entero
fibonacci(0)
El número debe ser mayor a cero

Nota: 100 Puntos: 15 Repetir


Repetir

13. Programe una función que reciba un número entero positivo (el orden) y un número real y
empleando la estructura do-while devuelva el Chebyshev enésimo del número real recibido. La
ecuación de definición del Chebyshev es:

Chn (x) = 2 ⋅ x ⋅ Chn−1 (x) − Chn−2 (x)


Ch0 (x) = 1
Ch1 (x) = x

La función debe validar que el orden sea entero y positivo, lanzando los errores "El orden debe
ser entero", en caso de ser real y "El orden debe ser positivo" en caso de ser negativo. Luego,
calcule el Chebyshev de los valores cuyo orden y número real son: a) 2, 7.1; b) 5, 1.2; c) 12,
0.3; d) 0, 5.7; e) 1, 6.1; f) 3.22, 0.8 y g) -7, 1.5.

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 26/29


30/6/2020 8-3525 capítulo 7

a)Guardar

var Chebyshev=function (n,x){


if (n%1!=0)
throw"El orden debe ser entero";
if(n<0)
throw"El orden debe ser positivo";
if (n==0) return 1;
if (n==1) return x;
let Ch2, Ch0=1, Ch1=x;
let i=2;
do {
Ch2 = (2*x*Ch1-Ch0);
Ch0 = Ch1;
Ch1 = Ch2;
i++;
} while (i<=n)
return Ch2;
};

Chebyshev(2,7.1)
99.82
Chebyshev(5,1.2)
11.253119999999997
Chebyshev(12,0.3)
-0.8704309944320001
Chebyshev(0,5.7)
1
Chebyshev(1,6.1)
6.1
Chebyshev(3.22,0.8)
El orden debe ser entero
Chebyshev(-7,1.5)
El orden debe ser positivo

Nota: 100 Puntos: 15 Repetir

14. Programe una función que reciba un número entero positivo (el orden) y un número real y
empleando la estructura do-while devuelva el Laguerre enésimo del número real recibido. La
ecuación de definición del Laguerre es:

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 27/29


30/6/2020 8-3525 capítulo 7

Guardar (2n − 1 − x)Ln−1 (x) − (n − 1)Ln−2 (x)


Ln (x) =
n
L0 (x) = 1

L1 (x) = 1 − x

La función debe validar que el orden sea entero y positivo, lanzando los errores "El orden debe
ser entero", en caso de ser real y "El orden debe ser positivo" en caso de ser negativo. Luego,
calcule el Laguerre de los valores cuyo orden y número real son: a) 0, 1.2; b) 1, 3.1; c) 3, 1.3;
d) 5, 3.5; e) 7, 1.67; f) 7.2, 9.3 y g) -5, 6.2.

a)

var Laguerre=function(n,x) {
if(n%1!=0)
throw "El orden debe ser entero";
if(n<0)
throw"El orden debe ser positivo";
if(n==0)return 1;
if(n==1)return 1-x;
let L2,L0=1,L1=1-x;
let i=2
do{
L2=(((2*i-1-x)*L1-(i-1)*L0)/i);
L0=L1;
L1=L2;
i++;
}while(i<=n);
return L2;
}

Laguerre(0,1.2)
1
Laguerre(1,3.1)
-2.1
Laguerre(3,1.3)
-0.7311666666666667
Laguerre(5,3.5)
0.17786458333333338
Laguerre(7,1.67)
0.6983755566108621
Laguerre(7.2,9.3)
El orden debe ser entero
Laguerre(-5,6.2)
El orden debe ser positivo

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 28/29


30/6/2020 8-3525 capítulo 7

Guardar
Nota: 100 Puntos: 15 Repetir

Nota capítulo: 100

Registrar
Registrar Capítulo
Capítulo

file:///D:/materias/mat204/capitulo7/8-3525 capítulo 7 (3).html 29/29

También podría gustarte