Bilmece Bildirmece..!

Bu başlık kilitlidir. Yeni mesajlar gönderilemez veya mevcut mesajlar düzenlenemez.
hasanyasin
09-03-2004, 15:50   |  #1  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
1,100 mesaj
Kayıt Tarihi:Kayıt: Oca 2004

Programlamada ilerlemek isteyen arkadaşlar için, küçük problemler üzerinde çalışmanın yararından şüphesi olan yoktur sanırım. Ben de arada bir böyle sorunlar bildirerek, isteyen arkadaşların katılımlarıyla, güzel bir şeyler ortaya koyabileceğimizi düşündüm. İlk problemimiz şu:
Kaçıncı ayda olduğumuzu girdi olarak alıp, ay ismini 3 harfli kısaltma olarak veren bir kod bloğu nasıl yazılabilir. Ay kısaltmalarını kendiniz yapmakta serbestsiniz; fakat 3 harf olmalı. Mesela Ock, Şbt, Mrt, Nsn, May gibi... Ben 4 gireceğim, kod bloğumuz bize Nsn diyecek.

Haydi bakalım, bekliyorum. Eğer "bu bölümde tartışma yok" ya da "neden moderatörler buraya bakmıyor, nerede editörler, nerede programcı hakları" diye yakınan arkadaşlar, yapısal ve nesne yönelimi konusunda yapmaya çalıştığım açılım konusundaki ilgisizliği burada da sürdürürlerse; tavsiyem bu işte ilerlemeyi gerçekten isteyip istemediklerini sorgulamaları olacak... Gülümseme

small_ticket
09-03-2004, 16:04   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
167 mesaj
Kayıt Tarihi:Kayıt: Şub 2004

hasan yasin tamam ya niye kızıon :)
tamam söz uğraşıcam ya ama biraz beklemen lazım ilk önce elimde çözmem gerken bi sorun var c ile ilgili onu çözeyim buna da bakıcam en azından yapamadım derim senden pazar gecesi saat 24.00 e kadar süre istiyorum :)

small_ticket
09-03-2004, 21:22   |  #3  
Yıllanmış Üye
Teşekkür Sayısı: 0
167 mesaj
Kayıt Tarihi:Kayıt: Şub 2004

switch (ay){

case 1:
  printf("ock");
  break;
case 2:
   printf("şbt");
   break;
case 3:
    printf("mrt");
    break;
     :
     :
     :
     :
  case 12:
   printf("arl");
   break;
  default:
    printf("yanlış sayı girdiniz");
    break;
}
olabilir mi?

hasanyasin
09-03-2004, 21:45   |  #4  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
1,100 mesaj
Kayıt Tarihi:Kayıt: Oca 2004

Güzeeeel... Gülümseme

Acaba başka türlü nasıl yapabiliriz. Biraz daha kısa, biraz daha çabuk mesela... Şunu düşünelim: Bilgisayar "tekrar" eden şeyleri kendisi yapabilir; peki bizim bu kodumuzda, tekrar eden bir şeyler yok mu?

hasanyasin
10-03-2004, 23:13   |  #5  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
1,100 mesaj
Kayıt Tarihi:Kayıt: Oca 2004

Akla ilk gelen switch kullanmaktı değil mi? Gülümseme Evet iyi bir yol gerçekten de; fakat bir de şöyle düşünelim: Bilgisayar tekrarlayan şeyleri yapabiliyorsa, neden biz tekrarlayan şeyleri kendimiz yapalım? Ne de güzel bir fikir değil mi?

Peki bu problemde tekrarlanan şey neydi? Her ay için bir kısaltma ve sıra numarası vardı değil mi?
1.Oca
2.Şbt
3.Mrt
4.Nsn...

Peki bunu neden düşey yazıyoruz?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12
Oca Şbt Mrt Nis May Haz Tem Ağs Eyl Ekm Ksm Ara

Bu çok daha kısa olmadı mı sizce de? Peki böyle bir stringimiz olsa, her ay için 3 hane ayrıdığımıza göre, 36 harfli, "homojen" bir string olmaz mıydı? Homojen derken, her ay için eşit yer ayırmamızı kastediyorum: "OcaŞbtMrtNisMayHazTemAğsEylEkmKsmAra"

Şimdi bu string'in en güzel yanı, her ay için kısaltmaları içinde bulundurması ve her ay için baş harfin 3(n-1)'inci sırada olması. Yani 1.ay, 0, 2.ay 3, 3.ay 6... Ne de güzel değil mi? Gülümseme

Bu durumda; C++ için şöyle bir kod yazabiliriz:
"aylar", 36 harfli bir string ve "ayno" da girilen 1-12 arasındaki ay numarası olmak üzere:

cout << aylar.substr( (ayno-1)*3, 3) );

satırıyla, bütün o switch yapısından kurtuluveriyoruz... Gülümseme


Son Düzenleme: hasanyasin ~ 12 Mart 2004 02:06
hasanyasin
12-03-2004, 02:04   |  #6  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
1,100 mesaj
Kayıt Tarihi:Kayıt: Oca 2004

Bu soruya başka çözüm önerisi olan yok mu? Üzgün Mesela, ayları kısaltmadan yazsak, benim 3 harfli kısaltmalar için kullandığım yöntemi nasıl değiştirmemiz gerekir?

small_ticket
13-03-2004, 14:42   |  #7  
Yıllanmış Üye
Teşekkür Sayısı: 0
167 mesaj
Kayıt Tarihi:Kayıt: Şub 2004

string AY[12]={"ock","şbt","mrt","nsn","mys","hzr","tmz","ağs","eyl","ekm","ksm","arl"};
        printf("ay sırasını giriniz\n");
        scanf("%d",a);
        while (a){
                printf("%s",AY[a-1]);
bundaki hata ne?

hasanyasin
14-03-2004, 02:33   |  #8  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
1,100 mesaj
Kayıt Tarihi:Kayıt: Oca 2004

while(a) {....} ifadesi sevgili small_ticket, a true değerini döndürdüğü sürece, ..... yerinde yazan kodu çalıştır demektir. Bunun yerine,
if ( (a>=1) && (a<=12) ) {.....} gibi bir şeyler kullanman gerekiyor...

ssssg
30-03-2004, 13:45   |  #9  
Taze Üye
Teşekkür Sayısı: 0
19 mesaj
Kayıt Tarihi:Kayıt: Mar 2004

BİLGİSAYARIMA C++ PROGRAMINI KURDUM FAKAT DOĞRULUĞU %100 OLAN PROGRAMLARI BİLE ÇALIŞTIRAMIYORUM EKRANDA  ÇOĞUKEZ NULL DİYE BİR İFADE İLE KARŞILAŞIYORUM NE YAPABİLİRM