Título: Soluciones ejercicios C
Publicado por: Cobac en 6 Julio 2004, 06:54 am
En este tema se irán añadiendo las soluciones a los ejercicios de C, los usuarios que tengais vuestra solución crear un tema nuevo y pronto será unido y ordenado en este tema. Si quereís hacer alusión a alguna solución, el titulo del mensaje ponerlo de esta forma: 100 - C Solución cokeing asi se ve enseguida el número del ejercicio, el lenguaje y la solución a la que haceis referencia (de ahi lo de poner el nick :P) salu2
Título: Soluciones ejercicios C 100
Publicado por: Cobac en 6 Julio 2004, 06:55 am
Soluciones al ejercicio 100codigo de Cokeing: /***************************************************/ /****************************** EJ_100 *************/ /***************************************************/ /* cokeing@gmail.com */ /***************************************************/
#include <stdio.h> main(){
float x; int y=0; char sis;
do{ printf("Introduce temperatura, con F o C adelante. ej: 'F78.3' o 'C25.2' -> "); scanf("%c%f",&sis,&x);
if(sis=='F') { x=(5/9.)*(x-32); printf(" >> La Temperatura en Celsius es: %1.1f\n\n",x); y=1; }
if(sis=='C') { x=(x+(160/9.))/(5/9.); printf(" >> La Temperatura en Farenheit es: %1.1f\n\n",x); y=1; } getchar(); }while(y==0); } codigo de Cobac: #include <stdio.h>
main() { int cat; float temp, sol;
temp=0, cat=0;
printf("Escribe temperatura\n"); scanf("%f", &temp); printf("1.-De Celsius a Farenheit\n"); printf("2.-De Farenheit a Celsius\n"); scanf("%d", &cat); switch(cat){ case 1: sol =(temp+(160/9.))/(5/9.); printf("Son %.2f grados Farenheit", sol); break; case 2: sol = (5/9.)*(temp-32); printf("Son %.2f grados Celsius", sol); break; default: printf("\n\nAprende a escribir xDD\n"); break; } getchar(); getchar(); } Código de kasswed #include <stdio.h>
float convertiraC (float grados); float convertiraF (float grados);
main() { float temperatura; char opcion; float convertido; printf("Introduce una temperatura: "); scanf("%f", &temperatura); fflush(stdin); printf("\nSi la temperatura esta en Celsius pon una 'c', si esta Farenheit, pon una 'f': "); scanf("%c", &opcion); fflush(stdin); if ( (opcion == 'c') || (opcion == 'C') ){ convertido = convertiraF (temperatura); printf("\nLa temperatura en grados Celsius es %.2f y en Farenheit es %.2f", temperatura, convertido); } else if ((opcion == 'f') || (opcion == 'F')){ convertido = convertiraC (temperatura); printf("\nLa temperatura en grados Farenheit es %.2f y en Celsius es %.2f", temperatura, convertido); } else printf("\nCaracter incorrecto o paso incorrecto."); getchar(); getchar(); }
float convertiraF (float grados){ return (grados+(160/9))/(5/9.); } float convertiraC (float grados){ return (5/9)*(grados-32); }
Título: Soluciones ejercicios C 101
Publicado por: Cobac en 7 Julio 2004, 03:48 am
Soluciones al ejercicio 101Código de SCYUK: #include <stdio.h> main() { float total; int num; num=0; total=0;
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de un centimo:\n"); scanf("%d",&num); total=total+(num*0.01);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de dos centimos:\n"); scanf("%d",&num); total=total+(num*0.02);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de cinco centimos:\n"); scanf("%d",&num); total=total+(num*0.05);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de diez centimos:\n"); scanf("%d",&num); total=total+(num*0.10);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de veinte centimos:\n"); scanf("%d",&num); total=total+(num*0.20);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de cincuenta centimos:\n"); scanf("%d",&num); total=total+(num*0.50);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de un euro:\n"); scanf("%d",&num); total=total+(num*1);
printf("\nIntroduce el presupuesto que posee tu bolsillo en monedas de dos euros:\n"); scanf("%d",&num); total=total+(num*2);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de cinco euros:\n"); scanf("%d",&num); total=total+(num*5);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de diez euros:\n"); scanf("%d",&num); total=total+(num*10);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de veinte euros:\n"); scanf("%d",&num); total=total+(num*20);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de cincuenta euros:\n"); scanf("%d",&num); total=total+(num*50);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de cien euros:\n"); scanf("%d",&num); total=total+(num*100);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de doscientos euros:\n"); scanf("%d",&num); total=total+(num*200);
printf("\nIntroduce el presupuesto que posee tu bolsillo en billetes de quinientos euros:\n"); scanf("%d",&num); total=total+(num*500);
printf("\nEl total de tu dinero es %f euros.\n",total); } Código de Cobac: #include <stdio.h>
main() { int x=0; float total=0; int monedas[]={50000,20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1}; int tipomon[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
for(x=0; x < 15; x++) { if(monedas[x] >= 100) { if(monedas[x] >= 100 && monedas[x] <= 200) { printf("Cuantas monedas de %i euros\n", monedas[x]/100); scanf("%i", &tipomon[x]); } else { printf("Cuantos Billetes de %i euros\n", monedas[x]/100); scanf("%i", &tipomon[x]); } } else { printf("Cuantas monedas de %i centimos\n", monedas[x]); scanf("%i", &tipomon[x]); } } for(x=0; x < 15; x++) { total = total + monedas[x]*tipomon[x]; } printf("La suma total es: %.2f euros\n\n", total/100); getchar(); getchar(); } Código de cokeing: /***************************************************/ /****************************** EJ_101 *************/ /***************************************************/ /* cokeing@gmail.com */ /***************************************************/
#include <stdio.h> main(){ float mon; int billetes[15]={1,2,5,10,20,50,100,200,500,1000,2000,5000,10000,20000,50000}; int x,temp;
for(x=0;x<15;x++){ printf("Introduce cantidad de la siguiente moneda >> "); if(billetes[x]<100) printf("%d centimos: ",billetes[x]); else printf("%d euros: ",(billetes[x]/100)); scanf("%d",&temp); mon+=temp*billetes[x]; }
printf("\nTotal >> %1.0f euros",(mon/100));
x=mon/100; mon=mon-x; mon=mon/1000; printf(" y %1.0f centimos.",mon); }
Título: Soluciones ejercicios C 102
Publicado por: Cobac en 7 Julio 2004, 03:50 am
Soluciones al ejercicio 102Código de Cobac: #include <stdio.h>
main() { int num=0, bin[80], x=0, t=0;
printf("Introduce el numero\n"); scanf("%i", &num); //Ya se que esto es trampa, pero asi todos aprendemos xD printf("\nEn hexadecimal: "); printf("%x",num); for(x=0; num >= 1; x++) { bin[x] = num%2; num = num/2; } printf("\nEn binario: "); for(t=x-1; t >= 0; t--) { printf("%i", bin[t]); } printf("\n"); getchar(); getchar(); } Código de Charlie: #include <stdio.h> #include <stdlib.h> #include <string.h>
int main() { int dec,bin[24],i,aux,rest; char hex[6],let; printf ("\t\tPROGRAMA TRANSFORMADOR NUMEROS\n"); printf ("\t\t******************************\n\n"); printf ("\t\tA continuacion te pediremos que introduzcas un numero y te\n"); printf ("\t\tdiremos su valor en decimal y hexadecimal\n\n"); printf ("\t\tPulsa una tecla para continuar...\n"); getchar(); system("clear"); printf("Introduce un numero en decimal(mayor que 0 y menor que 10.000.000):"); scanf("%d",&dec); fflush(stdin); if (dec<0 || dec>10000000) { do { printf("Numero incorrecto.Introduzca numero valido (0-10.000.000):"); scanf("%d",&dec); fflush(stdin); }while (dec<0 || dec>10000000); } aux=dec; for(i=0;i<24;i++) { rest=aux%2; bin[i]=rest; aux=aux/2; } printf("El numero en binario es: "); for (i=23;i>=0;i--) { printf("%d ",bin[i]); } aux=dec; for(i=0;i<7;i++) { rest=aux%16; if(rest==0) let='0'; if(rest==1) let='1'; if(rest==2) let='2'; if(rest==3) let='3'; if(rest==4) let='4'; if(rest==5) let='5'; if(rest==6) let='6'; if(rest==7) let='7'; if(rest==8) let='8'; if(rest==9) let='9'; if(rest==10) let='A'; if(rest==11) let='B'; if(rest==12) let='C'; if(rest==13) let='D'; if(rest==14) let='E'; if(rest==15) let='F'; hex[i]=let; aux=aux/16; } printf("\nEl numero en hexadecimal es: "); for (i=6;i>=0;i--) { printf("%c ",hex[i]); } return 0; } Código de TheZen: /* Ejercicio 102: Escribir un programa que solicite una cantidad entera en formato decimal y la convierta a binario y hexadecimal Estado: Terminado */
#include <stdio.h>
void binario(int num); void hex(int num);
main() { int num; printf("Escribe un numero decimal: "); scanf("%d",&num); binario(num); printf("\n"); hex(num); getchar(); }
void binario(int num) { int bin[32]; int x=0; printf("[+] Numero en binario: "); while( num!=0 ) { bin[x] = num % 2; num /= 2; x++; } x--; for( ; x>=0 ; x-- ) { if( (bin[x]==1)||(bin[x]==0) ) printf("%d",bin[x]); } }
void hex(int num) { int hex[32]; int x=0; printf("[+] Numero en hexadecimal: "); while( num>0 ) { hex[x] = num % 16; num /= 16; x++; } x--; for( ; x>=0 ; x-- ) { if(hex[x]==10) printf("A"); else if(hex[x]==11) printf("B"); else if(hex[x]==12) printf("C"); else if(hex[x]==13) printf("D"); else if(hex[x]==14) printf("E"); else if(hex[x]==15) printf("F"); else printf("%d",bin[x]); } }
Título: Soluciones ejercicios C 103
Publicado por: Cobac en 7 Julio 2004, 03:52 am
Soluciones al ejercicio 103Código de Cobac: #include <stdio.h> #include <math.h>
main() { float raiz=0, sol1=0, sol2=0, A=0, B=0, C=0;
printf("Siendo Ax^2+Bx+C=0\n"); printf("Escribe los valores de A, B y C separados por un espacio:\n"); scanf("%f %f %f", &A, &B, &C); if(A == 0) { sol1= (-C)/B; printf("El valor de X es %.2f\n", sol1); } else if(B == 0) { raiz = (-C)/A; if(raiz < 0) printf("ERROR, raiz negativa"); else { raiz = sqrt(raiz); printf("Los valores de X son %.2f y %.2f\n\n", raiz, -raiz); } } else if(C == 0) { sol1 = (-B)/A; printf("Los valores de X son 0 y %.2f\n\n", sol1); } else { raiz = pow(B,2)-4*A*C; if(raiz < 0) printf("ERROR, raiz negativa"); else { raiz = sqrt(raiz); sol1 = (-B+raiz)/(2*A); sol2 = (-B-raiz)/(2*A); printf("Los valores son:\nx=%.2f y x=%.2f", sol1, sol2); } }
getchar(); getchar(); } Código de TheZen: /* Ejercicio 103: Escribir un programa que solicite tres números reales A, B y C y calcule Ax2+Bx+C=0 Estado: Terminado */
#include <stdio.h> #include <math.h>
main() { float A,B,C; float D, raiz, B2; float x1, x2; printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(" ~ Programa que calcula la ecuacion: ~ \n"); printf(" ~ Ax2+Bx+C=0 ~ \n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n\n"); printf(" - Escribe A: "); scanf("%f",&A); printf(" - Escribe B: "); scanf("%f",&B); printf(" - Escribe C: "); scanf("%f",&C); B = 0 - B; B2 = B*B; raiz = B2 - 4 * A * C; if( raiz < 0 ) { printf("[!] No tiene solucion porque no se puede hacer la raiz cuadrada de un numro negativo.\n"); exit( 1 ); } raiz = sqrt( raiz ); D = 2*A; x1 = (B + raiz) / D; x2 = (B - raiz) / D;
printf(" +------------------+ \n"); printf(" x1 = %f \n",x1); printf(" x2 = %f \n",x2); printf(" +------------------+ \n"); getchar(); } Código de kasswed: #include <stdio.h> #include <math.h>
main() { float A, B, C, res1,res2, raiz1, raiz2; printf("Introduce A: "); scanf("%f", &A); fflush(stdin); printf("\nIntroduce B: "); scanf("%f", &B); fflush(stdin); printf("\nIntroduce C: "); scanf("%f", &C); raiz1 = pow(B,2)-(4*A*C); if ( raiz1 < 0){ printf("\nLa raiz es negativa, el programa no puede continuar."); getchar(); getchar(); } else { raiz2 = sqrt(pow(B,2)-(4*A*C)); res1 = (0-B + raiz2) / (2*A); printf("\nx = %f", res1); res2 = (0-B - raiz2) / (2*A); printf("\nx = %f", res2); getchar(); getchar(); } }
Título: Soluciones ejercicios C 104
Publicado por: Cobac en 7 Julio 2004, 03:54 am
Soluciones al ejercicio 104Código de Cobac: #include <stdio.h>
main() { int ano=0, rest=0;
printf("Introduce el año: "); scanf("%d", &ano); if(ano < 0) printf("Años negativos no\n"); else { rest = ano%4; if(ano%100 == 0 && ano%400 != 0) printf("El año %d no es bisiesto\n", ano); else if(rest == 0 && ano%100 != 0 || (ano%400 == 0 && ano%100 == 0)) printf("El año %d es bisiesto!!\n", ano); else printf("El año %d no es bisiesto\n", ano); } getchar(); getchar(); } Código de kasswed: #include <stdio.h>
main() { int ano; printf("Introduce un año: "); scanf("%i", &ano); fflush(stdin); if ( ( ano % 4 == 0) && (ano % 100 != 0) || ano % 400 == 0){ printf("\nEl año %i es bisiesto.", ano); } else { printf("\nEl año %i no es bisiesto", ano); } getchar(); getchar(); }
Título: Soluciones ejercicios C 105
Publicado por: Cobac en 7 Julio 2004, 03:55 am
Soluciones al ejercicio 105Código de Cobac: #include <stdio.h>
#define CANTIDAD 100
main() {
int x=0, y=0, num=0, rest=0, t=0, prim[100], cont=0;
for(x=0; x < CANTIDAD; x++) { for(y=1; y <= x; y++) { rest = num%y; if(num != y && y != 1 && rest != 0) cont++; } if(cont > num-3) { prim[t] = num; t++; } num++; cont=0; } for(x=0; x < t; x++) printf("%d ", prim[x]); getchar(); getchar(); }
Título: Soluciones ejercicios C 106
Publicado por: Cobac en 7 Julio 2004, 03:58 am
Soluciones al ejercicio 106Código de neohex: #include <stdio.h>
int main() { int i,num,resul; printf("[+] Introduce un numero del 0 al 9: "); scanf("%d", &num); for(i=1;i<=10;i++){ resul = num*i; printf("%d x %d = %d\n",num,i,resul); } return 0; } Código de Mr.Potato: #include <stdio.h>
int main() { int tabla,i;
printf("introduce un numero del 1 al 9:\n"); scanf("%d",&tabla); if (tabla < 1 || tabla > 9) { printf("El numero tiene que ser mayor de 1 y menor que 9\n"); } else { for(i=1;i<=10;i++) { printf("%d x %d = %d\n",tabla,i,tabla*i); } } return 0; } Código de Cobac: #include <stdio.h>
main() { int num=0, x=0;
printf("Introduce un numero entre 1 y 9: "); scanf("%d", &num); if(num < 1 || num > 9) printf("Aprende a leer/escribir"); else { for(x=1; x <= 10; x++) { printf("%d x %d = %d\n", num, x, num*x); } } getchar(); getchar(); } Código de 133_mHz_: /* Escribir un programa que pregunte un número entero entre uno y 9 y genere la tabla de multiplicar de ese número */
#include <stdlib.h> #include <stdio.h>
int main() {
int a, b, c; printf("Introduzca un numero (1-9): "); scanf("%i", &a); if(a>9) { printf("El numero introducido es: %i ", a); printf("introduzca un numero menor.\n\n"); } else { for(b=1;b<11;b++) { c=a*b; printf("%i x %i = %i\n", a, b, c); } } system("pause"); return 0; } Código de kasswed: #include <stdio.h>
main() { int num, x, res; printf("Introduce un numero entre 1 y 9: "); scanf("%i", &num); if (num > 9 || num < 1){ printf("\nEl numero introducido es mayor de 9 o menor que uno. El programa no puede continuar."); } else { for (x=1; x<=10; x++){ printf("\n%i x %i = %i\n", num, x, res = num * x); } } getchar(); getchar(); }
Título: Soluciones ejercicios C 124
Publicado por: Cobac en 7 Julio 2004, 03:59 am
Soluciones al ejercicio 124Código de Cobac: #include <stdio.h>
main() { float producto=0, entregado=0; int entregar=0, rest=0, x=0; int monedas[]={50000,20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1}; int tipomon[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
printf("Precio producto\n"); scanf("%f", &producto); printf("Total entregado\n"); scanf("%f", &entregado); entregado = entregado*100; producto = producto*100; if(entregado < producto) { printf("Diles que te paguen!!!"); } entregar = entregado - producto; rest = entregar; for(x=0; rest > 0; x++) { while(rest >= monedas[x]) { tipomon[x] = tipomon[x]+1; rest = rest - monedas[x]; } } for(x=0; x < 15; x++) { if(monedas[x] >= 100 && tipomon[x] != 0) { if(monedas[x] >= 100 && monedas[x] <= 200) { printf("Entregar %i monedas de %i euros\n", tipomon[x], monedas[x]/100); } else { printf("Entregar %i Billetes de %i euros\n", tipomon[x], monedas[x]/100); } } else if(tipomon[x] != 0) { printf("Entregar %i monedas de %i centimos\n", tipomon[x], monedas[x]); } } getchar(); getchar(); }
Título: Soluciones ejercicios C 107
Publicado por: Cobac en 7 Julio 2004, 04:00 am
Soluciones al ejercicio 107Código de Cobac: #include <stdio.h>
main() { int cant=0, num[80], media=0, x=0, y=0;
printf("Dime la cantidad de numeros que quieres insertar: "); scanf("%d", &cant); if(cant <= 0) printf("Sin comentarios...."); else { //rellenamos el array con números for(x=0; x < cant; x++) { printf("\nInserta el numero %d: ", x+1); scanf("%d", &num[x]); } for(x=0; x < cant; x++) { for(y=0; y < cant; y++) { /* Si ponemos > los ordena de mayor a menor Si ponemos < los ordena de menor a mayor */ if(num[x] < num[y]) { media = num[y]; num[y] = num[x]; num[x] = media; } } } for(x=0; x < cant; x++) printf("\n%d ", num[x]); } getchar(); getchar(); }
Título: Soluciones ejercicios C 108
Publicado por: Cobac en 7 Julio 2004, 04:02 am
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); }
Título: Soluciones ejercicios C 113
Publicado por: Cobac en 7 Julio 2004, 04:03 am
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; }
Título: Re: Soluciones ejercicios C
Publicado por: Cobac en 7 Agosto 2005, 21:54 pm
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(); }
Título: Re: Soluciones ejercicios C
Publicado por: Cobac en 7 Agosto 2005, 21:55 pm
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; }
/*************************************************************************/
|