Подобные задачи уже решались на форуме. Поищите примеры.