//Conversor de IP en formato decimal punteado a IP en formato binario punteado
//Israel Cáceres & Luis Heras


#include <stdio.h>

int main() {

    int numa;
    int numb;
    int numc;
    int numd;

    int primerocteto[8];
    int segundoocteto[8];
    int tercerocteto[8];
    int cuartoocteto[8];

    int n;
    int m;

    char repetir;

    printf("\n/////////////////////////////////////////\n");
    printf("// CONVERSOR IP DECIMAL A IP BINARIA //\n");
    printf("// por Israel Cáceres & Luis Heras //\n");
    printf("/////////////////////////////////////////\n\n");

    //Cuerpo del programa dentro de un bucle, para dar la opcion
    //a realizar mas de una operacion

    do {
        do {
            printf("\n- Introduce el PRIMER octeto: ");
            scanf("%i", &numa);
            if (numa < 0 || numa > 255) {
                printf("[ERROR] Debes introducir un número entre 0 y 255\n");
            }
        } while (numa < 0 || numa > 255);

        do {
            printf("\n- Introduce el SEGUNDO octeto: ");
            scanf("%i", &numb);
            if (numb < 0 || numb > 255) {
                printf("[ERROR] Debes introducir un número entre 0 y 255\n");
            }
        } while (numb < 0 || numb > 255);

        do {
            printf("\n- Introduce el TERCER octeto: ");
            scanf("%i", &numc);
            if (numc < 0 || numc > 255) {
                printf("[ERROR] Debes introducir un número entre 0 y 255\n");
            }
        } while (numc < 0 || numc > 255);

        do {
            printf("\n- Introduce el CUARTO octeto: ");
            scanf("%i", &numd);
            if (numd < 0 || numd > 255) {
                printf("[ERROR] Debes introducir un número entre 0 y 255\n");
            }
        } while (numd < 0 || numd > 255);

        printf("\n\n");

        printf("[*] La IP en formato decimal punteado es ");
        printf("%i.%i.%i.%i\n\n", numa, numb, numc, numd);
        printf("[*] La IP en formato binario punteado es ");

        //////////////////////////////////////////////////////////
        // INICIO DE LA CONVERSION DE DECIMAL A BINARIO //
        //////////////////////////////////////////////////////////


        //PRIMER OCTETO
        if (numa == 0) {
            printf("00000000");
        } else {
            for (n = 0; numa >= 1; numa = numa / 2, n++) {
                primerocteto[n] = numa % 2;
            }
            //Este condicional escribirá los ceros adicionales a la izquierda
            //para completar el octeto si fuese necesario
            if (n - 1 < 8) {

                for (m = n; m < 8; m++) {
                    printf("0");
                }
            }

            for (n--; n >= 0; n--) {

                printf("%i", primerocteto[n]);
            }

        }
        /////////////
        printf(".");
        /////////////

        //SEGUNDO OCTETO
        if (numb == 0) {
            printf("00000000");
        } else {
            for (n = 0; numb >= 1; numb = numb / 2, n++) {
                segundoocteto[n] = numb % 2;
            }
            //Este condicional escribirá los ceros adicionales a la izquierda
            //para completar el octeto si fuese necesario
            if (n - 1 < 8) {

                for (m = n; m < 8; m++) {
                    printf("0");
                }
            }
            for (n--; n >= 0; n--) {
                printf("%i", segundoocteto[n]);
            }
        }
        /////////////
        printf(".");
        /////////////

        //TERCER OCTETO
        if (numc == 0) {
            printf("00000000");
        } else {
            for (n = 0; numc >= 1; numc = numc / 2, n++) {
                tercerocteto[n] = numc % 2;
            }
            //Este condicional escribirá los ceros adicionales a la izquierda
            //para completar el octeto si fuese necesario
            if (n - 1 < 8) {

                for (m = n; m < 8; m++) {
                    printf("0");
                }
            }
            for (n--; n >= 0; n--) {
                printf("%i", tercerocteto[n]);
            }
        }
        /////////////
        printf(".");
        /////////////

        //CUARTO OCTETO
        if (numd == 0) {
            printf("00000000");
        } else {
            for (n = 0; numd >= 1; numd = numd / 2, n++) {
                cuartoocteto[n] = numd % 2;
            }
            //Este condicional escribirá los ceros adicionales a la izquierda
            //para completar el octeto si fuese necesario
            if (n - 1 < 8) {

                for (m = n; m < 8; m++) {
                    printf("0");
                }
            }
            for (n--; n >= 0; n--) {
                printf("%i", cuartoocteto[n]);
            }
        }


        //////////////////////////////////////////////////////////
        // FIN DE LA CONVERSION DE DECIMAL A BINARIO //
        //////////////////////////////////////////////////////////



        printf("\n\n\n\n");

        //REPETIR LA OPERACION, O SALIR DEL PROGRAMA
        do {
            printf("\nQuieres volver a empezar? (s/n): ");
            scanf(" %c", &repetir);

            if (repetir != 's' && repetir != 'n') {
                printf("\nDebes introducir 's' o 'n' como parametro\n");
            }

        } while (repetir != 's' && repetir != 'n');

    } while (repetir == 's');

    printf("\n\nGracias!!\n\n");
    return 0;

}