[Curso] Introducción a la programación en C (VIII)
Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06
Re: [Curso] Introducción a la programación en C (VIII)
Ok ok a ver si saco algo de tiempo, que ando justo justo...
Re: [Curso] Introducción a la programación en C (VIII)
Buf... va:
Ubuntu perfecto
Porque resta legibilidad. Uno al ver un bucle while espera que lo que marca el final es la condición del while. Si pones breaks, returns dentro, dificultas a quien lea el entender qué está haciendo el programa.
Nada, olvídalo
Eso no funciona... ¿Lo has probado?
No hagas return dentro del while!
¿Por qué haces tantas comparaciones? Intenta comprobar primero si es mayor que 20 y luego si es par, e imprimes ambas cosas
Uy, uy, uy, ojito ojito... ¿No prestas atención en las clases de aritmética, eh?
El resto de dividir por 2 sólo puede ser 0 o 1. Si no es 0, por tanto es 1 Te sobra la condición.
No está mal, pero ¿por qué sigues corriendo el bucle cuando ya sabes que no es primo?
CARDIHO escribió:profe me da un consejo que distribución de linux me aconsejaría para mi que soy noob en linux o ¿estoy bien con ubuntu?.
Ubuntu perfecto
CARDIHO escribió:¿Por que es considerado mala practica?
Porque resta legibilidad. Uno al ver un bucle while espera que lo que marca el final es la condición del while. Si pones breaks, returns dentro, dificultas a quien lea el entender qué está haciendo el programa.
m0skit0 escribió:No hace falta hacer 2 llamadas a printf().
Nada, olvídalo
CARDIHO escribió:Ejercicio 2
Eso no funciona... ¿Lo has probado?
CARDIHO escribió:Ejercicio 5
No hagas return dentro del while!
dark_sasuke escribió:Primer ejercicio
¿Por qué haces tantas comparaciones? Intenta comprobar primero si es mayor que 20 y luego si es par, e imprimes ambas cosas
dark_sasuke escribió:Segundo ejercicio [...] Numero1+Numero2/2
Uy, uy, uy, ojito ojito... ¿No prestas atención en las clases de aritmética, eh?
dark_sasuke escribió:Tercer ejercicio [...] else if(Suma%2 == 1)
El resto de dividir por 2 sólo puede ser 0 o 1. Si no es 0, por tanto es 1 Te sobra la condición.
dark_sasuke escribió:Cuarto ejercicio
No está mal, pero ¿por qué sigues corriendo el bucle cuando ya sabes que no es primo?
Re: [Curso] Introducción a la programación en C (VIII)
m0skit0 escribió: Ubuntu perfecto
Gracias profe, ya no soy tan noob .
m0skit0 escribió:Porque resta legibilidad. Uno al ver un bucle while espera que lo que marca el final es la condición del while. Si pones breaks, returns dentro, dificultas a quien lea el entender qué está haciendo el programa.
¿Entonces tampoco debo de poner la función continue verdad?
m0skit0 escribió:Eso no funciona... ¿Lo has probado?
Ya hice otro
m0skit0 escribió:No hagas return dentro del while!
ok
Ejercicios:
1:
Spoiler:
2:
Spoiler:
3:
Spoiler:
m0skit0 escribió:Ejercicio 4: correcto pero se puede optimizar porque haces demasiadas operaciones superfluas. Ahora compruebas si el número introducido es divisible por todos los números más pequeños que él. Ahora te pregunto: ¿sabes de algún número N que sea divisible por un número mayor que N/2 (y que no sea él mismo, claro)? ¿Por qué crees que ocurre esto?
No logro optimizarlo, y tampoco no entiendo muy bien lo que quiso decir con esto ( ¿sabes de algún número N que sea divisible por un número mayor que N/2 (y que no sea él mismo, claro)? ¿Por qué crees que ocurre esto?)
5:
Spoiler:
Saludos profe, cuídese
- largeroliker
- Administrador
- Mensajes: 8283
- Registrado: 03 Sep 2009, 09:46
- PSN ID: larger0o
- Gamertag Xbox Live: larger0o
- Steam ID: larger0o
- Twitter: larger0o
- Ubicación: Málaga
- Contactar:
Re: [Curso] Introducción a la programación en C (VIII)
Sobre el 1:
Ya no me acuerdo si en C se podía (me lío con los lenguajes ) pero cuando sólo hay una orden a ejecutar dentro de un if, no es necesario poner llaves. Yo ya me he acostumbrado a eso, así reduzco líneas de código que luego se agradecen
Eso sí, como intentes poner una segunda orden (ya sea definitiva o debug), si no pones llaves te fallará.
Ya no me acuerdo si en C se podía (me lío con los lenguajes ) pero cuando sólo hay una orden a ejecutar dentro de un if, no es necesario poner llaves. Yo ya me he acostumbrado a eso, así reduzco líneas de código que luego se agradecen
Eso sí, como intentes poner una segunda orden (ya sea definitiva o debug), si no pones llaves te fallará.
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2
Re: [Curso] Introducción a la programación en C (VIII)
CARDIHO escribió:¿Entonces tampoco debo de poner la función continue verdad?
Tanto break, como return como continue son instrucciones (que no funciones) útiles, hay que saber cuándo usarlas y cuándo no hacen falta o simplemente es contraproducente. Hay ocasiones en las que usar break es mejor que no usarlo, por ejemplo un bucle con muchas condiciones.
Código: Seleccionar todo
while ((a != b) && (c % 2 == 0) && !d && !(e || f))
Esto es menos legible y mantenible que
Código: Seleccionar todo
while(a != b)
{
if (c % 2 != 0) break;
if (d) break;
if (e || f) break;
}
Esto es mucho más claro a la hora de leerlo y modificarlo (mantenerlo).
Normalmente continue se usa igual que break, para comprobar condiciones del bucle, aunque su uso es muchísimo menos frecuente (no he usado continue nunca en ningún lenguaje en casi 20 años programando...).
CARDIHO escribió:3:
Uf, no me gusta nada eso de hacer 2 veces i++ en sitios diferentes por cada vuelta del bucle. Demasiado complicado para un problema tan sencillo. Esto lo lees dentro de una semana y no sabes lo que hace. Busca una solución más fácil y más entendible.
CARDIHO escribió:No logro optimizarlo, y tampoco no entiendo muy bien lo que quiso decir con esto
Tienes que prestar más atención en clase de matemáticas. Si quieres ser un buen programador, te tienen que gustar las matemáticas Intenta mejorar la forma en la que piensas en números, eso te ayudará a ser mejor programador (ya que, al fin y al cabo, programar no es más que manipular números).
CARDIHO escribió:5:
No compruebas que el jugador 1 haya introducido el número en el rango especificado.
CARDIHO escribió:Saludos profe, cuídese
Gracias, igualmente
largeroliker escribió:pero cuando sólo hay una orden a ejecutar dentro de un if, no es necesario poner llaves
Uy uy uy, no. Sí se puede, prácticamente nunca hay que hacerlo. Poned SIEMPRE las llaves a los ifs, fors, whiles, etc... ¿Por qué? Porque los bugs que resultan de olvidarse de poner las llaves son luego un quebradero de cabeza. Imagina que yo escribo:
Código: Seleccionar todo
if (loquefuere)
hazestootro();
Ahora 3 meses después tengo que modificar este if para que haga algo más. Me despisto (algo muy común en humanos) y pongo:
Código: Seleccionar todo
if (loquefuere)
hazestootro();
hazestonuevo();
Ahora lo llevo crudo porque hazestonuevo() se ejecutará SIEMPRE y no sólo cuando se cumpla la condición. Ahora pruebi el programa, hago que la condición se cumpla y parece que funciona correctamente. Lo subo a producción... Al día siguiente me despiden Esto en el mejor de los casos. Recemos para que el vice no programe el código para controlar una central nuclear
largeroliker escribió:Eso sí, como intentes poner una segunda orden (ya sea definitiva o debug), si no pones llaves te fallará.
Ojalá te fallara... El compilador no te avisará, y estarás como un lerdo buscando por qué falla durante 2 horas mínimo. Garantizado.
- largeroliker
- Administrador
- Mensajes: 8283
- Registrado: 03 Sep 2009, 09:46
- PSN ID: larger0o
- Gamertag Xbox Live: larger0o
- Steam ID: larger0o
- Twitter: larger0o
- Ubicación: Málaga
- Contactar:
Re: [Curso] Introducción a la programación en C (VIII)
m0skit0 escribió:Esto en el mejor de los casos. Recemos para que el vice no programe el código para controlar una central nuclearlargeroliker escribió:Eso sí, como intentes poner una segunda orden (ya sea definitiva o debug), si no pones llaves te fallará.
Ojalá te fallara... El compilador no te avisará, y estarás como un lerdo buscando por qué falla durante 2 horas mínimo. Garantizado.
Por suerte llevo control en eso, todavía no he llegado a las 200 líneas de código en ningún programa y cuando quiero añadir una segunda orden siempre pongo las llaves. Como máximo me puede pasar que me coma una de las llaves
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2
Re: [Curso] Introducción a la programación en C (VIII)
Tú estás hablando de programación "amateur" y yo de programación profesional. No tiene nada que ver una cosa con otra
- largeroliker
- Administrador
- Mensajes: 8283
- Registrado: 03 Sep 2009, 09:46
- PSN ID: larger0o
- Gamertag Xbox Live: larger0o
- Steam ID: larger0o
- Twitter: larger0o
- Ubicación: Málaga
- Contactar:
Re: [Curso] Introducción a la programación en C (VIII)
m0skit0 escribió:Tú estás hablando de programación "amateur" y yo de programación profesional. No tiene nada que ver una cosa con otra
Bueno, "amateur". No es programación profesional, pero tampoco lo hago en mi casa (ni en clase )
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2
Re: [Curso] Introducción a la programación en C (VIII)
Entonces hazme caso: más vale prevenir que curar. He visto programadores con mucha experiencia olvidarse de añadir las llaves. Dos llaves bien valen evitarse varias horas (o días en caso de novatos) de buscar por qué falla el programa.