Pernahkah anda membuat program yang jika dimasukan nilai 5 hasilnya seperti ini ?

Kasus diatas bukan punya saya, tapi punya salah seorang yang pernah mampir ke blog ini.
Pesan yang beliau tulis yaitu :
bagai mana caranya membuat program yang apabila dimasukkan angka 5 maka akan menghasilkan keluaran sebagai berikut :

Nah, dari kasus diatas saya coba untuk membuat programnya dan
berikut adalah source code hasil coba-coba saya :
Program simulasi;
uses wincrt;
var
n: integer;
i,j,k,m : integer; {variable untuk iterasi}
OutLine:string; {variable penampung baris}
PanjangLine:integer;
Starthuruf,endhuruf:integer;
IntStartChar:integer; {karakter mulai}
FrontLetter,EndLetter:char; {karakter didepan / dibelakang}
begin
{
Baris yang tercipta adalah (n * 2)-1
a
aba
abcba
aba
a
* langkah pertama, membuat baris berikut :
a
aba
abcba
* langkah kedua, membuat baris berikut :
aba
a
setiap pembuatan baris dibagi menjadi 3 step :
1. membuat bagian kosong didepan.
2. membuat bagian yang berisi huruf.
3. membuat bagian kosong dibelakang.
kemudian hasil dari ketiga step itu digabungkan.
}
{inisialisasi variable}
FrontLetter:=' ';
EndLetter:=' ';
intStartChar:=96; {96=a}
{* langkah pertama}
write('Masukan jumlah n ');
readln(n);
panjangline:=(n*2)-1;
for i:= 1 to (panjangline div 2)+1 do
begin
starthuruf:=((panjangline div 2) + 1) - (i-1);
endhuruf:=starthuruf + ((2*i)-2);
{1. membuat baris kosong didepan}
for j:=1 to starthuruf-1 do
begin
outline:=concat(outline,FrontLetter);
end;
{2. membuat bagian yang berisi huruf}
m:=1;
for j:=starthuruf to endhuruf do
begin
if j < (panjangline div 2) + 1 then
begin
outline:=concat(outline,chr(m+intStartChar));
m:=m+1;
end
else
begin
outline:=concat(outline,chr(m+intStartChar));
m:=m-1;
end;
end;
{3. membuat bagian kosong dibelakang}
for j:=endhuruf+1 to panjangline do
begin
outline:=concat(outline,EndLetter);
end;
writeln(outline);
outline:=''; {reset aoutline}
end;
{* langkah kedua}
for i:= (panjangline div 2) downto 1 do
begin
starthuruf:=((panjangline div 2) + 1) - (i-1);
endhuruf:=starthuruf + ((2*i)-2);
{membuat bagian kosong didepan}
for j:=1 to starthuruf-1 do
begin
outline:=concat(outline,EndLetter);
end;
{membuat bagian yang berisi huruf}
m:=1;
for j:=starthuruf to endhuruf do
begin
if j < (panjangline div 2) + 1 then
begin
outline:=concat(outline,chr(m+intStartChar));
m:=m+1;
end
else
begin
outline:=concat(outline,chr(m+intStartChar));
m:=m-1;
end;
end;
{membuat bagian kosong dibelakang}
for j:=endhuruf+1 to panjangline do
begin
outline:=concat(outline,FrontLetter);
end;
writeln(outline);
outline:='';
end;
readln;
end.
Filed under: Pascal