program String_Pattern;
uses wincrt;

var i,j:integer;
    s:string;


function min(x,y:integer):integer;
{declare a function named min which returns the smaller one of x and y}
begin
if x<y then min:=x
else min:=y;
end;

function max(x,y:integer):integer;
{declare a function named max which returns the larger one of x and y}
begin
if x>y then max:=x
else max:=y;
end;



begin
{Pattern 1}
for i:=1 to 5 do
begin
for j:=1 to 5 do write('*');
writeln;
end;

readln;

{Pattern 2}

for i:=1 to 5 do
begin
{for j:=1 to 5 do if i<=j then write('*');}
for j:=1 to i do write('*');  
writeln;
end;

readln;
clrscr;

{Pattern 3}
{Code 1}
for i:=1 to 5 do
begin
for j:=1 to 5-i do write(' ');
for j:=1 to 2*i-1 do write('*');
writeln;
end;
readln;

{Code 2}
s:='';
for i:=1 to 5 do s:=s+'*';
for i:=1 to 5 do
begin
write(copy(s,1,i):5);
for j:=1 to i-1 do write('*');
writeln;
end;
readln;
clrscr;

{Pattern 4}

for i:=1 to 9 do
begin
for j:=1 to 9 do write(5-min(abs(5-i),abs(5-j)));
{equivalent to}
{
for j:=1 to 9 do
if abs(5-i)<abs(5-j)
then write(5-abs(5-i))
else write(5-abs(5-j));
}
writeln;
end;

readln;

{Pattern 5}
for i:=1 to 9 do
begin
for j:=1 to 9 do
write(5-max(abs(5-i),abs(5-j)));
writeln;
end;


end.
    
