Цитата(Unknown @ 7.02.2007 21:27)
Задание такое:
Написать программу для определения, кто из четырех студентов сдал экзамен
Из интересу написал вот такой код:
Код
program Stud;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
MAX_STUDENTS = 4;
type
TStudents = array[1..MAX_STUDENTS] of boolean;
function AssertRules(const students: TStudents): boolean;
//a) если первый сдал, то и второй сдал;
function AssertA: boolean;
begin
if students[1] then
Result := students[2]
else
Result := true
end;
//б) если второй сдал, то третий сдал или первый не сдал
function AssertB: boolean;
begin
if students[2] then
Result := students[3] or not students[1]
else
Result := true
end;
//в) если четвертый не сдал, то первый сдал, а третий не сдал
function AssertC: boolean;
begin
if not students[4] then
Result := students[1] and not students[3]
else
Result := true
end;
//г) если четвертый сдал, то и первый сдал
function AssertD: boolean;
begin
if students[4] then
Result := students[1]
else
Result := true
end;
begin
Result := AssertA and AssertB and AssertC and AssertD
end;
procedure PrintStudents(const students: TStudents);
const RESULT: array[false..true] of string = ('failed', 'passed');
var i: integer;
begin
WriteLn('students:');
for i:=Low(students) to High(students) do begin
WriteLn(' student ', i, ': ', RESULT[students[i]]);
end;
WriteLn;
end;
procedure FindResult();
var students: TStudents;
procedure _FindResult(cur: integer);
var i: integer;
begin
if cur > High(students) then begin
if AssertRules(students) then
PrintStudents(students);
end else begin
students[cur] := false;
_FindResult(cur + 1);
students[cur] := true;
_FindResult(cur + 1);
end;
end;
begin
_FindResult(Low(students));
end;
begin
FindResult();
ReadLn;
end.
Программа генерирует все комбинации студентов и проверяет 4 правила для каждой.
Если правила срабатывают, то комбинация допустимая и печатается.
output программы: сдали все
з.Ы. в первом варианте кода была ошибка