Ekrana belli şekiller çıkartmak C dilinde oldukça ilgi çekici bir işlemdir. Bu program ile num (tek tam sayı olması gerekir) değişkenine göre elmas şeklinin köşegen karakter sayısını belirlemiş oluyoruz. Programı derleyip çalıştırdığımızda ise ortaya güzel bir elmas şekli çıkıyor.
Program kodlarına ayrıca github sayfasından da ulaşabilirsiniz.
Program Kodları ve Açıklamaları:
#include <stdio.h>
#include <stdlib.h> // abs() fonksiyonu için
int main() {
// Kaça kaçlık bir elmas yazdıracağını belirtmek
// için num değişkenini kullanıyoruz. Tek olmak zorunda.
// numF değişkeni num değişkenine göre sayoları -(num-1)/2 ile
// (num-1)/2 arasında belirlemek için kullanılacak.
int num = 31, numF = (1-num)/2;
// İç içe iki for döngüsü ile ekrana elmas bastırılır.
/*
Örneğin num değeri 5 ise numF değeri -2 olur. Bu değeride
biz i ve j'nin başlangıç değeri olarak kullanacağız.
+-------+-------+-------+------+------+------+
| | i(-2) | i(-1) | i(0) | i(1) | i(2) |
+-------+-------+-------+------+------+------+
| j(-2) | | | * | | |
+-------+-------+-------+------+------+------+
| j(-1) | | * | * | * | |
+-------+-------+-------+------+------+------+
| j(0) | * | * | * | * | * |
+-------+-------+-------+------+------+------+
| j(1) | | * | * | * | |
+-------+-------+-------+------+------+------+
| j(2) | | | * | | |
+-------+-------+-------+------+------+------+
Yukarıda gözüken boş hücrelere bir göz atalım;
i(-2)j(-2), i(-1)j(-2) ve i(-2)j(-1) sol üst köşedeki boş
hücrelerdir. Bu hücrelerin i ve j değerlerinin toplamının
mutlak değerini aldığımız zaman maximum 4 olacağını görürüz.
Aynı şekilde sağ alttaki hücrelerin i ve j lerinin toplamı
maximum 4 olduğunu görürüz. Bu durumda ilk koşulumuz |i+j| > 3
ise ekrana boşluk karakterini yazdırsın. Sağ üst ve sol alt
hücrelerin ise bu koşulun |i-j| > 3 olmasını bekleriz. Bu durumda
her iki koşuluda sağlayan durumlarda ekrada boşluk, diğer
durumlarda ise yıldız karakterini yazdırırsak ekrana elmas
şeklini basmış oluruz...
*/
for (int i = numF; i <= -1*numF; i++) {
for (int j = numF; j <= -1*numF; j++) {
// abs() ile (i+j) ve (i-j) nin mutlak değerini alıyoruz.
if (abs(i+j) > (num-1)/2 || abs(i-j) > (num-1)/2) {
// Ekrana boşluk yazdırılır.
printf(" ");
}else{
// Ekrana * yazdırılır.
printf("*");
}
}
// Bir alt satıra geçilir.
printf("\n");
}
return 0;
}
Hiç yorum yok:
Yorum Gönder