Cita de: T. Collins en 11 Abril 2015, 04:40 AMTienes razón, gracias.
Cuando elevas 37 a la 6, excedes de 2147483648 que es el máximo para un signed int por eso sale negativo, tienes que utilizar un tipo de variable más grande para suma.
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úCita de: T. Collins en 11 Abril 2015, 04:40 AMTienes razón, gracias.
Cuando elevas 37 a la 6, excedes de 2147483648 que es el máximo para un signed int por eso sale negativo, tienes que utilizar un tipo de variable más grande para suma.
Cita de: T. Collins en 11 Abril 2015, 03:54 AMascii=(int)nombre[i];
#define MAX 100
#define PESO 37
void hashcliente(char nombre[]){ //generador de posición con peso hash
int suma=0;
int lugar=0;
int i=0; //posición
int j=0; //potencia
int ascii=0;
j=strlen(nombre)-1; //indica a qué potencia se elevará el peso
while(i<(strlen(nombre))){ //se realiza hasta que la posición del caracter sea igual a la longitud de la cadena, si la cadena=6 i=0 a 5
ascii=(int)nombre[i]; //convierte el caracter a su valor en ascii
suma=suma+(ascii*pow(PESO,j)); //j disminuye mientras i aumenta porque la primera posición se eleva por la longitud-1
i++;
j--;
printf("suma parcial: %d\n", suma);
}
printf("suma total: %d\n", suma);
lugar=suma%MAX;
printf("lugar: %d\n", lugar);
}