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ú

Temas - 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
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!!
#3
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
#4
Hola.
Necesito algo parecido a este proyecto
http://www.pablin.com.ar/electron/circuito/computer/leer_lpt/index.htm
Pero tiene que ser en C y para Linux.
No les pido que me escriban un código, pero aunque sea los "comandos" a utilizar...

Gracias
#5
Buenas.
Esto talves es algo facil. (para ustedes) pero yo no estoy encontrando mucha info del tema, mas bien, no se ni como buscar.

Les cuento lo que necesito.

Tengo que guardar en una variable el "pin" que quiero activar del puerto paralelo, ya casi esta resuelto, pero me falta una pequeña parte.

Ej: Para activar el pin 1 y 2, la dire que tengo q enviar es 0x03
Como tengo q manejar los pines de manera independiente, la parte "matematica" ya esta echa, y la guarda en una variable (en el ej seria el 03).
y el 0x va siempre
En sintesis, presiso que de el 0x y una variable (03) me de como resultado 0x03


Otra cosa..
el resultado no me da 03, me da 3.
Tendria que incluir un if al concatenar, que si el resultado es menor que 10, agregue un 0 antes del resultado.
Gracias y ojala me entiendan y ayuden
#6
Hola, sigo con este proyecto que me va a sacar canas verdes  :P
La cosa es asi, tengo este codigo:
#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#define puerto 0x378

int main ()
{
    int resul;
    int estado=-1;
    int infinito=0;

    FILE *texto;
    texto = fopen ("Cocina.txt","r");
    fscanf (texto, "%d",&resul);
    fclose (texto);

    while (infinito == 0)
    {
        switch (resul)
        {
            case 0:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 0)
            {
                unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror("Se ha encontrado el siguiente error: "); //manejo de errores
exit(1); //salida con error
}

p = 0x00; //puerto 0. Apaga todos los bits
outb(p,puerto);
            }
                    estado=0;
                    break;
            case 1:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 1)
            {
                unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror("Se ha encontrado el siguiente error: "); //manejo de errores
exit(1); //salida con error
}

p = 0x01; //puerto 1
outb(p,puerto); //envia el valor en binario al puerto
            }
                    estado=1;
                    break;
        }
    }
}

Lo que hace es leer un TXT llamado Cocina, si dentro hay un 1, enciende el pin 2 del paralelo, si hay un 0, lo apaga.
Para esto funciona, pero cual es el problema?, La cosa es que va a haber mas de un TXT, y tiene que controlar cada pin de forma independiente, ej: Si esta la cocina encendida, y quiero encender la habitacion, o que esten las 2 encendidas y quiero apagar una.
Buscando en internet, encontre este otro codigo:
#include<stdio.h>
#include<stdlib.h>
#include<sys/io.h> //esta librería permite el manejo de puertos en linux con lenguaje C
#define puerto 0x378 //definimos el puerto a utilizar

int main (void)
{
  int seleccion,seleccion_sal,salida[8],valor_sal=0,i,k;
  for(i=0;i<=8;i++)
    salida[i]=0;

  i=0;
  while(seleccion!=4)
  {
      printf("nSeleccione la opcion deseada:nt1- Activar salidant2- Desactivar salidant3- Estado de salidasnt4- Salirn Seleccion: ");
      scanf("%d",&seleccion);
      printf("Usted selecciono la opcion %i n",seleccion);
      switch(seleccion)
      {
        case 1:
            valor_sal=0;
            printf("Seleccione la salida a Activar (0 para cancelar): ");
            scanf("%d",&seleccion_sal);
            if(seleccion_sal==0)
                break;
            if(seleccion_sal<0 || seleccion_sal>8)
            {
                printf("tLa salida seleccionada no existe");
                break;
            }
            salida[seleccion_sal-1]=1;
            i=1;
            for(k=0;k<8;k++)
            {
                printf("t %d",i);
                if (salida[k]==1)
                    valor_sal = valor_sal + i;
                i=i*2;
            }
            ioperm(0x0378,1,1);
            outb(valor_sal,0x0378);
            printf("nEl valor de Salida es: %i",valor_sal);
            break;
        case 2:
            valor_sal=0;
            printf("Seleccione la salida a Desactivar:");
            scanf("%d",&seleccion_sal);
            if(seleccion_sal<1 || seleccion_sal>8)
            {
                printf("tLa salida seleccionada no existe");
                break;
            }
            salida[seleccion_sal-1]=0;
            i=1;
            for(k=0;k<8;k++)
            {
                printf("t %d",i);
                if (salida[k]==1)
                    valor_sal = valor_sal + i;
                i=i*2;
            }

            ioperm(0x0378,1,1);
            outb(valor_sal,0x0378);
            printf("nEl valor de Salida es: %i",valor_sal);
            break;
        case 3:
            printf("n%d",valor_sal);
            for(i=0;i<8;i++)
            {
                printf("nEstado de salida %i: ",(i+1));
                if (salida[i]==1)
                    printf("Activada");
                if (salida[i]==0)
                    printf("Desactivada");
             }
            printf("n");
            break;
        case 4:
            break;
        default:
            printf("Seleccion Invalidan");
            break;
      }
}
exit(0);
}

De una forma, este hace algo de lo que quiero, y tengo que lograr entender lo que hace para poder juntarlo con mi codigo.
Talves es algo basico, pero no tengo nada de experiencia en programacion, de verdad que necesito una ayuda.
Desde ya Gracias!!
#7
PHP / Como Hacer boton Logout?
28 Mayo 2011, 17:35 PM
Hola,
Estoy empezando con PHP.
Comencé una pagina de prueba, y para la seguridad utilice PHP_AUTH_USER y PHP_AUTH_PW.
El tema es el siguiente.
Todo perfecto con el logueo, pero no puedo hacer que se cierre "sesión" hasta que no se cierra el navegador.
Me gustaría incluir un boton logout.
Encontre esto:
<?php
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
"Debes ingresar un login ID y password validos para acceder a este recurso\n";
    exit;
}
 
if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
    (
$_POST['SeenBefore'] == && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authenticate();
} else {
    echo 
"<p>Bienvenido: " htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
    echo 
"Anterior: " htmlspecialchars($_REQUEST['OldAuth']);
    echo 
"<form action='' method='post'>\n";
    echo 
"<input type='hidden' name='SeenBefore' value='1' />\n";
    echo 
"<input type='hidden' name='OldAuth' value=\"" htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
    echo 
"<input type='submit' value='Re Authenticate' />\n";
    echo 
"</form></p>\n";
}
?>


y aunque no hace exactamente un deslogueo, si hace algo parecido, pienso que se puede modificar este código para lograrlo.
Podrán darme una mano con eso?
Cabe aclarar, que no estoy estudiando en ningún lado, estoy tratando de aprender por mis medios, por lo que sean bien explicativos con sus respuestas.
Gracias
#8
Hola,
Primero que nada me presento.
Mi nombre es Delmo Gonzalez... dgg006 en Internet..
Estoy estudiando informática, y este año tenemos que entregar un proyecto.


Una pequeña parte del proyecto que elegimos, consta de un programa basico, que busque cambios continuamente en un TXT. y haga una accion segun el contenido.
Logré (con esfuerzo, porque no 100% novato en esto) escribir este codigo:


#include <stdio.h>

int main ()
{
    int resul;
    int estado=-1;
    int infinito=0;

    FILE *texto;
    texto = fopen ("Cocina.txt","r");
    fscanf (texto, "%d",&resul);
    fclose (texto);

    while (infinito == 0)
    {
        switch (resul)
        {
            case 0:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 0)
            {
                system("cls");
                printf ("Apagado");
            }
                    estado=0;
                    break;
            case 1:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 1)
            {
                system("cls");
                printf ("Encendido");
            }
                    estado=1;
                    break;
        }
    }
}


En windows, funciona perfecto, pero la idea es hacerlo correr en linux server. Cuando lo compilo ahí, compila sin errores, pero NO HACE NADA!!
Queda en negro.
En que estoy fallando? Algo falta para que funcione en linux?
(los system("cls"), hay que cambiarlos por system("clear") para que funcione en linux)
Les comento lo que tiene que hacer este programa.
Lee dentro del TXT.
Si hay un 1, muestra Encendido.
Si hay un 0, muestra Apagado.
Todo dentro de un bucle infinito!!!

A futuro, en lugar de mostrar encendido o apagado, tiene que activar o desactivar un relay en el puerto paralelo, pero supongo que esos códigos irán luego dentro de este. Por algo se empieza.
Gracias y espero sus respuestas