Смог написать только это.Не могу понять,как выделить этот самый элемент правильно,как сделать так,чтобы он выдавал именно числа от 1 до 36(у меня в этом диапазоне,но повторяет их) и с остальным никак не идет.
Так.
Прежде всего - Вы абсолютно неправильно заполняете матрицу. Есть стандартный купейный вагон, в нем девять купе, каждое купе на четыре места, причем места имеют сквозную по всему вагону последовательную нумерацию - так при чем тут, скажите на милость, случайная выборка?!! Матрицу следует заполнять так:
Код:
For i:=1 to 9 do {номера купе}
For j:=1 to 4 do {места в купе}
R[i,j]:=j+(i-1)*4; {номера мест}
И никаких Random в программе быть не должно!
Далее - обработка запроса.
О чем речь?
Представьте себе, что позвонил пассажир и попросил зарезервировать для него, допустим, место № 18. Ваша задача: определить, в каком купе находится это место (строка матрицы), каков его "внутрикупейный номер" (столбец матрицы), и далее, если это место свободно, зарезервировать его, т.е. заменить соответствующий элемент матрицы нулем, а если занято, т.е. там уже ноль - предложить пассажиру сменить запрос на другое место, и так повторять до тех пор, пока не последует запрос на свободное место. А в промежутке выводить матрицу и при этом рассчитывать, сколько осталось свободных "нижних" (нечетных) и "верхних" (четных) мест. Во всяком случае, именно так я понял.
Поскольку вывод матрицы будет производиться несколько раз, целесообразно его оформить в виде процедуры:
Код:
Procedure Matrix_output(var bm:boolean);
VAR
N_even, N_odd:BYTE;
i,j:Integer;
Begin
N_even:=0;
N_odd:=0;
For i:=1 to 9 do
begin
for j:=1 to 4 do
begin
write(R[i,j]:4);
If (R[i,j]>0) and ((R[i,j] mod 2)=0) then Inc(N_even);
If (R[i,j]>0) and ((R[i,j] mod 2)=1) then Inc(N_odd);
end;
writeln;
end;
Writeln;
Writeln(N_even, ' even places and ',N_odd,' odd places are free');
If N_even+N_odd=0 then bm:=true else bm:=false;
End;
Здесь заодно проверяется наличие свободных мест в вагоне вообще; если таковых нет, то логическому параметру присваивается значение true.
Теперь - обработка запроса. Перед этим необходимо заполнить матрицу, как написано выше, и сделать обращение к процедуре:
(булеву переменную b нужно ввести в список глобальных).
Далее
Код:
found:=false;
Repeat
Write('N= ');
ReadLn(N);
If b then writeln('Sorry, but there are no free places') else
begin
i:=((N-1) div 4)+1;
j:=((N-1) mod 4)+1;
if R[i,j]>0 then
begin
found:=true;
R[i,j]:=0;
end;
end;
Until found or b;
Matrix_output(b);
Теперь осталось только всё это объединить и не забыть в конце поставить останов в виде или Readln;, или, если Вы подключаете модуль CRT, ReadKey;
Всё!