Şimdi Ara

Javada ekok alma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
467
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • İnternette baktım örnekler çok karışıktı,bende onlara oranla daha anlaşılır bir kod yazmak istedim,hazır da ödevimizken

    /*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */
    package ekok;

    /**
    *
    * @author Che12
    */
    public class Ekok {
    // 12 ve 18 in ekokunu bul
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args)
    {
    int a = 2;
    int b = 14;

    int tutucub = b;
    int tutucua = a;
    int sayac1 = 2;int sayac2 = 2;

    int ekok = 0;

    // burada büyük ve kücükleri buluyoruz sadece
    if(a==b)
    {
    ekok = a;
    }
    else
    {

    if(b>a)
    {

    while(true)
    {

    if(b%a == 0)
    {
    ekok = b;
    break;
    }
    b = tutucub*sayac1;
    sayac1++;
    }
    }

    if(a>b)
    {
    while(true)
    {


    if(a%b == 0)
    {
    ekok = a;
    break;
    }
    a = tutucua*sayac2;
    sayac2++;
    }
    }

    //*************************

    }
    System.out.println(ekok);
    }

    }


    İsteyen klavyeden de okutturabilir kodu biraz değiştirerek.

    Algoritma ilk etapta 2 omurgaya sahip, ya iki sayı eşittir,ya da değildir.
    İki sayı birbirine eşit olmayınca tekrar 2 omurga açılıyor,her omurganın içinde gerekli ifadelerle algoritmamız kuruluyor



    < Bu mesaj bu kişi tarafından değiştirildi oksygen -- 12 Ocak 2017; 22:29:3 >







  • Öklit algoritması ile yapmak daha dogru olurdu.

    https://en.wikipedia.org/wiki/Least_common_multiple
    https://en.wikipedia.org/wiki/Greatest_common_divisor

    OBEB OKEK icin asal carpanlara ayirmak tek algoritma degil.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • Python'in gozunu seveyim dedirtti

    '''verilen n sayida sayinin ebob ve ekoklarini oklid algoritmasini kullanarak bulur'''

    from functools import reduce

    def ebob(a, b) -> int:
    '''a ve b'nin en buyuk ortak katini dondur'''
    while b > 0:
    a, b = b, a % b
    return int(a)

    def ekok(*args) -> int:
    '''verilen sayilarin en kucuk ortak katini dondur'''
    formul = lambda a, b: (a * b) / ebob(a, b)
    return int(reduce(formul, args))

    if __name__ == '__main__':
    print(ekok(1, 2, 3))


    ayrica docstring'i doldursaniza abi neden doldurmuyorsunuz onlari



    < Bu mesaj bu kişi tarafından değiştirildi KaramazovX -- 13 Ocak 2017; 11:11:42 >
  • quote:

    Orijinalden alıntı: Fulctrum

    Python'in gozunu seveyim dedirtti

    '''verilen n sayida sayinin ebob ve ekoklarini oklid algoritmasini kullanarak bulur'''

    from functools import reduce

    def ebob(a, b) -> int:
    '''a ve b'nin en buyuk ortak katini dondur'''
    while b > 0:
    a, b = b, a % b
    return int(a)

    def ekok(*args) -> int:
    '''verilen sayilarin en kucuk ortak katini dondur'''
    formul = lambda a, b: (a * b) / ebob(a, b)
    return int(reduce(formul, args))

    if __name__ == '__main__':
    print(ekok(1, 2, 3))


    ayrica docstring'i doldursaniza abi neden doldurmuyorsunuz onlari

    Pek sevmediğim şu Python la ilg birkaç sorum olacaktı, yardımcı olursan sevinirim:

    1- fonk tanımı sonrası -> int dönen değer tipi ifade ediyor olmalı ancak dönen değer zaten rakam üstüne int olacak diye belirtmenin gerekliliği nedir?

    2- args önündeki asterisk sembolü anlamı nedir? Tahminen değişken sayıda argümanı ifade ediyor olmalı cunku ekok ta değişken sayıda girdi olmalı.

    3- sondaki __name__ neye ait? Kodu denerken mi kullanılıyor?

    ------
    Bunların dışında bugün rastladığım bir şey daha var:

    Python listesinden eleman silerken örn 5 eleman silinecekse

    del liste[:5]

    gibi bir ifade kullanılıyor, oradaki : neyin ifadesidir? Teşekkürler.




  • Java ile Oklit algoritmasi kullanilarak anlasilabilir ve kisa bir sekilde yazilabilir bu algoritma. 2 parametre aliyor ama daha da genisletilebilir.
     
    private long gcd(long a , long b){
    if(a==0 || b == 0)
    return a + b;
    return gcd(b,a%b);
    }

    private long gcm(long a, long b){
    if(a == 0 || b == 0 )
    throw new IllegalArgumentException("a and b can't be zero");
    long gcd = gcd(a,b);
    return a/gcd * b/gcd * gcd;
    }

    public static void main(String[] args){
    System.out.println(gcm(10,60));

    }



    Recursive gcd hesabi, sonra da lcm hesaplarken her sayinin gcd carpani ile gcd yi carpiyoruz.
  • quote:

    Orijinalden alıntı: Mephalay

    Java ile Oklit algoritmasi kullanilarak anlasilabilir ve kisa bir sekilde yazilabilir bu algoritma. 2 parametre aliyor ama daha da genisletilebilir.
     
    private long gcd(long a , long b){
    if(a==0 || b == 0)
    return a + b;
    return gcd(b,a%b);
    }

    private long gcm(long a, long b){
    if(a == 0 || b == 0 )
    throw new IllegalArgumentException("a and b can't be zero");
    long gcd = gcd(a,b);
    return a/gcd * b/gcd * gcd;
    }

    public static void main(String[] args){
    System.out.println(gcm(10,60));

    }



    Recursive gcd hesabi, sonra da lcm hesaplarken her sayinin gcd carpani ile gcd yi carpiyoruz.

    Hocam javada daha o kadar ilerlemedik,ancak dediğiniz yöntem de guzel,benim yazdigim kodu acemiliğime verin




  • oksygen kullanıcısına yanıt
    Kimse bunlari şıp diye ogrenmiyor, yaza yaza : )
    Zaten bu kodu ben yazdım ama, matematiği Öklid efendiye ait.
  • Tabii, şöyle:

    1- Fonksiyon tanımının o kısmı opsiyonel. Python'da mod, bölme falan gibi işlemler yaparken bazen sonuç float olarak dönebiliyor. Malum, otomatik tip ataması yapılıyor. Yani genel olarak beklenir o tip bir şey. Float değil de int döndürdüğünü belirtmek adına -> int diye ekledim. Koymasak da olur da fonksiyonu kullanan adamın 10 saniyesini falan yeriz sanırım.

    2- Asterisk, koddaki biçimiyle fonksiyon parametrelerinin önüne koyulunca değişken sayıda argüman ifade ediyor. Aynı şekilde double asterisk koyunca da dictionary biçiminde argüman alıyor. O da genelde **kwargs diye geçer. Parametre kısmına liste veya dict paslamadan direkt şöyle şeyler yapmaya olanak veriyor:

    fonk(*args, **kwargs):
    ....falan filan
    ....for arg in args:
    ........falan filan
    ....if kwargs["özellik1"] == bişeyler...

    3- Yorumlayıcı bir dosyayı direkt olarak açmışsa (terminalden direk girilen komut ile mesela) onun ismini otomatikman __main__ yapıyor. Kodun o kısmı yalnızca o py dosyası direkt olarak açılımşsa çalışıyor. Genelde oralara test case'ler konur. Başka bir modülden import edince çalışmasın diye öyle yapılıyor.

    4- : range ifade ederken kullanılıyor. Yazdığınız ifadenin doğrusu del liste[0:5] aslında. 0 ile 5 arasındakileri siliyor. 0'ı yazmayınca yorumlayıcı sorun çıkarmıyor. İstenirse 3. bir kısmı da var hatta bunun, o da step belirtiyor. del liste[0:5:2] gibi. 5'e kadar ikişer atlayarak gidiyor. liste[::2] olunca baştan sona ikişer atlıyor, liste[::-1] olunca aynı listeyi tersten yazdırıyor vs. liste[-1] de çok kullanılır, listenin son elemanını belirtir.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.