while и repeat используется для цикла с неизвестным числом повторений. While не будет работать если проверяемое условие ложно - false, с repeat наоборот если условие истинно -true.
Цикл WHILE нельзя использовать, если условие выхода не определено в момент входа в цикл. Программа просто не будет знать - а что, собсно, делать? Например, если условие выхода из цикла - равенство нулю какой-то переменной, то этой переменной ПЕРЕД вызовом цикла уже должно быть присвоено хоть какое-то значение.
У цикла REPEAT значение в момент входа в цикл может быть и неизвестно (непределено) . Например, символы считываются с клавиатуры до прихода символа "возврат каретки", и ясен пень, что проверить символ можно только после того, как оно прочитан (то есть уже в ходе выполнения цикла) . Но условием применения цикла REPEAT является как раз возможноть изменение проверяемого параметра в ходе цикла. Скажем, если символ с клавиатуры вообще не считывать (он, в общем-то, может иметь и какое-то начальное значение, так что формально проверка при первом вызове цикла проийдёт) , то фиг этот цикл сможет закончиться.. .
Впрчоем, необходимость изменения проверяемого параметра важна и для цикла WHILE.