c dilinde çok zor yumurta kırma sorusu ?

Leviathan123
18-08-2017, 10:18   |  #1  
Leviathan123 avatarı
OP Taze Üye
Teşekkür Sayısı: 0
5 mesaj
Kayıt Tarihi:Kayıt: Ağu 2017

Arkadaşlar hocamız  bir ödev verdi bize.ne yaptıysam çıkaramadım hala.başta basit gibi gözükmüştü gözüme ama yapmaya kalkınca işin içinden çıkamadım.yardımcı olabilirseniz sevinirim.

------

Bir yumurta folyosunda sıralanmış nadet yumurtaların 1.sinden başlayıpx.nci yumurta kırılıyor. Bir sonraki yumurtadan devam edilip yinex.nci yumurta kırılıyor ve bu işlem son 1 yumurta kalana kadar devam ediyor. Kullanıcıdannvexdeğerlerini alan ve son kalan yumurtanın kaçıncı yumurta olduğunu bulan programı yazınız.(Ör. 5 yumurta varsa ve x=3 ise sırasıyla 3., 1., 5. ve 2. yumurtalar kırılır, 4. sıradaki yumurta sona kalır.)

-----

Sistem Bilgilerim
White-Fox
18-08-2017, 11:15   |  #2  
White-Fox avatarı
Yıllanmış Üye
Teşekkür Sayısı: 155
1,103 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010

Soruyu anlatamamışsın , neyse recursive fonksiyonları kullan türkçesi sanıyorum özyineli.Ben dahil kimse oturup yumurta kıran bir program yazmaz o konuda kusura bakma:D

White-Fox bu faydalı yanıtı için aşağıdaki 1 kişiden teşekkür aldı... [ Göster ]
Leviathan123
18-08-2017, 11:23   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
5 mesaj
Kayıt Tarihi:Kayıt: Ağu 2017

teşekkür ederim.zaten ben de mantığını kavramaya çalışıyorum kafamda oturtamadım hala yoksa kendim yazarım :D .rekürsif fonksiyonlar ile çözüme nasıl ulaşabilirim ki.yani fonksiyon n ile x'i çağırdığında döndürmem gereken return işlemi ne olabilir bir fikrim yok

White-Fox
18-08-2017, 11:35   |  #4  
White-Fox avatarı
Yıllanmış Üye
Teşekkür Sayısı: 155
1,103 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010

5 tane yumurta var örneğin ve sen kullanıcıya soruyorsun hangi yumurtadan başlıyayım sonra ben 2 dedim mesela , 2. kırıldı , 3.kırıldı,4.kırıldı,5.kırıldı mı oluyor ? yani 1. kalıyor eğer 3 deseydim ; 3.kırıldı,4.kırıldı,5.kırıldı,başadönüp 1.kırıldı ve 2. mi kaldı ? Soruyu tam olarak yazarsan yada varsa hocanın verdiği bir pdf oradan kopyala.

"Bir yumurta folyosunda sıralanmış nadet yumurtaların 1.sinden başlayıpx.nci yumurta kırılıyor. Bir sonraki yumurtadan devam edilip yinex.nci yumurta kırılıyor " bu yazdığından anlaşılan kırılan bir yumurtayı yine kırıyor bu program :D 

Son Düzenleme: White-Fox ~ 18 Ağustos 2017 11:36 Neden: ekleme
White-Fox bu faydalı yanıtı için aşağıdaki 1 kişiden teşekkür aldı... [ Göster ]
Leviathan123
18-08-2017, 11:42   |  #5  
OP Taze Üye
Teşekkür Sayısı: 0
5 mesaj
Kayıt Tarihi:Kayıt: Ağu 2017

yok hayır her zaman ilk 1'den başlıyor.ama kırılan yumuryayı tekrar kırmıyor tabii ki.soruYU aynen bu şekilde verdi hoca.örnekten yola çıkarak anladım zaten bende soruyu :D. buraya kopyalarken bazı yerleri bitişik yazmış sanırım düzenlenmiş hali şu şekilde:

Bir yumurta folyosunda sıralanmış nadet yumurtaların 1.sinden başlayıp x.nci yumurta kırılıyor. Bir sonraki yumurtadan devam edilip yinex.nci yumurta kırılıyor ve bu işlem son 1 yumurta kalana kadar devam ediyor. Kullanıcıdannvexdeğerlerini alan ve son kalan yumurtanın kaçıncı yumurta olduğunu bulan programı yazınız.(Ör. 5 yumurta varsa ve x=3 ise sırasıyla 3., 1., 5. ve 2. yumurtalar kırılır, 4. sıradaki yumurta sona kalır.)

Leviathan123
18-08-2017, 11:45   |  #6  
OP Taze Üye
Teşekkür Sayısı: 0
5 mesaj
Kayıt Tarihi:Kayıt: Ağu 2017

yani 1'den başlıyor derken döngüden bahsediyorum.normalde evet verdiği x değerinden başlıyor kırmaya ama tek sorun yani benim özellikle takıldığım yer n değerini geçtiğinde programın devam etmesi lazım ama başaramadım.örneğin n=4 x=2 olsun benim yaptığım program 2 ve 4'ü kırıyor sadece.ama devam edip 3'ü de kırması lazım.yani sırasıyla 2,4,3 kırılmalı.1 paçayı kurtarmalı

White-Fox
18-08-2017, 13:17   |  #7  
White-Fox avatarı
Yıllanmış Üye
Teşekkür Sayısı: 155
1,103 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010

Yani ne desem bilemiyorum :D  benim demek istediğim faktöriyeli hesaplar gibi senin yumurtaları kırabileceğin.

int fonksiyon(int parametre)

{

 //buraya içe bir if else yapısı kuracaksın

//işe devam edeceksen

fonksiyon(parametre-1);

//devam etmeyeceksen ona göre bir değer döndür.

}

//yani böyle bir fonksiyonu hayal gücüne göre değiştirirsin örneğin 10 tane yumurta var 1 den 10 a kadar kırıyoruz if parametre=3 ise hiçbirşey yaptırmadan 4 den devam ettir 3.yumurta hariç hepsi kırılır.Ekstra da bir yapı koyarsın limit parametreye geldiğinde ilk yumurtaya geri dönsün ve kullanıcının kırılmasın dediği yumurtaya kadar devam etsin böylece seçilen yumurta harici her yumurta sadece bir kez kırılmış olur.Tasarım değişir kırmaya nereden başlayacağına göre.Bu bir For döngüsüylede yapılır 0 dan 10 a kadar sayarken kır for içine bir if koy ve seçili yumurtanın kırılmaması için normal kodları atla ve parametreyi bir arttır böylecede kırmış olursun seçili haricini.

White-Fox bu faydalı yanıtı için aşağıdaki 1 kişiden teşekkür aldı... [ Göster ]
Leviathan123
18-08-2017, 13:35   |  #8  
OP Taze Üye
Teşekkür Sayısı: 0
5 mesaj
Kayıt Tarihi:Kayıt: Ağu 2017

reküsif fonksiyonlar iyi bildiğim yapı ama bu soruyu reküsif ile çözebilmek bence çok zor.burada önemli olan dediğim gibi n=4 x=2 olsun. 2. ve 4. yumurtanın kırılacağını kolayca bulduruyorum.ama sonrasında döngünün devam edip 1'i kırdırması lazım.buraya şu ana kadar olan hatalı programımı da yazayım o zaman daha iyi anlaşılabilir.

#include
#include

int main ()

{
        int n,mod=1,x,k,j=0,i=1;
                printf("Sirasiyla n ve x degerini giriniz\n");
                scanf("%d%d",&n,&x);
                k=n;
while(n!=0)
        {

for(i=mod;i<=n;i++)
{
     j++;
                if(j%x==0)
                printf("%d. yumurta kirildi\n",i);

        }
        mod=j%n;
        n--;

        }

        printf("saglam kalan yumurta %d",i);

getch ();
return 0;
}

Son Düzenleme: Leviathan123 ~ 18 Ağustos 2017 13:50