Начнем с утверждения, что это была блондинка, потому что таких утверждений два. Если II сказал правду, то второе его утверждение ложно и блондинка была в шляпе. Тогда утверждение I о брюнетке - ложь. Это рассуждение иллюстрирует вторая сверху таблица. В то же время, будет ложным утверждение IV об отсутствии очков и получается, что была блондинка в шляпе и в очках. В этом случае ложно утверждение III о том, что это была рыжая. Удостоверяемся, что противоречий в цепочке рассуждений нет. Окончательно: это была блондинка в шляпе и очках. Каждый свидетель дал одно истинное показание и одно ложное.
Прочие проверки можно не делать, считая задачу корректной.
Если ввести X или Y значительно больше чем Z то программа на втором или тертьем условии выдаст false и закончит свою работу ничего не написав. Например: если указать X = 10 , Y = 2, Z = 3; то на первом условии будет true, потому что 10 +2 > 3 , но на третьем условии выдаст false потому что 2+3 < 10 но так как ничего не прописано на этот случай программа просто закончит свою работу. Что бы исправить этот баг необходимо все условия свести в одно: if ((x + y > z)and (x + z > y) and (y + z > x) ) then writeln('треугольник построить можно') else writeln('треугольник построить нельзя'); end.
Это решение так же является ответом на 3-й вопрос.
Так