Asal Sayı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
MAydinli
Üye
Mesajlar: 32
Kayıt: 19 Eki 2006 08:55
Konum: Kayseri

Asal Sayı

Mesaj gönderen MAydinli »

Herkese hayırlı günler,
arkadaşlar, elimizde bir A sayı var.
bu sayıya en yakın olan asal sayıyı bulaçagız;
Şartımız ise bu A sayısından küçük ve bu A sayısına en yakın
asal sayı olaçak.
Hadi kolay gelsin.

ben yapmaya çalıştım, mantıken çalışıyor ama yazılım malesef çalışmıyor.
MAydinli
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Mantığı nasıl kurdunuz bilmiyorum. Fakat ben kendi mantığımı söyleyeyim:

Teorem: Bir sayı kareköküne kadar hiçbir sayıya bölünmüyorsa o sayı asaldır.

Yukarıdaki teoremden aşağıdaki kod çıkar. Kod c#.

Kod: Tümünü seç

static int GetClosestPrime(int num)
{
  int closest;
  for (closest = num-1; !IsPrime(closest); closest--);
  return closest;
}
static bool IsPrime(int num)
{
  for (int i = 2; i < Math.Sqrt(num); i++)
    if (num%i == 0) return false;
  return true;
}
MAydinli
Üye
Mesajlar: 32
Kayıt: 19 Eki 2006 08:55
Konum: Kayseri

Mesaj gönderen MAydinli »

C# kod bilgim yok ama yinede tşkkür ederim.
MAydinli
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

MAydinli yazdı:C# kod bilgim yok ama yinede tşkkür ederim.

delphi karşılıkları da şöyle olması lazım(kodlara bakarak çevirdim denemedim yanlışlık olabilir)

Kod: Tümünü seç

function GetClosestPrime(num:integer):integer;
var
closest:integer;
begin
     closest:=num-1; 
     while not IsPrime(closest) do
         closest:=closest-1;
     result:=closest;
end;

function Isprime(num:integer):boolean;
var i:integer;
begin
     result:=true;
     i:=2;
     while (i<Sqrt(num)) do
     begin
        if ((num mod i)=0) then
	     result:=false;
        i:=i+1;
     end;
end;
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Mesaj gönderen Battosai »

Kod: Tümünü seç

function IsPrime( x: integer ) : Boolean;
var
   factor : integer;
begin
   if x < 2 then              { No numbers < 2 are prime }
      IsPrime := False
   else if (x = 2) or (x = 3) then { 2 and 3 are prime }
      IsPrime := True
   else if not odd(x) then     { other than 2, no even number is prime }
      IsPrime := False

   else begin            { case: odd numbers > 3 }
      { look for an odd factor of x: if x has a factor, it must
        be less than sqrt(x)
      }
      factor := 3;
      while (sqr(factor) <= x) and ( x mod factor <> 0 ) do
         factor := factor + 2;     { try next odd number }

      { loop will stop whether x is prime or not (THIS is GOOD!)
        afterward, must determine if it found a factor of x
      }
      IsPrime := x mod factor <> 0;
   end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
sayi,i:integer;
begin
sayi:=46;
for  i:=sayi-1 downto 2 do
begin
if IsPrime(i)=True then
   break;
end;
form1.Caption:=IntToStr(i);
end;
MAydinli
Üye
Mesajlar: 32
Kayıt: 19 Eki 2006 08:55
Konum: Kayseri

Mesaj gönderen MAydinli »

Battosai, Arkadaşım teşşekkür ederim.
odd(x), sqr(x) functionlarına nasıl ulaşabilirim. (Kodlarına... )

şimdiden tşk.
:shock:
MAydinli
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Odd sayının tek olduğunu verir. Sqr ise sayının karesini verir. Bknz:F1 ile çevrim içi yardım :wink:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
MAydinli
Üye
Mesajlar: 32
Kayıt: 19 Eki 2006 08:55
Konum: Kayseri

Mesaj gönderen MAydinli »

paşam, odd(x), sqr(x) functionları
system üniti içerisinde gözüküyor ama ben ulaşamıyorum.
functionların kodlarına ulaşmak istiyorum. mümkünse yani :wink:
tşk
MAydinli
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bazı sistem prosedürleri ve fonksiyonlarının kodlarına ezelden beridir erişilmez :wink: Bunlara odd, sqr haricinde bir yığın daha ek yapılabilir (copy, length, sqrt, move v.s.). İşlevleri açısından benzerlerini yazmak gerekirse

Kod: Tümünü seç

function myOdd(const Sayi:Integer):Boolean;
begin
  Result:=(Sayi mod 2)=1;
end;

function mySqr(const Sayi:Extended):Extended;
begin
  Result:=Sayi*Sayi;
end;
kodları da aynı işlevleri görürler. Konu basit göründüğünden detaya girmedim ama yukarıda belirttiğim gibi bir çok fonksiyonun kodlarını System ünitesinde görürsünüz ve erişemezsiniz. İyi çalışmalar.
En son sabanakman tarafından 13 Kas 2007 03:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
MAydinli
Üye
Mesajlar: 32
Kayıt: 19 Eki 2006 08:55
Konum: Kayseri

Mesaj gönderen MAydinli »

:idea: tşk
MAydinli
Cevapla