| 
	
		|  Autor | Tema: Soluciones ejercicios C  (Leído 53,244 veces) |  
	| 
			| 
					
						| Cobac 
								Ex-Staff    Desconectado 
								Mensajes: 5.465
								
								 
								Still In Development
								
								
								
								
								
								   | 
 
Soluciones al ejercicio 108Código de Cobac: #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 
								Mensajes: 5.465
								
								 
								Still In Development
								
								
								
								
								
								   | 
 
Soluciones al ejercicio 113Código de neohex: #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: #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 
								Mensajes: 5.465
								
								 
								Still In Development
								
								
								
								
								
								   | 
 
Soluciones ejercicio 119Código de TheZen: /*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 
								Mensajes: 5.465
								
								 
								Still In Development
								
								
								
								
								
								   | 
 
Soluciones ejercicio 125Código de TheZen: /*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.
 |  |  |  |  |  
 
	
 
   |