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:
Citar100 - 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
Soluciones al ejercicio 100
codigo 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);
}
Soluciones al ejercicio 101
Có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);
}
Soluciones al ejercicio 102
Có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]);
}
}
Soluciones al ejercicio 103
Có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();
}
}
Soluciones al ejercicio 104
Có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();
}
Soluciones al ejercicio 105
Có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();
}
Soluciones al ejercicio 106
Có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();
}
Soluciones al ejercicio 124
Có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();
}
Soluciones al ejercicio 107
Có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();
}
Soluciones al ejercicio 108
Có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);
}
Soluciones al ejercicio 113
Có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;
}
Soluciones ejercicio 119
Có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();
}
Soluciones ejercicio 125
Có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;
}
/*************************************************************************/