IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Метод резолюций в исчислении высказываний., Паскаль или Си++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Задание такое:
Написать программу для определения, кто из четырех студентов сдал экзамен, если известно:
а) если первый сдал, то и второй сдал;
б) если второй сдал, то третий сдал или первый не сдал;
в) если четвертый не сдал, то первый сдал, а третий не сдал;
г) если четвертый сдал, то и первый сдал.
По-моему, в условии ошибка... Из в и г следует, что первый сдал в любом случае, а, следовательно, сдал и второй, откуда в свою очередь следует, что сдал и третий (т.к. первый сдал), а т.к. третий сдал, то четвертый не мог не сдать (т.е. тоже сдал)...


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(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 программы: сдали все cool.gif

з.Ы. в первом варианте кода была ошибка blink.gif


Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


hardcase, спасибо, но это не совсем то, что нужно... Нужно найти ответ, именно исходя из условия...
Но за
Цитата
output программы: сдали все
спасибо smile.gif


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 20:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name