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

#1
Programación C/C++ / Serie Fibonacci C++
16 Enero 2012, 08:05 AM
Buenas noches, un saludo muy grande a toda la comunidad de elhacker.net y vengo de nuevo yo con un problema relacionado a la programación.

Tengo el siguiente problema:
CitarProblema
Escribe un programa que imprima en pantalla todos los números enteros positivos estrictamente menores que N que NO pertenezcan a la serie de Fibonacci.

Entrada
Tu programa deberá de leer del un solo número entero 2<=N<=30000 (30 mil)

Salida
Tu programa deberá imprimir en pantalla todos los números enteros positivos menores que N que no formen parte de la serie de Fibonacci, deberá imprimirlos en orden creciente, separados por espacios.

Ejemplo

Entrada
9
Salida
4 6 7

Básicamente, es un programa que imprima los números menores de N que no pertenezcan a la serie Fibonacci.

Hice el siguiente código:
Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
    int num, fb=0, n=0, p=1, i=1;
    scanf("%d", &num);
    while (fb < num) {
        fb=n+p;
        n=p;
        p=fb;
        if (i != p)
            printf("%d ", i);
        i++; }
}


Input:
Citar9

Output
Citar4 5 6


Pero simplemente no entiendo por qué no funciona, sé que es un problema de lógica mío, pero no lo veo.

Gracias de antemano y disculpen la molestia.

Debe ser tan fácil, pero no he podido averiguarlo.
#2
He decidido publicar mi código del 3 en raya para 2 jugadores humanos.

Se juega utilizando el numpad dependiendo del número es la casilla a jugar.



Código (cpp) [Seleccionar]
///EL GATO EN C++ CON VECTORES
///MANIMECKER
///JORGEJUVA@GMAIL.COM
///ERES LIBRE DE MODIFICAR ESTE CODIGO A TU CONVENIENCIA
///YOU ARE FREE TO MODIFY THIS CODE AS YOU WANT

#include <stdio.h>
#include <conio2.h> //Tuve que usar esta libreria con CodeBlocks

int op=0, gana=0, emp=1, pla1=0, pla2=0, pjug=1, repe1;
char n2[2];
char n[9];          ///     TABLERO
                    /// ================
                    /// |n[0]|n[1]|n[2]|
                    /// ================
                    /// |n[3]|n[4]|n[5]|
                    /// ================
                    /// |n[6]|n[7]|n[8]|
                    /// ================

void tablero()
{
    gotoxy(25,1); printf(" ***EL GATO***");
    gotoxy(15,2); printf("UTILIZA EL TELCADO NUMERICO PARA JUGAR");
    gotoxy(15,5); printf("===== \n");
    gotoxy(15,6); printf("%c|%c|%c \n",n[6], n[7], n[8]);
    gotoxy(15,7); printf("===== \n");
    gotoxy(15,8); printf("%c|%c|%c \n",n[3], n[4], n[5]);
    gotoxy(15,9); printf("===== \n");
    gotoxy(15,10); printf("%c|%c|%c \n",n[0], n[1], n[2]);
    gotoxy(15,11); printf("===== \n");
    gotoxy(30,5); printf("        GANADAS  ");
    gotoxy(30,6); printf("Jugador 1    Jugador 2");
    gotoxy(30,7); printf("   %d            %d ", pla1, pla2);
}

void valores()
{
    gana=0; emp=0; pjug=1;
    int i, j;
    for (i=0; i<=9; i++)
        n[i]=' ';
}

void casillas()
{
    char oc;
    if (pjug == 1)
        oc='X';
    else
        oc='O';
    switch (op) {
        case 1 : if (n[0] != ' ') { repe1=1; break; } else {n[0]=oc; emp++; break;}
        case 2 : if (n[1] != ' ') { repe1=1; break; } else {n[1]=oc; emp++; break;}
        case 3 : if (n[2] != ' ') { repe1=1; break; } else {n[2]=oc; emp++; break;}
        case 4 : if (n[3] != ' ') { repe1=1; break; } else {n[3]=oc; emp++; break;}
        case 5 : if (n[4] != ' ') { repe1=1; break; } else {n[4]=oc; emp++; break;}
        case 6 : if (n[5] != ' ') { repe1=1; break; } else {n[5]=oc; emp++; break;}
        case 7 : if (n[6] != ' ') { repe1=1; break; } else {n[6]=oc; emp++; break;}
        case 8 : if (n[7] != ' ') { repe1=1; break; } else {n[7]=oc; emp++; break;}
        case 9 : if (n[8] != ' ') { repe1=1; break; } else {n[8]=oc; emp++; break;} }
}

void ganador()
{
    n2[0]='X'; n2[1]='O';
    int i;
    if (emp <= 9) {
        for (i=0; i<2; i++) {
        if (n[0]==n2[i] && n[3]==n2[i] && n[6]==n2[i])
            gana=i+1;
        if (n[1]==n2[i] && n[4]==n2[i] && n[7]==n2[i])
            gana=i+1;
        if (n[2]==n2[i] && n[5]==n2[i] && n[8]==n2[i])
            gana=i+1;
        if (n[6]==n2[i] && n[7]==n2[i] && n[8]==n2[i])
            gana=i+1;
        if (n[3]==n2[i] && n[4]==n2[i] && n[5]==n2[i])
            gana=i+1;
        if (n[0]==n2[i] && n[1]==n2[i] && n[2]==n2[i])
            gana=i+1;
        if (n[6]==n2[i] && n[4]==n2[i] && n[2]==n2[i])
            gana=i+1;
        if (n[0]==n2[i] && n[4]==n2[i] && n[8]==n2[i])
            gana=i+1; }
    }
    else
        gana=3;
}

void jug1()
{
    gotoxy(1,14); printf("Jugador 1 - Introduce el numero: ");
    scanf("%d", &op);
    while (op>9 || op<1) {
        gotoxy(1,14); printf("Opcion NO VALIDA, introduce una correcta: ");
        scanf("%d", &op); }
    casillas();
    if (repe1 == 1) {
        gotoxy(1,13);
        printf("Casilla ya elegida! ");
        repe1=0;
        jug1();}
    clrscr();
    ganador();
    pjug=2;
}

void jug2()
{
    gotoxy(1,14); printf("Jugador 2 - Introduce el numero: ");
    scanf("%d", &op);
    while (op>9 || op<1) {
        gotoxy(1,14); printf("Opcion NO VALIDA, introduce una correcta: ");
        scanf("%d", &op); }
    casillas();
    if (repe1 == 1) {
        gotoxy(1,13);
        printf("Casilla ya elegida! ");
        repe1=0;
        jug1();}
    clrscr();
    ganador();
    pjug=1;
}

int main()
{
    char cp;
    do {
    clrscr();
    valores();
    while (gana == 0)
    {
        tablero();
        switch(pjug)
        {
            case 1 : jug1(); break;
            case 2 : jug2(); break;
        }
    }
    switch(gana) {
        case 1 : pla1++; gotoxy(1,13); printf("Gana el jugador 1."); break;
        case 2 : pla2++; gotoxy(1,13); printf("Gana el jugador 2."); break;
        case 3 : gotoxy(1,13); printf("Es un empate."); break; }
    tablero();
    gotoxy(1, 15); printf("Deseas otro juego (S/N): ");
    scanf(" %c", &cp);
    } while (cp == 'S');
    return 0;
}


Si tienen cualquier observación, por favor díganmela para poder corregir mi programa u optimizarlo.

PD: Presiento que se puede hacer de manera más fácil, pero ya no sé como simplificarlo más y siento que así está bien el código. Digo esto porque siempre tiendo a crear códigos complicados y largos cuando en realidad son fáciles y cortos.

Salu2.
#3
Desarrollo Web / Cámaras IP de vigilancia
26 Octubre 2011, 06:18 AM
Hola, comunidad elHacker.net, les quisiera consultar un par de cuestiones que me tienen dando vuelta en la cabeza.

Les cuento, tengo una cámara IP inalámbrica (Foscam FI8918W PTZ), la cual funciona perfectamente. La tengo configurada con DynDNS y me funciona de maravilla, la cuestión es la siguiente: mi cámara soporta carga de imágenes por medio de FTP, para guardar las imágenes con intervalos de 1 a 90 segundos en un servidor externo por medio de protocolo FTP.

Actualmente tengo el servicio de SENSR.NET configurado con mi cámara IP, el cual me cumple todas las expectativas. No sé si alguna vez lo han probado, pero es un servicio gratuito (por ahora, está en beta) el cual guarda la imágen configurada en intervalos, la almacena y la organiza dependiendo la hora, el día y el mes en el que se grabó. Cuando el usuario quiere observar, por ejemplo, la fecha de ayer (24 de octubre) se iría a la fecha de ese día y la página crearía una película JPEG (Motion JPEG) con todas las imagenes en secuencia (entre 400 y 1000, dependiendo del intervalo configurado) y se mostraría como una película, pero con imágenes en secuencia.

Ahora, el dilema es, ¿existe algún tipo de software así, el cual pueda instalar en un webserver o hosting para que me haga todo el procedimiento automáticamente?

Si no lo hubiera...se podría hacer?

Básicamente es un programa que intercepta la imagen entrante de la cámara IP, la renombra con un código de control (hora:Segundos) y se colocan en carpetas dependiendo del día y mes en el que se grabaron. Y después, cuando el usuario desea observar una fecha en específico, se genera una secuela de imágenes con las cientos o miles que se hayan grabado ese día (Motion JPEG). He buscado por mucho tiempo, pero simplemente no encuentro nada, he buscado en inglés, español... hasta en chino pero nada.

Encontre un par, como ZoneMinder, el cual se parece a lo que necesito, pero éste requiere de un servidor físico en la red donde se encuentra la cámara, para ahí almacenarlas y crear un entorno gráfico en el cual se puedan acceder a todas estas imágenes y visualizarlas en una secuencia activa.

Perdonen si fue mucho texto, pero me interesa mucho esto, y si no existiese, podríamos llegar a crear un proyecto entre todos y así apoyar al open source :P.

PD: Para entender más el funcionamiento de SENSR.NET, les recomiendo visitar la página y observar unas cámaras en vivo y sus grabaciones.
#4
Tengo el siguiente problema. Necesito crear un programa que reciba un número del usuario, y que después pida diferentes signos para ir cambiando eventualmente el primer número. Y que al final se muestre de la siguiente manera:
Si el símbolo es -, al valor se le resta 1.
Si el símbolo es +, al valor se le agrega 1.
Si el símbolo es /, al valor se divide entre 2.
Si el símbolo es *, al valor se multiplica por 2.

(10)-(9)*(18)/(9)+(10)+(11) y así...

Tengo el siguiente código:
Código (cpp) [Seleccionar]

#include <stdio.h>

int main()
{
    int N1[50], d2=0, d=1, i=0, d3=0; char S1[50];
    for (int i3=0; i3<50; i3++)
    {
        N1[i3]=0;
        S1[i3]=' ';
    }
    printf("Inserta un numero entero: ");
    scanf("%d", &N1[0]);

    while (S1[d2] = '0')
    {
        printf("Inserta el simbolo + para que aumente su valor en 1.\n");
        printf("Inserta el simbolo - para que reduzca su valor en 1. \n");
        printf("Inserta el simbolo * para que multiplique su valor por 2.\n");
        printf("Inserta el simbolo / para que divida su valor en 2.\n");
        printf("Inserta la opcion (simbolo) deseada (0 para terminar): ");
        scanf("%c", &S1[d2]);
        if (S1[d2]=='0')
            break;
        switch (S1[d2])
        {
            case '+' : N1[d]=N1[i]+1; /*CH[d2]='+'*/; break;
            case '-' : N1[d]=N1[i]-1; /*CH[d2]='-'*/; break;
            case '*' : N1[d]=N1[i]*2; /*CH[d2]='*'*/; break;
            case '/' : N1[d]=N1[i]/2; /*CH[d2]='/'*/; break;
            default : break;
        }
        d++; i++; d2++;
    }
    for (int i2=0; i2<d2; i2++)
    {
        if (N1[i2]==0)
            break;
        else
            printf("(%d)%c\n", N1[i2], S1[i2]);
    }
}


Sin embargo, no logro descubir el error, además de que el primer bucle while se repite antes de que me deje escribir algo.

Muchas gracias de antemano.
#5
Les cuento, empezé a ver un curso de C/C++ en mi colegio y estoy teniendo problemas con un programa que me dejaron. La función del programa es que debe encontrar el mayor y el menor números de N números que el usuario introduzca, además de sacar la media de todos los números.

Empezé con este código:

#include <stdio.h>

int main()
{
   int N1=1, May, Men, d=1, Cont=0;
   while (N1 != 0)
   {
       printf("Inserta un numero: ");
       scanf("%d", &N1);
       if (d==1)
       {
           May=N1;
           Men=1;
       }
       else
       {
           if (N1==0)
               break;
           else
           {
               if (N1 > May)
               {
                   May=N1;
               }
               if (N1 < Men)
               {
                   Men=N1;
               }
           }
               d++;
               Cont=Cont+N1;
       }

   }
   printf("El numero mayor es %d y el menor es %d. \n La media es: %d.", May, Men, (Cont/d));
}


Sin embargo, me doy cuenta que sólo compara 2 valores y los demás no. Después de buscar un rato en la web, encontre una técnica para encontrar los números mayores y menores, y es inicializar los 2 valores de mayor y menor con un valor mínimo y uno más grande, respectivamente. Me explico, este es el programa con esa técnica, y funciona.


#include <stdio.h>

int main()
{
   int N1=1, May=0, Men=9999999, d=1, Cont=0;
   while (N1 != 0)
   {
       printf("Inserta un numero: ");
       scanf("%d", &N1);
       if (N1==0)
           break;
       else
       {
           if (N1 > May)
           {
               May=N1;
           }
           if (N1 < Men)
           {
               Men=N1;
           }
           d++;        
           Cont=Cont+N1;
       }
   }
   printf("El numero mayor es %d y el menor es %d. \n La media es: %d.", May, Men, (Cont/d));
}


El problema es que no entiendo por qué el primero no funciona y el segundo sí, espero que alguien me pueda orientar.

Gracias de antemano.
#6
Me encuentro realizando el siguiente ejercicio:

CitarAñadir al programa anterior lo necesario para que clasifique las llamadas en Nacionales (N), Provinciales (P) y Locales (L) y realizar los mismo cálculos que antes para cada tipo de llamada (duración y numero de llamadas Nacionales, duración y numero de llamadas Provinciales y duración y numero de llamadas Locales). El programa también debe solicitar, después de presentar los resultados, si se desea realizar de nuevo todo el proceso anterior.

El resultado debe ser similar a esto:

Introduzca la duración de la llamada en minutos (0 para terminar): 5
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: p

Introduzca la duración de la llamada en minutos (0 para terminar): 15
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: n

Introduzca la duración de la llamada en minutos (0 para terminar): 20
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: l

Introduzca la duración de la llamada en minutos (0 para terminar): 40
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: p

Introduzca la duración de la llamada en minutos (0 para terminar): 0



-Especificación llamadas Nacionales, Provinciales y Locales-

El numero de llamadas nacionales a sido: 1 y su duración: 15.00 minutos.
El numero de llamadas provinciales a sido: 2 y su duración: 45.00 minutos.
El numero de llamadas locales a sido: 1 y su duración: 20.00 minutos.

-Totales-

Numero de llamadas: 4
Duración total: 80.00 minutos.
Duración media: 20.00 minutos.

Desea continuar para realizar otra lista de llamadas? S/N: n

Todo lo llevo perfecto, sólo que en la última parte, que pregunta si desea continuar, si pongo n o N, se vuelve a ejecutar el bucle y nunca acaba, y no sé por qué.

Les dejo el código estructurado que llevo hasta ahora en el siguiente enlace.

http://pastebin.com/09M7Fxyc

Dejo el link ya que el código es demasiado extenso y es mejor estructurarlo en un pastebin.

Gracias de antemano.
#7
Hola, antes que nada quiero agradecer por toda la ayuda que antes me ha brindado la comunidad de elhacker.net y estoy aquí de nuevo pidiendo su ayuda para otro problema.

Mi problema es que, primero que nada, me descargué Wifiway 2.0.1 para auditar redes en mi SAMSUNG N150 NetBook con Atheros AR9285, lo instale en un USB según un tutorial que encontré en la red donde los pasos eran que había que copiar todo el contenido del USB en la memoria recién formateada, después en la carpeta boot se encontraba un archivo llamado bootinst.bat el cual hacía que se sobreescribiera el MBR del USB para que arranque Wifiway nada más; hasta aquí, todo bien, lo instalé en un USB Kingston de 1 GB para probar, inicié y todo perfecto, pude auditar, inyectar, etc. todo correcto, pero ahora me encuentro con problemas haciendo todos los mismos pasos, en este caso, con una memoria Kingston de 4 GB modelo DT101 G2 (azul), hago todos los pasos correctamente y me dispongo a iniciarlo en mi PC (la misma que anteriormente ya había arrancado) pero ahora en este caso después de que sale el BIOS me aparece un mensaje en la esquina superior izquierda diciendo "Missing Operating System" y de ahí ya no pasa nada hasta que lo apago (sólo sucede con el USB 4 GB insertado). No sé qué mas hacer puesto que ya me había funcionado perfectamente.

El USB funciona bien, no tiene problemas y es relativamente nuevo.

Si alguien sabe que más hacer, se lo agradecería mucho.

Gracias de antemano.
#8
Hola, antes que nada quiero agradecer por toda la ayuda que antes me ha brindado la comunidad de elhacker.net y estoy aquí de nuevo pidiendo su ayuda para otro problema.

Mi problema es que, primero que nada, me descargué Wifiway 2.0.1 para auditar redes en mi SAMSUNG N150 NetBook con Atheros AR9285, lo instale en un USB según un tutorial que encontré en la red donde los pasos eran que había que copiar todo el contenido del USB en la memoria recién formateada, después en la carpeta boot se encontraba un archivo llamado bootinst.bat el cual hacía que se sobreescribiera el MBR del USB para que arranque Wifiway nada más; hasta aquí, todo bien, lo instalé en un USB Kingston de 1 GB para probar, inicié y todo perfecto, pude auditar, inyectar, etc. todo correcto, pero ahora me encuentro con problemas haciendo todos los mismos pasos, en este caso, con una memoria Kingston de 4 GB modelo DT101 G2 (azul), hago todos los pasos correctamente y me dispongo a iniciarlo en mi PC (la misma que anteriormente ya había arrancado) pero ahora en este caso después de que sale el BIOS me aparece un mensaje en la esquina superior izquierda diciendo "Missing Operating System" y de ahí ya no pasa nada hasta que lo apago (sólo sucede con el USB 4 GB insertado). No sé qué mas hacer puesto que ya me había funcionado perfectamente.

El USB funciona bien, no tiene problemas y es relativamente nuevo.

Si alguien sabe que más hacer, se lo agradecería mucho.

Gracias de antemano.
#9
Solo queria pedir soporte, pues hace mas de 1 mes postie un problema de la misma HP 530 y me recomendaron usar WifiWay 1 Final, lo descargue, lo queme y me espante ya que no quiso arrancar, pues compre otro disco, lo queme a menor velocidad en alcohol y por fin entro.

Todo muy bien, puse startx (a este momento el boton de wireless seguia apagado) y entre al escritorio, puse konsole y escribi iwconfig y me salio:

lo             no wireless extensions o algo asi

y puse ifconfig (no se por que lo puse)
y me salieron las propiedades de lo, pero esa es de ethernet creo.

Ahora el problema es, hay algun comando, programa o otra distro de linux que pueda usar, el backtrack no lo he probado por que mesale error en graficos, por los demas entran perfectamente.

Salu2. LA PC ES UNA LAPTOP HP 530 CON BROADCOM BCM4310 USB CONTROLLER (eso decia en everest).