elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda por favor ejercicio reloj do/while C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda por favor ejercicio reloj do/while C  (Leído 10,548 veces)
juanpalomo098

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Ayuda por favor ejercicio reloj do/while C
« en: 21 Noviembre 2016, 15:44 pm »

6.   Realizar un reloj que se retrase una hora automáticamente el tercer día de la semana 40
Por que no funciona?
Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. void main(){
  4. int seg,min,hr,dia;
  5. seg=0;
  6. min=0;
  7. hr=0;
  8. dia=1;
  9.  
  10. do{
  11. seg=seg++;
  12. if(seg==59){min=min++; seg=0;}
  13. if(min==59&&seg==59){hr=hr++;min=0;seg=0;}
  14. if(hr==23&&min==59&&seg==59){dia=dia++;hr=0;min=0;seg=0;}
  15. if(dia==282&&hr==23&&min==59&&seg==59){dia=dia++;hr=-1;min=0;seg=0;}
  16.  
  17. printf("\ndia %d %d:d%:%d",dia,hr,min,seg);
  18. }while(dia<283);
  19.  
  20.  
  21. }//void

MOD: Etiqueta GeSHi.


« Última modificación: 21 Noviembre 2016, 16:03 pm por MCKSys Argentina » En línea

Ocelot1994

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #1 en: 21 Noviembre 2016, 16:27 pm »

Lo primero no utilices la libreria conio, puede utilizar otras funciones estilo putchar.
Y luego tu principal fallo es que cuando llega al segundo 59, el contador se reinicia a 0 por lo que nunca te entrara ni por el segundo , ni por el tercero... etc ya que no se cumple la condición.

Un saludo.


En línea

juanpalomo098

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #2 en: 21 Noviembre 2016, 17:47 pm »

Parece que no funciona ni e contador de segundos y no entiendo porque... el otro dia hice un programa de numeros primos que se parece bastante y funcionaba correctamente.

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. void main(){
  4. //NUMEROS PRIMOS
  5. int num,divisor;
  6. num=5;
  7. divisor=3;
  8. printf("primo:2\nprimo:3\n");
  9. while(1000>num){
  10. if(num%divisor!=0){divisor=divisor+2;
  11. }//if
  12. else{divisor=3;
  13. num=num+2;}//else
  14. if(num==divisor){
  15.  
  16. printf("primo:%d\n",num);
  17. divisor=3;
  18. num=num+2;
  19. }//if2
  20.  
  21. }//while
  22.  
  23.  
  24. }//void
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #3 en: 21 Noviembre 2016, 18:59 pm »

Código:
seg = seg++;
¿Al final de esta instrucción qué vale seg?
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #4 en: 21 Noviembre 2016, 19:01 pm »

primero estas haciendo mal el incremento de las variables
seg=seg++;
con poner seg++; es suficiente

segundo estas haciendo mal las comprobaciones
if(seg==59){min=min++; seg=0;}
solo entrara cunando seg sea exactamente igual a 59

tercero estas haciendo mal el reinicio de las variables
if(seg==59){min=min++; seg=0;}
if(min==59&&seg==59){hr=hr++;min=0;seg=0;}
no puedes estar poniendo a cero cada ves que entras en una nueva comprobación
tiene que haber una sola que se encargue de reiniciarla cuando supere su valor máximo
por ejemplo
if(seg>=60){min++; seg=0;}
if(min>=60){hr++;min=0;}
En línea

juanpalomo098

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #5 en: 22 Noviembre 2016, 14:29 pm »

En primer lugar gracias a todos por vuestros comentarios.
No se porque pero solo suma las horas y los dias, he probado sin el if (seg!=60), pero es lo mismo...

MAFUS al final de esa instrucción seg vale 1 y pensaba que deberia seguir sumando 1 hasta meterse en el if que sumaria un minuto y reiniciaria seg.

Kenji-chan he cambiado el codigo pero no se que mas hace falta....


Código
  1. #include<stdio.h>
  2. void main(){
  3. int seg,min,hr,dia;
  4. seg=0;
  5. min=0;
  6. hr=0;
  7. dia=1;
  8.  
  9.  
  10. do{
  11.  
  12.  
  13. if (seg!=60){seg++;}
  14. if(seg>=60){min++; seg=0;}
  15. if(min>=60){hr++;min=0;}
  16. if(dia%283==0&&dia!=1&&hr>=24){dia++;hr=-1;}
  17. if(hr>=24){dia++;hr=0;}
  18.  
  19.  
  20. printf("\ndia %d %d:d%:%d",dia,hr,min,seg);
  21.  
  22.  
  23. }while(dia<285);
  24.  
  25.  
  26. }//void
« Última modificación: 22 Noviembre 2016, 14:59 pm por juanpalomo098 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #6 en: 22 Noviembre 2016, 17:37 pm »

Decide a qué hora debes realizar el cambio. Si lo haces justo al entrar al día debes volver a las 23 horas del día anterior.
Ya que vuelves una hora atrás, al volver a ser la hora definida, se repetiría el atraso de la hora, y eso no te interesa. Usa un marcador para decir que se ha realizado ese cambio y evitar que se produzca de nuevo.
Ese marcador no puede estar activo eternamente porqué al siguiente año no se podría producir el atraso de la hora. Deberás reiniciarlo.
En línea

juanpalomo098

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #7 en: 22 Noviembre 2016, 18:57 pm »

Entiendo, pero sigue sin funcionarme en C sera por que uso turbo C?
Lo he probado en java y parece que funciona bien...
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #8 en: 22 Noviembre 2016, 19:05 pm »

en la linea 16 con el operador '%' estas comprobado si el residuo de dividir en cada iteracion el valor de dia entre 283 sea exactamente igual a 0
if(dia%283==0&&dia!=1&&hr>=24){dia++;hr=-1;}
mejor evalúa el dia y despues haces otra evalucion del dia que quieres que se atrase
if(dia<=24)


printf("\ndia %d %d:d%:%d",dia,hr,min,seg);
esta mal escrito es %d por eso te imprime la d y en el contador de las horas te imprime los minutos
En línea

juanpalomo098

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Ayuda por favor ejercicio reloj do/while C
« Respuesta #9 en: 22 Noviembre 2016, 19:27 pm »

Muchas gracias! ya funciona perfectamente, el reloj retrasa una hora en el dia 283 que creo que es lo que pedia el ejecicio, en lugar de retrasarla cada 283 dias que es lo que pretendia aunque estuviera mal...
(Al final he puesto la libreria conio.h porque me da error con putchar(); en turbo c)
Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. void main(){
  4. int seg,min,hr,dia,cont;
  5. seg=0;
  6. min=0;
  7. hr=0;
  8. dia=1;
  9. cont=0;
  10.  
  11.  
  12. do{
  13.  
  14. seg++;
  15. if(seg>=60){min++; seg=0;}
  16. if(min>=60){hr++;min=0;}
  17. if(hr>=24){dia++;hr=0;}
  18. if(dia==283&&cont==0){cont++;dia=282;hr=23;}
  19.  
  20. printf("\ndia %d %d:%d:%d",dia,hr,min,seg);
  21.  
  22.  
  23. }while(dia<283);
  24.  
  25.  
  26. }//void
« Última modificación: 22 Noviembre 2016, 19:34 pm por juanpalomo098 » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con este ejercicio, por favor
Programación C/C++
alexandra.vargas 7 4,382 Último mensaje 9 Enero 2014, 19:05 pm
por alexandra.vargas
Ayuda con ejercicio! POR FAVOR!
Programación C/C++
Trompasl 3 2,974 Último mensaje 8 Mayo 2016, 23:34 pm
por MAFUS
ayuda por favor con un ejercicio, dev c++
Programación C/C++
raenriquez4 8 5,494 Último mensaje 22 Agosto 2016, 06:20 am
por AlbertoBSD
Ejercicio de C, Ayuda por favor!
Programación C/C++
Geg1 7 3,701 Último mensaje 6 Noviembre 2016, 20:58 pm
por engel lex
reloj casio cmd 40 se adelanta mucho ayuda por favor
Electrónica
Enrique357 6 5,312 Último mensaje 7 Octubre 2017, 21:50 pm
por PalitroqueZ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines