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 variables y constantes?

7

¿Qué son Bits y Bytes?

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

¿Cómo desarrollar tu lógica de programación?

25

¿Qué es una funció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

Introducción al ejercicio en JavaScript

35/47

Lectura

Para entender mucho mejor la función que desarrollaremos en JavaScript es importante tener en cuenta dos puntos: la lógica a implementar y el flujo de la ejecución.

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 122

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Yo hice un diagrama de flujo sin nada de programación, para entender un poco el problema e identificar la solución

Y luego hice una prueba de escritorio con mini diagramas por iteración (cada vez que pruebo un item del arreglo) para saber si el resultado funciona (espero les ayude ! )

siento que parmadie por un segundo y la pizarra esta llena de cosas que no entendí :v

si alguien mas lo noto, al parecer las clases se están volviendo mas textuales que visuales si me entienden

Totalmente en desacuerdo con el cambio de metodologia. No considero pedagógico en cambio de metodología cuando ya se lleva mas de la mitad del curso, En los cursos que he tomado donde se ve algo de código, los profesores muestran lo que se va necesitando en la pantalla, pretender que se entienda código solo leyendo da a entender que se debe de dejar de pagar la suscripción y comprar libros, cosa que si pagamos la suscripción es porque habíamos decidido aprender por medio de videos y/o audios no textos largos sin que nadie lo explique. Además parece que la docente no supiera del tema y alguien mas hubiera escrito las ultimas clases, no veo otra razón para el cambio de metodología, y eso tampoco tiene algo de malo en si, si hubieran puesto a otro profesor a explicar los temas finales de este curso pero manteniendo la metodología (ya he tomado otros cursos con mas de un profesor y cada uno explica el tema que maneja). Es un retroceso hasta en la forma de usar la tecnología, primero usamos escritura luego audio y finalmente video, y sin razón alguna acá de videos saltan a texto. Por ultimo es el curso mas largo que he tomado y de haber sabido que la metodología iba a cambiar de forma arbitraria, no lo hubiera tomado.


Hola a todos, yo resolví este problema en python, pero fácilmente se puede llevar a otros lenguajes. Me ha costado resolverlo pero lo he logrado, espero les sirva y “Never stop learning”!! 😃

Una tercera opción que se me ocurre es:

  1. Ordenar el array de manera descendente ([5, 4, 3, 2, 1])
  2. Guardar el primer valor del array ordenado
  3. Ir comparando los siguientes valores del array ordenado
  4. Cuando haya un cambio de valor el valor que cambió es nuestro número.

Creo que de estas cosas tan importantes, las clases deberían ser de videos para que ella lo explique, no de lectura…

Hola Gente! La verdad es que tengo algo de experiencia en Javascript (Comencé como hace 6 meses), y de echo, ya he realizado algunos proyectos muy pequeños y funcionales. Pero a pesar de mis conocimientos y practica, en lo personal este ejercicio me supuso horas para completarlo. De echo, debo admitir que no le he echo solo. Puesto que de tantos intentos sin obtener el resultado esperado y de la frustración, decidí leer el apartado Paso a paso para resolver el ejercicio el cual había ignorado antes para tratar de resolverlo por mi propia cuenta.

Pero al hacer el código de ese apartado y con ayuda del gráfico el ejercicio quedo resuelto 😄 Pero había un problema… No funcionaba para todos los casos. Decidí ir más allá, tratando de buscar una forma de hacer que el algoritmo cumpla con su objetivo sin importar el orden de los números o si estos están repetidos, o super desordenados.

En mi afán por tratar de lograrlo me quede un buen rato sentado tratando de resolver este problema a base de prueba y error en código. Nuevamente me volví a frustrar (Era la segunda vez) así que decidí buscar la solución en Google. Entre en el primer resultado de búsqueda el cual me dirigió a Stackoverflow (Un sitio muy conocido), la pregunta era la misma que yo tenía, pero antes de ir a la sección de Respuestas me quede viendo los cometarios y aquí encontré los siguiente: "
En la mente de los buenos desarrolladores: siempre intentan una y otra y otra vez hasta que les salga, en caso el resultado sea inesperado y las ideas se hayan agotado, se publica en internet como en este sitio por ejemplo. Se un buen desarrollador desde el inicio de tu carrera: intenta 😄 ". Ese comentario simplemente me hizo razonar, y me dieron ánimos para intentar resolver este problema una vez más. De inmediato cerré esa pestaña y nuevamente volví al código. Luego de tanto insistir al final encontré la solución.

Lo que realmente quiero compartirles, en especial a los que recién están comenzando, es que intenten. Seamos buenos programadores desde el inicio. Es frustrante lo sé, y no solo sucederá una o dos veces, ten por seguro que siempre estará presente a lo largo de esta carrera. Pero sabes? Lograr resolver ese problema hace sentir realmente bien jje Así que… Mucha suerte y échale ganas 😄

ES EL PEOR CURSO QUE HE PODIDO TOMAR SOLO RECITA MUCHOS CONCEPTOS OTRAS PARTES SOLO ESCRIBE LARGOS TEXTO IGUAL CON CONCEPTOS PERO MUY POCO DETALLADO EXPLICADO PESIMO SERVICIO

Hay un error en la solucion grafica de la instructora.
Cuando se hace la prueba de escritorio se comprueba que los valores utilizados para la segunda condicionante en la solucion grafica estan equivocados. Esto se debe a que no esta tomando los valores modificados por la primera condicionante.

creo que hace falta un video para las personas que apenas estan aprendiendo la programacion

Esto fue lo que yo hice

let array = [3,2,52,234,52,1,564,32,53,2]
var mayor = array[0];
var segundoM =0
function arry() {

for(i = 0; i < array.length; i++){
    if (array[i] > mayor)
    {
        segundoM= mayor;
        mayor = array[i];

    };
}
 
 
 
 
console.log(" El mayor es  "+ mayor + " y el segundo mayor es " +segundoM );

}
arry()

Este curso ha sido mas descriptivo que pedagógico, es del tipo de cursos donde te avientan la información y los ejercicios para que el estudiante los resuelvan sin la más mínima preocupación de que el tema haya sido explicado de manera correcta o un esfuerzo para que los conceptos queden claros.
Tal vez este método pueda funcionar para otras cursos, pero para un tema tan difícil de entender cómo el pensamiento lógico y la programación se requiere de un mayor esfuerzo pedagógico.

Personalmente no encuentro algo negativo en tener una clase textual en vez de un video, de hecho, cuando leo y re-escribo las lecciones, siento que entiendo mejor.

Creo que es más cuestión de “lectura y comprensión”

no era que para Js debías estudiar html y css primero? no entiendo nada… paso de algoritmos a javascript y estoy como ._.

Me agrada mas que la clase sea textual, me permite avanzar mas (en lo personal)

Código


Salida

Nota importante:

Para ordenar números de un arreglo se hace de la siguiente forma:

let numbers = [33,44,55,66,22,63,60,43,83,12];

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

Excelente ejemplo, si los valores dentro del arrays son variables que le pedios de entrada al usuario y usando ese mismo algoritos podemos decir al usuario cual es el numero mayor de la lista que ingrese

Nose si me salio bien

Esta es mi solución 😄

Mi solución

const numbers = [1, 2, 3, 4, 5, 6, 9, 8, 9, 10];

numbers.sort((a, b) => b - a);
/*
(b-a) Mayor a Menor.
Esto lo que hace es recorrer el array a través de pares, va restando a-b y 
si da un valor > 0 entonces a>b , si da =0 entonces a=b y si es <0
entonces a<b. En base a esto recoloca los elementos.
*/

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}`);

Les comparto mi diagrama de flujo.
Tuve que ver el video de la clase 35 para poder terminarlo.

const numeroMasGrande = (arr) =>{
let newArr = arr
return arr.sort((a,b)=> b - a)
}

numeroMasGrande([3,7,4,8,9])

console.log(numeroMasGrande([3,7,4,8,9]))

Wow aun falta mucho camino por recorrer pero el avance se nota día a día.

Pude hacerlo de la segunda forma solucionando solucionando el problema del segundo valor gracias a un if y a la recursividad.

No se si es lo mas optimo pero me agrada poder resolverlo de esa manera (=,

var arr = [6,3,5,1,4,4,7,7,7];
var arrOrd = arr.sort();

function segundoMayor(n) {
    

    if (arrOrd[n - 1] == arrOrd[n - 2]) {
        segundoMayor(n - 1);
    } else {
        console.log(arrOrd[n - 2]);
    }

}

segundoMayor(arrOrd.length);

Les comparto mi solución

var vector = [3,4,4,1,1,1,8,9,1,10,14,25,0,9,1,2,3,4,5,6,7,8,9,14,25,7,8,9,9,14,25,3,1,10,5];
function second()
{
    let primero = 0;
    let segundo = 0;
    for(var l = 0; l <= vector.length; l++)
    {
        var x = vector[l];
        if(x > primero)
        {   
            segundo = primero;
            primero = x;
        }
        else{
            segundo = segundo;
            primero = primero;
        }

    }
    console.log('el numero mas grande es: ' + primero + ' , el segundo numero mas grande es: ' + segundo);
}
second();

Al ejecutarlo obtengo el siguente resultado:

en orden descendente
const x= [3, 7, 4, 8, 9]
const a = x.sort()
x.reverse()
a[1]

Esta es mi solución después de ver 4 veces la siguiente clase, les recomiendo intentarlo una y otra vez no se desesperen comprendan y lean bien cada paso.
alert("¡No se rindan!")

Pues para mí es más fácil la segunda opción, verifico los valores y listo. La primera no la entendí.

Nesecito video para estas cosas; creo que mia prendizaje es mas visual. porque no me sineto comodo dejando todo a libre interpretacion, cuando no sé nada de lenguaje.

Yo lo hice asi, espero les sirva mi código, (se utilizó ecmascript)

myArray.sort((a,b) =>{
	console.log('a:',a,'b:',b);//this process is repited every array item inside
	console.log(a - b);//this is the results that are compare
	return a - b;
});

Les quisiera compartir el codigo que hice, para ordenar los numeros de una lista de MAYOR a MENOR, y mostrar por consola el 2do numero mas grande.

let numero = [1, 2, 3, 4, 5, 6, 7, 8, 9];

function ordenar(numeroArray) {
  let auxArray = numeroArray;

  for (let j = 0; j < numeroArray.length; j++) {
    for (let i = 0; i < numeroArray.length; i++) {
      let posOrNeg = auxArray[i] - auxArray[i + 1];
      if (posOrNeg < 0) {
        let temp1 = auxArray[i + 1];
        let temp2 = auxArray[i];
        auxArray[i] = temp1;
        auxArray[i + 1] = temp2;
      }
      console.log(auxArray + "XXX" + i);
    }

    console.log(auxArray + "XD" + j);
  }
  return auxArray;
}

console.time();
console.log(ordenar(numero));
console.log(
  `El segundo numero mas grande de la lista es: ${ordenar(numero)[1]}`
);
console.timeEnd();

Así lo haría yo antes de la explicación de la siguiente clase

numeros = [3, 7, 4, 8, 9];

let posicionMayor=0;
let posicionSegundo=0;

function segundoNumero(numeros) {
    for (let i = 0; i < numeros.length; i++) {
            if (numeros[i]>numeros[posicionMayor]) {
                posicionSegundo = posicionMayor
                posicionMayor = i;
            } else if (numeros[i]>numeros[posicionSegundo] && numeros[i]<numeros[posicionMayor]) {
                posicionSegundo = i;
            }
    }
    console.log(`El segundo número más grande es: ${numeros[posicionSegundo]}`);
    console.log(`El número más grande es: ${numeros[posicionMayor]}`);
}

segundoNumero(numeros);


Yo hice el código en Python de la siguiente forma:

lista = [5,5,4,3,2,1,4]
lista2 = []
for element in lista:
if element<max(lista):
lista2.append(element)
print(f"El segundo numero mas altos es: {max(lista2)}")

entiendo la lógica pero no entiendo que esta mal con mi solución, alguien me ayuda porfavor:
var numeros = [1,4,3,7,8,6,2];
var segundo = 0;
var primero = numeros[0];
for ( i = 0; i <numeros.lenght; i++)
{
if ( numeros[i] > primero)
{
primero = numeros[i];
}
else if (numeros[i] > segundo )
{
segundo = numeros[i];
}
}

Había usado la segunda solución, buscando las funciones en MDN y todo. Qué mal se siente no haber pensado en la repetición de números.

gracias Johan Sebastian, me guie en tu codigo

SOLUCION EJERCICIO…

var cnumeros = [3,7,4,8,9];
cnumeros.sort();
cnumeros.sort(function (a,b){return b - a});
console.log (cnumeros.length);
console.log (cnumeros);
cnumeros.length = 2;
console.log(cnumeros);
let segundomayor = cnumeros[1];
console.log('el segundo numero mayor es :')
console.log(segundomayor)

COMPILACION

5
[ 9, 8, 7, 4, 3 ]
[ 9, 8 ]
el segundo numero mayor es :
8

Les comparto mi solución en js.

let numberArray = [1,2,30,98,33,12,34,90]

secondBigNumber(numberArray);

function secondBigNumber(numberArray){
  let maxNumber = 0;
  let maxSecondNumber = 0;
  numberArray.forEach(function(element, index){
  	if(element > maxNumber) {
    		maxNumber = element    
    } else if(element > maxSecondNumber) 
    	  maxSecondNumber = element
  });
  console.log("second max number is " + maxSecondNumber)
}```
const numeros = [3,7,4,8,9];
numeros.sort();

numeros[3];

print("El segundo numero mayor es: "+numeros[3]);

console.log(numeros[3]);

En lo poco que entiendo creeria que es asi.

Creo que me seguiría quedando con la segunda solución, agregándole unas líneas de código para especificar que si el valor de la segunda posición es igual al primero escoja el tercero, y si éste es igual al segundo escoja el cuarto, y así sucesivamente hasta que lleguemos a un valor que no es igual que el anterior y lo imprima. Esta solución parece utilizar muchos menos recursos en la mayoría de los casos.

Hice el ejercicio en Dart.

void main() {
  
  
  int first =0;
  int second =1;
  
  List numeros = [ 8 , 20 , 30 ,5 ,1 , 96 ,25, 80, 96, 50, 70];
  
  for ( int item in numeros){
    if (item > first) {
      first =item;}
    else
      if( item > second && item < first){
        second = item; 
      
      }
    }
  print(second);

}

Utilizando el metodo sort en JavaScript

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

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

console.log(numeros[1]);

Tal ves no entendí las iteraciones de la maestra pero se me hizo innecesaria la segunda condición hasta ambigua jsjs pero como dije tal ves no entendí del todo.
Yo lo hice a si en JavaScript y me funciono de maravilla :

 <script>
        let arrNum=[7,13,5,6,4,1,23];
        let first= arrNum [0];
        let second=0;
        
        
        for(var n of arrNum)
        {
            if (n>first)
            {
                second=first;
                first=n;
            }
            
        }
        
        console.log("El numero mas grande es " + first);
        console.log("El segundo numero mas grande es el " + second);    
        
    </script>

Mi respuesta 😃

let numbers = [33,44,55,66,22,63,60,43,83,12];
let first = Number.MIN_VALUE, 
    second = Number.MIN_VALUE;

for(let i = -1, len = numbers.length; ++i < len;) {
    
    let dist = numbers[i];
    if(dist > first) {
        second = first;
        first = dist;
    } 
    else if(dist > second) {
        second = dist;
    }
}
console.log(`The second largest number is: ${second}`);

Esta es una solución mas sencilla y corta, utilizando el método sort() de arrays de JavaScript:

const arr = [3, 7, 4, 8, 9];

const second = (array) => {
  let sortedArr = array.sort((a, b) => {
    return b - a;
  });
  let secondArr = sortedArr[1];
  console.log(secondArr);
}

second(arr); // 8

Lo importante de este ejercicio es darse cuenta que puede haber varias formas de hacer los algoritmos. Pero tenemos que buscar el que se adecue a nuestra necesidad. Porque en el ejemplo que se dio no es lo mismo buscar el segundo valor más alto, que buscar la segunda posición del array.

let numeros = [1, 3, 6, 7, 4, 8];

function buscarElSegundoValorMasAlto(array) {
    array.sort();
    let cant = array.length;
    console.log(array[cant-2]);
}

buscarElSegundoValorMasAlto(numeros);

function buscarValor() {
var arreglo = [2, 5, 4, 3, 1];
var primero = arreglo[0];
var segundo = 0;

for (let i = 0; i < arreglo.length; i++) {
    
    if (arreglo[i] > primero) {            
        segundo = primero;            
        primero = arreglo[i];
    } 
     if (arreglo[i] > segundo && arreglo[i] < primero) {
        segundo = arreglo[i];
    console.log(segundo);
    }
}

}

buscarValor();

Buenas, no entendí muy la explicación, así que lo hice algo diferente, pero se llega al mismo resultado.

process.stdin.resume();
process.stdin.setEncoding(‘utf8’);

var numbers = [3,7,4,8,9];
numbers.sort(function(a,b)
{
if(a>b)
{ return 1;
}
if(a<b)
{ return -1;
}
if(a==b)
{ return 0;
}
});
var first = numbers[4];
var contador = 4;
var second =numbers[contador];
while (second == first)
{
if(second == first)
{ contador = contador - 1;
second = numbers[contador];

}

}
console.log("el segundo numero mayor es " + " " + second);

Así fue como lo hice antes de ver el paso a paso de la profesora:

let numeros = [23,35,65,2,41,14,87,71,9,95];

function ordNum(n) {
    let orden = n;
    for (i = 0; i < orden.length; i++) {
        let p1 = 0;
        let p2 = 1;
        for (a of orden) {
            if (a > orden[p2]) {
                orden[p1] = orden[p2] 
                orden[p2] = a;
            }
            p1++;
            p2++;
        }
    }
    console.log(orden);
    console.log(orden[orden.length - 2]);
}

ordNum(numeros);

Ahora veo que es muy similar a como ella lo estaba planteando, así que estoy satisfecho 😊😎

ya valí y no entendí nada

Lo hice de otra manera 😅😆

let mayor1 = 0; 
let mayor2 = 0; 
let statusSegundoMayor = false;
let mayor = 0;
let numeros = [2,6,3,7,1,10];
let contador = 0;
do{
  for (let index = 0; index < numeros.length; index++) {
    if(statusSegundoMayor)
    {
      if(numeros[index] != mayor1)
      {
        if(numeros[index] > mayor){
          mayor = numeros[index];        
        }
      }  
    }else
    {
      if(numeros[index] > mayor){
          mayor = numeros[index];
      }
    }
  }

  if(!statusSegundoMayor)
  {
    mayor1 = mayor;
    mayor = 0;
    statusSegundoMayor = true;
    contador = 1;
  }else
  {
    mayor2 = mayor;
    contador = 2;
  }
  
}while(contador < 2);

console.log("Mi primer valor 1 mayor es: " + mayor1);
console.log("Mi segundo valor 2 mayor es: " + mayor2);

Lo que yo hice fue buscar el numero más grande del array y depues volví a hacer lo mismo pero excluyendo al numero más grande que ya había encontrado anteriormente

const nums = [12, -1, 15, -22, 33, -87, -91, 25, 52, 12, 94];
let max = nums[0];
let second_max = nums[0];

for(let i = 0; i < nums.length; i++){
  if(max<nums[i]){
    max = nums[i];
  }
}  
for(let i = 0; i < nums.length; i++){
  if(second_max<nums[i] && nums[i]!=max){
      second_max = nums[i];
  }
}

console.log("The maximun number is: " + max);
console.log("The second maximun number is: " + second_max);

Numero mayor

function BiggerNumber(){
    array = [3, 7, 4, 10, 90]
    let arrayOrder = order(array);
    let big =  bigger(arrayOrder);
    console.log('El segundo numero mas grande del array es:', big)
}

const order = function (array){
    let i = 0
        while(i <= array.length){
            let a,b
            if(array[i+1] > array[i] ){
                a = array [i+1]
                b = array[i]
                array[i] = a;
                array[i+1] = b
                order(array)
            } 
            i++;
        }
        return array
}

const bigger = function(array){
    return array [1]
}

BiggerNumber();

Yo hice la función para el ordenamiendo con una función recursiva, ordena todos los numeros de mi arreglo y una funcion simple que me devuelve solo el segundo valor del array que es la posición 1.

Es mi pequeño aporte, se aceptan sugerencias

arrayOrdenado  =[ 90, 10, 7, 4, 3 ]

El segundo numero mas grande del array es: 10

les recomiendo mucho esta pagina que te da casi todos los comandos de cada lenguaje de programación, ahí vi que hay un comando para ordenar los elementos de un array

Que horrible esto, para leer ejemplos voy a algún sitio diferente en la internet for free

En Java!

public static void main(String[] args) {
        int[] myArray = new int[]{13, 2, 4, 35, 35};
        int mayor = myArray[0];
        int second = 0;
        for (int i = 0; i < myArray.length; i++) {
            if (myArray[i] > mayor) {
                second = mayor;
                mayor = myArray[i];
            } else if (myArray[i] > second && myArray[i] < mayor) {
                second = myArray[i];
            }
        }
        System.out.println("Mayor: " + mayor);
        System.out.println("Segundo: " + second);
    }

Espero puedan servirle.

let array = [3,4,6,745,54,37,8888,765,09,2022]
var first = array[0];
var second =0

function arry() {

for(i = 0; i < array.length; i++){
    if (array[i] > first)
    {
        second= first;
        first = array[i];

    };
}
 
console.log(" El first es  "+ first + " y el segundo first es " +second );
}
arry()

De lejos esta ha sido uno de las peores clases, ni siquiera agregaron un diagrama de flujo y si no me equivoco al final indican que ni siquiera funcionaria en caso los valores se repitan…
Es por eso que intente esta solución

Creo que a partir de este punto, lo mas importante no es aprender a crear un algoritmo, por mas rudimentario que sea, con un lenguaje de programacion que no conocemos. Lo importante es poder crear un algoritmo mediante un diagrama de flujo y entender como funciona y cuales son sus elementos; pero plasmarlo en un lenguaje en el que ni siquiera escribimos el “HolaMundo” me parece algo que no esta a nuestro alcance por ahora.
Pero es importante que sigamos, para familiarizarnos con distintos lenguajes y aprender de ciertas caracteristicas que estos poseen. Pero repito: no creo que el objetivo sea plasmar un algoritmo de 0 a 100 en un lenguaje al que apenas le conocemos el nombre.

Este es el diagrama que hice para entender el ejercicio. I= indice, y según yo cuando termine el indice first = 0 y el segundo número mayor de la variable “numbers” es el unico second que no equivale a 0.
Perdonen el desorden en el diagrama xd

este sin dudas es el peor curso que e tomado hasta ahora, se ahorran mucho al momento de explicar y los ejemplos son muy basicos a comparacion de lo que piden en los ejercicios, deja mucho que desear teniendo en cuenta que pagamos por unas clases en vivo, y una gran partes de las “clases” de este curso sean textuales, mal ahi platzi

Una solución aprovechando algunas funciones del lenguaje

<code> 
const x= [3, 7, 4, 8, 9];

function segundoMasGrande (array) {
    const a = array.sort(function(a,b){return b-a});
    console.log(a[1]);
}

segundoMasGrande (x);

Despues de un buen tiempo pensando y leyendo, aca les dejo el código. Fue facil encontrar el mayor número, no tanto el segundo mayor. Voy a explciar los pasos:

1- Creo el array
2- Ordeno los números de forma descendente.
3- Creo un ciclo para ir por todos los elementos del array
4- Dentro del ciclo creo una condicion que me permite buscar si el segundo numero es distinto del primero.
5- Una vez que lo encuentra lo escribe y finaliza el ciclo.

let array = [1, 4, 9, 2, 5, 23, 43, 43, 25];
array.sort(function(a, b){return b - a});
for(i = 0 ; i < array.length ; i++){
    if(array[i+1] != array[i]){
        document.write(array[i+1]);
        break;
    }
}

aquí esta mi solución antes de ver el paso a paso


valores = [1, 2, 20, 20, 3, 15, 15, 4, 4, 9, 8, 7, 7];
resultado = 0;
secondResult = 0;
for (var primero of valores) {
  //ejecuta los{} para cada elemento de valores
  if (primero > resultado) {
    resultado = primero; //si el elemento es mayor ese será el resultado
  } else {
    resultado = resultado;
  }
}
console.log(resultado);

for (var segundo of valores) {
  if (segundo == resultado) {
    /*si un elemento es igual al resultado(interpretado como el maximo valor del array),entonces ese numero lo ignoramos*/
    secondResult = secondResult;
  } else {
    if (secondResult < segundo) {
      secondResult = segundo;
    } else {
      secondResult = secondResult;
    }
  }
}
console.log(secondResult);

el diagrama de flujo lo tengo y la logica tambien, pero no entiendo para que dicen que vamos a usar javaScript, cuando muchos llegamos a este punto sin siquiera haber usado un lenguaje. En mi caso veo la imagen de las iteraciones y me cuesta entenderlas.

Pues sí que me costó un poco entender el problema, pero lo he conseguido, que es lo importante! Les dejo el diagrama de flujo que hice.

Saludos.

solución no muy bonita aprovechándome del lenguaje
const x= [3, 7, 4, 8, 9]
const a = x.sort()
a[(x.length-2)]

pues mi solución es parecida a problema 😒

si hay que sacar los primeros variables que se mención pero a mi parecer

Antes de eso medir el largo de la función LENGTH y después ordenar SORT

después de esto… comparar las 2 variables y como el segundo es menor que el primero…para verificar que es el Segundo MAS GRANDE… comparar el segundo con los demás del array y listo…

si es el mayor, que debería Resuelto

A este punto me siento bloqueada. Siento que va mucha información que todavía no comprendo completamente y ni siquiera sé bien qué buscar (por otros medios) para tratar de entender esta clase. 😦

¿Recomiendan algún otro curso para poder entender bien los conceptos antes de lanzarme a hacer estos ejercicios?

Pienso que una posible solución es ordenar el arreglo de mayor a menor y antes de enviar el resultado arreglo[1] comprobar que este no sea igual a arreglo[0], luego comprobar que arreglo[2] no es igual al anterior y así, comparar el valor de las posiciones anteriores hasta que sea diferente, ese será el resultado, sin importar cuantos números repetidos tenga el arreglo.

Hola a todos, comparto mi solución, espero sirva!

<script>
	function segundoMayor() {
   		let numbers = [4, 4, 4, 3, 2, 1];

    		let start = numbers[0];
    		console.log('Start->', start);

	    	let second = numbers.find(n => n != start);

   		console.log('segundo mayor->', second);
  	}
</script>

// Al fin (corre en el navegador crome)
// elSegundoNumeroMasGrande([12,48,15,89])
//48

function elSegundoNumeroMasGrande(array){
    var maxOne= 0;
    var maxTwo= 0;
        for(i=0; i<array.length; i++ ){
            if(array[i] > maxOne){
                maxTwo = maxOne;
                maxOne = array[i];
            } else if(array[i] > maxTwo){
                maxTwo=array[i];
            }
        }
        return maxTwo;
    } 

Buscando en Google encontré la forma de organizar el array de mayor a menor, por ahora este sería mi código. Sigo realizando prueba de escritorio y comprobando errores en mi lógica.

let vector = [14,12,4,6,34,34]
let first = vector[0]
let second
let c = vector.sort(function(a, b)
{return b - a})
for (let i = 0; i < vector.length; i++) {
if (c[i] = first)
{second = c[i]}
}
console.log (“El resultado es:”)
console.log (second)

https://www.freecodecamp.org/espanol/news/ordenar-arreglos-en-javascript-como-usar-el-metodo-sort/

const numbers= [37, 57, 54, 18, 29];

const bigNumber = array => {
  let first = array[0];
  let second = 0;

  for (let i=0; i<array.length; i++) {
    
    if( array[i] > first) {
      second = first;
      first = array[i];
    };
    if (array[i]>second && array[i]<first) {
      second = array[i];
    }
  };
  console.log("El primer numero más grande es " + first);
  console.log("El segundo número más grande es " + second);
};

bigNumber(numbers);

La segunda opción es claramente la más sencilla. En el caso de que el array tenga números repetidos, deberíamos introducir un IF que verifique que si la posición 1 == a la posición 0, se pase a comparar con la posición 2. El valor nunca puede ser == solo menor.

Esto fue lo que realice para resolver el problema. En teoría funciona; agradezco sus feedback.

// Se definen variable Array y se ordena en forma descendente
numeros = [1, 12, ,17, 17, 17, 15, 15, 12, 11, 5, 3, 4, 2, 10, 7, 10, 10, 12, 12];
numeros.sort((a, b) => b - a);
// Se crean variables de posiciones en Array y se inicializan
var primero = numeros[0];
var tercero = 0;
var segundo = 0;
var tercero = 0;
// Condición de por lo menos un elemento en el Array
if (numeros.length >= 1) 
    {
// Ciclo para encontrar el segundo numero de mayor a menor en el Array
        for (i = 0; segundo == 0; i++) // Se entra en el ciclo mientras la variable segundo no cambie de "cero"
        {
            if(numeros[i] < primero) // Se almacena el valor en la posicion del Array cuando el valor es menor al valor de la posicion inicial 
            {
                segundo = numeros[i];
            }
        
        }
// Ciclo para encontrar el tercer numero de mayor a menor en el Array
        for (i = 0; tercero == 0; i++) 
        {
            if(numeros[i] < segundo)
            {
                tercero = numeros[i];
            }
        
        }

    }
    else
    {
        console.log("NO HAY SUFICIENTES NUMEROS EN EL ARRAY");   
    }
 
let numeros =[3, 7, 4, 8, 9, 2, 10, 5];
let may=0;
let segMay=0;

for(var c = -1; c<numeros.length; c++){
    if(may>=numeros[c]){
    }
    else{
        segMay=may;
        may=numeros[c];
    }
}
console.log("segundo numero mas grande " + segMay);
console.log("numero mas grande " + may);

let = variables
may = mayor
segMay = segundo numero mayor
c = contador

Este es mi aporte

let miArray = [85, 14, 20, 11, 85, 0, 15, 6, 7, 76, 50, 3];
let segundo = 0;
let mayor = 0;

function encontrarSegundo(array) {
    for (let index = 0; index < array.length; index++) {
        if (array[index] > mayor) {
            segundo = mayor;
            mayor = array[index]; 
        }
        else if (array[index] > segundo && array[index] != mayor)
            segundo = array[index];              
    }
    return segundo;    
}
console.log(miArray);
console.log(encontrarSegundo(miArray));

Hola este seria el esquema base para mi del ejercicio antes de pasarlo al leguaje de programación!

Yo lo hice en python, espero lo más pronto posible poder cambiarlo a JavaScript ya que no conozco las librerías que uso en python en javascript.


Antes de empezar a escribir cualquier diagrama de flujo o pasar directamente al codigo hay que entender el enunciado nos estas pidiendo que ubiquemos el segundo numero mas grande dentro del array Por logica ya tenemos varios datos tenemos un array , para que el cerebro trabaje imaginemos que ese mismo array esta todo desordenado ,primero imaginemos que ese array es pequeño para que sea mas facil de razonar [5, 3 , 6 , 2] hay que recordar las posiciones de un array por defecto [0 , 1 , 2 , 3 ] entonces creamos en nuestra mente un pasaje por las posiciones del array (ese va a ser nuestro ciclo ) y cuando nuestro pasaje llegue al segundo numero mas alto ahi va a estar definido nuestro ejercicio en la mente ,obviamente si nos vamos para el sector del codigo debemos definir variables para q ese ciclo funcione una de arranque y luego la segunda sera la que se compare con el segundo numero mas alto(es lo que el enunciado esta pidiendo) Yo tmbien estoy aprendiendo y me costo entenderlo o eso creo si hay fallas en mi logica o mejoras bienvenidas sean asi sigo aprendiendo

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];
console.log(lista.length)

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])

No me permitió colocar imágenes que le hacemos lo coloque como texto.

El Ejemplo anterior es Datos Diferentes

Desarrollado en Python con replit
Caso 02: Datos Repetidos
print(“Calcular el segundo numero mayor”)
print("================================")
nDatos = [8,8,8,8,8,8,8,8]
#nDatos = [9,4,7,7,5,1,10,8]
print(f"Datos >>> {nDatos}")
nMay1 = nDatos[0]; nMay2 = 0
for i in range(len(nDatos)):
if nDatos[i] > nMay1:
nMay2 = nMay1; nMay1 = nDatos[i]; i+=1
elif nDatos[i] > nMay2 and nDatos[i] < nMay1:
nMay2 = nDatos[i]; i+=1
else: i+=1
if nMay2 == 0:
print(f"Segundo número mayor >>> No Existe")
else:
print(f"Segundo número mayor >>> {nMay2}")
print(f"Número mayor >>> {nMay1}")

Resultado:
Calcular el segundo numero mayor

Datos >>> [8, 8, 8, 8, 8, 8, 8, 8]
Segundo número mayor >>> No Existe
Número mayor >>> 8

!!! No me permitió colocar imágenes que le hacemos lo coloque como texto !!!

Desarrollado en Python con replit
Caso 01: Datos Repetidos
print(“Calcular el segundo numero mayor”)
print("================================")
#nDatos = [8,8,8,8,8,8,8,8]
nDatos = [9,4,7,7,5,1,10,8]
print(f"Datos >>> {nDatos}")
nMay1 = nDatos[0]; nMay2 = 0
for i in range(len(nDatos)):
if nDatos[i] > nMay1:
nMay2 = nMay1; nMay1 = nDatos[i]; i+=1
elif nDatos[i] > nMay2 and nDatos[i] < nMay1:
nMay2 = nDatos[i]; i+=1
else: i+=1
if nMay2 == 0:
print(f"Segundo número mayor >>> No Existe")
else:
print(f"Segundo número mayor >>> {nMay2}")
print(f"Número mayor >>> {nMay1}")

Resultado:
Calcular el segundo numero mayor

Datos >>> [9, 4, 7, 7, 5, 1, 10, 8]
Segundo número mayor >>> 9
Número mayor >>> 10

Hola compañeros!

Lo resolví de diferentes maneras pero solo una solución tuvo éxito en cualquiera de los casos:

  1. solución .
    problema: Solo funciona para números del 0 al 9 y no repetidos.
var cadena = [6, 2, 8, 4, 1, 7];

function nGrande() {
  var cadenaOrdenada = cadena.sort();
  console.log(`cadena ordenada ascendentemente ${cadenaOrdenada}`);

  cadenaOrdenada.reverse();
  console.log(`cadena ordenada descendentemente ${cadenaOrdenada}`);

  let numeroUno;
  let numeroDos;

  for (i = 0; i < cadenaOrdenada.length; i++) {
    console.log(`El valor de la posicion ${i} es ${cadenaOrdenada[i]}`);

    numeroUno = cadenaOrdenada[0];

    numeroDos = cadenaOrdenada[1];
  }

  console.log(
    `el numero mas grande es: ${numeroUno} y el segunda mas grande es: ${numeroDos}`
  );
}

  1. Solución.
    problema: funciona en la mayoría de los casos pero no cuando el numero de la posición 0 es el segundo menor.
function nGrande2() {
  let primero = cadena[0];
  let segundo = 0;

  for (i = 0; i < cadena.length; i++) {
    if (cadena[i] > primero) {
      primero = cadena[i];
    }

    if (cadena[i] > segundo && cadena[i] < primero) {
      segundo = cadena[i];
    }
  }

  console.log(`El numero mayor es: ${primero} y el segundo
    numero mayor es: ${segundo}`);
}


  1. Solución
    problema: esta no tuvo problema , fue la mera mera!
// Este fue el algoritmo mas efectivo - OK
function nGrande3() {
  let primero = cadena[0];
  let segundo = 0;

  for (i = 0; i < cadena.length; i++) {
    if (cadena[i] > primero) {
      segundo = primero;
      primero = cadena[i];
    }
  }

  console.log(`El numero mayor es: ${primero} y el segundo
    numero mayor es: ${segundo}`);
}

Saludos!

Me costo un poco enterner la lógica detrás de este algoritmo, tuve que escribirlo en Python para entenderlo mejor.

# get the second largest number of a list
numberList = [4, 7, 6, 5, 2, 3, 1, 8]

first = numberList[0]
second = 0

for num in numberList:
    if num > first:
        second = first
        first = num
    elif second < num < first:
        second = num

print(second)

entiendo que es un arreglo pero nose como implementarlo en un programa alguien que me aga el favor y me explique por favor

Este proyecto me costó varias horas de prueba y error, les comparto mi código.

<code> 

function comparacion(){
let numeros =[34,2, 100, 5, 1, 58];
let mayor = 1;
for(i = 0; i < numeros.length; i++){
let numero = numeros[i];
if(numero > mayor){
mayor = numero;
}
}
let indice = numeros.indexOf(mayor)
console.log(indice);
numeros.splice(indice,1);
let segundoMayor = 0;
for(i = 0; i < numeros.length; i++){
let numero = numeros[i];
if(numero > segundoMayor){
segundoMayor = numero;
}
}
console.log("El número mayor es " + mayor);
console.log("El segundo mayor es " + segundoMayor)
}

comparacion();

De hecho, yo sí había pensado en hacer algo tan fácil como .short, pero recordé que eso puede fallar si es que el array tiene números repetidos o si tiene algo que no sea un número. Creo que con una pequeña modificación, el ejercicio que hicimos en la parte de recurrencia podría funcionar para resolver este ejercicio.

Lo hice en python y quedó de la siguiente manera:

Esta fue mi manera para resolver el reto:

Por si te interesa otra solución.
Este programa ordena de mayor a menor y con cada iteración va preguntando si el valor de orderedNumbers[i] actual es menor, entonces devuelve el valor que tiene i.

var numbers = [5,3,2,5,1,3];
// Esta es la manera de ordenar de mmayor a menor en JavaScript
var orderedNumbers = numbers.sort((a,b)=>b-a);

function segundoMayor() {
  for (const i in orderedNumbers) {
    let primero = orderedNumbers[0];
    let segundo = orderedNumbers[i];
    // No importa que estén repetidos, la condición solo será válida cuando "segundo" sea menor.
    if(segundo < primero) return segundo;
  }
}

console.log(segundoMayor());

En JavaScript
array.sort(función)
Devuelve los elementos de un array ordenados

let array = [5,7,9,45,6,3,75,4,7]
let newarray = array.sort(function(a, b){return b-a})
//Nuevo arreglo ordenado de manera descendente 
console.log(newarray)
//Segundo número mayor del arreglo esta en la posición [1]
console.log(`El segundo número mayor es ${newarray[1]}`) 

Lo hice de una manera distinta, como dice el texto, yo pensé la primera vez en ordenar el array para seleccionar el segundo numero. Consideré los números duplicados e hice esto:

Esta es mi primera solución, cumple con el objetivo pero nada más

const secondBiggerNum = array =>{
    array.sort((a,b) => b - a)
    while(array[0] == array[1]) array.shift()
    return array[1]
}

Después hice esta, le podés pasar un array la posición del número más grande que elijas. Tuve que cambiar el ciclo while por un reduce que elimine los numeros repetidos. Mucha mejor solución para mí.

const anyBiggerNum = (array, position)=>{
    array.sort((a,b) => b - a)
    array = array.filter((num, i) => num != array[i + 1])
    console.log(array)
    return array[position]
}

(Las posiciones empiezan desde el 0, si se quiere que inicien en 1 se puede poner [position - 1])

Así como la solución 2 puede presentar inconveniente si los valores mayores están repetidos, la primera solución presentaría problemas si todos los números son negativos.