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 - dgg006

#1
Programación C/C++ / Porque no funciona?
19 Octubre 2011, 14:15 PM
Hola.
Tengo este codigo:
#include <stdio.h>
#include <string.h>
#include <time.h>

char buffer [20];//Inicia cadena buffer
char *times ()//Inicia funcion times, que devuelve cadena de caracteres
{
        time_t now = time (0);//Hora actual
        struct tm *ahora;//Declara una variable estructurada para un valor tiempo
        ahora=localtime ((const time_t*)&now);//Extrae la hora del sistema y guarda en variable
        strftime (buffer, 40, "%H:%M-%d/%m/%Y", ahora);//Da el formato de hora "HH:MM"
        return (char *) buffer;//Devuelve la hora actual del sistema ya formateada
}
int main ()
{
        char resul;//Inicia cadena que contendrá la hora en la que se ejecutará
        int estado=-1;//Variable para evitar que se ejecute mas de una ves la acción
        int val;//Variable que contendrá si la acción es "Encender" o "Apagar"
        int disp;//Variable que contendrá el dispositivo utilizado

for (;;)//Bucle infinito para mantener el programa abierto hasta que llegue la hora
{
        FILE *hora;//Apuntador del TXT que contiene la hora
        hora = fopen ("Hora.txt","r");//Abre el TXT dentro del apuntador
        fscanf (hora, "%s",&resul);//Lee el TXT y guarda su valor en su correspondiente cadena
        fclose (hora);//Cierra el TXT

        FILE *valo;//Apuntador del TXT que contiene el valor para "Encender" o "Apagar"
        valo = fopen ("val.txt","r");//Abre el TXT dentro del apuntador
        fscanf (valo, "%d",&val);//Lee el TXT y guarda su valor en su correspondiente variable
        fclose (valo);//Cierra el TXT

        FILE *pin;//Apuntador del TXT que contiene el pin
        pin = fopen ("Pin.txt","r");//Abre el TXT dentro del apuntador
        fscanf (pin, "%d",&disp);//Lee el TXT y guarda su valor en su correspondiente cadena
        fclose (pin);//Cierra el TXT

        if (strcmp (times (),("%s", resul)) == 0)//Si la diferencia entre la hora programada y la hora actual es igual a 0, se hará lo siguiente
        {
                if (estado != 1)//Este if se encarga de que las siguientes lineas solo se ejecuten una ves
        {
                if (disp!=0)//Este if se encarga de que solo le ejecute lo siguiente cuando se haya escogido un dispositivo
        {
                FILE *artefacto;//Apuntador del TXT correspondiente al artefacto a programar
                switch(disp)//Este switch se encarga de transformar en número de artefacto en el nombre de su correspondiente TXT
                {
                case 1:
                artefacto = fopen ("Cocina.txt","w+");//Abre el TXT dentro del apuntador
                break;
                case 2:
                artefacto = fopen ("Habitacion.txt","w+");//Abre el TXT dentro del apuntador
                break;
                case 3:
                artefacto = fopen ("Bano.txt","w+");//Abre el TXT dentro del apuntador
                break;
                case 4:
                artefacto = fopen ("Luz.txt","w+");//Abre el TXT dentro del apuntador
                break;
                }
                fprintf (artefacto, "%d",val);//Escribe en el TXT el valor de la variable "val"
                fclose (artefacto);//Cierra el TXT
                FILE *pin;//Apuntador del TXT que contiene el pin
                pin = fopen ("Pin.txt","w+");//Abre el TXT dentro del apuntador
                fprintf (pin, "0");//Escribe en el TXT el valor de la variable "val"
                fclose (pin);//Cierra el TXT
        }
        }
        estado=1;//Escribe 1 en la variable para que funcione como debe el if anterior
        }
        else//De lo contrario, si hay diferencia. Se hará lo siguiente
        {
        estado=0;//Escribe 0 en la variable para que funcione como debe el if anterior
        }
}
}

Se que tiene muchos "detalles" a arreglar, pero en windows funciona perfecto y yo lo necesito para linux.
Si lo intento compilar asi, me sale este error:
prog.c:  In function 'main':
prog.c:25: warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[20]'

Para probar, borré el [20], y ahora sale este error:
prog.c:  In function 'main':
prog.c:38: warning: passing argument 2 of 'strcmp' makes pointer from integer without a cast
/usr/include/string.h:143: note: expected 'const char *' but argument is of type 'char'

Estoy necesitando esto urgente, porque es parte de un proyecto y no entiendo porque diablos no funciona.

Porfavor, Porfavor, Porfavor
Alguien puede darme una mano para que compile en ubuntu?
Gracias
#2
Gracias por contestar tan rapido.
Ya estuve por esa pagina, trate de hacerlo solo.
Pero tengo muchas dudas, que solas no salen.
Por ejemplo.
En la linea 10 (   struct tm *ahora;) = Time Structure...¿?¿?¿?
Que es eso? el "*ahora" de donde salio??
Cosas asi, por eso, si lo veo comentado es mas facil ir viendo para que sirve cada cosa
#3
Programación C/C++ / Ayuda para comentar
7 Julio 2011, 01:49 AM
Hola.
Hoy vengo con un problema que puede parecer tonto, pero soy malisimo para esto.
Tengo este codigo, pero necesito comentarlo linea por linea.
Les marco, las que no entiendo bien que hacen, quizas me puedan ayudar.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <time.h>

//************DESDE ACÁ**********************
char buffer [40];
char *times ()
{
time_t now = time (0);
struct tm *ahora;
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%H:%M", ahora);
return (char *) buffer;
}
//************HASTA ACÁ******************

int main ()
{
    char resul[6];
    int estado=-1;
    int infinito=0;
    int val;

    FILE *hora;
    hora = fopen ("Hora.txt","r");
    fscanf (hora, "%s",&resul);
    fclose (hora);

    FILE *valo;
    valo = fopen ("val.txt","r");
    fscanf (valo, "%d",&val);
    fclose (valo);

while (infinito == 0)
{

if (strcmp (times (),("%s", resul)) == 0)//****Y ESTA LINEA TAMBIÉN*****
{
    if (estado != 1)
        {
            printf ("Encendido");
            FILE *valor;
            valor = fopen ("valor.txt","w+");
            fprintf (valor, "%d",val);
            fclose (valor);
        }
        estado=1;
        return 0;
}
else
    {
        if (estado != 0)
        {
            printf ("Apagado");
        }
        estado=0;
}
}
    return 0;
}



Este código, hace de un estilo de temporizador, para un proyecto domotico que estoy realizando.
El pedirle que me ayuden a comentarlo tiene 2 razones.
1º Lo tengo que entregar comentado  :rolleyes:
2º Fijándome en los comentarios de demás programas y libros, es como aprendí lo poco que se, y espero que los comentarios me ayuden a entender bien que hace esa parte del código.
Se que no les gusta "hacer la tarea" de otro, pero yo solo, no logro entender lo que hace.


Desde ya, gracias!!
#4
Muchas gracias por los consejos.. El de usar conio fue algo que me pego la profesora y me cuesta sacarlo :P.

yo en realidad, no comprendo muy bien que hace tu codigo, o por lo menos es completamente distinto a el que pasé anteriormente.

Te doy los pasos para que pruebes el programa, porque pienso que no lo lograste entender.

* En el TXT "Hora.txt"   =  Va solo la hora en la que se ejecutará la tarea, en formato HH:MM (23:30).
* En el TXT "val.txt"    =   Va el valor que se va a enviar al otro TXT (0 o 1)
* En el TXT "valor.txt"   =   Sera donde se escriba el contenido de val.txt

Solo ejecuta el programa en la misma carpeta, y en hora txt ponelo un par de minutos adelantado, asi tenes tiempo de ver lo q hace.
#5
Bueno, logre hacer esto, modificando el código que me paso Died:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <time.h>

char buffer [40];

char *times ()
{
time_t now = time (0);
struct tm *ahora;
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%H:%M", ahora);
return (char *) buffer;
}
int main ()
{
    char resul[6];
    int estado=-1;
    int infinito=0;
    int val;

    FILE *hora;
    hora = fopen ("Hora.txt","r");
    fscanf (hora, "%s",&resul);
    fclose (hora);

    FILE *valo;
    valo = fopen ("val.txt","r");
    fscanf (valo, "%d",&val);
    fclose (valo);

    while (infinito == 0)
    {

if (strcmp (times (),("%s", resul)) == 0)
{
    if (estado != 1)
            {
                printf ("Encendido");
                    FILE *valor;
                    valor = fopen ("valor.txt","w+");
                    fprintf (valor, "%d",val);
                    fclose (valor);
            }
                    estado=1;
                    return 0;
}
else
{
        if (estado != 0)
            {
                printf ("Apagado");
            }
                    estado=0;
}
    }
    return 0;
}


Parte buena, funciona...
Parte mala, Usa demasiados txt para mi gusto.
estaría bueno, poder encontrar la forma de que en el txt "Hora.txt" ademas de la hora, estuviera el 0 o el 1 que por ahora esta en "val.txt"

Los printf "Encendido" y "Apagado" están solo por ahora en la fase beta :P , en realidad no van
#6
Hola dakomt.
Me alegro que recuerdes mi proyecto, y si,  mi bebe está creciendo a pasos agigantados  ;D

Entiendo lo que dicen sobre la ineficiencia de lo que busco. Voy a buscar sobre los comandos que me pasaste,.


Para Died:
Hice un par de modificaciones en el codigo que me pasaste, y casi funciona.
#include <string.h>
#include <stdio.h>
#include <time.h>

char buffer [40];

char *times ()
{
time_t now = time (0);
struct tm *ahora;
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%H:%M", ahora);
return (char *) buffer;
}

int main ()
{
if (strcmp (times (), "20:45") == 0)
      printf ("1");
else
      printf ("0");

return 0;
}


Donde dice "20:45" es donde se ingresa la hora que quieres.
La pregunta es, si tengo la hora en un TXT, que comando uso???
Ya he trabajado con TXT pero este me confundió
#7
Lo voy a probar y les cuento..
Igual te cuento que busque, pero google te ayuda cuando sabes que buscas, y yo no estoy seguro de que es
#8
Creo que no lo aclare...
Es bajo Linux.. (Ubuntu Server)
#9
El tema es ¿como?
#10
Hola. Otra ves molestando por acá...

Lo que ahora necesito, puede ser algo útil para muchos, no se como explicarlo bien, así que les cuento lo que debería hacer...

"Es un programa en C, para planificar tareas por horario.
Tendría que leer en un TXT, un hora X (ej:15:22)
Cuando la hora del sistema, sea igual que esa hora X, debe escribir un valor en otro TXT y dejar en blanco el TXT anterior"

Para orientarlos a lo que va dedicado este código, les cuento:
Estoy diseñando un sistema domotico, que a través de internet controla unos relay conectados al paralelo.
La pagina (en PHP) crea un TXT con un 0 o un 1
Un programa en C, lee ese txt, y dependiendo si es un 0 o un 1, apaga o enciende el relay.
Todo eso ya esta echo y funcionando, pero quiero agregarle un estilo de planificación, entonces a la hora elegida, se escribe un 0 o un 1 en el TXT.

Espero su ayuda