![]() |
Задачка
Решена.
Спасибо. А как Вам Сахаровская задачка? Из пункта А в одном направлении двигаются Мальчик со скоростью 7 км/ч и Девочка со скоростью 5км/ч, между ними постоянно бегает Собачка со скоростью 11 км/ч. Определить расстояние от п.А до собачки по прошествии 2 часов? |
Пошукай по форуму, эта загадка уже была. И по моему 98% ее разгадали.:)
|
Было уже.
Не далее, как в прошлом году. |
Цитата:
Еще раз спасибо. А теперь? |
12км (погрешност +/-2км), если собачка конечно не сдохла от такой беготни ранше чем через 2 часа
|
11.76 km. Pravilno?
|
Цитата:
По-моему - это ОДИН ИЗ возможных ответов |
Я тоже предложу свой вариант ответа - 13,89 км.
только не спрашивайте как я его получил :-))) интересно, а какой ответ правильный? |
10000...14000 м
Ё! |
Вот прикинусь школьником и выдам...
У собачки в начальный момент неопределенность скорости, точнее, ее направления. Поэтому самый правильный ответ у Хрюши и у Елок с Палками :). Можно пойти с другого бока: А пусть через 2 часа собачка будет в любой точке между 10 и 14 км, и это кино мы будем мотать назад. Человеки и собачка побегут задом наперед. Как бы собачка ни бегала, она окажется в пункте А. Угадал? |
У меня получается 10.467 км , надо проверить еше, правда.
П.С. да... проверка говорит, что собака пробежала 21.997 км :) |
"Гринписа" на вас нету! Натравлю общество защиты животных и Брибжит Бардо в частности! Так собачку мучать, изверги!
|
А мальчик когда вышел? Дня на три раньше девочки? Ну и участь у собачки...
|
[pre]/* U popa byla sobaka * created by Zuber */ #include <stdlib.h> #include <stdio.h> #define BOY_SPEED 7.0 #define GIRL_SPEED 5.0 #define DOG_SPEED 11.0 // step is one second #define TIMER_STEP 1 // 2 hours #define TIME_UNITS 60*60 #define MAX_TIME 2 * TIME_UNITS #define TO_BOY 1 #define TO_GIRL 2 int main(void){ int timer; double boy_pos = 0.0; double girl_pos = 0.0; double dog_pos = 0.0; int dog_runs_to = TO_GIRL; double tmp_distance; double distance_to_run; double part_distance_to_run; // report counters int total_oscillations; double total_trek = 0.0; for(timer = 0; timer < MAX_TIME; timer ++){ if( boy_pos != girl_pos ){ // only if not at the same place // NOTE, girl_pos is always less then a boy pos due to speed diff tmp_distance = boy_pos - girl_pos; // NOTE: since we have a somewhat descreet values, there could be small glitches in the beginning, // when dog is actually catching up with the girl distance_to_run = DOG_SPEED/((double)TIME_UNITS); total_trek = total_trek + distance_to_run; while(distance_to_run != 0){ switch(dog_runs_to){ case TO_BOY: part_distance_to_run = boy_pos - dog_pos; if( part_distance_to_run < 0){ printf("BUG! Dog is infront! \n"); exit(0); }else if( part_distance_to_run == 0 ){ // same position, dog reverses dog_runs_to = TO_GIRL; total_oscillations++; }else{ if(distance_to_run <= part_distance_to_run){ dog_pos = dog_pos + distance_to_run; distance_to_run = 0.0; }else{ dog_pos = boy_pos; distance_to_run = distance_to_run - part_distance_to_run; } } // end of if(part_distance_to_run) break; // TO_BOY case TO_GIRL: part_distance_to_run = dog_pos - girl_pos; if( part_distance_to_run < 0){ // starting feature... have to catch up dog_pos = girl_pos; distance_to_run = distance_to_run - part_distance_to_run; break; }else if( part_distance_to_run == 0 ){ // same position, dog reverses dog_runs_to = TO_BOY; total_oscillations++; }else{ if(distance_to_run <= part_distance_to_run){ dog_pos = dog_pos - distance_to_run; distance_to_run = 0.0; }else{ dog_pos = girl_pos; distance_to_run = distance_to_run - part_distance_to_run; } } // end of if(part_distance_to_run) break; // TO_GIRL default: printf("BUG! Nowhere to RUN! \n"); exit(0); } } } // end if boy != girl boy_pos = boy_pos + BOY_SPEED/((double)TIME_UNITS); girl_pos = girl_pos + GIRL_SPEED/((double)TIME_UNITS); } // end timer loop // PRINTING RESULTS printf("Resulting positions (in km)\n"); printf("Boy: %2.3f\n", boy_pos); printf("Girl: %2.3f\n", girl_pos); printf("Dog: %2.3f\n", dog_pos); printf("Total DOG travel: %2.3f\n",total_trek); printf("Total oscillations: %d\n", total_oscillations); return 0; } [/pre] |
Цитата:
Вот что значит фундаментальное образование! Уважаю! |
Zuber
Ехидное замечание с места. Время свободного пробега собачки должно быть много больше шага таймера (поначалу это не выполняется). Иначе направление бега собачки можно и не угадать. Вот если бы собачка выскочила из своей будки с задержкой, типа спохватилась. Вот тогда можно и программулю нкаваять. А так, какая-то неопределенность получается, как у Гейзенберга. Непонятно, в какую сторону собачка бежит, расстояние-то между человеками 0, приходится в препятствие утыкаться |
Цитата:
А в программе первый шаг собачки пропушен. Она начинает бегать только через секунду. Что приводит к тому, что в какой-то момент она может догонять девочку. (тама в коментах сказанно). Что, впрочем не сильно влияет на определение местоположения собачки, т.к. при шаге времени стремяшимся к нулю, погрешность стремится к нулю. Через одну секунду, мальчик и девочка будут на расстоянии 56 сантиметров друг от друга. ;) Думаю, мой результат +- 1 метр. |
Извиняюсь, сразу в твой код не врубился, да и не силен. Так вот что такое catch up :) Подозревал, что ты кого-то придерживаешь. Я что подозреваю. Погрешность-то поначалу к нулю стремится, но потом-то погрешность накапливается. А существует ли предел? Смена направления бега собачки будет сильно в другие моменты времени. Собачка-то свои километры набегает...
Предлагаю собачку придержать на 100 микросекунд секунд, отсчитывать микросекунды, а потом сокращать время придерживания собачки и смотреть, к чему это дело стремится. |
Цитата:
Ого... очень интересные результаты. Взависимости от временного шага, при 10 микросекундах собака будет в 11.622. При 1 микросекунде, собака будет в 10.576 |
Как бы не оказалось, что предела не существует. Какой-нибудь sin(1/x), x-->0. Бывает же такое
|
Да, но, практически, данный результат программы означает, что без аналитечиского решения через формулу предела точное местоположение определить крайне сложно.
|
А ты сперва докажи, что предел существует
|
zuber,
есть такие понятия "устойчивое решение" и "неустойчивое решение". Вполне применимы к численным методам решений, в частности к этому. |
| Часовой пояс GMT +3, время: 12:51. |