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 - AlbertoBSD

#1491
Java / Re: problema con aritmetica modular
22 Mayo 2016, 17:29 PM
Parece programa de los concursos de programacion.

Necesitas Exponenciacion modular.

En lugar de elevar a cierta potencia y despues sacar el modulo, se puede ir sacando modulo de la primera potencia y posteriormente aplicar modulo sobre ese resultado es mas rapido y eficiente...

El algoritmo completo esta descrito aqui...

https://es.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/fast-modular-exponentiation

Tengo una implementacion propia en C de numeros de longitud variable y he provado el algoritmo con numeros de mas de 40 o 50 digitos y funciona miy rapido
#1492
Detecte un error en tu codigo, P es un arreglo pero ahi capturas en la direcccion de P y corresponfe solo al elemento P[0]....

for(i=0;i<n+1;i++){
      printf("X^%d= ",i);
      scanf("%d",&P);
   }


No he visto el demas codigo pero es lo que vi en este momento....

Ya qie tenga la laptop en frente lo reviso a fondo.

Saludos.
#1493
Si ya tienes las variables globales no tienes que usar argumentos.

Si quieres usar argumentos.

char *myStrcat(char *s1,char *s2, char *s3){
       int i =0, j=0;
while(s1[i] != '\0'){
            s3[i] = s1[i];
            i++;
       }
      while(s2[j] != '\0'){  
          s3[i +j] = s2[j];
           j++;
       }
}


Es lo mismo que

char *myStrcat(char s1[],char s2[], char s3[]){
       int i =0, j=0;
while(s1[i] != '\0'){
            s3[i] = s1[i];
            i++;
       }
      while(s2[j] != '\0'){  
          s3[i +j] = s2[j];
           j++;
       }
}


Recursiva.... La verdad no se que maestro te pide a hacer eso.

Voy a pensar en una forma eficiente de hacer algo recursivo para hacer strcat. Luego te contesto como podria ser recursiva
#1495
Creo que se refiere a funciones de librerias...

void myStrcat(char *str1,char *str2){
snprintf(str3,20,"%s%s",str1,str2);
}


el anterior es solo usando snprintf.

void myStrcat(){
       int i =0, j=0;
while(str1[i] != '\0'){
            str3[i] = str1[i];
            i++;
       }
      while(str2[j] != '\0'){  
          str3[i +j] = str1[j];
           j++;
       }
}



str3 debe de tener al menos el doble de tamaño o la suma de str1 y str2

sele puede agregar otra condicion de paro a cada while mientras i < 20  al primero y respecto a j en el 2do
#1496
char *myStrcat(char *str1,char *str2){
int len = strlen(str1)+strlen(str2);
char *nuevo = calloc(len +1,sizeof(char));
snprintf(nuevo,len,"%s%s",str1,str2);
return nuevo;
}
#1497
Tu funcion tiene buffer overflow si lo que quieres es concatenar cadenas la funcion recursiva no te sirve..

Te recomiendo usar memset strlen y si acaso snprintf
#1498
Excelente muchas gracias es lo que estaba buscando  ;-).

Ya habia empezado algo de codigo y ya con tu respuesta estoy mas seguro de que voy por buen camino..

Saludos!
#1499
PHP / ¿Representar estructura de C en PHP?
21 Mayo 2016, 15:29 PM
Muy buen dia.

Estoy tratando de implementar un pequeño programa que hice para hacerlo un servicio WEB... pero no estoy seguro de como aplicarlo en PHP

Tengo la siguiente estrucuta de C

struct temp{
unsigned char *valor;
unsigned int bytes;
};


Mi duda es como implementarlo correctamente en PHP, segun lei lo mas parecido es un clase en PHP

entonces tengo:

Código (php) [Seleccionar]

<?php
class 
temp {
public $valor[];
public $bytes;
}
?>



Mi duda es como decir que $valor tiene que ser de X cantidad;

Por ejemplo cuando leeo desde un archivo X cantidad de bytes en $valor puedo saber que $valor tiene X longitud pero no se como hacerlo a mano... esto es

Voy a crear una instanacia de esa clase y al elemento $valor le quier agregar un valor en el primer elemento y posteriormente tal vez le agrege mas. Simplemente lo agrego como

Código (php) [Seleccionar]
$valor[1] = 200;

He usado arrays pero para este caso no creo que sea lo mas eficiente..
#1500
Todo bien  ;-) ;-) ;-)

Solo como comentario...

  char *stdBuffer = (char *)calloc(maxLength+ 1, sizeof(char));
  char **stdCommand = (char **)calloc( (maxLength / 2) + 1, sizeof(char*));


el sizeof(char) en el primer parametro esta sobrado por que se especifica en el segundo parametro...

Ahora el segundo calloc estas reservando memoria para X cantidad de apuntadores entonces el sizeog(char) le falta el *  dentro del parentesis para que te reserve elementos del damañao de un apuntador usualemnte son elementos de 4 u 8 bytes..

Sobre la variable maxLength no estoy seguro de cuanto valga pero si alguien mete mas comandos que maxLength  puede hacer tu app vulnerable a buffer overflow....

Pero solo es una observacion para alguien que esta aprendiendo por hobby te tengo que decir que dominas el lenguaje con cierta maestria...

Saludos!