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
#include <stdio>
#include <time>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
 
  /* obtener el tiempo en segundos desde el 1 de enero de 1970 */
  time ( &rawtime );
  // Imprimir la fecha y Hora en formato string, revisar la funcion ctime
  printf ( "La fecha y hora actual son %s", ctime (&rawtime) );

  // Luego convertir esa hora y fecha que estan en segundos
  // a la eestructura de TM, que contiene
  /*struct tm
{
   int   tm_sec;      /* Seconds: 0-59 (K&R says 0-61?)
   int   tm_min;      /* Minutes: 0-59
   int   tm_hour;   /* Hours since midnight: 0-23
   int   tm_mday;   /* Day of the month: 1-31
   int   tm_mon;      /* Months *since* january: 0-11
   int   tm_year;   /* Years since 1900
   int   tm_wday;   /* Days since Sunday (0-6)
   int   tm_yday;   /* Days since Jan. 1: 0-365
   int   tm_isdst;   /* +1 Daylight Savings Time, 0 No DST,
             * -1 don't know
};*/


  timeinfo = localtime ( &rawtime );
 
  // Imprimir la hora
  printf ("La hora es :%d\n",timeinfo->tm_hour );
  // Imprimir los minutos
  printf ("Los minutos son:%d\n",timeinfo->tm_min );
  // Imprimir los segundos
  printf ("Los segundos son:%d\n", timeinfo->tm_sec );

  system("PAUSE");
  return 0;
}
*****@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
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/times.h>
#include <sys/wait.h>

#include <signal.h>
#include <unistd.h>

/*Este programa tiene diferentes opciones de ejecucion (switch),
1._Tiempo de ejecucion de la funcion alarm()
   ejecuta la opcion alarm por la cantidad de seg q usuario ingresò
2._Tiempo de ejecucion en un programa cualquiera + nombre_del programa
   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
3._Salir
   Sale del programa
*/

char prog[20];//esta cadena la necesito en Anyprogram()
int AlarmAccounting()
{
   struct tms tms_Init, tms_End;//estructura definida en times.h

/*
struct tms
  {
    clock_t tms_utime;       User CPU time. 
    clock_t tms_stime;       System CPU time. 
    clock_t tms_cutime;      User CPU time of dead children. 
    clock_t tms_cstime;      System CPU time of dead children. 
  };

*/

   clock_t init_Time;
   clock_t end_Time;
   long enSeg= sysconf(_SC_CLK_TCK);//asigno los intervalos en segundos del reloj
   //pa luego hacer la conversion
//iniicio el conteo
   init_Time= times(&tms_Init);

   Alarm();

   wait(NULL);//busca pa q sirve wait!, supongo q es para parar hasta q el proceso termine y saltar al programa Contabilidad
//termino el conteo
   end_Time= times(&tms_End);
   
printf ("Tiempo en ejecucion + tardanza en digitar el dato: %0.3f\n",   (float)(end_Time - init_Time)/enSeg);//%f float en notacion decimal

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

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

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

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

   return 0;
}


void trapper(int sig)//ayuda pa Program
{
   signal(sig, trapper);
   printf("\nMENSAJE!: funcion alarm()\n\n");
}   

int Alarm(void)//este programa solo muestra gran cambio en Tiempo Real
{
/*********************************************************************
Nota: este metodo demora lo q el usuario se demora en digitar el tiempo
      de espera para alarm() mas lo q demora dicha funcion.
***********************************************************************/
   int i, o;
   signal(14, trapper);
   //printf("El PID del proceso es : %d\n", getpid() );
   printf("digite el tiempo de espera para la funcion alarm(): ");
   scanf("%d",&o);
   //for(i=0;i<=3;i++)
   //{
      alarm(o);
      pause();
   //}
   return 0;
}


int AnyProgram( /*char prog[]*/)
{
/*Nota:
si en la linea de arriba pongo char prog[];  <--Ojo tiene punto y coma
en la linea de abajo debo poner &prog   para q lo muestre en pantalla
*/

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

   struct tms tms_Init, tms_End;
   clock_t init_Time, end_Time;
   long enSeg;
   /* obtiene el número de int. De reloj por segundo */
   enSeg= sysconf(_SC_CLK_TCK);

   init_Time= times(&tms_Init);

// aqui va el codigo del programa a ejecutar
char path[20]="/usr/bin";

   if (fork()==0)
   {//execvp(argv[1], &argv[1]);
// Hace lo mismo q la ultima opcion q està en comentarios en este ciclo (La ultima)
      execvp(prog, NULL);
      perror("error ejecutando el programa");
      return 1;

   }
    wait(NULL);
    end_Time= times(&tms_End);

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

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

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

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

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


int main()
{
   int opcion=0;
        printf("\n");
   printf("-----Contabilidad   version 0.2------\n");
   printf("1._Tiempo de ejecucion de la funcion alarm()\n");
        printf("2._Tiempo de ejecucion en un programa cualquiera \n");
        printf("3._Salir\n");
   printf("\n");
   
        do {  printf("digite su opcion [1-3]...: ");
      scanf("%d",&opcion);
        }while((opcion<0)||(opcion>3));

        switch(opcion)
        {   
   case 1:AlarmAccounting();
      break;

   case 2:
/*       scanf("%s",&prog);
       printf("%s",&prog);//esto no debe cambiarse de posicion
*/   
                AnyProgram( /*prog*/);
           break;
   
   case 3:
      return 0;
   }
return 0;
}




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

cron