Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - lapras

#41
Programación C/C++ / Re: ejercicio en C
31 Octubre 2012, 13:13 PM
Lo bueno que tiene el código de rir3760 es que no hace ningún cambio en la cadena. Es genial.
#42
Programación C/C++ / Re: ejercicio en C
31 Octubre 2012, 00:39 AM
@xiruko: Me encanta.
#43
Programación C/C++ / Re: ejercicio en C
31 Octubre 2012, 00:14 AM
Me mola tu código leosansan.
Por cierto, ¿para que pones printf("\b")? ¿es por que te sale algún carácter raro?
Lo digo por que me suena que en algunas plataformas el carácter nulo es imprimible y tu codigo accede al ultimo caracter de la string (NULL) y lo imprime.
Yo  que estoy en linux, tu código imprime esto:
Código (bash) [Seleccionar]
tuket@debian:~$ ./a.out
hole


hol

lho

olh


Parece que en linux no se imprime el carácter nulo entonces al borrar se queda con una letra menos. Tal vez el remedio sería no imprimir ese carácter para no tener que borrarlo.

k=strlen (cadena)-1;
for (i=k;i<strlen (cadena);i++)
.
Simplemente modificando esas dos líneas
#44
Programación C/C++ / Re: Estructura incompleta.
30 Octubre 2012, 23:47 PM
Cuando haces typedef estas creando un nuevo tipo entonces no debes poner struct para declara una variable de ese tipo ni hacer un casting a ese tipo.
Es decir, puedes hacer:
typedef struct {
   char cidade[20];
   double datos[365];
   int n_datos;
}T_TEMP;

  T_TEMP *espacio;
   espacio=(T_TEMP*)malloc(n*sizeof(T_TEMP));
   return(*espacio);    //Que sepas que seguramente esto no es lo que realmente quieres hacer pero tampoco lo se si no veo el contexto


Otra manera seria esta:

struct T_TEMP{
   char cidade[20];
   double datos[365];
   int n_datos;
};

   struct T_TEMP *espacio;
   espacio=(struct T_TEMP*)malloc(n*sizeof(struct T_TEMP));
   return(*espacio);
#45
Una manera fácil de hacerlo es simplemente copiar y pegar dentro de las funciones(o módulos) que defines y pasar los parámetros por referencia(punteros):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <dos.h>
#include "windows.h"

void jabon         (int *a, float *total, int n, float (*tabla)[2], int *seleccion);
void afeitadora    (int *a, float *total, int n, float (*tabla)[2], int *seleccion);
void shampoo       (int *a, float *total, int n, float (*tabla)[2], int *seleccion);
void acondicionador(int *a, float *total, int n, float (*tabla)[2], int *seleccion);
void pasta         (int *a, float *total, int n, float (*tabla)[2], int *seleccion);

int main (void){

float tabla [6][2] = {{1,5.00}, {2,3.50}, {3,7.45}, {4,8.32}, {5,4.50}, {6, 0}};
int a , n, seleccion;
float total;

do {

puts("\t\t\t*****Menu*****\n");
printf("1. Jabon..............(c/u) %.2f Pesos" ,tabla[0][1]);
printf("\n2. Afeitadora.........(c/u) %.2f Pesos", tabla[1][1]);
printf("\n3. Shampoo............(c/u) %.2f Pesos", tabla[2][1]);
printf("\n4. Acondicionador.....(c/u) %.2f Pesos", tabla[3][1]);
printf("\n5. Pasta Dental.......(c/u) %.2f Pesos", tabla[4][1]);
printf("\n6. Salir Del Sistema",tabla[5][1]);
printf("\n \n Ingrese el numero del producto que desea adquirir: ");
scanf("%d",&n);

switch(n)
{
case 1:
jabon(&a, &total, n, tabla, &seleccion);
break;

case 2:
afeitadora(&a, &total, n, tabla, &seleccion);
break;

case 3:
shampoo(&a, &total, n, tabla, &seleccion);
break;

case 4:
acondicionador(&a, &total, n, tabla, &seleccion);
break;

case 5:
pasta(&a, &total, n, tabla, &seleccion);
break;

case 6:
system("cls");
printf("\n***Gracias Por Usar Nuestros Servicios***\n");
Sleep(800);
break;

default:
if(n<1 || n>6)
{
system("cls");
puts("\n\n ***Opcion Invalida***\n\n");
Sleep(500);
}

break;

}

} while(seleccion!=2);

printf("\nTotal a pagar es: %.3f Pesos",total);

printf("\n\n\t");
system("pause");




void jabon (int *a, float *total, int n, float (*tabla)[2], int *seleccion){
printf("\n Cuantos Jabones desea adquirir? ");   
scanf("%d",a);

*total= tabla[n - 1][1] * (*a) + (*total);

printf("\n Desea adquirir otro producto?");
printf("\n\n1.Si 2.No: ");
scanf("%d",seleccion);
}

void afeitadora (int *a, float *total, int n, float (*tabla)[2], int *seleccion){
printf("\n Cuantas Afeitadoras desea adquirir? ");
scanf("%d",a);

*total= tabla[n - 1][1] * (*a) + (*total);

printf("\n Desea adquirir otro producto?");
printf("\n\n 1.Si 2.No: ");
scanf("%d",seleccion);
}

void shampoo (int *a, float *total, int n, float (*tabla)[2], int *seleccion){
printf("\n Cuantos Shampoos desea adquirir? ");
scanf("%d",a);

*total= tabla[n - 1][1] * (*a) + (*total);

printf("\n Desea adquirir otro producto?");
printf("\n\n1.Si 2.No: ");
scanf("%d",seleccion);
}

void acondicionador (int *a, float *total, int n, float (*tabla)[2], int *seleccion){
printf("\n Cuantos Acondicionadores desea adquirir? ");
scanf("%d",a);

*total= tabla[n - 1][1] * (*a) + (*total);

printf("\n Desea adquirir otro producto?");
printf("\n\n1.Si 2.No: ");
scanf("%d",seleccion);
}

void pasta (int *a, float *total, int n, float (*tabla)[2], int *seleccion){
printf("\n Cuantas Pasta Dental desea aquirir? ");
scanf("%d",a);

*total= tabla[n - 1][1] * (*a) + (*total);

printf("\n Desea adquirir otro producto?");
printf("\n\n1.Si 2.No: ");
scanf("%d",seleccion);
}


De verdad que es muy fácil si sabes como.
Por cierto, ¿el código lo ha hecho tu profesora? Hay un error el la linea esta "total= tabla[n - 1][1] * a;"
Si quieres comprar jabones después de comprar lo que sea sólo pagaras los jabones. Lo correcto sería "total= tabla[n - 1][1] * a+ total;" o "total+= tabla[n - 1][1] * a;"
#46
Programación C/C++ / Re: ejercicio en C
30 Octubre 2012, 21:03 PM
Así es como yo lo haría.

#include <stdio.h>

int cnoc(char*);
void rotate(char*);

int main(){
char cad[256]={};
scanf("%s",cad);
printf("length=%20s\n", cad); //NOTA: cuidado con el buffer overflow(printf("length=%s\n", cad);)
int n=cnoc(cad);


int i;
for(i=0; i<n; i++){ //rotar n veces. Así conseguimos todas las combinaciones posibles
rotate(cad);
printf("%s\n", cad);
}
}


int cnoc(char cad[]){  // Devuelve el número de caracteres en una cadena
int i=0;
while(cad[i]) i++;
return i;
}

void rotate(char cad[]){ //rotar la cadena 1 posición
int n=cnoc(cad)-1; //n apunta a la untima posición
char last= cad[n--]; //guardamos el valor de la ultima posición en variable last
for(;n>=0;n--) cad[n+1]=cad[n]; //desplazamos todos los caracteres una posición hacia delante
cad[0]=last; //como el primer elemento no tiene precedente tenemos que==>
// ==>poner en él el que fue el el último
}

EDIT: añado comentarios
#47
Hay ciertos programas comerciales, que al instalar te da un código y con ese código el proveedor te da la clave necesaria para instalar el programa. En estos casos si que se puede y no es tan difícil, por que el programa ejecuta un algoritmo a partir del código. Mi hermano tenia un programa que compro con el cual durante la instalación te da un código. Con este código llamas por teléfono a la empresa de software y te da la clave. Cada ordenador genera un código propio. Con lo cual solo puedes pedir la clave una vez (por que ellos se apuntan que código de producto les ha llamado para pedir la clave)para que no lo instales en varios ordenadores. Lo que le sucedió a mi hermano es que formateo el ordenador y el código era diferente entonces no podia instalarlo por que ya había llamado una vez. Con el ollydbg le conseguí sacar la clave y el algoritmo que usaba. Si es este tu caso te puedo ayudar...
#48
El camino que sigues es bueno, ir descartando. La verdad es que no siempre puedes descartar tantos como para quedarte con uno. Sin embargo, cuando te quedas con con 7 u 8 por ejemplo, lo que puedes hacer es intentar descifrar asumiendo que se ha usado el algoritmo más fácil de criptoanalizar(sobre todo los algoritmos inyectivos, osea que dado un mensaje cifrado solo existe un posible descirado, por que suelen ser mas eficientes de calcular). Si no se consigue con ninguno de estos algoritmos "faciles de des cifrar", puedes pasar a los difíciles (no inyectivo(aunque no necesariamente)) como md5 etc...
El descifrado de un md5 puede ser muy difícil ya que solo se puede con diccionarios y fuerza bruta. Y aun así no tienes certeza de que sea el algoritmo usado(siempre es posible que el algoritmo que se ha usado no lo conoces o que sea un algoritmo secreto), ni de que habiendo sido exitoso el descifrado del mensaje hayas obtenido el mensaje original por que varios mensajes al encriptarlos pueden tener una misma imagen.
En todo caso si durante el proceso llegas a algo que tiene sentido(por ejemplo usas un diccionario y te da que el mensaje descifrado es "soy un tio molon") puedes estar suguro al 99.99999% de que has descifrado el mensaje y conoces el algoritmo que se ha usado, pero sin embargo si al descifrar un mensaje que es por ejemplo un correo electrónico llegas a algo como "g5Tujnd7%6"@3tººªx" puedes estar seguro al 0.001% de que eso no es el mensaje ya que no es lo que se diga muy frecuente en un correo electrónico. De todas maneras depende del contexto.
Quiero decir, hay veces que un mensaje puedes descifrarlo y otras veces no...
#49
Hacking / Re: backtrack 5 manual?
11 Junio 2012, 20:33 PM
Comparto opinión, con el señor Martin teletubi.
#50
Hacking / Re: backtrack 5 manual?
10 Junio 2012, 12:55 PM