Ayuda con Javascript

B

Buenas,

A versi alguien me puede dar una ayudita para un trabajo muy sencillo que estoy realizando para aprender javascript.

Tengo el siguiente código que no es un algoritmo como tal, simplemente intenta emular el algoritmo que tengo que traducir a javascript, pero en lenguaje convencional:

Algorismo calcular

const 
MAX: enter := 100;
fconst 

var 
valor, i, c, num, q: enter;
fvar 

ponerenPantalla(“Introducir un numero entre 1 y 9:”) ;
valor := leertTeclado();
c:=0 ;

por i:=1 fins MAX fpor 
  num:=i;
  q:=0;

mientras num > 0  fpor 
    si num mod 10 = valor entonces
    q:=q+1;
    fsi 

num:=num div 10;
fmientras

si q > 1 entonces
    c:=c+1;
    fsi 
fpor 
escribirenpantalla(“Hay ”.enterACadena(c).” números entre 11 y 100 con dos o mas ”.enterACadena(valor)) ;

falgorisme

Ahora aqui esta mi codigo:

const MAX = 100;
const valor = 6;

var i, num, q;
var c = 0;

for ( var i = 1; i < MAX; i++) {
    num = i;
    q = 0;

while (num > 0) { 
  if (num % 10 === valor) { 
    q = q++;
}

 num = (num / 10);
 
}
  if (q > 1) { 

   c = c++;
} 

}
console.log ("Hay " + c + " números entre l’1 y 100 con dos o més " + valor) ;

En mi código ya pongo como constante el 6 para no tener que introducir nada. El enunciado del problema seria saber cuantos números hay del 1 al 100 que contengan un 6.

Se que mi código tiene bastantes errores, pero me gustaría saber si alguien puede echarme una mano.

Yugarek

#1 Hay muchas maneras de hacerlo, por darte una pequeña ayuda de como lo haría yo:
El bucle "for" esta bien, yo cogería la variable "i" (indice del for) y la convertiría a string para poder usar el metodo includes con la variable "valor", si devuelve true pues a la variable "c" que es tu contador le sumo 1, si te lías te pongo la solución completa.
Un saludo

1 respuesta
B

#2 Los "enters", segun el exercicio, hay que transformalos a string en el console.log.

Puedo ver tu solucion por aqui?

Gracias

1 respuesta
Xustis

Lo primero que tienes que hacer para aprender a programar una vez que miras la sintaxis y escribes tu código, es debugear si no te funciona. Mira que le pasa a tu variable num, venir a preguntar esto es que vas en mal camino para aprender.

1 1 respuesta
B

#4 Gracias! Le voy a echar un ojo mas detenidamente porque no acabo de ver donde esta el bug, pero gracias igualmente!

1 respuesta
Xustis

#5 Si en un buen rato sigues sin verlo te respondo sin problema, pero asi no es como se aprende y si es que no has visto el bug es que no has debugeado, mira que valores toma cada variable y que pasa en cada bucle y los if, en este caso como te digo tu variable num

Yugarek

#3 mi posible solución:

spoiler
1 1 respuesta
B

La solución de #7 no tiene en cuenta cuantas veces esta el digito en un numero...
Por ejemplo: 66 lo contabiliza como 1... cuando a mi entender debería de contarse como 2 veces.

La mía...

v2.0
3 respuestas
brew

#8 esos comentarios son para matarte

1 respuesta
B

#9 ¿Por? ¿Lo dices por que son pobres o por que están incumpliendo la regla del "say why not what"? Ten en cuenta que no es un código para publicar... si fuese parte de un desarrollo solo tendría docstring xD
Además, seguramente lo haría como una micro-tarea.

1 respuesta
Yugarek

#8 Bien visto gracias, edito la función.

PD: tu funciona no va a devolver un resultado correcto en ocasiones por culpa del redondeo de los decimales y el performance en numeros grandes va a ser peor.

1 respuesta
B

#11 Editado mi comentario con la Version 2.0 para los inconformistas...

B

#8 Y alguna solucion con el planteamiento que tengo yo? Lo digo porque tengo que hacerlo con for, while i if

B

Vale, ya lo logré:

const MAX = 100;
const valor = 1;

var i;
var numero;
var q;
var c = 0;

for ( i = 1; i < MAX; i++) {
    numero = i;
    q = 0;

while (numero > 0) {
    if (numero % 10 == valor) {
    q = q +1;
}

numero = (numero / 10);
}
    if (q >= 1) {
    c = c +1;
}
}

console.log ("Hi ha " + (c).toString() + " números entre l’1 i el 100 amb dos o més " + (valor).toString()) ;
1 respuesta
B

#14 Lograste obtener un resultado, pero no es el correcto.

1 respuesta
privet

#10 //declaramos la funcion

1 1 respuesta
B

#16 Si lo que está mal es el comentario, yo que me alegro.

P.D: Lee un poco de documentación: https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Funciones

B

#15 Porque no es el correcto? Me sale que hay 11 seises entre 1 y 100.

1 respuesta
B

#18 Te lo ha dicho en un comentario anterior, el número 66 tiene dos 6, en total son 20.
6
16
26
36
46
56
60
61
62
63
64
65
66
67
68
69
76
86
96

1 respuesta
B

#19 Si, el tema es que mirando bien el ejercicio me dice lo siguiente:

num= num mod 10 = valor;

Es decir, que el resiudio tiene que ser igual a 6. Por lo tanto solo vale el 66 y no 61,62,63,64,65,67,68,69.

1 respuesta
JuAn4k4

#20 Si, con 2 o más 6 solo está el 66, el problema siempre va a dar como resultado 1.

Entre 1 y 99 solo hay un número que contenga dos veces un digito concreto. 11,22,33,44,55,66,77,88 y 99.

Asi que lara cualquier numero el resultado tiene que ser 1.

Esto no te sirve para nada.

Desde el móvil te lo hago leet code:

const input =6.toCharacter()
const numbers = [1...99];
const howMany = 
numbers
.map(i => i.toString())
.filter(x => x.contains(input))
.map(x => x.split(input).length)
.filter(length => length > 2)
.length
1 respuesta
B

#21 Que quieres decir que no me sirve para nada?

Me va a dar uno porque el maximo es 100, pero si pongo 200 me va a dar dos.

1 respuesta
JuAn4k4

#22 Vale, pensaba que el ejercicio era traducir un pseudo código del profesor, no sirve para aprender salvo a leer código del profesor. Deberían darte el problema a resolver.

Te lo he puesto en leet code, funcional. Lo puedes pasar a imperativo separando cada linea.

1 respuesta
B

#23 El profesor nos dio el siguiente pseudocodigo:

spoiler

Nosotros tenemos que traducirlo a javascript. Tendiendo en cuenta que console.log tiene que mostrar en pantalla "Hay "" numeros entre 1 y 100 con dos o mas 6. Entiendo que el ejercicio dara 1 valor que sera el 66, no? Ya que es el unico valor con dos o mas seises entre 1 y 100,

Correcto?

1 respuesta
JuAn4k4

#24 Cambiará el input, pero no el rango, que es 1..99 (aunque luego pone 11 abajo...) Y en ese rango el resultado siempre es 1. Porque el input va del 1 al 9. Y con dos repeticiones del mismo digito, solo puede haber 1.

console.log("Solo hay 1 digito entre 11 y 99 con dos o mas X, da igual X." );
1 respuesta
B

#25 Si cambio la constante de 100 a 200, segun mi algoritmo tendre el 66 y el 166.

1 respuesta
JuAn4k4

#26 Si, pero por que cambias el max? Si es una constante, no debería cambiar.

1 respuesta
B

#27 Simplemente para probar que el algoritmo funciona. Con la constante a 100 tengo el 1 numeros con dos seises o mas (66), con la constante a 200 tengo el 66 y 166

1 1 respuesta
JuAn4k4

#28 Hay otra forma, mucho más sencilla de hacerlo.

0..100 solo hay 1 (0+1)
0...1000 hay 3 (2+1)
0....10000 hay 7 (6+1)
me suena a binario esto 2n + 1

1 respuesta
B

#29 0...1000 hay 28: 66, 166, 266, 366, 466, 566, 606, 616, 626, 636, 646, 656, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 676, 686, 696, 766, 866, 966.

2 respuestas

Usuarios habituales