+has和不+has 都是对的,但是是2种状态,有has的时候是"现在完成时",表示现在已经完成的事件!如果不加has,表示过去时,强调的是过去的某个时间发生的事件.
2个表达方式表达说话者不同的目的!例如你的句子"He has got his coat dirty "表示现在衣服已经被他弄脏了,强调衣服已经脏了!
如果不用现在完成时,可以说成"He got his coat dirty yesterday"强调的是"昨天"他把衣服弄脏的.是昨天,不是今天!
根据说话的人的目的 选择不同的时态!
同理,第2个问题你自己该清楚了吧!
希望对你有所帮助!