Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Una división que me tiene bloqueado. (https://www.clubdelphi.com/foros/showthread.php?t=8922)

Nopatic 06-04-2004 16:24:00

Una división que me tiene bloqueado.
 
Necesito conocer el resto de una división. Visto así parece muy sencillo se utiliza el "mod" y ya está, pero el problema que me tiene bloqueado es que tengo que saber el resto de una división con un numero de 26 dígitos y no lo consigo hacer.
ejemplo:

00120345030000067890142800 / 97 el resto sería 91

¿ como puedo saber el resto ?

Gracias a todos
Saludos

sanxpue 06-04-2004 21:14:25

Pues hay que desbloquearte
 
Esperemos que te sirva esta funcion...
un poco maquiavelica pero jala je

Código:

Function Division(CNum : String;Dividir : Int64) : LongInt;
Const
  Entero64 = 999999999999999999;
Var
  Mayores,Menores : Extended;
  ModMen,ModMay,ModConst : Int64;
Begin
  If Length(CNum) > 18 Then
  Begin
    //quitamos primero los nulos
    While CNum[1] = '0' Do
      Delete(CNum,1,1);
    //Sacamos a los que no podamos transformar en entero
    Mayores := StrToFloat(Copy(CNum,1,Length(CNum)-18));
    //Sacamos a los que podemos transformar en Enteros
    Menores := StrToFloat(Copy(CNum,Length(CNum)-17,10000));
    //Ahora sabemos que los mayores
    //es igual a mayores por la const Entero64
    //mas mayores
    //Sacamos primero el modulo de los menores
    ModMen := Trunc(Menores) MOD Dividir;
    //Sacamos el modulo de los mayores
    ModMay := Trunc(Mayores) MOD Dividir;
    //Sacamos el modulo de la constante
    ModConst := Entero64 MOD Dividir;
    //lo multiplicamos por las veces que usamos la constante
    ModConst := ModConst * Trunc(Mayores);
    //Sumamos los sobrantes y sacamos el resultado
    Result := (ModMen+ModMay+ModConst) MOD Dividir;
    //y listo.. listo
  End;
  //y si no es mayor entonces eso ya es facil
End;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Dividir : Int64;
  CNum : String;
begin
  CNum := '00120345030000067890142800';
  Dividir := 97;
  ShowMessage(IntToStr(Division(CNum,Dividir)));
end;

Como siempre a sus ordenes y siempre con buena cara
saludos

Nopatic 07-04-2004 10:15:47

Funciona de lujo, aunque parece mentira me has sacado de un gran problema, te debo un almuerzo, si alguna vez te pasas por Valencia, mandame un correo que te invito.

Saludos

sanxpue 07-04-2004 18:20:50

Pues creo que..
 
Pues si va a estar dificil eso del almuerzo ya que estoy del otro lado del charco.. me basta con que te halla servido...

Saludos..

roman 08-04-2004 22:37:49

Cita:

Empezado por sanxpue
Pues si va a estar dificil eso del almuerzo ya que estoy del otro lado del charco.. me basta con que te halla servido...

Hombre, si la invitación incluye pasaje nos ponemos ahora mismo a programar la rutina en ensamblador para mayor rendimiento.


:D


La franja horaria es GMT +2. Ahora son las 01:46:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi