ALGORITMO PARA RELOJ

Temas de Algoritmos, Estructuras de Datos, en general

ALGORITMO PARA RELOJ

Notapor NEMELA » Dom Feb 04, 2007 5:34 pm

hola acabo de comenzar el 1 año de ing de sistemas y nos han enviado de tarea realizar los sgtes algoritmos, pero en el pseudocodigo del profesor por lo tanto no puedo utilizart la funcion timer del c ni nada de eso.. me darian alguna idea de como los resuelvo?
1- diseñe un algoritmo q lea la hora actuial del dia HH:MM:SS Y determine las horas,min y seg q restan para culminar el dia.asuma un formato de 24 h
2, diseñe un algoritmo para sumar dos tiempos dados en horas, min y seg

muchas gracias
cyn
NEMELA
Novato
Novato
 
Mensajes: 1
Registrado: Dom Feb 04, 2007 5:26 pm


Funcion para sacar la hora del sistema

Notapor al_fc » Mié Feb 07, 2007 10:34 am

Talvez esto te sirva un poco

Código: Seleccionar todo
  1. #include <stdio>

  2. #include <time>

  3.  

  4. int main ()

  5. {

  6.   time_t rawtime;

  7.   struct tm * timeinfo;

  8.  

  9.   /* obtener el tiempo en segundos desde el 1 de enero de 1970 */

  10.   time ( &rawtime );

  11.   // Imprimir la fecha y Hora en formato string, revisar la funcion ctime

  12.   printf ( "La fecha y hora actual son %s", ctime (&rawtime) );

  13.  

  14.   // Luego convertir esa hora y fecha que estan en segundos

  15.   // a la eestructura de TM, que contiene

  16.   /*struct tm

  17. {

  18.         int     tm_sec;         /* Seconds: 0-59 (K&R says 0-61?)

  19.         int     tm_min;         /* Minutes: 0-59

  20.         int     tm_hour;        /* Hours since midnight: 0-23

  21.         int     tm_mday;        /* Day of the month: 1-31

  22.         int     tm_mon;         /* Months *since* january: 0-11

  23.         int     tm_year;        /* Years since 1900

  24.         int     tm_wday;        /* Days since Sunday (0-6)

  25.         int     tm_yday;        /* Days since Jan. 1: 0-365

  26.         int     tm_isdst;       /* +1 Daylight Savings Time, 0 No DST,

  27.                                  * -1 don't know

  28. };*/

  29.  

  30.  

  31.   timeinfo = localtime ( &rawtime );

  32.  

  33.   // Imprimir la hora

  34.   printf ("La hora es :%d\n",timeinfo->tm_hour );

  35.   // Imprimir los minutos

  36.   printf ("Los minutos son:%d\n",timeinfo->tm_min );

  37.   // Imprimir los segundos

  38.   printf ("Los segundos son:%d\n", timeinfo->tm_sec );

  39.  

  40.   system("PAUSE");

  41.   return 0;

  42. }

*****@AL F.C.@*****
al_fc
Usuario Activo
Usuario Activo
 
Mensajes: 41
Registrado: Lun Sep 25, 2006 10:17 am
Ubicación: Choloma-Honduras


calcular el tiempo

Notapor j.eagle » Mar Oct 30, 2007 8:46 pm

hola tengo un codigo q me permite contabilizar la duracion de la ejecucion de un programa, el mandato se ejecuta por consola (GNU/Linux) y se hizo gracias al estandar posix, .... te resumo un poco este codigo es ejecutado bajo Linux pero no dista de ser una solucion para tu tarea, eso si, ten encuenta q en ves de restar (contar duracion) sumaras dos tiempos (los q tu quieras)

recuerda q con la ayuda de este codigo y el otro codigo del msj anterior sacaras tu tarea adelante, solo presta atencion y lee con cuidado. Espero t sirva

Código: Seleccionar todo
  1.  

  2. #include <stdio.h>

  3. #include <unistd.h>

  4. #include <time.h>

  5. #include <sys/times.h>

  6. #include <sys/wait.h>

  7.  

  8. #include <signal.h>

  9. #include <unistd.h>

  10.  

  11. /*Este programa tiene diferentes opciones de ejecucion (switch),

  12. 1._Tiempo de ejecucion de la funcion alarm()

  13.         ejecuta la opcion alarm por la cantidad de seg q usuario ingresò

  14. 2._Tiempo de ejecucion en un programa cualquiera + nombre_del programa

  15.         ejecuta cualquier programa o comando y contabiliza su tiempo hasta q deje de ejecutarse dicho programa Nota: el unico argumento q recibe dicha funcion es el nombre del comando sin argumentos, para er una version con argumentos ver Contabilidad-0_2.c

  16. 3._Salir

  17.         Sale del programa

  18. */

  19.  

  20. char prog[20];//esta cadena la necesito en Anyprogram()

  21. int AlarmAccounting()

  22. {

  23.         struct tms tms_Init, tms_End;//estructura definida en times.h

  24.  

  25. /*

  26. struct tms

  27.   {

  28.     clock_t tms_utime;           User CPU time.  

  29.     clock_t tms_stime;           System CPU time.  

  30.     clock_t tms_cutime;         User CPU time of dead children.  

  31.     clock_t tms_cstime;         System CPU time of dead children.  

  32.   };

  33.  

  34. */

  35.  

  36.         clock_t init_Time;

  37.         clock_t end_Time;

  38.         long enSeg= sysconf(_SC_CLK_TCK);//asigno los intervalos en segundos del reloj

  39.         //pa luego hacer la conversion

  40. //iniicio el conteo

  41.         init_Time= times(&tms_Init);

  42.  

  43.         Alarm();

  44.  

  45.         wait(NULL);//busca pa q sirve wait!, supongo q es para parar hasta q el proceso termine y saltar al programa Contabilidad

  46. //termino el conteo

  47.         end_Time= times(&tms_End);

  48.        

  49. printf ("Tiempo en ejecucion + tardanza en digitar el dato: %0.3f\n",   (float)(end_Time - init_Time)/enSeg);//%f float en notacion decimal

  50.  

  51. printf ("User CPU time: %0.15f\n", (float)(tms_End.tms_utime - tms_Init.tms_utime)/enSeg);

  52.  

  53. printf ("Tiempo de sistema: %0.15f\n", (float)(tms_End.tms_stime - tms_Init.tms_stime)/enSeg);

  54.  

  55. printf ("Tiempo de usuario mientras mueren los hijos : %0.15f\n", (float)(tms_End.tms_cutime - tms_Init.tms_cutime)/enSeg);

  56.  

  57. printf ("Tiempo de sistema mientras mueren los hijos : %0.15f\n", (float)(tms_End.tms_cstime - tms_Init.tms_cstime)/enSeg);

  58.  

  59.         return 0;

  60. }

  61.  

  62.  

  63. void trapper(int sig)//ayuda pa Program

  64. {

  65.         signal(sig, trapper);

  66.         printf("\nMENSAJE!: funcion alarm()\n\n");

  67. }      

  68.  

  69. int Alarm(void)//este programa solo muestra gran cambio en Tiempo Real

  70. {

  71. /*********************************************************************

  72. Nota: este metodo demora lo q el usuario se demora en digitar el tiempo

  73.       de espera para alarm() mas lo q demora dicha funcion.

  74. ***********************************************************************/

  75.         int i, o;

  76.         signal(14, trapper);

  77.         //printf("El PID del proceso es : %d\n", getpid() );

  78.         printf("digite el tiempo de espera para la funcion alarm(): ");

  79.         scanf("%d",&o);

  80.         //for(i=0;i<=3;i++)

  81.         //{

  82.                 alarm(o);

  83.                 pause();

  84.         //}

  85.         return 0;

  86. }

  87.  

  88.  

  89. int AnyProgram( /*char prog[]*/)

  90. {

  91. /*Nota:

  92. si en la linea de arriba pongo char prog[];  <--Ojo tiene punto y coma

  93. en la linea de abajo debo poner &prog   para q lo muestre en pantalla

  94. */

  95.  

  96.  printf("Digite el programa a ejecutar: ");

  97.  scanf("%s",&prog);

  98. printf("El programa a ejecutar es: %s\n",prog); //imprime el programa a ejecutar

  99.  

  100.         struct tms tms_Init, tms_End;

  101.         clock_t init_Time, end_Time;

  102.         long enSeg;

  103.         /* obtiene el número de int. De reloj por segundo */

  104.         enSeg= sysconf(_SC_CLK_TCK);

  105.  

  106.         init_Time= times(&tms_Init);

  107.  

  108. // aqui va el codigo del programa a ejecutar

  109. char path[20]="/usr/bin";

  110.  

  111.         if (fork()==0)

  112.         {//execvp(argv[1], &argv[1]);

  113. // Hace lo mismo q la ultima opcion q està  en comentarios en este ciclo (La ultima)

  114.                 execvp(prog, NULL);

  115.                 perror("error ejecutando el programa");

  116.                 return 1;

  117.  

  118.         }

  119.         wait(NULL);

  120.         end_Time= times(&tms_End);

  121.  

  122.         printf ("\nTiempo en ejecucion: %0.3f\n",       (float)(end_Time - init_Time)/enSeg);//%f float en notacion decimal

  123.  

  124.         printf ("User CPU time: %0.15f\n", (float)(tms_End.tms_utime - tms_Init.tms_utime)/enSeg);

  125.  

  126.         printf ("Tiempo de sistema: %0.15f\n", (float)(tms_End.tms_stime - tms_Init.tms_stime)/enSeg);

  127.  

  128.         printf ("Tiempo de usuario mientras mueren los hijos : %0.15f\n", (float)(tms_End.tms_cutime - tms_Init.tms_cutime)/enSeg);

  129.  

  130.         printf ("Tiempo de sistema mientras mueren los hijos : %0.15f\n", (float)(tms_End.tms_cstime - tms_Init.tms_cstime)/enSeg);

  131. return 0;

  132. }

  133.  

  134.  

  135. int main()

  136. {

  137.         int opcion=0;

  138.         printf("\n");

  139.         printf("-----Contabilidad   version 0.2------\n");

  140.         printf("1._Tiempo de ejecucion de la funcion alarm()\n");

  141.         printf("2._Tiempo de ejecucion en un programa cualquiera \n");

  142.         printf("3._Salir\n");

  143.         printf("\n");

  144.        

  145.         do {  printf("digite su opcion [1-3]...: ");

  146.            scanf("%d",&opcion);

  147.         }while((opcion<0)||(opcion>3));

  148.  

  149.         switch(opcion)

  150.         {      

  151.         case 1:AlarmAccounting();

  152.                 break;

  153.  

  154.         case 2:

  155. /*              scanf("%s",&prog);

  156.                 printf("%s",&prog);//esto no debe cambiarse de posicion

  157. */  

  158.                 AnyProgram( /*prog*/);

  159.                 break;

  160.        

  161.         case 3:

  162.                 return 0;

  163.         }

  164. return 0;

  165. }

  166.  

  167.  

  168.  

  169.  

  170.  

j.eagle
Novato
Novato
 
Mensajes: 1
Registrado: Mar Oct 30, 2007 8:47 am

Re: ALGORITMO PARA RELOJ

Notapor andresprimo » Jue Jun 16, 2011 5:17 pm

Hola.

Como el algoritmo debe ser hecho en pseudocodigo, las funciones de los lenguajes y sistemas operativos no pueden utilizarse. Es logico, porque es un curso de 1er año.

CASO 1: 24 horas - HMS

Leer H, M, S.
Asignar 0 en HHH, MMM, SSS
HHH = 24 - H
SI (M==0) Y (S==0) entonces Mostrar HHH:MMM:SSS. Terminar
HHH = HHH - 1
MMM = 60 - M
SI (S==0) entonces Mostrar HHH:MMM:SSS. Terminar
MMM = MMM - 1
SSS = 60 - S
Mostrar HHH:MMM:SSS

------------------------

CASO 2: Sumar 2 tiempos HMS

Leer H1,M1,S1
Leer H2,M2,S2
H = H1+H2
M = M1+M2
S = S1+S2
SI (S>=60) entonces M = M+1, S = S-60
SI (M>=60) entonces H = H+1, M = M-60
Mostrar H:M:S

Vale aclarar que S1+S2 no llega a 120 porque el valor maximo de S1 y S2 es 59.99
Ademas, M1+M2 es 59+59 como maximo, pero puede recibir un 1 adicional por el acarreo de SI (S>=60) y no llega a 120.
Este tipo de analisis sobre el valor maximo debe hacerse porque afecta a las condiciones utilizadas.


ANDRES.-
andresprimo
Novato
Novato
 
Mensajes: 4
Registrado: Jue Jun 16, 2011 10:18 am


    

Volver a Algoritmos y Estructuras de Datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados