Introducci贸n a los algoritmos

1

驴Qu茅 aprender谩s sobre algoritmos y pensamiento l贸gico?

2

La importancia de entrenar tu pensamiento l贸gico

3

驴Qu茅 entiende una computadora?

4

驴Qu茅 es el sistema binario?

5

Metodolog铆a para construir un algoritmo: requerimientos y proceso mental

Tipos de datos y operadores l贸gicos

6

驴Qu茅 son Bits y Bytes?

7

驴Qu茅 son variables, constantes y tipos de datos?

8

Identifica las variables seg煤n los requerimientos de negocio

9

Strings (texto) y concatenaci贸n

10

N煤meros y operaciones matem谩ticas b谩sicas

11

Operaciones matem谩ticas compuestas: par茅ntesis y orden de evaluaci贸n

12

True y false: booleanos y tablas de la verdad

13

Arrays y funciones sobre arrays

14

驴C贸mo dise帽ar algoritmos con diagramas de flujo?

15

Define el tipo de dato seg煤n los requerimientos de negocio

Estructuras de control

16

If y Else: condicionales y comparaciones para proteger tus algoritmos

17

Switch y Case: condicionales en forma de casos

18

Excepciones y errores: Throw y Try Catch

19

驴Qu茅 es un ciclo? While, For y Do While

20

Diagrama de flujo con condicionales

21

Diagrama de flujo con ciclos

22

Tutorial de algoritmos de programaci贸n

23

Dise帽a algoritmos para resolver problemas de tu vida diaria

Encapsula tu c贸digo en funciones

24

驴Qu茅 es una funci贸n?

25

驴C贸mo desarrollar tu l贸gica de programaci贸n?

26

Modularizaci贸n de c贸digo

27

Flujo de funciones para encapsular algoritmos

28

Nomenclaturas de programaci贸n: camelCase, PascalCase, snake_case

29

驴Qu茅 es recursividad? Funciones que se llaman a s铆 mismas

30

Convierte algoritmos con ciclos a funciones recursivas

31

Resolviendo acertijos

Traduce tus algoritmos a lenguajes de programaci贸n

32

Diferencias entre lenguajes de programaci贸n

33

C贸mo escribir c贸digo en cualquier lenguaje de programaci贸n

34

C贸mo programar en JavaScript, Python y PHP

35

Introducci贸n al ejercicio en JavaScript

36

Programando en JavaScript

37

Introducci贸n al ejercicio en Python

38

Programando en Python

39

Introducci贸n al ejercicio en PHP

40

Programando en PHP

41

C贸mo programar en Java y Lenguaje C

42

Introducci贸n al ejercicio en Java

43

Programando en Java

44

Introducci贸n al ejercicio en C

45

Programando en Lenguaje C

46

Traduce diagramas de flujo a c贸digo en lenguajes de programaci贸n

Conclusiones

47

Pr贸ximos pasos para aprender programaci贸n profesionalmente

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Programando en JavaScript

36/47
Recursos

Aportes 293

Preguntas 44

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

隆No te rindas!

Aqu铆 ya empezamos a tocar c贸digo puro y duro (y de hecho fue una introducci贸n un poco鈥 hardcore鈥 jaja) mi mejor consejo para ti son estos:
.

  1. Razona: trata de entender qu茅 hace cada l铆nea, si no puedes apoyate de un diagrama de flujo, pero trata de entender bien qu茅 sucede.
  2. Debuguea: Recuerda que usar las instrucciones para imprimir en pantalla te pueden ayudar ver c贸mo los programas se comportan en cierto punto.
  3. Busca la documentaci贸n: Recuerda siempre buscar documentaci贸n, l茅ela y mira c贸mo funciona cada cosa que usas

.
Por ejemplo, en este caso, 驴por qu茅 me imprimer 8? No lo s茅, pero puedo usar debugging:

function secondLargestNumber(numbers) {
  console.log(numbers);
  numbers.sort();
  console.log(numbers);
  numbers.reverse();
  console.log(numbers);
  return numbers[1];
}

Aqu铆 puedes ver c贸mo use debugging para ver qu茅 valores conten铆a mi elemento numbers despu茅s de cada acci贸n.
.
Despu茅s de esto me doy cuenta de que contiene estos valores, el primer par de corchetes es a como mis valores llegan, el segundo par es despu茅s del m茅todo sort y el tercer par es despu茅s del m茅todo reverse:
.

.
Uhmm interesante, 驴por qu茅 el m茅todo sort me est谩 ordenando los valores de esa manera? 馃 隆No tiene ning煤n sentido! 隆Vamos a buscar la documentaci贸n! (hay varias p谩ginas donde puedes documentarte, yo te dejo esta, aunque en archivos de la clase hay otra):
.
https://www.w3schools.com/jsref/jsref_sort.asp
.
Leyendo veo el m茅todo sort() ordena todo como si fueran strings, y en un string, 鈥4鈥 es mayor que 鈥20鈥, 驴Por qu茅? porque estamos comparando strings, no n煤meros. De hecho un string podr铆a decirse que compara el primer caracter, por lo que 4 es mayor que 2.
.
Ahora, si miro m谩s abajo veo que ellos ya me proponen un algoritmo donde puedo ordenar los n煤meros directamente de forma descendiente, ya ni si quiera necesito el m茅todo reverse! As铆 que puedo usarlo, este algoritmo tiene su explicaci贸n, pero por ahora qu茅date con que te va a ordenar los n煤meros de mayor a menor:

function secondLargestNumber(numbers) {

    numbers.sort( function(a, b){
        return b-a
    } );

    return numbers[1];
  
}

let nums = [8, 4, 6, 10, 9, 11, 20];
console.log(secondLargestNumber(nums))

隆Y listo!, mi programa ya funciona, problema solucionado!
.
As铆 es como tienen que empezsar a pensar para resolver problemas, y el debugging y la documentaci贸n ser谩n sus mejores herramientas, 隆no se rindan!

Al inicio no entend铆 muy bien as铆 que decid铆 hacerlo en papel para comprenderlo mejor.

como vemos en la imagen de arriba numbs es el array y la i es el espacio que ocupa cada n煤mero como lo dijeron en clases anteriores en los arrays la primera posici贸n es el 0.
Como vemos en esta l铆nea for (let i=0; i < numbers.length; i++), nos indica que el n煤mero de iteraciones que tendremos ser谩 6 porque numbers.length es la cantidad de elementos que tenemos en nuestro array que es 6 y despu茅s de cada iteraci贸n se le sumara uno a i para la siguiente iteraci贸n hasta llegar a i = 5.

Como podemos ver en la imagen de arriba no se cumple ninguna de las condiciones, as铆 que first y second se mantienen igual; el 煤nico que se modificar铆a seria i al que se le sumar铆a 1.

En la imagen de arriba se ve la segunda iteraci贸n donde i = 1 y numbers[1]=4, se ve que si cumple la segunda condici贸n y second toma el valor de 4 y este se mantendr谩 para la siguiente iteraci贸n como lo veremos en la siguiente imagen.


como podemos ver en la imagen de la cuarta iteraci贸n se cumple la primera condici贸n y second toma el valor de 8 y firts el valor de 10; la segunda condici贸n no se cumple. Para la quinta iteraci贸n i = 4.


en la sexta iteraci贸n firts = 11 y second = 10 y nos retornaria el valor de second que es 10. Ya no se podria hacer una s茅ptima iteraci贸n porque no cumplir铆a con la condici贸n del for que i < 6, ya que para la s茅ptima iteraci贸n el valor de i ser铆a 6.

Yo hice antes de este curso el de Programaci贸n B谩sica que da Freddy que de hecho es gratis y explica muy bien Javascript, luego de ese puedes seguir con los cursos definitivos y es el curso si quieres ser desarrollador web Fronted como yo 馃槂 Te lo recomiendo mucho, en esta clase la verdad si no hubiera hecho ese curso hubiera quedado un poco asustada con el lenguaje

Al principio no entendi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
al final despu茅s de revisar todo paso por paso y con los conocimientos t茅cnicos de los cursos anteriores.

tampoco entend铆 nada

Me quede鈥 鈥 鈥 Pero si yo a煤n no s茅 programar en js鈥 Bueno de momento lo voy viendo. Toca verlo m谩s adelante y ah铆 ya tendr谩 m谩s sentido esto de seguro.

Creo que entre a a la clase equivocada. apenas me estoy familiarizando con lo conceptos b谩sico y salen con este ejemplo.

隆hasta aqu铆 llegue!
esta se帽ora se salta por completo la curva de aprendizaje. vamos en la parte 36 sin tan siquiera usar, o tan siquiera explicar Node.js y pega un salto ol铆mpico a escribir c贸digo. no critico lo de escribir c贸digo, pero debi贸 introducir esto bastante atr谩s. parece que le toco pisar el acelerador a mitad de curso.

lo 煤nico bueno era encontrar en este curso cursos alternativos de fundamentos as铆 al menos enterarme de algo, por que los dem谩s instructores no trabajan asi, hacen cosas como poner ejemplos concretos de lo que esta explicando no solo informaci贸n te贸rica. porque en todo lo que duro la parte de diagrama de flujo el 煤nico ejemplo practico fue el de Pok茅mon, y fue un video de Freddy.

si no es por la comunidad, ya hace mucho dejo tirado esto. 隆驴como es posible que usuarios expliquen mejor que la que se supone esta dictando el curso?!

me salto este curso, voy a seguir con el curso de Freddy de programaci贸n b谩sica y los que le siguen.

No me gusto esta parte, en mi caso estoy desde cero en la programaci贸n, no explicaron bien como descargar, como escribir, indicaron todo como si personas como yo supi茅ramos, pienso que la idea de estos cursos es explicar un poco mas a detalle

馃惐鈥嶐煉 Interesante como podemos optimizar el c贸digo cuando conocemos las funciones que tiene el lenguaje de programaci贸n.

function secondLargestNumber(numbers){
  numbers.sort();
  numbers.reverse();
  return numbers[1];
}

let nums = [8, 4, 6, 10, 9, 11, 20];
console.log(secondLargestNumber(nums));

No entend铆 nada鈥 馃槮

Me cost贸 entender como corr铆a este c贸digo
Al visualizar los resultados de cada iteraci贸n del ciclo for con el console.log(), se puede comprender mejor el c贸digo 帽.帽

<function secondLargesNumber(numbers)
{
  let first = numbers[0];
  let second = 0;
  for (let i = 0; i < numbers.length; i++)
  {
    if(numbers[i] > first)
    {
      second = first;
      first = numbers[i];
    }
    if(numbers[i] > second && numbers[i] < first)
    {
      second = numbers[i];
    }
    console.log(numbers[i], first, second, );
  }
  return second;
}
let nums = [8, 4, 6, 10, 9, 11];
console.log(secondLargesNumber(nums));>

El resultado de cada iteraci贸n que ocurre en el ciclo es el siguiente:
.
Al iniciar numbers[ 0 ] es: 8, first es: 8 y second es: 0
Luego:
numbers[ 1 ] es: 4, first es: 8 y second es: 4
numbers[ 2 ] es: 6, first es: 8 y second es: 6
numbers[ 3 ] es: 10, first es: 10 y second es: 8
numbers[ 4 ] es: 9 first es: 10 y second es: 9
numbers[ 5 ] es: 11, first es: 11 y second es: 10
.
finalmente return nos retorna second = 10
.
Recuerden que el ciclo ocurre hasta que se cumpla la condici贸n i < numbers.length y numbers.length es igual a 6 porque es la cantidad de n煤meros que contiene nuestro arrays nums = [8, 4, 6, 10, 9, 11]. 馃槃

鉁匧a soluci贸n a la preguta final: Si hacemos nums.sort() el orden va a quedar: [10, 11, 20, 4, 6, 8, 9] porque sort ordena en forma alfab茅tica. Va primero el 10 que el 2 o el 4 porque empieza por 1. Si hacemos el reverse, el segundo n煤mero ser谩 8

Para los que apenas comienzan en la programaci贸n esta clase es demasiado abrumadora. Deber铆an poner ejemplos m谩s pr谩cticos y sencillos. Veo que la l贸gica la explicaron en documentaciones pasadas pero eso amerita un video porque para alguien que apenas empieza eso podr铆a ser muy complicado, tambi茅n veo que muchos se desesperan y se rinden porque la programaci贸n es muy dif铆cil, eso se podr铆a solucionar con ejemplos m谩s pr谩cticos y sencillos.

馃敶 Es inconcebible el cambio, se deberia hacer un acercamiento mas sencillo y facil para familiarizarse con al lenguage JS,
.
Se paso de la utilizacion de algunos algoritmos en diagramas de flujo a escribir una extensa linea entera de codigo.

Comparto el ejercicio explicado paso a paso:

  1. Explicaci贸n del algoritmo
  1. Si no entendiste la primera l谩mina, te invito a ver el desarrollo de un ejercicio:
oigan iba muy bien con el curso hasta este punto. no entend铆 nada, me desmotive y Platzi no es mentorias. tanto que me inscrib铆 a crehana y estoy impactado de las diferencias que hay, osea si tiene sus ventajas. igual no digo que Platzi sea malo, pero aveces le falta como ser m谩s animado o explicar las cosas mejor. como que asume que uno ya sabe. no se... a Platzi le falta m谩s soporte inmediato y mentorias !

Me veo motivado a ser cr铆tico en mi comentario y en mi opini贸n con respecto al curso. Es un curso de Pensamiento L贸gico y no tiene ninguna l贸gica c贸mo est谩 formulado y explicado, ya que saltas de un tema a otro y de repente te escupe un mont贸n de conceptos los cuales nunca has escuchado antes, y finaliza d谩ndote como tarea un reto m谩s elevado a dichos conceptos como si ya fueras experto, lo cu谩l para alguien que se est谩 iniciando no hace sentido y en vez de aprender es no tener comprensi贸n sobre el funcionamiento del cerebro del ser humano, ya que requiere de un proceso para asimilar lo aprendido antes de su misma comprensi贸n de los nuevos conceptos y todo esto requiere de un proceso que considero deber铆a de ser tenue y calmado. De otra manera es frustrante y no hace sentido hacer un curso con esta din谩mica tan poco comprensible. Este curso est谩 bien si lo repites 3 o 4 vezes, lo cu谩l considero que un curso no debe de hacerse con este fin. Mejor m谩s cantidad de v铆deos explicando, con m谩s calma y detenimiento en lo que se explica, que rapidez y todo el contenido apretujado para que quepa en un solo v铆deo. De todas formas estoy contento con los conocimientos que se aportan.

No olvides tener en cuenta los diferentes casos de uso de tu funci贸n:

  • El array puede tener una longitud variable
  • Los n煤meros pueden repetirse dentro de un array [1, 2, 2, 3, 4, 3]
  • No siempre lo m谩s obvio es la respuesta, debes probar tu l贸gica en diferentes escenarios

El m茅todo sort() ordena los elementos de un array localmente y devuelve el mismo array ordenado. El modo de ordenaci贸n por defecto responde a la posici贸n del valor del string de acuerdo a su valor Unicode (Es decir ordena alfab茅ticamente). Ej.

[8, 4, 6, 10, 9, 11, 20] => [10, 11, 20, 4, 6, 8, 9]

La soluci贸n a la funci贸n seria:

function secondLargestNumber(numbers) {
    numbers.sort(function (a, b) {
        return a - b;
    });
    numbers.reverse();
    return numbers[1];
}

Alguien me puede explicar porque la function tiene como argumento 鈥渘umbers鈥 pero luego el array a recorrer se llama nums?? No deber铆a llamarse igual?? y de no ser as铆 a que hace referencia numbers?? no entiendo esa l贸gica. gracias

al principio no entend铆 nada 鈥 al final tampoco xD

Para escribir con JS les recomiendo usar directamente la consola

Pasos

  • Dar click derecho en cualquier parte de nuestro navegador
  • Dar click en inspeccionar
  • Damos click en la seccion que dice console
  • Podemos escribir codigo con respuesta inmediata esto gracias a V8 el motor de JS que funcion en tiempo real
    Just in time compiler!!

para ser un curso basico el ejemplo es muy dificil de entender, me hubiera gustado que e vez de dejar lecturas hubiera explicado con en video los conceptos que esta usando ya que solo hemos tocado lo basico de algoritmos pero pasar asi de HARD a un Lenguaje asusta a la mayoria, nisiquiera hemos tenido ejemplos del uso de FOR, WHILE, DO WHILE, creo que si desarrolla mas ejemplos estaria mejor

Realmente viendo solo los video es muy dif铆cil que aprendas, yo hago lo siguiente:

en cada video cada vez que escucho un concepto o una palabra que no conozco lo googleo y veo videos en YouTube sobre el tema para poder comprender mejor y seguir avanzando.

Estuve en un Bootcamp y decid铆 no continuar por que es demasiado acelerado, me di cuenta de que para mi es mejor ir con calma y avanzar a paso lento pero firme, sin embargo se que hay personas que pueden ir tranquilamente a esos ritmos acelerados seguramente es por que tienen excelentes bases.

Por lo tanto tomate las cosas con calma si hay algo que no entiendes invest铆galo profundiza y despu茅s sigue avanzando.

Al principio pensaras que vas muy lento pero poco a poco con el tiempo vas a ver que tu ritmo de aprendizaje se ira acelerando y esto se da gracias a las buenas bases que construiste en un principio.

Antes de correr para, y aprende caminar!

function secondLargesNumber(numbers) {
	let first = numbers[0]
	let second = 0;
	for(let i=0; i < unmbers.length; i++) {
		if (numbers[i] > first) {
			second = first;
			first = numers[i]
		}
		if (numbers [i] > second && numbers[i] < first) {
			second = numbers[i];
		}
	]
	return second
}

let nums = [8, 4, 6, 10, 9, 11, 20]
console.log(secondLargestNumber(nums))

ESTO NO ES UNA EXPLICACI脫N DESDE CERO. MUY BUENO PARA EL QUE YA SABE PROGRAMACI脫N Y VIO HTML Y CSS Y JAVASCRIPT.
Necesito aprender para poder dejar mi trabajo actual, esto me hace perder tiempo!!! estoy a pasitos de volver a youtube.

Dios鈥 no se si reir o llorar jajaja

El m茅todo 鈥渟ort鈥 tiene una forma particular de organizar los elementos dentro de un arreglo en esta pagina explican a detalle:
https://www.freecodecamp.org/espanol/news/ordenar-arreglos-en-javascript-como-usar-el-metodo-sort/

El algoritmo funcionando quedar铆a as铆:

El error en el segundo c贸digo se presenta porque el m茅todo sort ordena los elementos dentro del array como strings, y no tiene en cuenta el valor num茅rico sino su posicion en el sistema Unicode. Al usar numbers.sort() nos queda ordenado [10, 11, 20, 4, 6, 8, 9]. Al cambiar el orden con numbers.reverse() se convierte en [9, 8, 6, 4, 20, 11, 10]. Es as铆 como se obtiene que 8 es el segundo mayor. Ahora, yo prob茅 este c贸digo en Replit y s铆 me arroja 11 como second. 驴Cambi贸 en algo sort? La p谩gina que consult茅 fue esta: https://www.todojs.com/usar-correctamente-el-metodo-sort/

al principio vi el video y me confundio todo, pero tuve que ver mas videos y entender el lenguaje javascript, y al final pude lograrlo entender 馃槃 VAMOS TU TAMBIEN PUEDES!! (me demore 1 dia en entenderlo)

no comprendo: 1. Porq se inicia en 0, es porque la posici贸n inicial es cero [0] , la misma duda para second =0 2. Se considera el < y > pero tambi茅n se puede dar el caso que sea = . 3. En el if cu谩l ser铆a el else el segundo if? porque no se usa el else 鈥 si alguien sabe porfa鈥 porq mconfundo 鈥 gracias :<

Valla que interesante nose olviden que esto es un acercamiento y si quieres profundizar en los lenguajes tienes que tomar sus cursos respectivamente no se frusten SI NO lo entienden ahora cuando profundizen en los lenjuages lo entenderan.

function secondLargestNumber(numbers){
  numbers.sort((a, b) => a + b);
  numbers.reverse();
  return numbers[1];
}

let nums = [8, 4, 6, 10, 9, 11, 20];
console.log(secondLargestNumber(nums));

En mi modesto entender, el curso est谩 mal enfocado para aquellas personas que son nuevos en la programaci贸n.

Yo lo que hice fue primero ver la clase y hacer el c贸digo al mismo tiempo, al final ver el video otra vez, analizar m谩s detenida mente y poner comentarios en cada l铆nea.

function SecontLargestNumber(numbers){ //Se declara la funcion.
    let first = numbers[0] //Se declara la variable que contendr谩 el n煤mero m谩s grande una vez corra el c贸digo, esta va a iniciar con la primera posici贸n del arreglo y en caso de encontrar un n煤mero m谩s grande va a ir cambiando de valor.
    let second = 0; //Se declara la variable que contendr谩 el segundo n煤mero m谩s grande, y solo cambiara de valor una vez este n煤mero se encuentre.
    for (let i=0; i < numbers.length; i++){ //Se usa un ciclo "for" para ir por cada uno de los valores del areglo y luego realizar las evaluaciones necesarias, donde i=0 indica la posici贸n en la que va a empezar a evaluar el arreglo, i<numbers.length le dice al ciclo que 煤nicamente realizara comparaci贸n con los n煤meros dentro del arreglo, i++ indica cada cambio de iteraci贸n haciendo la funci贸n de un contador y asi evitar que haga un cliclo infinito.
        if (numbers[i] > first){ // Aqui pregunta si el valor que se est谩 evaluando actualmente en arreglo es m谩s grande que el valor actual de first, como ejemplo podemos poner la primera iteraci贸n en la que va a preguntar si la posici贸n 1 del arreglo es m谩s grande que 0, ya que ese fue el valor declarado inicialmente en first.
           second = first; // Si se cumple la condici贸n anterior vamos a decirle a la variable second que tome el valor de first, porque al cumplirse esta condici贸n first ser铆a el segundo n煤mero m谩s grande y numbers[i] ser铆a el valor m谩s grande.
           first = numbers [i] // Se le indica a first que ser谩 igual al n煤mero m谩s grande, que en este caso seria el valor de la posici贸n que se esta analizando en el arreglo como numbres[i].
        }
        if (numbers[i] > second && numbers[i] < first){ // Aqu铆 se hace una doble comparaci贸n para asegurar que los valores son correctos, pregunta que si el valor del arreglo que se est谩 evaluando es mayor que el que se encuentra en la variable second, pero menor al que se encuentra en la variable first.
            second = numbers[i]; // En caso de que la condici贸n se cumpla la condici贸n anterior, se indica que second tomara el valor que se evaluaba en numbers[i].
        }
    }
    return second //Aqui le indicas al c贸digo que es lo que debe retornar, que debe ser el valor de la variable que and谩bamos buscando.
}
let nums = [8, 4, 6, 10, 9, 14, 16, 1] //Fuera de la l贸gica podemos declar贸 el arreglo que evaluara la funcion "SecontLargestNumber"
console.log(SecontLargestNumber(nums)) // en esta l铆nea le decimos que corra toda la l贸gica con el areglo del renglon aterior e imprima el resultado.

personalmente no me gusto nada este curso, me parece desordenado y muy poco natural, la forma de explicar que tiene la profesora se me hace pauteada al punto de que estoy aprendiendo mas con los comentarios de los compa帽eros

Hola, estoy aprendidendo a programar desde 0 y cuando digo 0 es porque es 0, y este curso b谩sico de algoritmos de pensamiento l贸gico la verdad me ha parecido de lo mas mal estructurado que hay, puede que esta profesora tenga muchos conocimientos en el 谩rea de la programaci贸n pero si no sabe ense帽ar o por lo menos darse a entender no tiene nada que hacer ac谩 dictando este curso, se supone que esto es b谩sico y la se帽ora no sabe eso. Este curso debe replantearse

La verdad me parece p茅simo, que se arranque con l贸gica y c贸digo puro, sin hacer un acercamiento verdadero al lenguaje. Es como que le quiera explicar funciones avanzadas de excel a una persona que por primera vez abre el programa y no le de ni una m铆nima introducci贸n de lo que es el programa, y con qu茅 tipo de f贸rmulas nos vamos a encontrar. Mal铆sima profesora, ya no me ven铆a gustando su enfoque pero con esto ya menos, y perd铆 un monton de tiempo.

No explican bien como entrar al Replit y cual lenguaje es, terrible as铆 confunden al que no sabe mucho de esto.

Me temo que la profesora no entiende el sentido pedag贸gico del asunto, dice curso b谩sico de algoritmos y pensamiento l贸gico y manda una cadena de c贸digo con conceptos y palabras que no ah explicado, As铆 como seguirle el paso? (Hay que ir de menos a mas). por favor validar este curso desactualizado y es poco factible la verdad.

Para las personas que estan comenzando en Javascript les recomiendo este curso :
https://platzi.com/clases/basico-javascript/

El profesor explica muy bien los conceptos basicos del lenguaje y de la programacion en general

Una hora me ha tomado tratar de entender tanto la anterior clase como esta. Casi la logro, pero hay cosas que debo cuadrar todav铆a.
Me funcion贸 leer l铆nea por l铆nea y buscarle la l贸gica.

En JavaScript, podemos ordenar los elementos de un arreglo f谩cilmente con el m茅todo incorporado sort().

Sin embargo, los tipos de datos (cadena, n煤mero, etc.) pueden diferir de un arreglo a otro. Esto significa que usar 煤nicamente el m茅todo sort() no siempre es la soluci贸n adecuada.

En este post, aprender谩s como ordenar un arreglo en JavaScript usando el m茅todo sort() con cadenas y n煤meros.

Arreglo de Cadenas
Comencemos con cadenas:

const equipos = [鈥楻eal Madrid鈥, 鈥楳anchester Utd鈥, 鈥楤ayern Munich鈥, 鈥楯uventus鈥橾;
Cuando usamos el m茅todo sort(), los elementos se ordenar谩n en orden ascendente (de la A a la Z) por defecto:

equipos.sort();

// [鈥楤ayern Munich鈥, 鈥楯uventus鈥, 鈥楳anchester Utd鈥, 鈥楻eal Madrid鈥橾
Si prefieres ordenar el arreglo en orden descendente, debes usar el m茅todo reverse() en su lugar:

equipos.reverse();

// [鈥楻eal Madrid鈥, 鈥楳anchester Utd鈥, 鈥楯uventus鈥, 鈥楤ayern Munich鈥橾
Arreglo de N煤meros
Lamentablemente, ordenar n煤meros no es tan simple. Si aplicamos el m茅todo sort() directamente a un arreglo de n煤meros, veremos un resultado inesperado:

const numeros = [3, 23, 12];

numeros.sort(); // --> 12, 23, 3
Por qu茅 el m茅todo sort() no funciona con n煤meros
En realidad est谩 funcionando, pero este problema ocurre porque JavaScript ordena los n煤meros alfab茅ticamente. D茅jame explicarte esto en detalle.

Pensemos en A=1, B=2 y C=3.

const miArreglo = [鈥楥鈥, 鈥楤C鈥, 鈥楢B鈥橾;

miArreglo.sort(); // [AB, BC, C]
Por ejemplo, si tenemos tres cadenas como C (3), BC (23) y AB (12), JavaScript las ordenar谩 como AB, BC y C en orden ascendente, lo que es alfab茅ticamente correcto.

Sin embargo, JavaScript ordenar谩 los n煤meros (alfab茅ticamente nuevamente) como 12, 23 y 3, lo cual es incorrecto.

Soluci贸n: la funci贸n de comparaci贸n
Afortunadamente, podemos complementar el m茅todo sort() con una funci贸n de comparaci贸n b谩sica que haga el truco:

function(a, b) {return a - b}
El m茅todo sort() puede ordenar valores negativos, cero y positivos en el orden correcto. Cuando compara dos valores, los env铆a a nuestra funci贸n de comparaci贸n y luego ordena los valores de acuerdo al resultado devuelto.

Si el resultado es negativo, a se ordena antes que b.
Si el resultado es positivo, b se ordena antes de a.
Si el resultado es 0, nada cambia.
Todo lo que necesitamos es usar la funci贸n de comparaci贸n dentro del m茅todo sort():

const numeros = [3, 23, 12];

numeros.sort(function(a, b){return a - b}); // --> 3, 12, 23
Si queremos ordenar los n煤meros en orden descendente, esta vez necesitamos restar el segundo par谩metro (b) del primero (a):

const numeros = [3, 23, 12];

numeros.sort(function(a, b){return b - a}); // --> 23, 12, 3
En conclusi贸n
Como podemos ver, ordenar los elementos de un arreglo puede hacerse f谩cilmente en JavaScript con el m茅todo sort(), si sabemos usarlo correctamente. Espero que mi post pueda servirte de ayuda para entenderlo y usarlo de la mejor forma.

Paso a paso del ejercicio

  1. Para crear una funcion en JavaScript lo primero es reservar con la palabra reservada la cual le daremos un nombre:
function secondLargestNumber  

Esta funcion lo que hace es encontrar el segundo valor mas alto del array que estemos buscando, para eso necesitamos recibir un parametro array dado que ser铆a: (numbers)

function secondLargestNumber(numbers)

ahora para definir cuales son esos bloque de codigo debemos abrir { } y ser谩 aqu铆 dentro donde pondremos toda la logica de nuestro algoritmo

  1. Lo siguiente ser铆a definir una variable que ser谩 el numero donde vamos a iniciar, la cual llamaremos first y diremos que ser谩 la posici贸n 0 de nuestro array numbers, por lo tanto aqui ya vamos a partir desde la primera pocisi贸n.
function secondLargestNumber(numbers) {
    let first = numbers[0]
}
  1. Lo siguiente que realizariamos es la variable en la cual vamos a almacenar el segundo valor que ser谩 sobre el que vamos a empezar a trabajar y est茅 lo vamos a iniciar en 0
function secondLargestNumber(numbers) {
    let first = numbers[0]
    let second = 0;
}
  1. Lo siguiente ser铆a plantear la logica de la busqueda, de nuestro array para poder encontrar cual ser谩 el segundo numero mas grande, para esto vamos a utilizar un ciclo for que nos permitir谩 ir por cada posici贸n de nuestro array y realizar las evaluaciones que necesitemos, recuerda que la sintaxis de for empieza definiendo una variable inicial que ser谩 la que itere y la vamos a inicializar en 0
    Luego la vamos a mover por la cantidad de posiciones que tenga nuestro array, para esto vamos a decir que mientras i sea menor a numbers en su longitud
    la palabra para traer la longitud de un array es la palabra reservada length que nos define el tama帽o total de nuestro array luego incrementariamos a i++ para que haga todas las iteraciones necesarias
function secondLargestNumber(numbers) {
    let first = numbers[0]
    let second = 0;
    for (let i=0; 1 < numbers.length; i++) {
 }
}
  1. Nuevamente abrimos los corchetes {} para indicar que dentro se realizara la logica de codigo, ahora vamos a preguntar si nuestro numero actual por cada una de las iteraciones que vamos a realizar es mayor a nuestro primer numero del array, como aun no tenemos conocimiento de ello, vamos a utilizar una condici贸n if voy a colocarme en la posici贸n actual de mi array de numbers y entre corchetes le vooy a indicar que [i] es la que me indica la posicion en la que estoy actualmente, luego le preguntaria si i es mayor a nuestro primer valor.
function secondLargestNumber(numbers) {
    let first = numbers[0]
    let second = 0;
     for (let i=0; 1 < numbers.length; i++) {
       if  (numbers[i] > first) 
 }
}
  1. luego abririamos nuevamente corchetes que nos indicar铆a que vamos a realizar una nueva logica que se ejecutara si numbers en su posicion i, es mayor al numero que definimos como el primero, nuevamente en caso de que entremos aqu铆 vamos a definir que nuestra variable second sera igual a first, recuerda que esto es solo si cumple con la condici贸n que hemos cumplido en el first, luego le vamos a indicar que first tomara un nuevo valor que ser谩 numbers en la posicion actual que est谩 dada por i
function secondLargestNumber(numbers) {
    let first = numbers[0]
    let second = 0;
     for (let i=0; 1 < numbers.length; i++) {
       if  (numbers[i] > first) {
         second = first;
         first= numbers[i]
   }
 }
}
  1. si nuestra condici贸n no se cumple debemos realizar una segunda condi贸n donde vamos a evaluar otros casos, como ser谩 si en la posici贸n actual donde estamos que es dada por numbers en la posici贸n i es mayor al valor que tenemos definido como second && que ademas nuestra posici贸n actual que es numbers en su posici贸n i sera menor a first. Si esta condici贸n se cumple se ejecutar铆a lo que vamos a definir dentro de nuestros corchetes y sera que el segundo valor de nuestra variable sera la posici贸n actual en la que estamos.
function secondLargestNumber(numbers) {
    let first = numbers[0]
    let second = 0;
     for (let i=0; 1 < numbers.length; i++) {
       if  (numbers[i] > first) {
         second = first;
         first= numbers[i]
   }
   if (numbers[i] > second && numbers[i] < first) {
     second = numbers[i];
  }
 }
}
  1. De esta manera tendremos dos casos de evaluaci贸n sobre los cuales vamos a retornar el resultado que hayamos obtenido atravez de un return second que sera el que nos indique el segundo valor, para hacer el llamado de esta funci贸n y ver si de verdad nos va a funcionar vamos a definir nuestro array de numeros, que le vamos a llamar nums y como ya no estamos dentro de nuestra funci贸n podemos darle el nombre que querramos, colocamos nums porque estamos trabajando con numeros, y
    luego colocaremos numeros al azar y luego vamos a hacer llamado a nuestra funci贸n secondLargestNumber luego dentro de parentesis vamos a pasar el argumento que ser铆a nums que seria el valor que le corresponde a numbers que fue el parametro que definimos, as铆 que decimos que nums ser谩 los valores que vamos a enviar.
    Para poner en funcionamiento nuestro aplicacion debemos colocar una herramienta muy simple de JavaScript que es llamada console.log que no solo muestra los datos en cosola, si no que te ayuda a debuggear tu aplicaci贸n en caso de tener un problema.
function secondLargestNumber(numbers) {
    let first = numbers[0]
    let second = 0;
     for (let i=0; 1 < numbers.length; i++) {
       if  (numbers[i] > first) {
         second = first;
         first= numbers[i]
   }
   if (numbers[i] > second && numbers[i] < first) {
     second = numbers[i];
  }
 }
  return second
}
 let nums = [8,4,6,10,9,11]
console.log(secondLargesNumber(nums))

Hola, Aqu铆 dejo un aporte:

Soluci贸n usando Sort

function getNumber(numbers) {
    orderedNumbers = numbers.sort(function(a,b) {
        return a-b
    }); 
    console.log('arreglo ordenado: '+ orderedNumbers);
    revNumbers = orderedNumbers.reverse();
    console.log('arreglo invertido: '+revNumbers);
    for(let i = 0; i <= revNumbers.length; i++) {
        if(revNumbers[i] !== revNumbers[i+1]) {
            secLarNum = revNumbers[i+1];
            return 'el segundo n煤mero m谩s grande es: ' + secLarNum;
        };
    }
    
}

Notas:

  1. La funci贸n sort() ordena los elemetos del array como si fueran cadenas de caracteres y no valores num茅ricos, es necesario incluir una funci贸n de comparaci贸n para que ordene num茅ricamente.

  2. Para solucionar el problema que se generar铆a en caso de tener n煤meros repetidos en los elementos del arreglo, se compara cada elemento del arreglo con el siguiente y solo si es diferente se ha encontrado el segundo n煤mero m谩s grande.

Ejemplo:

ejemplo

No me qued贸 claro. 馃槮

Para la segunda forma, que dicen que no se puede, si agregamos los m茅todos reduce y sort podemos encontrar el segundo valor m谩s grande dentro de un array, de esta manera:

let lista = [3, 4, 4, 1, 4, 2, 1, 1];

let lista_reducida = lista.reduce((a, e) => {
    if (!a.find(d => d == e))
    {
        a.push(e)
    }
    return a;
}, []);

console.log(lista_reducida);

lista_reducida.sort((a, b) => b - a);
console.log(lista_reducida);

console.log("El segundo valor m谩s grande dentro de un array: " + lista_reducida[1])

Les recomiendo hacer el curso de programaci贸n b谩sica de Fredy, esta profesora no est谩 explicando como analizar el problema para resolverlos.

Lo primero QUE YO HICE (un an谩lisis personal) fue definir un array cualquier, por ejemplo [3, 4, 1, 6, 2]. Luego escrib铆 las variables que yo cre铆a que pod铆a necesitar, en este caso el dato que busco es el segundo n煤mero m谩s alto, as铆 que esa ser铆a una, pero si hablamos de un segundo n煤mero m谩s alto, tambi茅n debe haber un primero, por lo que tambi茅n agregue ese como otra variable de inter茅s, entonces mis variables son:

# first, second

Luego escrib铆 en un papel como ser铆a una iteraci贸n en el array definido, y cu谩les serian los valores correctos para cada variable en cada iteraci贸n.

	3 => first = 3, second = 0    # Iteracion 1
	4 => first = 4, second = 3    # Iteracion 2
	1 => first = 4, second = 3    # Iteracion 3
	6 => first = 6, second = 4    # Iteracion 4
	2 => first = 6, second = 4    # Iteracion 5

Al escribir esto en un papel, sent铆 que mi mente explotaba, lo primero que pude ver en el papel fue que siempre que first cambiara, second iba a tomar el valor de first, lo otro que note es first siempre iba a cambiar si el valor actual era mayor que 茅l.

Luego lo lleve todo al c贸digo y funciono como la ceda. Cada quien tiene una forma de razonar y pensar distinta, solo tiene que buscar la tuya, no te rindas 鉂わ笍

Aqu铆 mi implementaci贸n:

/**
 * This function find the second largest number
 * in a list of numbers (array) like [3, 4, 1, 6, 2]
 * 
 * @param int numbers
 * @return int
 */
 function findSecondLargestNumber(numbers) {
    let firstBigger  = numbers[0];
    let secondBigger = 0;
  
    for(let i=0; i < numbers.length; i++ ) {
      const number = numbers[i];
      
      if (number > firstBigger) {
        secondBigger = firstBigger; 
        firstBigger  = numbers[i];
      }  
    }
  
    console.log(`First Bigest Number is: ${firstBigger}`);
    console.log(`Second Bigest Number is: ${secondBigger}`);
  }

El problema al utilizar la funci贸n .sort es que ordena de menor a mayor seg煤n el primer d铆gito, es decir si el array es [11, 2, 6, 8, 33] lo va a ordenar de esta forma: [11, 2, 33, 6, 8], empezando con los primeros n煤meros 1 (11), 2(2), 3(33) y as铆 sucesivamente.

Comparto el ejercicio explicado paso a paso, al inicio no entend铆a pero de esta manera se me hizo f谩cil entender la l贸gica de porqu茅 el presente algoritmo nos da el segundo mayor valor:

  1. Explicaci贸n algoritmo:

  2. Desarrollo de un ejemplo:

Ahora si codigo puro y duro (lo puse en menor velocidad para entender mejor)

god!
Yo tengo un nivel de javascript muy basico, y lo que la profesora explica en este video lo entiendo, pero me imagino no saber las bases y la verdad me daria mucho susto. Este curso en vez de orientar al aprendiz lo que hace es aterrarlo y desorientarlo. Ya llegu茅 hasta aqui lo que me obliga en lo personal a terminalo, pero me ha parecido un curso muy flojo y hardcore para las personas que estamos iniciando incluso ya sabiendo bases del lenguaje.

Hola, tal vez el c贸digo que hice es muy extenso, pero funciona para buscar el segundo n煤mero m谩s grande en valor, as铆 existan n煤meros repetidos.

var numeros=[1920,43,2000,9,1236,2000,1967,4,7,1235,93,1400];
var posicion=0;
var tama帽o=numeros.length;
var posicionMayor=[];
var numeroMayor=numeros[posicion];
numeroGrande();
function numeroGrande()
{
  posicion+=1;
  if(posicion<tama帽o)
  {
    if(numeroMayor>numeros[posicion])
    {
    }
    else
    {
        numeroMayor=numeros[posicion];
    }
    numeroGrande();
  }
  else
  {
      buscar();
  }
}

function buscar()
{
  for(var a=0;a<tama帽o;a++)
  {
    if(numeroMayor==numeros[a])
    {
      posicionMayor.push(a);
    }
  }
  segundoMasGrande();
}

function segundoMasGrande()
{
  var b=0;
  numeroMayor=numeros[b];
  var tama帽o2=posicionMayor.length;
  var inicio;
  for(b=1;b<tama帽o;b++)
  {
    inicio=0;
    for(c=0;c<tama帽o2;c++)
    {
        if(b==posicionMayor[c])
        {
          inicio=1;
        }
    }
if(inicio==1)
{

}
else
{
  if(numeroMayor>numeros[b])
  {
  }
  else
  {
    numeroMayor=numeros[b];
  }
}
  }
    alert(numeroMayor);
}

Se que estoy utilizando algunas cosas mas avanzadas pero quer铆a dar mi aporte de otra forma de poderlo hacer.

function secondLargestNumber(numbers){
  let first = numbers[0], second = 0;

  for (let num of numbers){

    if(num > first){
      second = first
      first = num
    }
    if(num > second && num < first){
      second = num
    }
  }
  return second
}
let numeros = [1,2,3,4,5,6,7,8,9,10]
console.log(secondLargestNumber(numeros))

Les propongo otro c贸digo鈥


function segundo(n)
{
    let res = n.sort((a, b) =>{
        return b - a;
    });
    return res[1];
}
console.log(segundo([8, 7, 15, 10, 2, 9]));

El error esta en la manera como lo 鈥渙rdena鈥 la extensi贸n sort() ya que su comparaci贸n la hace convirtiendo en string lo pasado como argumento, y ah铆 procede a la comparaci贸n, lo que dar铆a como resultado:
numbers.sort():
[10, 11, 20, 4, 6, 8, 9]

Luego al aplicar el reverse quedar铆a: [9, 8, 6, 4, 20, 11, 10]
y por eso al retornar el elemento de la posici贸n [1] es que retornamos el 8.

馃
Razona: trata de entender qu茅 hace cada l铆nea, si no puedes apoy谩te de un diagrama de flujo, tratemos de entender bien qu茅 sucede.
Debuguea: Recuerda que usar las instrucciones para imprimir en pantalla te pueden ayudar ver c贸mo los programas se comportan en cierto punto.
Busca la documentaci贸n: Recuerda siempre buscar documentaci贸n, l茅ela y mira c贸mo funciona cada cosa que usas
.
Por ejemplo, en este caso, 驴por qu茅 me imprimer 8? No lo s茅, pero puedo usar debugging:
function secondLargestNumber(numbers) {
console.log(numbers);
numbers.sort();
console.log(numbers);
numbers.reverse();
console.log(numbers);
return numbers[1];
}
Aqu铆 puedes ver c贸mo use debugging para ver qu茅 valores conten铆a mi elemento numbers despu茅s de cada acci贸n.
.
Despu茅s de esto me doy cuenta de que contiene estos valores, el primer par de corchetes es a como mis valores llegan, el segundo par es despu茅s del m茅todo sort y el tercer par es despu茅s del m茅todo reverse:
.
debug.png
.
驴por qu茅 el m茅todo sort me est谩 ordenando los valores de esa manera? 隆No tiene ning煤n sentido! 隆Vamos a buscar la documentaci贸n! (hay varias p谩ginas donde puedes documentarte, yo te dejo esta, aunque en archivos de la clase hay otra):
.
https://www.w3schools.com/jsref/jsref_sort.asp
.
Leyendo veo el m茅todo sort() ordena todo como si fueran strings, y en un string, 鈥4鈥 es mayor que 鈥20鈥, 驴Por qu茅? porque estamos comparando strings, no n煤meros. De hecho un string podr铆a decirse que compara el primer caracter, por lo que 4 es mayor que 2.
.
Ahora, si miro m谩s abajo veo que ellos ya me proponen un algoritmo donde puedo ordenar los n煤meros directamente de forma descendiente, ya ni si quiera necesito el m茅todo reverse! As铆 que puedo usarlo, este algoritmo tiene su explicaci贸n, pero por ahora qu茅date con que te va a ordenar los n煤meros de mayor a menor:
function secondLargestNumber(numbers) {

numbers.sort( function(a, b){
    return b-a
} );

return numbers[1];

}

let nums = [8, 4, 6, 10, 9, 11, 20];
console.log(secondLargestNumber(nums))
隆Y listo!, mi programa ya funciona, problema solucionado!
.
As铆 es como tienen que empezsar a pensar para resolver problemas, y el debugging y la documentaci贸n ser谩n sus mejores herramientas.

Hola, me costo mucho enteneder la logica que uso para resolver el problema. Mas que el codigo en si. Por lo que con un papel dibuje que iba haciendo el codigo paso por paso hasta que comprendi el por que de esta logica.

Ahora bien, viendo q con sort solo ordena alfabeticamente y la solucion a esto eso usar:

numeros.reverse(function(a,b){
     return b-a
   })

Use esa herramienta y luego una logica mas sencilla (creo)

use el for para ir uno por uno por el array y encontrar el numero siguiente que sea menor a la primera posici贸n, una vez que lo encuentra cierra la busqueda haciendo que i= al largo del array. De esta forma solucionamos el problema de que el primero sea igual al segundo y el resultado sea erroneo.

la logica quedo asi

function elSegundo(numeros){
   numeros.reverse(function(a,b){
     return b-a
   })
  let elMayor = numeros[0]
  let larespuesta = numeros[1]
  for (let i=0; i < numeros.length; i++){
    if (numeros[i] < elMayor){
      larespuesta = numeros[i]
      i= numeros.length
    }
  }
 return larespuesta
}
let numeritos = [8,4,6,10,9,1,8,9,9,9,9,10,10,10]
console.log(elSegundo(numeritos))

function secondLargestNumber(numbers){
numbers.reverse(); //Este para que los invierta, quedando 11 en la posici贸n 1. Recordando que las posiciones inician en cero
return numbers[1];
}
let nums = [8,4,6,10,9,11,20]
console.log(secondLargestNumber(nums));

No s茅 si est谩 bien pero funciona jaja

Mi resultado en Repl es el siguiente:
https://arrayexc.tom4sfelipebelt.repl.co/

A帽ad铆 CSS y us茅 un c贸digo para generar n煤meros aleatorios en el arreglo, adem谩s de usar clasificaci贸n ascendente en el array. Sin embargo, ordenar no es eficiente para este proyecto, por lo que us茅 el algoritmo de la profe

Dejo esto por aqui 馃槂 Espero les sirva.

Los conceptos los saque de la documentacion oficial de MDN.

function secondLargestNumber(numbers) {
console.log(numbers);
numbers.sort(function(a,b){return a-b});
console.log(numbers);
numbers.reverse();
console.log(numbers);
return numbers[1];
}
let nums=[8,9,6,7,11,14,3,20,42,49]
console.log(secondLargestNumber(nums))

dejo los log para que muestre todo el proceso

隆Esta es mi soluci贸n antes de empezar la clase, su opini贸n es valorada!!

var numbers = [4, 9, 6, 7, 3, 2, 9];
numbers = numbers.sort();

var first = numbers[numbers.length - 1];
var second = 0;

for (var actual = 0; actual <= numbers.length; actual++) {
    if (numbers[actual] < first) {
        second = numbers[actual]
    }
}

console.log(numbers);
console.log(first);
console.log(second);

Explicaci贸n del C贸digo hecho por la profe Ana 馃槂
https://i.imgur.com/Lz6ZQX1.png

El m茅todo sort () ordena los elementos de una matriz en y la devuelve ordenada. El orden de clasificaci贸n predeterminado es ascendente, que se basa en convertir los elementos en cadenas y luego comparar sus secuencias de valores de unidades de c贸digo UTF-16. por esto al hacer numbers.sort() numbers =[10,11,20,4,6,8,9] y luego cuando hacemos numbers reverse queda ordenada como numbers = [9,8,6,4,20,11,10], parea solucionar el orden de sortse utiliza la funcion compare

<code> 
let nums = [8, 4, 6, 10, 9, 11,20];
console.log(secondLargestNumber(nums));

function secondLargestNumber(numbers){
  numbers.sort(function(a, b) {
  return a - b;});  
  numbers.reverse();
  return numbers[1];
}

de esta manera se obtiene el resultado esperado que es 11 .

Ya la respuesta ya lo indico otro compa帽ero entre los comentarios. Sin embargo, tuve que investigar como poder implementar el sort. En realidad interesante esta funcion, animo a otros a investigarlo ya que hay otras maneras para implementarlo

El error es que si se repite el n煤mero mayor, ser谩 el segundo mayor. La forma en que lo resolv铆 (mi punto de vista):


let number = [1, 3, 6, 2, 3, 6, 8, 8];

function secondLargestnumber(number){

        number.sort();
        number.reverse();
        for (let i = 0; i < number.length; i++) {
            if(number[i] != number[i+1])
            {
                return number[i+1];
            }
        }
       
}

console.log(secondLargestnumber(number));


function secondLargesNumeber(numbers){

let second =0;
let first = numbers[0]

for( let i=0; i<numbers.length;i++){
if (numbers[i] > first ) {
second = first;
first = numbers[i];
}
if (numbers[i] > second && numbers[i] < first ) {
second = numbers;
}
return second;
}
}
let nums = [8,4,6,10,11,20];
console.log(secondLargesNumeber(nums));

Resolv铆 el ejercicio de la segunda forma volvi茅ndolo funcional
Gracias al uso de If y de la recursividad.

var arr = [1,7,7,7,7,7,7,7,7];
var arrOrd = arr.sort();
function segundoMayor(n) {
    if ((n - 1) === 0) {
        console.log("Todos los numeros son iguales");   
    } else {
            if (arrOrd[n - 1] == arrOrd[n - 2]) {
                segundoMayor(n - 1);
            } else {
                console.log(arrOrd[n - 2]);
            }
        }
}
segundoMayor(arrOrd.length);

Para los que no quieren copiar el c贸digo a mano

function secondLargestNumber(numbers){
	let first=numbers[0];
	let second=0;

	for (let i=0; i < numbers.length; i++){
		if (numbers[i] > first){
			second=first;
			first=numbers[i]
		}
		if (numbers[i] > second && numbers[i] < first){
			second=numbers[i];
		}
	}
	return second;
}

let numbs=[8,4,6,10,9,11]
console.log(secondLargestNumber(numbs))__

De pronto hay personas que se siente perdidos con esta, yo lo estar铆a si no fuera por el curso b谩sico gratis de Freddy.

De pronto unas peque帽as ayudas para poder entender mejor el c贸digo.

  • Los for reciben tres datos (inicio de variable, condici贸n para salirse del for, incremento de la variable): Para este caso, se inicia la variable i igual a 0, se acaba apenas se recorra todos los valores de nums, y se incrementa de uno con el i++, es decir
i++ =  i + 1
  • Cuando se tiene valores dentro de unos corchetes [ ], significa que son arrays que es una colecci贸n de valores, la ubicaci贸n en los arrays empiezan en 0, por eso la variable i del for se comienza en 0.

  • Recuerda que el doble && es el condicional and.

  • Es buena practica aunque no necesario, colocar el punto y coma al final de l铆neas de c贸digo de JavaScript con el fin de acostumbrarse a una escritura mas parecida a otros lenguajes de programaci贸n como C, ejemplo:

let first = numbers[0];

Espero que sea de gran ayuda 馃槂

Me encant贸 la libertad de poder resolver el problema primero desde la l贸gica y luego volcarlo a un lenguaje de programaci贸n concreto. Creo que deber铆a haber hecho este curso antes de intentar aprender un lenguaje porque me abri贸 la cabeza. Como dice la canci贸n: 鈥淪uch a little thing makes such a big difference鈥.

Intent茅 buscarle la vuelta para encontrar una soluci贸n distinta y practicar, y me sali贸 esto:

https://replit.com/@GabiMin1/Second-Largest-Number#script.js

function secondLargest(numbers) {
  numbers.sort(function(a, b){return b - a});
  let second = numbers[1]
  for (i = 0; i < numbers.length; i++) {
    if (second < numbers[i]){
      break
    }
    else {
    second = numbers[i+2]
    }
  }
  return second
}
let nums = [1,6,9,9,9,8,8,6,3,5,2,4,7];
console.log(secondLargest(nums))
cositas.sort();

Este m茅todo ordena las cositas del arreglo dependiendo del orden que tengan en UNICODE (Universal character encoding), es por ello que de un arreglo como el siguiente y por ende el resultado esperado no concuerde:

const cositas = [0,16,100, 20, 20, 21, 40, 30, 11, 1];
cositas.sort()
//Resultado
//0,1,100,11,16,20,20,21,30,40
cositas.reverse()
//Resultado
//40,30,21,20,20,16,11,100,1,0

Evidentemente cositas[1]=30 y lo esperado es que sea 40.

cuando se usa el metodo sort() en n煤meros, JavaScript interpreta dichos numeros como cadenas de caracteres, esto es, como si fueran letras.
es por eso que en el ejemplo, cuando se utiliza numbers.sort();
el array quedar铆a de esta forma:
[ 10, 11, 20, 4, 6, 8, 9]

El resultado para el uso de la funcion es:
let nums = [2, 4, 7, 3, 9, 5, 15, 18, 20, 22]
nums.sort(function(a, b){return a-b});
nums.reverse()
console.log(nums[1])

El c贸digo no funciona porque si hacemos sort() al arreglo

const numbers = [8, 4, 6, 10, 9, 11, 20];
numbers.sort();
// El resultado ser铆a este nuevo arreglo
const numbers = [10, 11, 20, 4, 6, 8, 9];

Porque JavaScript hace el ordenamiento conforme la tabla ASCII que es por los valores unicode de los n煤meros. y ah铆 10 es menor que 4. Pueden revisarla.
Para que lo ordene tiene que pasarle una funci贸n
De menor a mayor

numbers.sort((a,b) => a - b)

Ordenar de mayor a menor

numbers.sort((a, b) => b - a);

Esto nos dar铆a este c贸digo

const numbers = [8,4,6,10,9,11,20];
numbers.sort((a, b) => b - a);
numbers.reverse

Pero aunque utilicemos sort() y reverse(), tenemos el problema de si tenemos el n煤mero mayor duplicado por ejemplo dos 20.

const numbers = [8,4,6,10,20,9,11,20];

numbers.sort((a, b) => b - a);

let first = numbers[0];
let second = 0;

numbers.forEach((numbers, index) => {
  if (numbers < first && second < numbers) {
    second = numbers;
  }
});
console.log(`El primer valor es ${first} y el segundo valor es ${second}`);

numbers.forEach() es un m茅todo de JavaScript y ejecuta la funci贸n indicada una vez por cada elemento del array.

Mas resumido.

let numeros = [
  1,
  2,
  15,
  4,
  34,
  69,
  5,
];

numeros.sort((a, b) => b - a);

console.log(numeros[1]);

Veo que muchos no entienden los conceptos que menciona la profesora . Creo que se debe en parte al cambio en la ruta de desarrollo web pues antes este curso estaba m谩s adelante . Si est谩n perdidos, busquen el curso de programaci贸n b谩sica de Fredy, esta antes que este y la verdad sirve mucho.

Hay que tener en cuenta los conceptos de cada m茅todo de un arreglo, que son varios y cada uno tiene su forma de trabajar.
Por ejemplo el metodo .sort() es mas aplicable en cadenas de texto ya que si se lo hacen para n煤meros estos no dan el resultado deseado.
Quiz谩s muchos esperamos que se definan todos los conceptos que son nuevos para algunos en el curso, pero tambi茅n es necesario el autoaprendizaje e investigaci贸n.

El metodo sort tiene un criterio por defecto, que es el alfabetico, es decir el 1 va primero que el 2, pero segun eso tambien 1000 va primero que el 2.

lo que se tiene que hacer es escribir el criterio (una funcion de ordenamiento) y pasarla como argumento al metodo sort

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

Soluci贸n al problema:
sort hace que el 8 sea mayor que el 11 por ejemplo, ya que lo interpreta como 8 < 1, con el reverse hace que sea de forma descendente, entonces el numero mayor en el ultimo ejercicio planteado vendr铆a ser 9 seguido del 8, es por eso que sale 8.

Vengo de tener algo de experiencia en python y la verdad no mucha trabajando en mi pensamiento de algoritmos. Me pareci贸 retador el ejemplo! y me tard茅 un rato en entenderle, pero me ayud贸 a aprender varias cosas sobre JS de golpe.

Para tratar de ver si hab铆a entendido el algoritmo intent茅 ir en reversa, dibujar el diagrama de flujo y luego implementarlo en Python. Me ayud贸 a entenderlo mejor. Les comparto el resultado (:

def second_largest (num_list):
	
	nums = num_list
	# Initialize first and second values
	first = nums[0]
	second = 0
	
	# Iterating through every 'i' element of nums
	for i in nums:
		# if current i is greater than first
		if i > first:
			# then it means the current first should be second
			second = first
			# and the current i should be first
			first = i
		
		# if current i is not greater than first 
		# but greater than second
		if i < first and i > second:
			# then it means that the first remains first
			# and that current i should become the new second
			second = i
	
	# As in the first cycle i = first, no changes are made
	# to second up until the second cycle
	return second
	
	
if __name__ == '__main__':
	test_nums = [8, 4, 6, 10, 9, 11]
	print(second_largest(test_nums))

Hola, solo quer铆a comentar que si bien podr铆an haber formas m谩s sencillas, se siente bien esforzar la mente para comprender nuevas l贸gicas. Es c贸mo llevar el cerebro al gym. Intenten entender la l贸gica y la satisfacci贸n al lograrlo ser谩 exquisita.

Pd: Despu茅s de unos buenos minutos logr茅 entenderla

As铆 es como lo resolv铆




Leyendo un poco de la documentaci贸n y con la ayuda del todo poderoso stackoverflow pude resolver el ejercicio.

function sortArray(nums){
    nums.sort(function(a, b){return a - b});
    nums.reverse();

    return nums;
}

let numbers = [8, 4, 5, 10, 3, 11];
sortArr = sortArray(numbers);

console.log(numbers);
console.log(sortArr);
console.log("The second largest number is: " + sortArr[1]);
[ 11, 10, 8, 5, 4, 3 ]
[ 11, 10, 8, 5, 4, 3 ]
The second largest number is: 10
$

Sin embargo este c贸digo no resuelve el problema de si el n煤mero m谩s grande se repite m谩s de una vez, por ejemplo en el array numbers 11 es el n煤mero m谩s grande, por lo que si se repite, este c贸digo no funciona. Ej:

function sortArray(nums){
    nums.sort(function(a, b){return a - b});
    nums.reverse();

    return nums;
}

let numbers = [8, 4, 5, 10, 11, 11]; //Cambie el 3 por otro 11
sortArr = sortArray(numbers);

console.log(numbers);
console.log(sortArr);
console.log("The second largest number is: " + sortArr[1]);

Resultado

[ 11, 11, 10, 8, 5, 4 ]
[ 11, 11, 10, 8, 5, 4 ]
The second largest number is: 11
$

Como podemos ver el resultado es incorrecto considerando que 10 ser铆a el segundo n煤mero m谩s grande en el array numbers. En todo caso esta fue mi soluci贸n. Si alguien encontr贸 como resolver este problema utilizando las funciones sort y reverse y unas que otras condiciones, d茅jame tu soluci贸n en los comentarios.

La explicaci贸n de por q煤e usando las funciones de javascript sale el 8 es la siguiente:
Al hacer el numbers.sort() Javascript lo que hace es ordenarlas alfab茅ticamente, no numericamente. En este caso, la array ordenada quedar铆a [10, 11, 20, 4, 6, 8 ,9]
Y luego al darle vuelta con numbers.reverse() la array termina como [9, 8, 6, 4, 20, 11, 10].
Finalmente, seleccionando la segunda posici贸n nos arroja el 8.

Se implementa en Rust:

fn main() {
    let mut numbers: [i32; 6] = [8, 4, 6, 10, 9, 11] ;
    // Metodo 1:
    println!("second_larges_number({:?}) = {}", numbers, second_larges_number(numbers)) ;
    // Metodo 2:
    numbers.sort_by(|a, b| b.cmp(a)) ;
    println!("Ordered descending = {:?} ==> Second (numbers[1]) = {}", numbers, numbers[1]) ;
}

fn second_larges_number(numbers: [i32; 6]) -> i32 {
    let mut first = numbers[0] ;
    let mut second = 0 ;
    for n in numbers {
        if n > first {
            second = first ;
            first = n ;
        }
        if n > second && n < first {
            second = n ;
        }
    }
    return second ;
} 

Personalmente, gracias a este curso he comprendido conceptos b谩sicos de la l贸gica, el problema est谩 en que al momento de llevar a la pr谩ctica este tipo de ejercicios, no s茅 c贸mo resolverlos. Aunque yo s茅 que todo es cuesti贸n de tiempo para que me vaya familiarizando y as铆 poder resolver esto pan comido 馃槃 Por el momento, seguir茅.

function seccondLargesNumber(numbers)
{
	console.log(numbers.sort()); //poder ver el orden del array por consola y la forma en la que los ordena
	console.log(numbers.reverse()); //poder ver el orden del array por consola y la forma en la que los ordena
	return numbers[4]
}
let nums = [8,4,6,10,9,11,20]
console.log(seccondLargesNumber(nums)); // mostrar por consola el n煤mero m谩s grande

Pueden probar el c贸digo dirigi茅ndose a una nueva pesta帽a " Ctrl + t ", despu茅s para abrir la consola " Ctrl + Shift + j ", y entonces copian y pegan el c贸digo.

Hice este diagrama con el animo de comprender bien el ejercicio
lo comparto por si alguien le sirve
como dato curioso parece ejecutar una iteraci贸n de mas, pienso que
podr铆a corregirse utilizando un comparador mayor o igual en el FOR

function secondLargestnumber(numbers) [
let first = numbers[0]
let second = 0;
for (let i=0; i < numbers. leng; i++) [
if (numbers[i] > first) [
second = first;
first = numbers[i]
]
if (numbers[i]) > second && numbers[i] < first) [
second = numbers [i];
]
return second
]
let nums = [8,4,6,10,9,11]
console.log(secondLargestnumber(nums))

Siento que esto es muy avanzado para mi que estoy empezando. No entiendo y me frustra. 馃槶

Busque un poco y parece que la raz贸n del error es porque al utilizar la instrucci贸n .sort() sin especificar como se comparan los elementos que en nuestro caso son los numeros, lo que hara .sort() es convertir los n煤meros a una cadena(string) y comparara su orden seg煤n su valor en el UNICODE

Array original : [8, 4, 6, 10, 9, 11, 20]
Array.sort() : [10, 11, 20, 4, 6, 8, 9]
Array.reverse() : [9, 8, 6, 4, 20, 11, 10]

驴Ven como el 8 quedo en la segunda posici贸n? y por eso cuando la profesora pone el return numbers[1] el resultado es el 8. FUA ESPERO HABER AYUDADO!!!

Lo intente de otra forma

let numeros = [3, 10, 19, 12, 8, 11, 20];
let primero = 0; 
let segundo = 0;

for (i of numeros)
{
    if (i > primero)
    {
        segundo = primero;
        primero = i;

    }
    else if (i > segundo)
    {
        segundo = i;
        primero = primero;
    }
    else
    {
        segundo = segundo;
        primero = primero;
        
    }
    
    
}

document.write("el numero mayor es " + primero + "<br />");
document.write("el segundo mayor es " + segundo);

Vengo de hacer el curso basico de pyton

si estas leyendo esto y te esta costando, no te preocupes, lee y anota todo y trata de hacer los ejercicios, hay muchos cursos y yo se que estas ansioso/a de pasarte a nuevo curso, pero trata de entender bien los conceptos de este curso

La raz贸n por la que no da con sort es porque este los ordena de manera ascendente pero tomando encuentra con el numero que inician, esto quiere decir que si tiene 12 y 4 en lugar de ordenarlos 4, 12 los ordenar谩 12, 4.

Aun no se bien como usar java y decidi hacerlo en raptor, coloque los numeros en desorden y al final me dio el segundo numero mayor, aunque creo que de este modo (raptor) es mas dificil

Me siento mal por no haberlo realizado aun teniendo experiencia con js, tuve que venir a ver como se hacia 馃槮

Lo solucione de esta forma:

function secondLargesNumber(numbers){
	numbers.sort((a,b) => b -a)
	return numbers[1]
	}
let nums = [8, 4, 6, 10, 9, 11]
secondLargesNumbers(nums)

Lo de como utilizar .sort lo le铆 en la documentaci贸n oficial en MDN, leer documentaci贸n oficial va ser siempre una necesidad en este camino de la programaci贸n, aunque los videos es una manera dinamica de aprender.