Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
7
Cevap
495
Tıklama
0
Öne Çıkarma
Javada ekok alma
O
9 yıl
Yarbay
Konu Sahibi

İ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

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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

M
9 yıl
Yarbay

Ö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ı >

K
9 yıl
Yarbay

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 >
Bu mesaja 1 cevap geldi.
T
9 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
M
9 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
O
9 yıl
Yarbay
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
M
9 yıl
Yarbay

Kimse bunlari şıp diye ogrenmiyor, yaza yaza : )
Zaten bu kodu ben yazdım ama, matematiği Öklid efendiye ait.




Bu mesajda bahsedilenler: @oksygen
K
9 yıl
Yarbay

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.




Bu mesajda bahsedilenler: @revivo72
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.