Текстовый ProgressBar - Pascal
Формулировка задачи:
Извиняюсь если тема уже создавалась. Мне тут хочется узнать как можно сделать текстовой ProgressBar в консольном приложение проще говоря на паскале и желательно без использования дополнительных модулей.
Вот в таком стиле:
Правдо с заданым количеством символов (имеется в виду # и -)
[*##### 50 % -----*]
Решение задачи: «Текстовый ProgressBar»
textual
Листинг программы
{$mode ObjFpc} uses Crt; function pBar(w, p: Integer): String; var t: String[7]; begin Str(p,t); t:=t+'%'; SetLength(Result,w); p:=Round(w*p/100); if p>w then p:=w; FillChar(Result[1],p,'#'); FillChar(Result[p+1],w-p,'_'); if Length(t)<=w then Move(t[1],Result[1+(1+w-Length(t)) div 2],Length(t)); end; var i: Integer; begin for i:=0 to 100 do begin Write(#13,'[',pBar(20,i),']'); Delay(50); end; end.
Объяснение кода листинга программы
- Объявляется функция
pBar
с параметрамиw
(ширина прогресс-бара) иp
(процент выполнения). - Объявляется переменная
t
типа String[7]. - Преобразуется значение переменной
p
в строку и добавляется символ процента в конец строки. - Задается длина результата как
w
. - Вычисляется значение
p
как округленное значение отношенияw*p/100
, при этом еслиp
большеw
, тоp
принимает значениеw
. - Заполняется прогресс-бар символами
#
в количествеp
и символами_
в оставшейся части. - Если длина строки
t
меньше или равнаw
, то строкаt
сдвигается по центру результата. - Осуществляется цикл от 0 до 100, в котором выводится прогресс-бар с использованием функции
pBar
. - Производится задержка в 50 миллисекунд для каждого шага цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д