Escribe un programa llamado 100112anosBisiestos.rb que pregunte por un año de inicio y uno de fin, y luego muestre en una sola línea todos los años bisiestos que han ocurrido entre ellos (incluyéndo, si también han sido los años introducidos, años bisiestos) y especificando el número total de años bisiestos detectados.
Los años bisiestos son divisibles entre cuatro (como 1984 y 2004). Sin embargo, los años divisibles entre 100 no son años bisiestos (como 1800 y 1900) a menos que sean divisibles por 400 (como 1600 y 2000, los cuales fueron, de hecho, bisiestos).
Cuando lo tengas terminado, guárdalo en tu carpeta de Dropbox y enséña como funciona al profesor.
A continuación se muestra una posible ejecución del programa:
Indica año de inicio:
1800
Indica año de fin:
2005
===
Hay 50 años bisiestos: 1804-1808-1812-1816-1820-1824-1828-1832-1836-1840-1844-1848-1852-1856-1860-1864-1868-1872-1876-1880-1884-1888-1892-1896-1904-1908-1912-1916-1920-1924-1928-1932-1936-1940-1944-1948-1952-1956-1960-1964-1968-1972-1976-1980-1984-1988-1992-1996-2000-2004
No tiene que ver con el ejercicio, pero me gustaba mas la otra distribucion de temas del blog, estaba todo mucho mas a mano
ResponderEliminarYo también encuentro más cómoda la otra.
Eliminaropino lo mismo :P
Eliminar100112anosBisiestos.rb:18: syntax error, unexpected tUPLUS, expecting keyword_end bisiestos = bisiestos + '-' + anio.to_s +'.'
ResponderEliminar^
Mi error es muy simple: se soluciona introduciendo un espacio entre esos caracteres.
me ha situado el simbolo ^ donde no era... El espacio se introduce antes del '.'
EliminarOs pongo por aqui un error extraño que me ha traido de cabeza, habia puesto la siguiente condicion: if (inicio%4 == 0 and inicio%100 == 1) para especificar que queria que el numero de la variable inicio fuera divisible entre 4 pero no entre 100 para que entrara por el if y no me ha funcionado, tampoco me ha dado mensaje de error pero desde luego no se comportaba como se esperaba ¿como lo he solucionado? cambiandolo por esto: if (inicio%4 == 0 and inicio%100 != 0) , si alguien puede explicarmelo...por que no entiendo que ha pasado
ResponderEliminarAl poner (inicio % 100 == 1) se te están escapando los casos que dan de resto 2 y 3. Podría ser una explicación.
Eliminar¿Resto 2 y 3? yo pense que el modulo (%) solo podia devolver 0 (si es divisible) o 1 (si no es divisible), aunque si ahora me dices que puede dar 2 y 3 tambien pues ya adquiere todo mas sentido !gracias!
Eliminar% calcula el resto de la división. Por ejemplo, 9 % 5 nos devuelve 4.
EliminarError: 100112anosbisiestos.rb:24:in ``: undefined method `+` for nil:NilClass (No MethodError)
ResponderEliminarSolucion: Inicializar la variable con algun contenido en ella, aunque sea ''.
El mismo caso que Javier y opte por la misma solución.
EliminarA mi lo que me pasaba es que no recogia la suma de los años, y tambien el problema de Roberto, que gracias a lo que habeis comentado lo he solucionado y me ha salido correctamente.
ResponderEliminarMi error era en la sentencia de las divisiones que en un principio las puse: if (anio%4== 0 && anio%100!= 0 && anio%400== 0) cuando tenia que ser: if (anio%4== 0 && anio%100!= 0) || (anio%400== 0.
ResponderEliminarif (anio%4== 0 && anio%100!= 0) || (anio%400== 0)
EliminarC:/Users/Administrador/Desktop/100112anosbisiestos.rb:30:in `': undefined
ResponderEliminarmethod `+@' for "1928":String (NoMethodError)
solución : separar bien las variables, espacios entre los "+".
A mi no me da ningun error, solo que no se me cierra el programa y los años me salen cada uno en una linea...
ResponderEliminarA lo que me ha pasado es que a la variable que cree para que me cuente los año la llame "ContadorAños", al poner la "C" en mayúsculas lo que hice fue crear una variable constante, y me da un error ya que esa variable cambia su valor.
ResponderEliminarLa solución cambié el nombre con "c" en minúsculas.