Давайте рассмотрим каждое предложение и выберем правильную форму времени.
Nina has been learning English for 2 years. Здесь правильно использовать "has been learning", так как это действие началось в прошлом и продолжается до сих пор.
The birds have already flown to the South. Правильно: "have already flown", так как птицы завершили миграцию.
They have known him for many years. Здесь уместно "have known", потому что мы говорим о длительном состоянии, а не о процессе.
Mike has forgotten to learn the poem. Правильный вариант - "has forgotten", так как он не выполнил задачу.
The children have been watching cartoons for 2 hours. Подходит "have been watching", так как действие продолжается в течение этого времени.
The train has just come. Правильно использовать "has just come", потому что поезд уже пришел.
We haven't had a holiday for 5 years. Здесь правильно "haven't had", так как это состояние продолжается 5 лет.
She has taught at this school for twenty years. Правильный вариант - "has taught", если имеется в виду, что она закончила это действие, но работает в школе до сих пор.
David has been painting in his studio since 10 o'clock. Здесь уместно "has been painting", так как действие началось в прошлом и продолжается.
Mary and Sam have been collecting stamps for 3 years. Правильно использовать "have been collecting", поскольку это действие продолжается.
Their parents have been friends since their childhood. Здесь подходит "have been", так как это состояние продолжается.
Dave has been a student for 2 years. Правильный вариант - "has been", так как мы говорим о его статусе.
Если у вас есть дополнительные вопросы или нужно подробнее разобрать какие-то моменты, пожалуйста, дайте знать!