Autor
|
Tema: Ayuda por favor ejercicio reloj do/while C (Leído 10,548 veces)
|
juanpalomo098
Desconectado
Mensajes: 27
|
6. Realizar un reloj que se retrase una hora automáticamente el tercer día de la semana 40 Por que no funciona? #include<stdio.h> #include<conio.h> void main(){ int seg,min,hr,dia; seg=0; min=0; hr=0; dia=1; do{ seg=seg++; if(seg==59){min=min++; seg=0;} if(min==59&&seg==59){hr=hr++;min=0;seg=0;} if(hr==23&&min==59&&seg==59){dia=dia++;hr=0;min=0;seg=0;} if(dia==282&&hr==23&&min==59&&seg==59){dia=dia++;hr=-1;min=0;seg=0;} printf("\ndia %d %d:d%:%d",dia ,hr ,min ,seg ); }while(dia<283); }//void
MOD: Etiqueta GeSHi.
|
|
« Última modificación: 21 Noviembre 2016, 16:03 pm por MCKSys Argentina »
|
En línea
|
|
|
|
Ocelot1994
Desconectado
Mensajes: 40
|
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
Mensajes: 27
|
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. #include<stdio.h> #include<conio.h> void main(){ //NUMEROS PRIMOS int num,divisor; num=5; divisor=3; while(1000>num){ if(num%divisor!=0){divisor=divisor+2; }//if else{divisor=3; num=num+2;}//else if(num==divisor){ divisor=3; num=num+2; }//if2 }//while }//void
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
¿Al final de esta instrucción qué vale seg?
|
|
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
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
Mensajes: 27
|
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.... #include<stdio.h> void main(){ int seg,min,hr,dia; seg=0; min=0; hr=0; dia=1; do{ if (seg!=60){seg++;} if(seg>=60){min++; seg=0;} if(min>=60){hr++;min=0;} if(dia%283==0&&dia!=1&&hr>=24){dia++;hr=-1;} if(hr>=24){dia++;hr=0;} printf("\ndia %d %d:d%:%d",dia ,hr ,min ,seg ); }while(dia<285); }//void
|
|
« Última modificación: 22 Noviembre 2016, 14:59 pm por juanpalomo098 »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
Mensajes: 27
|
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
Mensajes: 104
|
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
Mensajes: 27
|
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) #include<stdio.h> #include<conio.h> void main(){ int seg,min,hr,dia,cont; seg=0; min=0; hr=0; dia=1; cont=0; do{ seg++; if(seg>=60){min++; seg=0;} if(min>=60){hr++;min=0;} if(hr>=24){dia++;hr=0;} if(dia==283&&cont==0){cont++;dia=282;hr=23;} printf("\ndia %d %d:%d:%d",dia ,hr ,min ,seg ); }while(dia<283); }//void
|
|
« Última modificación: 22 Noviembre 2016, 19:34 pm por juanpalomo098 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda con este ejercicio, por favor
Programación C/C++
|
alexandra.vargas
|
7
|
4,382
|
9 Enero 2014, 19:05 pm
por alexandra.vargas
|
|
|
Ayuda con ejercicio! POR FAVOR!
Programación C/C++
|
Trompasl
|
3
|
2,974
|
8 Mayo 2016, 23:34 pm
por MAFUS
|
|
|
ayuda por favor con un ejercicio, dev c++
Programación C/C++
|
raenriquez4
|
8
|
5,494
|
22 Agosto 2016, 06:20 am
por AlbertoBSD
|
|
|
Ejercicio de C, Ayuda por favor!
Programación C/C++
|
Geg1
|
7
|
3,701
|
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
|
7 Octubre 2017, 21:50 pm
por PalitroqueZ
|
|