PDA

Ver la Versión Completa : Porfavor algo de ayuda con un poco de codigo en delphi!!


N4ota
08-06-2007, 20:02:53
wenas:
disculpen soy nuevito por aca y veo k ustedes serian mi solucion mas rapida :D quisiera que me tiren una ayudita por aca tengo un problema y no se como resolverlo:
el problema es quisiera saber una forma de sumar los "n" numeros primos
osea:


n----> F ----->f:integer;



si n=5 entonces seria 1+2+3+5+7=18
si n=6 entonces seria 1+2+3+5+7+11=29
y asi

yo hice lo siguiente

function primo(n:integer):boolean;
var a,b:integer;
begin
a:=0
repeat
a:=a+1;
b:=n mod a;
until (b=0) or (b<>0);
if b<>0 then
begin
result:=true
else
result:=false;
end;
end;

function S_primo(n:integer):integer;
var

begin <------ bueno aqui mi duda si es que se puede utilizar un bucle para invocar a primo y sumar digito por digito ya que intento con for pero me pide que sea un dato diferente de un booleano :confused:

porfavor una pequeña ayuda ya saben hoy por ti mañana por mi :D

se agradece toda colaboracion de antemano :D

xEsk
08-06-2007, 20:17:32
El codigo q has puesto para comprobar si es un numero primo, no funciona bien.

Para hacer lo q quieres, es mejor un while o repeat.

El codigo seria algo parecido a esto:

function S_primo(n:integer):integer;
var
i, m: Integer;

begin
i:=1; m:=0;
Result:=0;
while m <> n do
begin
if primo(i) then
begin
Result:=Result + i;
Inc(m);
end;
Inc(i);
end;
end;

No lo he probado mucho el codigo q te he puesto, pero diria que funciona.

Saludos.

roman
08-06-2007, 20:35:41
N4ota, por favor utiliza títulos más descriptivos para tus mensajes. "Porfavor algo de ayuda con un poco de codigo en delphi!!" no dice nada en unos foros donde precisamente se ayuda en código delphi mayormente y dificulta las futuras búsquedas. Además procura utilizar las etiquetas adecuadas para escribir código, tales como [code] o [delphi].

A parte de eso, te doy la bienvenida a los foros y te aclaro que el número 1 no es primo.

// Saludos

seoane
08-06-2007, 20:40:56
Solo añadir que solo tienes que comprobar si es divisible por los números menores a su raíz cuadrada.


function EsPrimo(x: integer): Boolean;
var
i: integer;
begin
for i:= 2 to Trunc(Sqrt(x)) do
if x mod i = 0 then
begin
Result:= FALSE;
Exit;
end;
Result:= TRUE;
end;


Por cierto, esto resulta un poco inútil:

until (b=0) or (b<>0);

;) es broma, espero que no te parezca mal ....

fide
09-06-2007, 16:49:33
El codigo que uso Seoane es el que he usado toda mi vida para calcular si un numero es primo, ya que los divisores de un numero siempre estaran por debako de la mitad de dicho numero, o sea por debajo de la raiz cuadrada.

N4ota
10-06-2007, 22:24:59
agradezco a todos por la pequeña ayudita k me dieron en programacion en especial a roman y seoane por hacerme notar mis faltas el problemita me costo algo pero llegue a una conclusion por mi cuenta y funca :D aunque me costo :o lo dejare por aqui para futuras generaciones :D

function Verif_primo(n:integer):boolean;
var
c,residuo:integer;
b:boolean;
begin
if n>1 then
begin
c:=1;
repeat
c:=c+1;
residuo:=n mod c;
until residuo=0;
if n=c then
begin
b:=true;
end
else
begin
b:=false;
end;
end
else
begin
b:=true;
end;
result:=b
end;
function S_primo(n:integer):integer;
var
c,c1,c2:integer;
begin
c:=0;
c1:=0;
c2:=0;
repeat
c:=c+1;
if verif_primo(c)=true then
begin
c1:=c+c1;
c2:=c2+1;
end;
until (c2=n);
result:=c1;
end;

jejeje me gusta derrochar en codigo :D

seoane
10-06-2007, 22:40:54
Por favor usa las etiquetas para publicar tu codigo. Por ejemplo:

Tu codigo

Mira que bien queda así :) :
function Verif_primo(n:integer):boolean;
var
c,residuo:integer;
b:boolean;
begin
if n>1 then
begin
c:=1;
repeat
c:=c+1;
residuo:=n mod c;
until residuo=0;
if n=c then
begin
b:=true;
end
else
begin
b:=false;
end;
end
else
begin
b:=true;
end;
result:=b
end;
function S_primo(n:integer):integer;
var
c,c1,c2:integer;
begin
c:=0;
c1:=0;
c2:=0;
repeat
c:=c+1;
if verif_primo(c)=true then
begin
c1:=c+c1;
c2:=c2+1;
end;
until (c2=n);
result:=c1;
end;