Şimdi Ara

goto ile üçgen

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
0
Favori
173
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar. Bu sene üniversiteye başladım ve yazılım dilleri hakkında az da olsa bilgim var. Döngüleri biliyorum (for, while, do while vb.) ama hocamız goto döngüsü ile yıldızlardan oluşan bir dik üçgen yapmamızı istedi. Eğer for veya while ile isteseydi kolaylıkla yapardım ama goto ile ne denersem deniyeyim beceremedim yardım edin lütfen. Dil C.



  • while ile yazdığınız çözümü paylaşın onu goto komutuna çevirmek çok kolay.
  • burada üstesinden gelemediğin şey goto'nun nasıl kullanıldığı mı üçgenin nasıl yapıldığı mı?

    eğer üçgeni herhangi bir loop ile çizmeyi başardıysan yapacağın şey sadece kodunu şu ikisinin arasına taşımak:

    void ucgen()
    {
    int n = 0;
    int satir_sayisi = 10;
    row:
    column:
    static int a = 0;
    std::cout<<"*";
    if( a == n ){
    std::cout<<std::endl;
    a = 0;
    goto next_row;
    }
    a++;
    goto column;
    next_row:
    if( n == satir_sayisi){
    goto terminate;
    }
    n++;
    goto row;
    terminate:;
    }


    Hatırlatma: dilin C olduğunu unutup C++ <iostream> classından ögeler kullanmışım (std::cout). Bunları printf ile değiştirirsin.



    < Bu mesaj bu kişi tarafından değiştirildi peytuk -- 30 Ekim 2019; 14:7:8 >
  • peytuk kullanıcısına yanıt
    sorun şu ki goto işaretçisinin bitim noktasının olmaması mesela
    loop:{
    kod
    }
    gibisinden bir bitim noktası olsa yapabileceğime inanıyorum ama işaretçiden sonra ne yazarsam goto hepsini çalıştırıyor. ben ise sadece belli bir kısmı çalıştımasını istiyorum. Eğer goto ile olmasaydı örnek bulmam kolay olurdu ama goto ile istedi hocamız, hatta ben özellikle goto olması lazım mı diye sorduğumda evet dedi. Ama internette bile bunun bir örneği yoksa yapmak işlevsiz olur diye tahmin ediyorum çünkü goto ile 50 satırda yazıcağım üçgen kodunu dor ile 5 satıra indirebilirim.
  • Hocanız bu şekilde bir kısıtlama yaparak internetten hazır bulunan kod parçacıkları kullanmanızı değilde farklı şekilde uzunda olsa bir çözüm üretmenizi buna kafa yormanızı istemiş. Bu dediğimden hazır kod blokları kullanmak kötü anlamı çıkartılmamalı. Sadece kendi kendinize birşeyler yazma yeteneğinizi zayıf bırakır.

    Goto ile yapacağınız çözüm while veya for ile yaptığınız çözümden çok da uzun olmayacaktır. Muhtemelen 1-2 satır eski koddan çıkacak yerine 2-3 satır ilave gelecek.

    İlk mesajımdada belirttiğim gibi siz diğer yöntem(ler)le yaptınız kodu paylaşın birlikte onu goto yapısına çevirelim.
    Sizinde ödevinize bir katkınız olsun :)
  • rafet32 kullanıcısına yanıt
    sağolun hocamız bize iç içe dongülerle ilgili 1-2 örnek yaptı ve benim de aklıma 1-2 şey oturdu. Eskiden psödo kodları gereksiz sanırdım ama burdaki sorunumu psödo kod yazarak çözdüm ve oldukça basit bir şekilde yazabildim. Tabi hocamız bize derste nasıl üçgen yapabileceğimizi anlatmadı ama 5 dk lık bir psödo kod ile kendi kendime yapabildim.
  • program ucken
    implicit none
    integer :: i, j, n, c
    n = 10
    do i = 0, n - 1
    c = 1
    do j = 0, n - i
    write(*, "(' ')", advance="no")
    end do
    do j = 0, i
    write(*, "(I2)", advance="no") c
    c = (c * (i - j)) / (j + 1)
    end do
    write(*, *)
    end do
    GOTO 18
    18 print *, "Ucken tamamlandi"
    end program


    Ucken isimli Fortran programiyla daha yuksek not alabilirsin. Goto kullanacaksaniz Fortranla bunu yapmalisiniz.
  • Mastess M kullanıcısına yanıt
    goto kullandığında bitim noktası sen nereyi istersen orasıdır. yukarıda paylaştığım gibi goto bloklarını hizalarsan aklında canlandırman daha kolay olur. Her bloğun sonuna bir kaçış ekleyebilirsin. Kaçışın ucunun nereye çıkacağı ise tamamen senin istek ve amacına bağlı. bitim noktası yok değil.


    void infiniteLoop(){
    sonsuz_dongu:
    static int i = 0;
    if (i == 500) goto end;
    i++;
    goto sonsuz_dongu;
    end:
    }


    bu şekilde döngünün dışına yönlendirebilir, break; gibi birşey oluşturabilirsin. Ama kuvvetle muhtemel goto'yu ilerleyen günlerinde hiç bir zaman kullanman gerekmeyecek.



    < Bu mesaj bu kişi tarafından değiştirildi peytuk -- 30 Ekim 2019; 15:39:28 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.