DEV Community 👩‍💻👨‍💻

Enisksz
Enisksz

Posted on

C'de Yıldızlar İle Şekil Çizme

Yıldız ile üçgen çizimi

int main()
{
    int i,j;

    for(i=0;i<6;i++)
    {
        for(j=0;j<i;j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

İlk önce integer i ve j değeri tanımladık ki bunları döngüde kullanalım. i ifademiz 0'dan başlayıp 6'ya kadar gidecek fakat 6 dahil olmayacak. i'nin aldığı her değerde içindeki for döngüsüde i nin değeri kadar dönecek. Bunu nerden anlıyoruz diyorsanız eğer, j<i dediğimiz için i hangi değerdeyse j de i kadar yıldız basar. Mesela i=2 olduğunda en dıştaki for 0,1,2 değerlerine kadar gelmiş olduğu için 3 kez çalışır ve ilk i değeri 0 olduğundan ekrana yıldız basılmaz ikinci i değeri 1 olduğu için ekrana 1 yıldız bastırılır ve son olarak i değeri 2 olduğu için ekrana 2 tane yıldız bastırılır.

*
**
***
****
*****
Enter fullscreen mode Exit fullscreen mode

Burada oluşan üçgenin tersini oluşturmayı istersek eğer işler biraz değişiyor.

int main()
{
    int i,j;

    for(i=6;i>=0;i--)
    {
        for(j=1;j<=i;j++)
        {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}
Enter fullscreen mode Exit fullscreen mode

Tekrardan i ve j değişkenlerini tanımlıyoruz. İlk for döngümüzdeki mantık şudur; i'yi 6 ya eşitledik ki bu istediğiniz bir sayı olabilir. Ona göre de üçgeniniz büyüyecektir. Sonra i>=0 yaptık ki bu i sıfır ve sıfırdan büyük oldukça döngü devam etsin diyor bize. Eğer ki i değeri sıfırdan küçük olursa döngü duracaktır. i-- ise i değerinin bir bir azalmasını ifade ediyor.

Temel mantığımız, dışta olan döngümüz 6 kez kendini tekrar edecek ve içerideki döngümüz ise kendini i'nin değeri kadar tekrar edecek. Örneğin, i=6 olduğunda içerisinde olan for döngüsü 6 kez ekrana * bastıracak. Oluşan şeklimiz ise aşağıda görüldüğü gibidir.

******
*****
****
***
**
*
Enter fullscreen mode Exit fullscreen mode

Şimdi ise sol taraftan boşluklar vererek bir üçgen oluşturalım. Bu kısımda farklı olarak kullanıcıdan bir sayı girmesini isteyeceğiz ve döngümüzde bunu kullanacağız.

int main()
{
    int i,j,n;

    printf("n: ");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n-i;j++)// n-i, 5-1'den 4 tane boşluk koy demek
        {
            printf(" ");
        }
        for(j=1;j<=i;j++)//Burada boşluktan sonra bir tane yıldız koyar
        {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}
Enter fullscreen mode Exit fullscreen mode

İlk olarak printf("n: "); yazarak kullanıcıdan bir n değeri girmesini istiyoruz. Sonrasında scanf("%d",&n); yazarak aldığımız n değerini hafızaya kaydediyoruz. Bu kısmı anladıktan sonra dış kısımda olan for döngümüzü inceleyelim. i=1 ile başlangıç değerimizi belirliyoruz. Sonrasında i<=n ile bitiş değerimizi belirliyoruz ve son olarak i++ ile ise i değerini bir bir arttırıyoruz.

iç kısımda olan ilk for döngüsünde başlangıç değerimiz 1'dir. j<=n-i dediğimiz kısım bizim bitiş değerimiz ama aslında bize diyor ki n-i yani kullanıcı n yerine 5 değerini girerse ve bizimde başlangıç değerimiz 1 olduğu için 5-1'den 4 tane boşluk koy diyor aslında.

İkinci for döngümüz ise bir önceki for döngüsünün koyduğu boşlukların yanına yıldız bastırır. Mesela 4 tane boşluk koyduk ilk döngüde, ikinci döngüde ise yanına 1 tane yıldız koyacak. Sonra ilk döngü 3 boşluk koyacak, ikinci döngü ise 2 tane yıldız koyacak. Bu böyle 0 olana kadar devam edecek. Sonuç olarak çıktımız şu şekilde olacak;

    *
   **
  ***
 ****
*****
Enter fullscreen mode Exit fullscreen mode

Son olarak tam bir üçgen çizmeyi öğrenip bu postu burada bitireceğiz. Bir önceki yaptığımız for döngüsünden çok bir farkı yok aslında.

int main()
{
     int i,j,n;
     printf("n: ");
     scanf("%d",&n);

        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n-i;j++)
            {
                printf(" ");
            }
            for(j=1;j<=2*i-1;j++)
            {
                printf("*");
            }
            printf("\n");
        }

    return 0;
}
Enter fullscreen mode Exit fullscreen mode

Burada diğer kısımlardan farklı olarak for döngüsü içindeki ikinci for döngüsünü görüyoruz. Üstünde durup 5 dakika anlamaya çalıştığınızda mantığı çok basittir aslında. Bize demek istiyor ki, i=1olduğunda j<=2*i-1 in değeri 2*1-1'den 1 oluyor ve j<=1 oluyor aslında bu da bize bir kere ekrana yıldız bastır demektir.
Çıktısı ise şu şekildedir;

    *
   ***
  *****
 *******
*********
Enter fullscreen mode Exit fullscreen mode

Top comments (0)

DEV

Thank you.

 
Thanks for visiting DEV, we’ve worked really hard to cultivate this great community and would love to have you join us. If you’d like to create an account, you can sign up here.