Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Ominous

#1
No entiendo la finalidad del reto, si solo hay que conseguir que muestre el mensaje "Felicidades" o si hay que conseguir algo mas... Si solo se trata de que muestre las felicidades basta con añadir "goto lau" sin las comillas después de la linea 11.

Tampoco sé si está permitido codificar el programa o si hay que saltarse la protección con algún tipo de inyección... o si por el contrario hay que encontrar la clave correcta de verdad.

No sé si es eso lo que buscas y si no es así, agradecería mas información por favor.

Saludos!
#2
C / C++ / Re:Programa en C ; Apaga el PC
Febrero 03, 2016, 07:10:01 AM
Hola, vi tu post y quería hacer un aporte porque leí que estabas empezando a aprender C y quería comentar un par de puntos a tener en cuenta sobre tu programa. Es la primera vez que me animo a contestar a un hilo y debido a que lo que voy a comentar son errores, me gustaría aclarar que en ningún momento pretendo humillar ni nada por el estilo, simplemente enseñar un poco y hacer que la gente que compone este foro sea día a día un poco mejor.

A pesar de que ya comentaron que el comando shutdown ya dispone de esa opción, voy a suponer que lo queremos implementar en C si o si.

Punto 1:
Primero me gustaría comenzar haciendo una pregunta con referencia a tu código (linea 48):

Código: c
p *= 16363;


¿Por qué multiplicas la varialbe p por 16363 y lo guardas en p? ¿De donde sale este número? ¿Qué significa?
-He podido intuir que esto se debe a que para relacionar la velocidad a la que disminuyes p y que el tiempo que tarda este en llegar a 0 sea similar a los minutos que introdujo el usuario habrás hecho numerosas pruebas y en tu PC posiblemente hayas conseguido que coincida a cronómetro en mano con el tiempo indicado. Sin embargo tengo que decirte que esto no es correcto.

¿Por qué no es correcto? Te estarás preguntando, aquí la respuesta:
Cuando nosotros ejecutamos un programa, este carga el proceso en memoria y comienza a ser ejecutado por el procesador. En los Sistemas Operativos actuales se hace uso de la multiprogramación a nivel incluso de múltiples núcleos, esto quiere decir que como estamos ante un proceso secuencial, el sistema operativo asignará tu proceso a un núcleo y luego este competirá por el uso de la CPU de ese núcleo con otros procesos que también se encuentren ahí asignados.
¿Que vengo a decir con esto? Que dependiendo de la cantidad de competencia que tenga tu proceso para luchar por el uso de la CPU asignada tu contador disminuirá a mayor o menor velocidad.
Otro factor que afectaría a tu programa es que el nucleo asignado sea "mas rapido o mas lento" que el tuyo.
Esto significaría que se produciría un adelanto o un retrasos a la hora del momento en que se eligió para apagar el PC.

Punto 2:
Otro punto que me gustaría resaltar es que no es recomendable hacer una espera ocupada para llevar a cabo un cierto evento, me refiero a tu codigo (lineas 50-56):

Código: c
while(p > 0){
                printf("\n %f",p);
                p--;
                if(p == 0){
                        system("shutdown /s /hybrid");
                }
}


Este bucle lo único que hace es imprimir por pantalla el valor de p, decrementar su valor, comprobar si es 0 y de ser así ejecuta el comando indicado. El estar todo el rato comprobando esto consumiendo CPU de forma innecesaria se le llama espera ocupada. Esto no es recomendable. Se que quizás sea un poco pronto pero esto lo aprenderás una vez sepas sobre programación secuencial (que es el caso actual) y comiences a aprender sobre programación concurrente.
Para evitar la ejecución de la espera puedes hacer uso de la funcion

sleep(int param);

Ten cuidado pues dependiendo de tu SO, la función esperará los milisegundos del numero que le pases (Caso windows) o lo segundos del numero que le pases (Caso linux).
Si en windows queremos que se haga una espera de 1 segundo, escribimos:

Código: c
sleep(1000)


Podrias comenzar haciendo esas modificaciones si gustas y luego proponerte hacer lo que ya te propusieron anteriormente, que es la detección de la finalización de la descarga.

Si en algun momento he resultado ofensivo o demasiado machacador, les agradecería que me lo hicieran saber pues no es la imagen que quiero transmitir.
Un saludo y gracias por su tiempo :)

PD: cualquier duda, puedes preguntarla en este mismo hilo y lo vamos viendo. Ánimo!!
PD2: Lo siento por el tocho de texto XD