Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
18
Cevap
881
Tıklama
0
Öne Çıkarma
C Programlama Recursive Fonksiyon EBOB Sorusu

O omrumbakitemiz Konu Sahibi
7 yıl (205 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.


< Resime gitmek için tıklayın >
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 >


T tnszfr
7 yıl (1102 mesaj)
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 >
Bu mesaja 1 cevap geldi.

W welrocken
7 yıl (1501 mesaj)
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 >


L LOGNESS
10 ay (15 mesaj)
‘K’ (büyük k) harfini rekürsif kodu yazmam gerekiyor yapamadım yardımcı olur musunuz?


Bu mesaja 1 cevap geldi.

V vonderplanitz
10 ay (7700 mesaj)
Bölüm nedir, 4 yıllık Bilg Müh ?


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @LOGNESS

L LOGNESS
10 ay (15 mesaj)
Evet hocam




L LOGNESS
10 ay (15 mesaj)

L LOGNESS
10 ay (15 mesaj)
Gün içerisinde ve C dilinde yazmam gerekiyor hocam yardımcı olursanız çok teşekkür ederim.




V vonderplanitz
10 ay (7700 mesaj)
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.

(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.

#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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @LOGNESS

L LOGNESS
10 ay (15 mesaj)

V vonderplanitz
10 ay (7700 mesaj)
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:
< Resime gitmek için tıklayın >



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @LOGNESS

L LOGNESS
10 ay (15 mesaj)
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




L LOGNESS
8 ay (15 mesaj)
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.


Bu mesaja 1 cevap geldi.

V vonderplanitz
8 ay (7700 mesaj)
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.

< Resime gitmek için tıklayın >



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


Bu mesajda bahsedilenler: @LOGNESS

G Gökşen PASLI
8 ay (4041 mesaj)
c# daböyle olabilir

https://dotnetfiddle.net/Widget/Cj4uNO





< Bu mesaj bu kişi tarafından değiştirildi Gökşen PASLI -- 31 Mayıs 2021; 21:53:46 >


L LOGNESS
3 ay (15 mesaj)
merhaba c# ta hesap makinesi yapmaya çalışıyorumda takıldığım bi yer var yardımcı olabilirmisniz?




L LOGNESS
3 ay (15 mesaj)
< Resime gitmek için tıklayın >

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




G Gökşen PASLI
3 ay (4041 mesaj)
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


Bu mesaja 1 cevap geldi.

L LOGNESS
3 ay (15 mesaj)
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.




Bu mesajda bahsedilenler: @Gökşen PASLI
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.