// PascalABC.NET 3.1, сборка 1198 от 11.03.2016 begin var k:=0; var Terminate:boolean; repeat Terminate:=True; var n:=ReadInteger('Введите номер месяца:'); case n of 1,3,5,7,8,10,12:Writeln('31 день'); 4,6,9,11:Writeln('30 дней'); 2:Writeln('28 дней в обычном году и 29- в високосном') else begin Writeln('Вы ошиблись, номер должен быть от 1 до 12'); Inc(k); Terminate:=False end end until Terminate; if k>0 then Writeln('Вы ошиблись ',k,' раз(а).') end.
Тестовое решение: Введите номер месяца: 18 Вы ошиблись, номер должен быть от 1 до 12 Введите номер месяца: 0 Вы ошиблись, номер должен быть от 1 до 12 Введите номер месяца: 5 31 день Вы ошиблись 2 раз(а).
Так как язык не указан, приведу пример на SWI-Prolog.
Код:
read_int(Int) :- read(Int), integer(Int).split_int_by_numbers(0, []) :- !.split_int_by_numbers(N, [Number|Ints]) :- Number is mod(N, 10), RestN is div(N, 10), split_int_by_numbers(RestN, Ints).test_to_div(_, []).test_to_div(N, [Number|Ints]) :- mod(N, Number) =:= 0, test_to_div(N, Ints). test(Int) :- split_int_by_numbers(Int, Numbers), test_to_div(Int, Numbers), write(Int), write(" - Yes!"), nl.test(Int) :- write(Int), write(" - No!"), nl.?- read_int(Int), test(Int).