Если отбросить все лишние слова ("навороты") про Россию и АСУ Экспресс получается вполне тривиальная задачка... .
-----
//Раздел констант
const
//Число вагонов
intTrainLength = 12;
//Число человек в вагоне 4 человека * 9 купе
intCoachSpace = 4*9;
//Раздел переменных
var
arrTrain:array[1..intTrainLength] of byte;
intItem:byte;
i,intTotal:word;
begin
//С первого вагона по последний
for i:=1 to intTrainLength do
begin
//Повторять блок
repeat
//Вводим число пассажиров
Write('Введите число пассажиров в ', i,' вагоне: '); ReadLn(intItem);
//Повторяем ввод, если число пассажиров превысило максимум в вагоне
until intItem<=intCoachSpace;
//Запоминаем введённое число в массив
arrTrain[ i ]:=intItem;
//Считаем общее число пассажиров
intTotal:=intTotal+intItem;
//Конец цикла ввода
end;
//Выводим кол-во человек в поезде
WriteLn('Всего человек в поезде: ', intTotal);
//Получаем среднее число пассажиров в вагоне, используя целочисленное деление,
//чтобы не получилось "полтора землекопа"
intTotal:=intTotal div intTrainLength;
//Выводим его на экран
WriteLn('Среднее количество человек в вагоне: ', intTotal);
//Выводим вагоны с кол-вом человек меньше среднего
WriteLn('Вагоны с количеством человек меньше среднего: ');
//От первого вагона до последнего
for i:=1 to intTrainLength do
//Если меньше - выводим
if arrTrain[ i ] < intTotal then WriteLn(i);
//Ждём... .
readln;
end.
Если нужно при вводе контролировать какой пассажир занял какое купе и т. д. - сделать тоже можно, но стоит ли?
Если что - пишите на почту