elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Soluciones ejercicios C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Soluciones ejercicios C  (Leído 51,900 veces)
Cobac
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.465


Still In Development


Ver Perfil
Soluciones ejercicios C 108
« Respuesta #10 en: 7 Julio 2004, 04:02 am »

Soluciones al ejercicio 108

Código de Cobac:

Código:
#include <stdio.h>
#include <stdlib.h>

#define NUMERO 5

main()
{
int x=0, elec=0;

typedef struct {

char nombre[15];

char direccion[15];

int telefono;} persona;

persona cliente[NUMERO];

    for(x=0; x < NUMERO; x++)
    {
        printf("\nIntroduce el nombre del cliente numero %d: ",x+1);
        scanf("%s", &cliente[x].nombre);

        printf("\nIntroduce la direccion del cliente numero %d: ",x+1);
        scanf("%s", &cliente[x].direccion);

        printf("\nIntroduce el telefono del cliente numero %d: ",x+1);
        scanf("%d", &cliente[x].telefono);
    }
   
    system("cls");
   
    do{
   
        printf("\n\nIntroduce el numero de la persona que quieres consultar (cero para salir): ");
        scanf("%d", &elec);
       
        if(elec != 0 && elec <= NUMERO)
        {       
                printf("\nNombre del cliente: %s", cliente[elec-1].nombre);

                printf("\nDireccion del cliente: %s", cliente[elec-1].nombre);
       
                printf("\nTelefono del cliente: %d", cliente[elec-1].nombre);
        }       
   
    }while(elec != 0);
}


En línea

PIV 2533 @ 2720Mhz | 512MB DRR333 @ 358 | 160 Gb + 40 Gb Seagate Barracuda

En la Edad Media la Iglesia robaba con los diezmos. En el siglo XXI la SGAE roba con sus cánones.
Cobac
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.465


Still In Development


Ver Perfil
Soluciones ejercicios C 113
« Respuesta #11 en: 7 Julio 2004, 04:03 am »

Soluciones al ejercicio 113

Código de neohex:

Código:
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MYPORT 4500 //Puerto que se deja a la escucha
#define NUBACK 5 //Numero maximo de conexiones a la espera.

int main()
{
int nSocket;
int nSocket2;
int nListen;
struct sockaddr_in my_dire;
struct sockaddr_in su_dire;
int sin_zero;

if ((nSocket=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("[-] Socket");
exit(1);
}
my_dire.sin_family = AF_INET;
my_dire.sin_port = htons(MYPORT);
my_dire.sin_addr.s_addr = htonl(INADDR_ANY);
memset(&(my_dire.sin_zero), '\0', 8);
if (bind(nSocket, (struct sockaddr *)&my_dire, sizeof(struct sockaddr)) == -1)
{
perror("[-] Bind");
exit(1);
}
if ((nListen=listen(nSocket, NUBACK)) == -1)
{
perror("[-] Listen");
exit(1);
}
printf("[+] Listen iniciado.\n");
printf("\t-Escuchando el puerto %d.\n", MYPORT);
printf("\t-Esperando una conexion.\n");
sin_zero = sizeof(struct sockaddr_in);
if ((nSocket2=accept(nSocket, (struct sockaddr *)&su_dire, &sin_zero)) == -1)
{
perror("[-] Accept");
exit(1);
}
printf("[+] Conexion realizada.\n");
close(nSocket);
return 0;
}

Código de Mr.Potato:

Código:
#include <stdio.h>
#include <netinet/in.h>

int main() {

struct sockaddr_in saddr;
int hsock;

hsock=socket(AF_INET,SOCK_STREAM,0);
if (hsock<0) {
printf("Error creando el socket\n");
return -1;
}
saddr.sin_family=AF_INET;
saddr.sin_addr.s_addr=INADDR_ANY;
saddr.sin_port=htons(4500);
if (bind(hsock,(struct sockaddr *)&saddr,sizeof(saddr))<0) {
printf("Bind error\n");
return -1;
}
if (listen(hsock,1)<0) {
printf("Listen error\n");
return -1;
}
accept(hsock,0,0);
printf("FIN\n");
return 0;
}


En línea

PIV 2533 @ 2720Mhz | 512MB DRR333 @ 358 | 160 Gb + 40 Gb Seagate Barracuda

En la Edad Media la Iglesia robaba con los diezmos. En el siglo XXI la SGAE roba con sus cánones.
Cobac
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.465


Still In Development


Ver Perfil
Re: Soluciones ejercicios C
« Respuesta #12 en: 7 Agosto 2005, 21:54 pm »

Soluciones ejercicio 119

Código de TheZen:

Código:
/*
   Ejercicio 119
   Realizar un programa que solicite una máscara de subred y devuelva una ip válida.
*/

#include <stdio.h>

main()
{
    char subred[15], ip[15];
    int x[4], z;
   
    printf("+------------------------------------------------------------+\n");
    printf("    Escribe una mascara de subred. Pueden ser de 3 tipos:\n");
    printf("        A) XXX.0.0.0, B) XXX.XXX.0.0, C) XXX.XXX.XXX.0    \n");
    printf("      El programa devolverá una ip dentro de esa subred. \n");
    printf(" -> ");
    scanf("%s",&subred);
   
    sscanf(subred,"%d.%d.%d.%d",&x[0],&x[1],&x[2],&x[3]);
   
    for( z=0 ; z<4 ; z++ )
    {
        if( (x[z]>255) || (x[z]<0) )
        {
            printf("\n  [!] Error: La IP introducida no es correcta.\n");
            exit(1);
        }
    }       
       
    if( x[3] != 0 )
    {
        printf("\n  [!] Error: La IP introducida no corresponde a ningun tipo de subred.\n");
        exit(1);
    }   
   
    srand( time(NULL) );
    if( (x[1]==0) && (x[2]==0) && (x[3]==0) ){
        sprintf(ip,"%d.%d.%d.%d",x[0],rand()%256,rand()%256,rand()%256);
        printf("\n       [*] Subred de tipo A \n");
    }   
    else if( (x[2]==0) && (x[3]==0) ){
        sprintf(ip,"%d.%d.%d.%d",x[0],x[1],rand()%256,rand()%256);
        printf("\n       [*] Subred de tipo B \n");
    }
    else if( x[3]==0 ){
        sprintf(ip,"%d.%d.%d.%d",x[0],x[1],x[2],rand()%256);
        printf("\n       [*] Subred de tipo C \n");
    }
   
    printf("\n       [*] IP Generada: %s [*] \n",ip);
    printf("+------------------------------------------------------------+\n");
   
    getchar();
}
En línea

PIV 2533 @ 2720Mhz | 512MB DRR333 @ 358 | 160 Gb + 40 Gb Seagate Barracuda

En la Edad Media la Iglesia robaba con los diezmos. En el siglo XXI la SGAE roba con sus cánones.
Cobac
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.465


Still In Development


Ver Perfil
Re: Soluciones ejercicios C
« Respuesta #13 en: 7 Agosto 2005, 21:55 pm »

Soluciones ejercicio 125

Código de TheZen:

Código:
/*
   Nombre: b64
   Autor: Thezen
   Mail/msn: putoamo@gmail.com
   Descripcion: Aplicacion que permite Codificar/Descodificar en Base64
                Para codificar, añadirle el parámetro /c y para descodificar
                /d seguido de una cadena.
*/
   

#include <stdio.h>
#include <string.h>
#include <math.h>

int binario[1024];
int btd[8];
int cont=0;

char base64[] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
                  'P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d',
                  'e','f','g','h','i','j','k','l','m','n','o','p','q','r','s',
                  't','u','v','w','x','y','z','0','1','2','3','4','5','6','7',
                  '8','9','+','/' };

void atob(int num, int base); /* Convierte un valor ASCII a binario */
int btod( int base ); /* Convierte un valor binario a decimal */
void codificar(char *clave); /* Codifica una cadena a Base64 */
void descodificar(char *clave); /* Descodifica una cadena en Base64 */

int main(int argc, char *argv[])
{
    printf(" *--------------------------------------------*\n");
    printf("  \\   Codificador/Descodificador de Base64   /\n");
    printf("  /   By: TheZen    -    putoamo@gmail.com   \\ \n");
    printf(" *--------------------------------------------*\n");
   
    if( argc != 3 )
    {
        printf("\n Modo de uso: %s [/c /d] clave. \n",argv[0]);
        printf(" /c [cadena] - Codifica una cadena\n");
        printf(" /d [cadena] - Descodifica una cadena\n");
        exit( 1 );
    }
   
    if( (strcmp(argv[1],"/c")==0) || (strcmp(argv[1],"/C")==0) ) codificar(argv[2]);
    if( (strcmp(argv[1],"/d")==0) || (strcmp(argv[1],"/D")==0) ) descodificar(argv[2]);
   
    printf("\n");
}

/*************************************************************************/

void codificar(char *clave)
{
    int x=0, num, contador, b64, z=0;
    char clave2[1024];
                     
    sprintf(clave2,"%s",clave);
   
    while( 1 )
    {
        num = clave2[x];
        if(num==0) break;
        atob(num,8);
        x++;
        contador++;
    }   
    printf("\n");
    num=0;
    for(x=0;x<=((8*(contador-2)-1));x++)
        num++;
         
    cont=0;
    while( (num%6) != 0 )
        num++;
    num /= 6;
   
    printf("  [*] Codificado a Base64: ");
    for( x=1 ; x<=num ; x++ )
    {
        for( z=0 ; z<=5 ; z++ ){
            btd[z] = binario[cont];
            cont++;
        }   
        b64=btod(6);
        printf("%c",base64[b64]);   
    }
    while( (num%4)!=0 ){
        printf("=");   
        num++;
    }   
}

/*************************************************************************/

void descodificar(char *clave)
{
    char clave2[1024], deci;
    int x=0, z=0, decimal[1024], num, contador=0, dec;
                     
    sprintf(clave2,"%s",clave);
   
    while( clave[z] != '=' )
    {
        if( (clave2[z]==0) || (clave2[z]=='=') ) break;
        for( x=0 ; x<=64 ; x++ )
            if( base64[x] == clave2[z] ) decimal[z] = x;
        z++;
    }
    x=0;
    while( 1 )
    {
        num = decimal[x];
        if(num==0) break;
        atob(num,6);
        x++;
        contador++;
    }   
   
    num = 6*contador;
    num /= 8;
    printf("  [*] Descodificado en Base64: ");
    cont=0;
    for( x=1 ; x<=num ; x++ )
    {
        for( z=0 ; z<=7 ; z++ ){
            btd[z] = binario[cont];
            cont++;
        }   
        dec = btod(8);
        printf("%c",dec,dec);
    }
}   

/**************************************************************************/

void atob(int num, int base)
{
    int bin[base];
    int x=0;
   
    for( x=0 ; x<=(base-1) ; x++ )
    {
        bin[x] = num % 2;
        num /= 2;
    }
    for( x=(base-1) ; x>=0 ; x-- ){
        binario[cont] = bin[x];
        cont++;
    }   
}

/**************************************************************************/

int btod( int base )
{
    int b64=0;
    int x=0,z=0;
   
    for( x=(base-1) ; x>=0 ; x-- ){
        b64 += btd[x] * pow(2,z);
        z++;
    }     
    return b64;
}   

/*************************************************************************/
En línea

PIV 2533 @ 2720Mhz | 512MB DRR333 @ 358 | 160 Gb + 40 Gb Seagate Barracuda

En la Edad Media la Iglesia robaba con los diezmos. En el siglo XXI la SGAE roba con sus cánones.
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicios Recursivos en Java y sus Soluciones « 1 2 3 4 5 »
Ejercicios
:ohk<any> 49 427,030 Último mensaje 30 Diciembre 2021, 03:22 am
por jaker250per
ejercicios + soluciones en java « 1 2 3 »
Java
bengy 25 24,671 Último mensaje 14 Septiembre 2011, 19:01 pm
por bengy
¿No se ve la TDT o se pixela? Posibles soluciones
Noticias
wolfbcn 0 1,675 Último mensaje 15 Noviembre 2017, 21:33 pm
por wolfbcn
Soluciones alternativas - Ejercicio en C++
Programación C/C++
csp 2 3,381 Último mensaje 5 Abril 2020, 06:46 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines