Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
18
Cevap
4642
Tıklama
0
Öne Çıkarma
C Programlama Recursive Fonksiyon EBOB Sorusu
O
11 yıl
Teğmen
Konu Sahibi

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
11 yıl
Binbaşı

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
11 yıl
Binbaşı

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
4 yıl
Onbaşı

‘K’ (büyük k) harfini rekürsif kodu yazmam gerekiyor yapamadım yardımcı olur musunuz?


Bu mesaja 1 cevap geldi.
T
4 yıl
Yarbay

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


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @LOGNESS
L
4 yıl
Onbaşı

Evet hocam



L
4 yıl
Onbaşı

L
4 yıl
Onbaşı

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



T
4 yıl
Yarbay

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
4 yıl
Onbaşı

T
4 yıl
Yarbay

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
4 yıl
Onbaşı

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
4 yıl
Onbaşı

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.
T
4 yıl
Yarbay

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
4 yıl
Yarbay

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
4 yıl
Onbaşı

merhaba c# ta hesap makinesi yapmaya çalışıyorumda takıldığım bi yer var yardımcı olabilirmisniz?



L
4 yıl
Onbaşı

< 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
4 yıl
Yarbay

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
4 yıl
Onbaşı

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.