C DE EKRANA YILDIZLARLA İŞARET ÇIKARMa

glck
01-12-2010, 16:43   |  #1  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

MRB C DE FONKSİYON İLE AŞAĞIDAKİ ŞEKLİ NASIL YAPABİLİRİM.
       *    
     ***
   *****
    ***
      *
TEŞEKKÜRLER...

muh34
01-12-2010, 19:31   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Matamatikte kullanılan kare matrisler veya bir diger adıyla determinantlar bu tip problemlerde onemli bir rol teskil etmektedir.Problemin cozumunde ise,genelde temel programlama elemanlarından biri olan döngüler(loops) kullanılmaktadır.O halde yapılacak iş bir döngü tasarlamaktır.Soruda belirtildiği uzere,ekranda gosterilecek yıldız adedi belli oldugu icin,kullanılacak olan ideal döngü for döngüsü olabilir.Döngülerin bu tip problemlere nasıl cozum urettigini asagıdaki tabloya bakarak daha rahat inceleyebiliriz.

     0         1      2      3       4        5
0  (0.0)  (0.1)  (0.2) (0.3)  (0.4)  (0.5) 
1   .. .. ....
2   .... 
....
3
4
...
5
Gosterilmeye calısılan bu tablo icerisinde,iç içe var olan iki dongunun iterasyonları kısmen belirtilmiştir.Bu tablo daha önceden de bahsedildigi gibi bir kare matris sablonudur ve dongulerin adımları bu sablon icerisinde belirtilmiştir.
Probleme dönecek olursak,yukarıdaki sekil icerisinde dikkat edilirse,her iterasyon noktasında bir bagıntı yakalanmaktadır.Bu bagıntı 2*n+1(burada kastedilen n kare matris icerisindeki satır noktasıdır).Ornegin n=0 iken 1 adet X,n=1 iken 3 adet X basılacaktır gibi degerlendirilebilir.Bunun dısında kalan noktalarda ise bosluk basmak yeterli olacaktır.Ancak sekilden de dikkat edilirse,3.iterasyondan sonra yıldızların duzeni tersine donerek bir elmas goruntusunu andırmaktadır.Dolayısıyla algoritma bu asamada ters mantıkla işleyerek istenen goruntuyu ortaya koymus olacaktır.O halde yukarıdaki algoritmanın C dilindeki nihayi karsılıgı asagıdaki gibi olabilir.

#include

int main() {

    int i,j;
    for(i=0;i<3;i++) {
    for(int k=0;k<2-i;k++)
    printf(" ");
    for(j=0;j<2*i+1;j++) {
    printf("X");
}
    printf("\n");
}
for(i=1;i>=0;i--) { // algoritmanın tersten işleme mantıgı burada baslamaktadır
for(int k=1-i;k>=0;k--)
printf(" ");
for(j=2*i;j>=0;j--)
printf("X");
printf("\n");
}
return 0;
}

Başarılar

Son Düzenleme: muh34 ~ 01 Aralık 2010 19:35
glck
02-12-2010, 21:38   |  #3  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

teşekkürler çok güzel anlatmışsınız açıklayıcı olmuş.fakat hata veriyor dev c++ derledim hata verdi ben neyden kaynaklandığını bilemedim.

muh34
03-12-2010, 08:53   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Chip forum sayfasından kaynaklanan bir sorun geregi, < > operatorleri algılanmıyor sanırım.include satırında stdio.h header dosyayı programa dahil ediniz.
Başarılar

glck
04-12-2010, 18:55   |  #5  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

                                   *
                             *******
                           **          **
                         **              **
                         *                   *
                         *                   *
                       **                    **
                         *                    *
                         *                    *
                        **                  **
                          **              **
                             *******
                                   *
   BU ŞEKLİ NASIL ÇİZEBİLİRİM.TEŞEKKÜRLER.

Son Düzenleme: glck ~ 04 Aralık 2010 19:05
muh34
05-12-2010, 00:35   |  #6  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Bu soru icin,12X12 seklinde bir kare matris dusunulebilir.Oyleki 12 sayısı bu matrisin bir boyutu olsa,yukarıdaki sekil icin bir grup nested loop kuruldugunda,her iterasyon,boyut yarısı kadar seklin sol boslugu basar denilebilir.Sol taraftaki bosluktan sonra,belli kontrol komutları ile hangi noktalarda kac adet yıldız basılacagını belirleyebiliriz.Seklin ortasındaki bosluklar ise her iterasyonda n+2 artarak boslugu basmaktadır.Bu durum yine bazı durumlar icin gecerlidir.Yukarıda anlatılanlar seklin ust tarafı icindir.Seklin alt tarafında algoritma ters mantıkla işleyerek gorevini tamamlamış olacaktır.
Kurgulanan bu algoritma acele ile yazdıgım icin zayıf bir algoritmadır,ancak gerekli iyileştirmeleri kendiniz de yapabilirsiniz.

Kesim noktaları elipsi andıran yukarıdaki seklin ust tarafı asagıdaki gibi olabilir,seklin alt tarafınıda bu noktada kendiniz kodlayabilirsiniz.

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

main() {

       int i,j;

       int boyut=12;

       int adet=0;

       int ortaBosluk=3;

       for(i=0;i<7;i++) {
       boyut/=2;
       if(i==0 || i==4 || i==5)
       adet=1;
       else if(i==1 || i==10)
       adet=7;
       else
       adet=2;

       for(j=0;j<boyut;j++) // distaki bosluk icin
       printf(" ");
       for(int k=0;k<adet;k++)
       printf("*");
       if(i!=1 && i!=0) {
       for(int l=0;l<ortaBosluk;l++)
       printf(" ");
       for(int k=0;k<adet;k++)
       printf("*");
       }
       printf("\n");
       if(i<3)
       ortaBosluk+=2;
       else if(i==5)
       ortaBosluk=9;
       else
       ortaBosluk=11;
       }

       getch();
       return 0;
       }

Başarılar

glck
05-12-2010, 18:42   |  #7  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

çok iyi anlatmışsınız.sizin dediğiniz gibi bu şekilde algoritmamız çok zayıf olur.Programda çok uzun ve karmaşık olur acaba bunu hazır kütüphane fonk kullanarak yapabilirmiyim.bazı fonk kullanarak yapmaya çalıştım fakat ne cevabı alamadım.teşekkürler.

muh34
06-12-2010, 00:50   |  #8  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yapılabilir,lakin yukarıdaki sekil tam bir elipsoid veya cember olmadıgı icin,algoritmik olarak kurgulamakta 'şıp' diye kolay olmasa gerek.Cunku bazı noktalarda yıldız adetleri farklı oldugu icin kesim noktaları formuluze edilemedigi icin,ilgili bagıntı kolay yakalanamamaktadır(pek tabi ki program,iyi bir kurgu ile optimize bir sekilde kodlanabilir).java ve C# gibi dillerde mevcut hazır metotlar bulunmaktadır.C programlama dili grafik komutları icerisinde bu gibi sekiller icin hazır fonksiyonlar olması gerek(circle gibi),ancak tam hatırlamıyorum,incelerseniz bulabilirsiniz.
Başarılar

censez41
06-12-2010, 00:55   |  #9  
censez41 avatarı
Yıllanmış Üye
Teşekkür Sayısı: 3
1,705 mesaj
Kayıt Tarihi:Kayıt: Nis 2009

ben daire algoritmasını biliyorum o algoritmayla havada dönen uçak oyunu yapmıştım  oyunda amaç uçağı düşürmek ve puan toplamaktı 3 boyutlu bir oyundu ancak kodları yanlışlıkla sildim :))

Son Düzenleme: censez41 ~ 06 Aralık 2010 00:56
danger_56
12-07-2011, 10:09   |  #10  
Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: Ara 2010

*
              * * *
           * * * * *
        * * * * * * *
     * * * * * * * * *
  * * * * * * * * * * *  

bu şekli c# nasıl çıkarabilirim şimdiden yardımınız için tşk ediyroum

KarsLee
28-11-2011, 12:44   |  #11  
Yeni Üye
Teşekkür Sayısı: 0
26 mesaj
Kayıt Tarihi:Kayıt: Eyl 2011

C programlama dilinde yıldızlarla kelebek şeklide bana lazım yanlız bi problem daha var bu kod da tek printf kullanılması lazım... Yardımlarınızı bekliyorum, şimdiden teşekkürler....

Çıktının aşagıdaki gibi görünmesi gerek...

*                 *
**             **
***        ***
****    ****
**********
****    ****
***         ***
**             **
*                 *

Son Düzenleme: KarsLee ~ 28 Kasım 2011 12:48
ccengiz
14-10-2012, 14:44   |  #12  
ccengiz avatarı
Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: Eki 2012
Alıntı: KarsLee  
C programlama dilinde yıldızlarla kelebek şeklide bana lazım yanlız bi problem daha var bu kod da tek printf kullanılması lazım... Yardımlarınızı bekliyorum, şimdiden teşekkürler....

Çıktının aşagıdaki gibi görünmesi gerek...

*                 *
**             **
***        ***
****    ****
**********
****    ****
***         ***
**             **
*                 *

 banada lazım bu yapan varmı :)

merveyldz
06-11-2014, 01:05   |  #13  
Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: Kas 2014

arkadaşlar ödevimde benden şu isteniyor.uğraştım ama bir türlü işin içinden çıkamadım.dizi içinde  iki karakter girmem isteniyor ve bu girdiğim karakterler mesela örnekte '*' ve '-'  olsun.ben bunları yazdığımda ekrandan böyle bir çıktı almalıyım.bunun için naıl bir döngü kurabilirim sizce?izleyeceğim yolu gösterirseniz çok sevinirim.şimdiden teşekkürler.
*********-********
********---*******
******------******
****----------****
**--------------**
------------------
**--------------**
****----------****
******------******
********---*******
*********-********