-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDiamond.pas
More file actions
142 lines (124 loc) · 2.74 KB
/
Copy pathDiamond.pas
File metadata and controls
142 lines (124 loc) · 2.74 KB
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
134
135
136
137
138
139
140
141
142
program DrawDiamond;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure PrintChars(Count: Integer; Ch: Char);
begin
for var i := 1 to Count do
Write(Ch);
end;
procedure draw_diamond_star(n: Integer);
begin
var space := n - 1;
// Upper Half
for var i := 1 to n do
begin
PrintChars(space, ' ');
PrintChars(2 * (n - space) - 1, '*');
WriteLn;
Dec(space);
end;
// Lower Half
for var i := 1 to n - 1 do
begin
Inc(space);
if space = 0 then Continue;
PrintChars(space, ' ');
PrintChars(2 * (n - space) - 1, '*');
WriteLn;
end;
end;
procedure draw_diamond_numbers(n: Integer);
begin
var count := 0;
// Upper Half
for var i := 1 to n do
begin
Inc(count);
PrintChars(n - count, ' ');
for var k := 1 to count do Write(k);
for var k := count - 1 downto 1 do Write(k);
WriteLn;
end;
// Lower Half
for var i := n - 1 downto 1 do
begin
Dec(count);
PrintChars(n - count, ' ');
for var k := 1 to count do Write(k);
for var k := count - 1 downto 1 do Write(k);
WriteLn;
end;
end;
procedure draw_diamond_alpha(n: Integer);
begin
var count := 0;
// Upper Half
for var i := 1 to n do
begin
Inc(count);
PrintChars(n - count, ' ');
for var k := 1 to count do Write(Chr(k + 64));
for var k := count - 1 downto 1 do Write(Chr(k + 64));
WriteLn;
end;
// Lower Half
for var i := n - 1 downto 1 do
begin
Dec(count);
PrintChars(n - count, ' ');
for var k := 1 to count do Write(Chr(k + 64));
for var k := count - 1 downto 1 do Write(Chr(k + 64));
WriteLn;
end;
end;
procedure draw_diamond_unfilled_star(n: Integer);
begin
var space := n - 1;
// Upper Half
for var i := 1 to n do
begin
PrintChars(space, ' ');
for var k := 1 to 2 * i - 1 do
if (k = 1) or (k = 2 * i - 1) then Write('*') else Write(' ');
WriteLn;
Dec(space);
end;
// Lower Half
for var i := n - 1 downto 1 do
begin
Inc(space);
PrintChars(space, ' ');
for var k := 1 to 2 * i - 1 do
if (k = 1) or (k = 2 * i - 1) then Write('*') else Write(' ');
WriteLn;
end;
end;
procedure Main;
var
input: Integer;
begin
repeat
Write('Please enter the size of the diamond shape (Enter -1 to stop): ');
ReadLn(input);
if input = -1 then Break;
WriteLn(#13#10'Filled Diamond with *:');
draw_diamond_star(input);
WriteLn(#13#10'Diamond with Numbers:');
draw_diamond_numbers(input);
WriteLn(#13#10'Diamond with Letters:');
draw_diamond_alpha(input);
WriteLn(#13#10'Unfilled Diamond with *:');
draw_diamond_unfilled_star(input);
WriteLn;
until False;
end;
begin
try
Main;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.