в классе 26 учеников, чьи имена A..Z. На экзамене 15 билетов 1..15. Когда в кабинет входит 10 ученик, то билеты, отвеченные предыдущими учениками кладут обратно. Промодулировать ход екзамена
как ввести множества я понимаю, но вот как дальше....помогите
volvo
12.11.2006 2:47
writeln('na4aljnoe mnozestvo iz u4enikov:'); for c:='A' to 'Z' do sk:=sk+[c];
А если вот так:
sk := ['A' .. 'Z'];
?
Oleg55
12.11.2006 2:50
можно и так,наверное, но как дальше
volvo
12.11.2006 3:19
Вот так:
var stud: char; quest: set of byte; current: byte;
begin quest := [1 .. 15]; for stud := 'A' to 'Z' do begin
if ord(stud) - ord('A') + 1 = 12 then begin writeln('Возвращаем билеты...'); quest := [1 .. 15]; end;
write('Студент: ', stud, ' входит в кабинет...');
repeat current := random(15) + 1; until current in quest;
writeln(' ... и берет билет №', current); exclude(quest, current);
end; end.
Все билеты вернулись при входе 12-го ученика, если сделать это при входе 10-го, то на 15 билетов будет 17 человек, и двоим не хватит (а программа зациклится).
Или ты имел в виду "при входе каждого десятого"? Тогда вот так:
.
.. if (ord(stud) - ord('A') + 1) mod 10 = 0 then begin writeln('Возвращаем билеты...'); quest := [1 .. 15]; end; ...
Oleg55
12.11.2006 3:40
спасибо огромное, только объясните, что такое EXCLUDE?
volvo
12.11.2006 3:53
exclude(quest, current);
то же самое, что и
quest := quest - [current];
, только работает побыстрее... Хотя есть еще одна причина, по которой я предпочитаю использовать именно include/exclude вместо операций +/-, но к теме обсуждения она не относится...
Bokul
12.11.2006 3:57
Цитата
Хотя есть еще одна причина, по которой я предпочитаю использовать именно include/exclude вместо операций +/-, но к теме обсуждения она не относится...
Ага, думаешь можно так просто взять заинтриговать и все? Ну-ка давай открывай секреты
Oleg55
12.11.2006 5:59
[mne toze stalo interesno
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.