Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Suma de dígitos primos - Simplificar código (https://www.clubdelphi.com/foros/showthread.php?t=83373)

Subliminalz 11-06-2013 05:41:08

Suma de dígitos primos - Simplificar código
 
Hola, como están, espero que muy bien y con ánimos de ayudar, tengo un pequeño código que suma los dígitos primos de cualquier combinación de números que el usuario teclee, quisiera saber ¿cómo simplifico el código?, los dígitos van del 1 al 9.

-Si el usuario teclea: 245896, entonces los primos son: 2 y 5, y la suma de estos 2 primos es: 7...
-Si el usuario teclea: 221479, entonces los primos son: 2, 2, 7 y la suma de estos 3 primos es: 11...

No sé qué hacer con esas excepciones que he puesto allí, en total 4, donde "r (residuo)" tiene que ser distinto de: 1, 4, 6 y 9... ¿Qué puedo hacer para simplificar esta operación?, pensé en hacerlo con la fórmula de series, pero se complica más, al menos para mí... trate de hacerlo de otra manera pero se me queda el 2, ya que es par...

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var r,x,s:integer;
begin
  x:=StrToInt(Edit1.Text);
  s:=0;
  repeat
  r:=x mod 10;
  x:=x div 10;
  if r<>1 then
  if r<>4 then
  if r<>6 then
  if r<>9 then
  if r div 2<=3 then
  s:=r+s;
  until x=0;
  Edit1.Text:=IntToStr(s);
end;

Proyecto hecho en Delphi XE3, muchas gracias por su ayuda... y consejos que me puedan brindar...

WkaymQ48 11-06-2013 09:04:51

Que tal así:
Código Delphi [-]
function Suma(Str: String): Integer;
var
  i: Integer;
begin
  Result:= 0;
  for i:= 1 to Length(Str) do
    if Str[i] in ['1','2','3','5','7'] then
      Result:= Result + StrToInt(Str[i]);
end;  

// Por ejemplo
Edit1.Text:= IntToStr(Suma(Edit1.Text));

Subliminalz 11-06-2013 23:32:07

Excelente
 
Si amigo, creo que la mejor opcion era ponerle los numeros primos y que me ignore todos los demas, jeje... esta genial el codigo, le puse un begin al Edit1 y ya me funciona, muchas gracias WkaymQ48...

ecfisa 12-06-2013 00:00:22

Hola Subliminalz.

Sólo como agregado, si quisieras obtener la suma a partir de un valor numérico:
Código Delphi [-]
function SumarDigitosPrimos(Numero: Integer): Integer;
var
  i, Digito: Integer;
begin
  Result := 0;
  while Numero > 0 do
  begin
    Digito := Numero mod 10;
    if Digito in [1,2,3,5,7] then
      Inc(Result, Digito);
    Numero := Numero div 10;
  end;
end;

// llamada
...
begin
  ShowMessage(IntToStr(SumarDigitosPrimos(12357)));
end;

Saludos. :)


La franja horaria es GMT +2. Ahora son las 08:03:59.

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