PDA

Tam Sürümünü Görmek İçin : Sifre olusturma programi


zeynepyaprak
19/04/2007, 22:50
Geldik bu ayki ödevime :)

Hocanın bu sefer bizden istediği şey password creator diye bir program. input olarak doğum tarihini giriyorsun, bu tarihi kullanarak 9 tane output üretmemizi istiyor :

mesela : 01 01 1981 gibi bir input giriliyor.

İlk 2 maddeyi ben yaptım ama diğer maddelerde takıldım. İp ucu alabilir miyim ? :utangac:

function kullanmamız gerekecek sanırım, internette obeb functionu buldum ama 3. madde tam olarak obeb değil çünkü obeb te 2 sayının ortal böleni bulunuyor.



3. The largest divisor of the year (different from the year itself). E.g. the largest divisor of 2007 is 669.

4. The sum of all the divisors of the day (different from the day). E.g. the divisors of 20 (different from 20) are 1, 2, 4, 5, 10 and their sum is 22. Note, 1 has no divisor different from 1 itself, so the sum should be zero, in this case.


hasanyasin
20/04/2007, 01:04
3. Soru:
a year'a eşitlenir.
Bir döngü kurulur:
Her devrin başında a, 1 azaltılır
Devir sonunda year%a (year'ın a'ya bölümünden kalan) kontrol edilir:
Eğer year%a 0 ise döngüden çıkılır,
Eğer değilse devam edilir.
Döngü sonlandığında a, year'ın en büyük bölenini verir.

4. Soru:
a = day, toplam = 0 yapılır.
a==0 olana kadar çalışacak bir döngü kurulur:
Her devrin başında a 1 azaltılır.
Devir sonunda day%a kontrol edilir.
Eğer day%a 0 ise toplam+=a yapılır.
Döngü sonlandığında toplam değişkeni, day'in tüm pozitif bölenlerinin toplamını verir.

furkans
20/04/2007, 02:12
çok güzel açıklamışsın..eklenecek birşey varsa oda şudur ki..a year a değil year-1 e eşitlenir çünkü her sayının en büyük böleni zaten kendisidir ama sanırım soruda kendisinden küçük olan en büyük bölen isteniyor.hatta a direk a/ 2 ye eşitlenir çünkü bir sayı yarısından büyük sayılara bölünmez..4. soruyla ilgili çok güzel bi açıklama yapılmış zaten..onun hakkında söylencek bir şey yok..

hasanyasin
20/04/2007, 02:23
Bir döngü kurulur:
Her devrin başında a, 1 azaltılır

demek, ilk çalışmada a=year-1 demek!

a/2 için de yeni öğrenenlerin kafasını daha fazla karıştırdığına inandığım için bu tarz işlem azaltıcı yöntemleri vermekten hep çekiniyorum. Programcılık, kodlama, hepsini bir arada öğrenmek kolay olmasa gerek... :)

furkans
20/04/2007, 02:34
:D a-- değil --a diyosun yani :D ozmn lafımız yok hemen kızma hasan ya :D bu klasik basitleştirmeleri herkesin en baştan kavraması lazım bence ya ama sen diyosan benim yaklaşımım bu ona eyw :D

hasanyasin
20/04/2007, 02:55
Ne kızması yaf:D

a-- ya da --a değil ki meselemiz: Döngünün "başında" a'yı 1 azaltıyoruz; yani a'yı eğer kalan kontrolünden sonra azaltırsak olmaz zaten. Yani o zaman başka türlü yazmak gerekir. Neyse, arkadaş ödev yapacak geyiğe boğmayalım... (:

ortug
20/04/2007, 09:37
3) bir performans artırım önerisi de benden;
a = 2'den başlar; her döngüde bir arttırılır. Mod sıfır olduğunda bölüm istenen cevaptır.

hasanyasin
20/04/2007, 11:36
a eğer 2'den başlayıp artırılırsa sonuç en büyük değil en küçük böleni döndürür. Bu performans açısından da olabilecek en kötü çözüm olur zaten :D

furkans
20/04/2007, 13:08
hasana katılıyorum..doğru bi çözüm değil 2 den başlatmak..

ortug
20/04/2007, 14:28
3) Mod sıfır olduğunda bölüm istenen cevaptır.

Biraz daha dikkat edersek; doğru olduğunu görürüz. bölünen / bölen = bölüm. böleni 2'den itibaren arttırıyoruz. Anladınız siz.
Verien 2007 örneği için 2 döngüde tamamlanıyor, problem. Sizin çözümünüzde 2007-669 = 1338 döngü. :)
Ama bu gerçek hayattan bir problem olmadığından önemli değil...

furkans
20/04/2007, 19:54
haklısın bölüm okumuşum ben..kusura bakma ortug..ama çözüm kısalır demek direk yanlış olur çünkü 2007 söz konusu olunca diosun başka bi sayıda bu olmayabilir..yinede güzel bi çözüm takdir ettim şahsen..

hasanyasin
20/04/2007, 19:55
3) bir performans artırım önerisi de benden;
a = 2'den başlar; her döngüde bir arttırılır. Mod sıfır olduğunda bölüm istenen cevaptır.

Doğru söze ne denir? Pekâlâ denir elbette... (:

Ayrıca sevgili Furkans, cevap hemen hemen her zaman kısalır. Kısalmıyorsa da kesinlikle uzamaz... :) Zira aşağıdan başladığımız zaman 1'er 1'er artmıyoruz aslında, yukarıdan döndüğümüzün kat kat fazlası aralıklar atlıyoruz. Mesela 1997 için aşağıdan 2'ye çıktığımızda 1997/2 çıkmış oluyoruz. 3'e çıktığımızda 1997/3 adım atlamış oluyoruz...

myavuzselim
20/04/2007, 20:12
Guzel yontem.

haklısın bölüm okumuşum ben..kusura bakma ortug..ama çözüm kısalır demek direk yanlış olur çünkü 2007 söz konusu olunca diosun başka bi sayıda bu olmayabilir..yinede güzel bi çözüm takdir ettim şahsen..
Sayi ne olursa olsun her zaman cok daha hizli.

Sayinin asal carpanlari kucukten buyuge A[1], A[2], ..., A[n] ise, ilk yontem sonucu A[2]*...*A[n] defada buluyor. Ikinci yontem ise A[1]-1 defada. Buyuk bir fark.

furkans
20/04/2007, 20:22
haklısınız düşününce doğru oluyor..sözüm geri :D tebrik ediyorum çözümden dolayı tekrar..

ortug
20/04/2007, 23:41
teşekkürler arkadaşlar :super: