-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
133 lines (118 loc) · 3.98 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/**
* Yıldız işlemleri çok fazla kullanılacağından fonksiyonel hale getirelim
* 2 için * *, 3 için * * * metni döndürür
*/
char* create_indents(int level) {
char* text = malloc(0);
for (int i = 0; i < level; i++) {
strcat(text, " ");
}
return text;
}
/**
* Girinti işlemleri çok fazla kullanılacağından fonksiyonel hale getirelim
* 2 için " ", 3 için " " metni döndürür
*/
char* create_stars(int level) {
char* text = malloc(0);
for (int i = 0; i < level; i++) {
if (i == 0) {
strcat(text, "*");
}
else {
strcat(text, " *");
}
}
return text;
}
/**
* Üst üçgen için son kısma ekleme yapılacak
*/
char* append_up_triangle(char* up_triangle, int level, int n){
strcat(up_triangle, "\n");
strcat(up_triangle, create_indents(n - (level + 1)));
strcat(up_triangle, "/ /");
strcat(up_triangle, create_stars(level + 1));
strcat(up_triangle, "\\ \\");
return up_triangle;
}
/**
* Alt üçgen için baş kısma ekleme yapılacak
*/
char* append_down_triangle(char* down_triangle, int level, int n){
char* text = malloc(0);
strcat(text, create_indents(n - (level + 1)));
strcat(text, "\\ \\");
strcat(text, create_stars(level + 1));
strcat(text, "/ /\n");
strcat(text, down_triangle);
return text;
}
int main() {
// Üçgen çiziminde benzer alanları belirlememiz gerekmektedir (n = 2)
// _ _
// / | \
// / /*\ \
// / /* *\ \
// \ \* */ /
// \ \*/ /
// \ | /
// - -
int n;
printf("Boyutu girin: ");
scanf("%d", &n);
// Yukarıdaki şekilde 2 tane üçgen vardır ve teki ters çevrilmiştir
// Bu üçgenleri up_triagle ve down_triangle olarak adlandıralım
// Üst Alt
// _ _ \ \* */ /
// / | \ \ \*/ /
// / /*\ \ \ | /
// / /* *\ \ - -
char up_triangle[] = "";
char down_triangle[] = "";
// Girinti değerlerini n değerine göre hesaplamalıyız, n = 2 için girintileri ve yıldızları inceleyelim
// Üst Alt
// _ _ 3 girinti \ \* */ / 0 girinti
// / | \ 2 girinti \ \*/ / 1 girinti
// / /*\ \ 1 girinti \ | / 2 girinti
// / /* *\ \ 0 girinti - - 3 girinti
// Dikkatli bakıldığın üst ve alt üçgenlerde sabit bir alan var
// Bu alanları üçgen çizimine başlamadan, önce up ve down triangle içine eklemeliyiz
// _ _ \ | /
// / | \ - -
strcat(up_triangle, create_indents(n + 1));
strcat(up_triangle, "_ _\n");
strcat(up_triangle, create_indents(n));
strcat(up_triangle, "/ | \\");
strcat(down_triangle, create_indents(n));
strcat(down_triangle, "\\ | /\n");
strcat(down_triangle, create_indents(n + 1));
strcat(down_triangle, "- -");
// Sabit kısımları yaptığımıza göre artık değişken kısımlara odaklanmalıyız
// Üst level + 1 n - (level + 1) Alt
// / /*\ \ 1 yıldız 1 girinti \ \* */ / 2 yıldız 0 girinti, level = 0
// / /* *\ \ 2 yıldız 0 girinti \ \*/ / 1 yıldız 1 girinti, level = 1
// Girintiler aynı olduğundan, yeni çizimi üst üçgen için alt satıra, alt üçgen için üst satıra eklemeliyiz
// / /* *\ \ 2 yıldız 0 girinti her iki üçgen için de aynıdır (append_up_triangle, append_down_triangle fonskiyonlarına bakın)
// Artık tüm n değerleri için programı oluşturabiliriz
// _ _
// / | \
// / /*\ \
// / /* *\ \
// \ \* */ /
// \ \*/ /
// \ | /
// - -
for (int i = 0; i < n; i++)
{
strcat(up_triangle, append_up_triangle(up_triangle, i, n));
strcat(down_triangle, append_down_triangle(down_triangle, i, n));
}
strcat(up_triangle, "\n");
strcat(up_triangle, down_triangle);
printf("%s", up_triangle);
return 0;
}