Ş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
522
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
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 >



    _____________________________
    Mutluluğun bittiği yerde, Dibe çeken hayaller ile sarıldım kendime. Göz yaşlarımın içinde debelenen hüzünlerim ile beraber, Her şeyin yazılıp çizildiği bir dünyadan,edebi yaratıcılığımı ortaya çıkaracak bir dünyaya doğru... Hiç kimse hiç bir şeyi değiştiremez,çok geç. Hüzünlerimin içinde kendimi kaybettim. Ruhumda,Tepeden tırnağa yara....Oturdu kara kara. Çocukluk hayallerim,ölmekte olan bir gencin içinde çürümeye hapsoldu.




  • Ö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.
    _____________________________
    Life is about having fun.




  • 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
    _____________________________
    Mutluluğun bittiği yerde, Dibe çeken hayaller ile sarıldım kendime. Göz yaşlarımın içinde debelenen hüzünlerim ile beraber, Her şeyin yazılıp çizildiği bir dünyadan,edebi yaratıcılığımı ortaya çıkaracak bir dünyaya doğru... Hiç kimse hiç bir şeyi değiştiremez,çok geç. Hüzünlerimin içinde kendimi kaybettim. Ruhumda,Tepeden tırnağa yara....Oturdu kara kara. Çocukluk hayallerim,ölmekte olan bir gencin içinde çürümeye hapsoldu.




  • 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.
    _____________________________
  • Yapay Zeka’dan İlgili Konular
    Faktöriyel Sorusu Yardım?
    16 yıl önce açıldı
    Daha Fazla Göster
  • 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.