Şimdi Ara

C Programlama Recursive Fonksiyon EBOB Sorusu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
19
Cevap
0
Favori
3.797
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri
  • Son Yorum geçen yıl
  • Cevaplayan Üyeler 6
  • Konu Sahibinin Yazdıkları 1
  • Ortalama Mesaj Aralığı 139 gün 10 saat 33 dakika
  • Konuya En Çok Yazanlar
  • LOGNESS (13 mesaj) Tuğkan-0153 (4 mesaj) Gökşen PASLI (2 mesaj) omrumbakitemiz (1 mesaj) tnszfr (1 mesaj)
  • Konuya Yazanların Platform Dağılımı
  • Masaüstü (19 mesaj) Mini (2 mesaj)
  • @
0 oy
Öne Çıkar
Giriş
Mesaj
  • Girilen iki sayının en büyük ortak bölenini bulan programı recursive fonksiyon kullanarak yazınız . Ebob formülü aşağıda verilmiştir.
    Not: kalan fonksiyonu x’in y’ye bölümünden kalanı bulmalıdır.


     C Programlama Recursive Fonksiyon EBOB Sorusu
    Soru bu. Benim yazdığım kod ise aşağıda. Kod çalıştığında sürekli 0(Sıfır) döndürüyor. Sıkıntı nerede? Yardımcı olursanız sevinirim. :)


     

    int kalan(int x,int y);
    int ebob(int x, int y);


    int main(){

    int sayi1,sayi2,sonuc;
    printf("sayi girin: "); scanf("%d",&sayi1);
    printf("sayi girin: "); scanf("%d",&sayi2);

    sonuc=ebob(sayi1,sayi2);
    printf("%d\n",sonuc);

    return 0;
    }



    int kalan(int x,int y){

    int kalan_sonuc=x%y;

    return kalan_sonuc;
    }


    int ebob(int x, int y){

    if(y==0){
    return 1;
    }
    if(y>0){
    return ebob(y,kalan(x,y));
    }
    }




    < Bu mesaj bu kişi tarafından değiştirildi omrumbakitemiz -- 23 Aralık 2014; 21:07:32 >



    |
    |




  • hocam şöyle ekleme yaptım

    #include <stdio.h>
    #include <conio.h>

    int kalan(int x,int y);
    int ebob(int x, int y);


    int main(){

    int sayi1,sayi2,sonuc;
    printf("sayi girin: "); scanf("%d",&sayi1);
    printf("sayi girin: "); scanf("%d",&sayi2);

    sonuc=ebob(sayi1,sayi2);
    printf("%d\n",sonuc);


    }

    int kalan(int x,int y){

    int kalan_sonuc;
    if(x>y)
    {
    kalan_sonuc=x % y;
    }
    else if (x<y)
    {
    kalan_sonuc=y%x;
    }
    else return 0;


    return kalan_sonuc;
    }




    int ebob(int x, int y)
    {
    if(x>y)
    {
    if(y>0)
    {
    return ebob(y,kalan(x,y));
    }
    }
    else if (x<y)
    {
    if(x>0)
    {
    return ebob(x,kalan(x,y));
    }
    }

    if ((x==0) || (y==0))
    {
    if (x>y)
    {
    return x;
    }
    if (y>x)
    {
    return y;
    }
    }

    }



    < Bu mesaj bu kişi tarafından değiştirildi tnszfr -- 25 Aralık 2014; 0:22:05 >




  • Yukarıdaki formülde hata var. 1. örnek;
    ebob(3, 6) -> ebob(6, 3) -> ebob(3, 0) -> 0
    ebob(8, 4) -> ebob(4, 0) -> 0
    Olması gereken şu;
    ebob(x, y) = {x if y = 0, ebob(y, kalan(x, y)) if y > 0}
    ebob fonksiyonu;
    int ebob(int x, int y) 
    {
    if(y == 0)
    {
    return x;
    }
    else if(y > 0)
    {
    return ebob(y, x % y);
    }
    }


    Kaynak;
    http://en.wikipedia.org/wiki/Greatest_common_divisor
    Euclid's algorithm kısmı.



    < Bu mesaj bu kişi tarafından değiştirildi welrocken -- 24 Aralık 2014; 20:07:54 >
  • ‘K’ (büyük k) harfini rekürsif kodu yazmam gerekiyor yapamadım yardımcı olur musunuz?

  • LOGNESS L kullanıcısına yanıt

    Bölüm nedir, 4 yıllık Bilg Müh ?

  • Evet hocam

  • Evet hocam

  • Gün içerisinde ve C dilinde yazmam gerekiyor hocam yardımcı olursanız çok teşekkür ederim.

  • LOGNESS L kullanıcısına yanıt

    4 yıllık Bilg Müh bölümünde problem çözmek için Lisp öğretilmeli bence cunku Lisp problem çözme alanında en iyi dillerden biri. altta 5 dk'da çözdüm ki bunun 4'ü formatta space atmak nasıl olur ona bakarken harcadım.


    Kod

    Yığını:
    (defun k-yaz (&optional (boyut 8) (joker boyut) (orta (round (/ boyut 2)) ) )   (if (< joker 1)       "sonlandı"       (if (> joker orta)       (progn         (format t "*~v,:a* ~%" (- joker orta -1) #\space)         (k-yaz boyut (1- joker) orta ) )       (progn         (format t "*~v,:a* ~%" (- orta joker -1) #\space)         (k-yaz boyut (1- joker) orta ) ) ) ) )

    Çözümü Lisp ile kodladıktan sonra onu C'ye cevirmek kolay.


    Kod

    Yığını:
    #include<stdio.h> #include <stdlib.h>     /* atoi */ #include <math.h> void k_yaz(int boyut, int joker, int orta) {   if (joker < 1) {     return; }   else {     if (joker > orta) {       printf("*%*s%s\n", joker-orta+1 , "", "*");       k_yaz(boyut, joker-1, orta); }     else {       printf("*%*s%s\n", orta-joker+1 , "", "*");       k_yaz(boyut, joker-1, orta); } } }   int main (int argc, char** argv) {   int boyut =  atoi(argv[1]);   int joker = boyut;   int orta = round (boyut/2);   k_yaz( boyut, joker, orta);   return 0; }

    C'deki round işlevi 0.5'i 1'e yuvarladığ için K harfinin bireşim noktası bir satır altta cıkıyor. Lisp'teki round 0.5 'i 0'a yuvarladığı için tam yerinde cıkıyor. Ve tabi ki C'de K 'nın boyutunu komut satırı argümanı olarak giriyorsun.





  •  C Programlama Recursive Fonksiyon EBOB Sorusu


    böyle bi hata veriyor

  • LOGNESS L kullanıcısına yanıt
    Sonraki mesajı neden kaldırdın? Evet c++ compiler ile derlediğin için o hatayı veriyor olmalı. C Compiler kullanmalısın. Visual Studio 'da da C Compiler var diye hatırlıyorum. Hiçbirisi yoksa GNU C Compiler kullan, hatasız derlenir:
     C Programlama Recursive Fonksiyon EBOB Sorusu

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Cevap vermeyeceksiniz sandım kendim çözmeye çalışıyordum hocam, söylediğiniz gibi yaptım çalıştı.

    Allah razı hocam, çok teşekkür ederim hakkınızı helal edin  C Programlama Recursive Fonksiyon EBOB Sorusu 

  • Merhaba hocam rahatsız ediyorum kusura bakmayın sizden bir ricada bulunabilir miyim?


     Alfabesi E={a,b,c,d,e,f,g,h,0,1,2,3,4,5,6,7,8,9,+,-,*,} olan küme yardımıyla 8 karakterli 10 adet şifre üreten metodu veriniz. Ancak oluşturulacak şifreler; {+,-,*} olan elemanlardan bir adet içerecektir ve iki adet rakam içermektedir. Ayrıca şifreleme sisteminin kuralı şu şekildedir: şifre öncelikle harf ile başlayacak, simgeyle devam edip rakamla bitmelidir. Bu programda 10 adet şifre üretilecektir. Program bir defa çalışacak ve 10 adet şifre satır satır hem ekrana hem de yeni bir ‘sifre.txt’ dosyasına yazdırılacaktır.( c dilinde)


    şu kodu yazmam gerekiyor da eğer müsaitseniz yardımcı olur musunuz lütfen sürem kısıtlı yardımcı olursanız çok mutlu olurum,teşekkür ederim.

  • LOGNESS L kullanıcısına yanıt
    Daha önce de bahsetmiştim, bu tür problemler için c uygun değil. lisp ile 5 dk'da yazdım ve çalışıyor. c ile yazsam compile debug vs yarım saatte bitmezdi, yarım saati cok iyimser söyledim. hodja'larınıza söyleyin, problem çözmek için c dışında başka dil kullansınlar diyeceğim fakat müfredatı onlar belirlemiyor o yüzden diyemiyorum.

     C Programlama Recursive Fonksiyon EBOB Sorusu

    < Bu ileti mini sürüm kullanılarak atıldı >



  • < Bu mesaj bu kişi tarafından değiştirildi Gökşen PASLI -- 31 Mayıs 2021; 21:53:46 >
  • merhaba c# ta hesap makinesi yapmaya çalışıyorumda takıldığım bi yer var yardımcı olabilirmisniz?

  •  C Programlama Recursive Fonksiyon EBOB Sorusu


    hocam 1 e bastığım zaman label 1 e yazdırıyorum ama label 2 ye işlem sembolü koyup 2. sayıyı label 3 ye nasıl yazacağımı bulamadım

  • sayıların tıklama olayına

    eğer label1 ve label2 doluysa label3 texti=buttonun değeri değilse

    label1 in texti =buttonun değeri

    gibi

  • Gökşen PASLI G kullanıcısına yanıt

    hocam label1 ve label2 nin dolu olup olmadığını nasıl kontrol edeceğim anlayamadım mümkünse kod şeklinde atabilir misiniz?



    if (label1_201104020.Text == "0")

          {

            label1_201104020.Text = "1";

          }

          else 

          {

            label1_201104020.Text += "1";

          }

           

          if (label2_201104020.Text == "+")

          {

            label3_201104020.Text += "1";

          }



    1 in içine bu kodu yazdım label 1 e 1 yazıyor , + ya basıyorum sonra tekrar 1 e bastığımda hem label1 hemde label2 ye 1 yazıyor.





- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.