C'de Yıldızlar İle Şekil Çizme
Tags: c, beginners, programming
Published: 2021-12-23 08:56:35

## Yıldız ile üçgen çizimi

```C
int main()
{
    int i,j;

    for(i=0;i<6;i++)
    {
        for(j=0;j<i;j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
```
İ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.

```
*
**
***
****
*****
```

Burada oluşan üçgenin tersini oluşturmayı istersek eğer işler biraz değişiyor.
```C
int main()
{
    int i,j;

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

    return 0;
}
```
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.

```
******
*****
****
***
**
*
```
Ş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.

```C
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;
}
```
İ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;

```
    *
   **
  ***
 ****
*****
```

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.

```C
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;
}
```

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=1`olduğ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;
```
    *
   ***
  *****
 *******
*********
```