Exemplo de como simular uma barra de progresso em modo console

Fala galera da programação, tudo beleza?
No exemplo de hoje vamos implementar uma simulação de barra de progresso em aplicativos em modo console. É um exemplo simples que acredito que possa ser útil nas aplicações de vocês.
O programa consiste em uma barra preenchida com #, conforme este exemplo:
Progresso: [##### ] 50%
Bem, vamos aos códigos:
Exemplo em Pascal:
(*
Exemplo de barra de progresso em modo console em Pascal
Testado com Lazarus 2.2.6
Criado pelo Professor Giovani Da Cruz
*)
program BarraDeProgresso;
uses
SysUtils, CRT;
procedure SimularBarraDeProgresso(Mensagem: String; Total: Integer);
var
i: Integer;
begin
Writeln(Mensagem);
{ Desenha a barra vazia }
Write('[');
for i := 1 to total - 1 do
begin
Write(' ');
end;
Write(']');
GotoXY(WhereX - (total), WhereY); // Move o cursor de volta ao início da linha
for i := 1 to total do
begin
{ Preenche a barra }
Write('#');
{ Aqui pode ser utilizado um parâmetro para executar a sua rotina }
Delay(100); // Exemplo de rotina: Delay de 100 milissegundos para simular uma operação em andamento
// Calcula e exibe o percentual de preenchimento
GotoXY(WhereX + (total - i) + 1, WhereY);
Write(' ', Round((i / total) * 100), '%');
{ Posiciona o cursor na possição correta para continuar
preenchendo a barra. }
GotoXY(i + 1, WhereY);
end;
Writeln; // Nova linha após a barra de progresso concluída
end;
begin
ClrScr; // Limpa a tela do console
// Simulando uma operação que leva algum tempo
SimularBarraDeProgresso('Progresso:', 20);
Writeln('Operacao concluida.');
Readln;
end.
Beleza pessoal? Espero que tenham gostado.
Dúvidas ou sugestões de outras linguagens? Deixe o seu comentário!
Um abraço e até o próximo post. Valeu!