CyberDaemon, lxa85, спасибо Вам за советы

Вот заново написала код.
Опять не слишком им довольна
Но думаю, уже лучше, чем было.
Не нравиться этот i:=2;
Без этого условия приходиться вводить на одно значение больше.
Как, по Вашему мнению, уже лучше?
Или тоже сплошной монстр
Код:

{Программа для определения максимального и минимального
значения из N введенных чисел}
program max_i_min_iz_N;
uses crt;
var N,min,max,a,i,m:integer;
BEGIN
clrscr;
repeat
i:=2;
write('Введите любую цифру: '); readln(N); writeln();
write('Введите ',N,' чисел(-а) через пробел: ');
read(a);
max:=a;
min:=a;
repeat
read(a);
if(a>max)then max:=a else max:=max;
if(a<min)then min:=a else min:=min;
i:=i+1;
until(i>N);
writeln();
writeln('max=',max);
writeln('min=',min);
writeln();
writeln('Для продолжения программы нажмите цифру 1');
writeln('Для завершения программы нажмите цифру 2'); writeln();
readln(m);
writeln();
until(m=2);
END.
Радует только то, что получилось убрать две лишние переменные b и c, и то, что убрала case.
И то, что программа работает во всех случаях... кроме одного...
Если здесь
Код:

write('Введите ',N,' чисел(-а) через пробел: '); read(a);
ввести значение 1, то программа все равно ждет ввода еще одного значения.
Наверное, потому, что у меня считывание переменной a все таки прописано в программе два раза?
При этом я пробовала оставлять только одно считывание переменной двумя вариантами.
Вариант 1
Код:

write('Введите любую цифру: '); readln(N); writeln();
write('Введите ',N,' чисел(-а) через пробел: ');
i:=1;
max:=a;
min:=a;
repeat
read(a);
if(a>max)then max:=a else max:=max;
if(a<min)then min:=a else min:=min;
i:=i+1;
until(i>N);
Вариант 1: Переменной i тогда присваиваю 1 и дополнительного значения вводить не надо, в этом плане цикл работает правильно. Но находит из введенных значений правильно только максимальное число. Минимальному присваивает 0. Интересно то, что, если программу не закрыть, а продолжить дальше, то тогда программа начинает находить минимальное и максимальное число правильно. Но не из только что введенных значений, а из всех значений, которые были введены. Наверное, не понятно объясняю. Лучше картинку покажу
Вариант 2
Код:

write('Введите любую цифру: '); readln(N); writeln();
write('Введите ',N,' чисел(-а) через пробел: ');
i:=1;
read(a);
max:=a;
min:=a;
repeat
if(a>max)then max:=a else max:=max;
if(a<min)then min:=a else min:=min;
i:=i+1;
until(i>N);
Вариант 2: здесь программа присваивает первое значение и max, и min, и следующие значения не сравнивает. При этом цикл на повторение программы не срабатывает. Программа просто закрывается и все. В приниципе, понятно, почему не сравнивает значения, ведь в следующем цикле учавствует только одно и то же значение переменной а, которое было введено первым. А вот почему тогда программа закрывается сама, не считывая переменную m?
В общем так вот...