Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Математическая задача

Ответить
Настройки темы
C/C++ - Математическая задача

Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


Суть вот в чем.с клавиатуры вводится путь S, скорость на такси -V1,скорость пешком V2.так же вводится обшее время пути t и стоимость р1-рублей за километр на такси.необходимо расчитать как выгоднее преодолеть путь,чтобы получились минимальные затраты.если двигаться пешком то затрат нет,оплачивается только поездка на такси.язык может быть си или паскаль,но не делфи.

Отправлено: 00:17, 01-10-2009

 

Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


математически решить вроде получается.а вот пока закодировать не очень.буду пробовать сегодня.при помощи 2х формул возможно ведь решение S=V1*t1+V2*t2 Tобщее=t1+t2.??

lxa85, решить систему из 2 уравнений я могу.
для примера я брал такие значения s=1000, v1=100, v2=10, T=15
1000=100*t1+10*t2 (S=t1*v1+t2*v2)
15=t1+t2( Tобщее=t1+t2)
t2=T-t1
1000=100*t1+10*15-10t1
1000=90t1+150
850=90t1
t1=9.4444

t2=15-9.4444
t1=5.5556

Отправлено: 21:17, 01-10-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата pirojok750:
решить систему из 2 уравнений я могу.»
Переводя в формулы это выглядит так:
S = v1t1 + v2t2;
t2 = T - t1;
S = v1t1 + v2T - v2t1;
t1=?.
Дальше задача "распадается", писать не интересно.
Операторы С++ читать читаю, писать, не пишу. Поэтому пишу Pascal версию.
Код: Выделить весь код
var
  v1,v2:real; // на всякий случай, дробной пешей скорости 3,5 км/ч 
  T,t1,t2:real; // никогда час в час не получится. :(
  S:integer; // простим сотни метров, округлим до целого кол-ва км.
  Z,p1:real; //Z - затраты на путь. p1 - стоимость км.
begin
  write('Input <S,v1,v2,T>' );
  readln(S,v1,v2,T);
  t1:=?; // номер формулы в описании;
  t2:=T-t1; //
  writeln('t1 = 't1);
  writeln('t2 = 't2);
  Z:=?;
  writeln('Стоимость пути = ', Z);
end.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 00:27, 02-10-2009 | #12


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


lxa85, дальше путь пройденый на такси умножается на р1.

t1:=?; // номер формулы в описании; t1 изначально неизвестен.есть только обшее время T

Отправлено: 01:20, 02-10-2009 | #13

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


правильно ли я понимаю постановку задачи?
Код: Выделить весь код
   T1 +    T2 = T
v1*T1 + v2*T2 = S

          | 1,  1|
{T1,T2} * |v1, v2| = {T,S}

Если матрица не вырождена, то решение уравнения,
если вырождена, то либо решения нет (v1=v2, T<>S), либо всё время идти пешком (v1=v2, T=S)
Или это всё-таки задача линейного программирования?
Код: Выделить весь код
c1*T1 -> min
T1 >= 0
T2 >= 0
   T1 +    T2 <= T
v1*T1 + v2*T2 = S

Последний раз редактировалось pva, 02-10-2009 в 07:23. Причина: правильно ли я понимаю постановку задачи?


Отправлено: 07:22, 02-10-2009 | #14


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата pirojok750:
t1:=?; »
я знаю, что не известен.
Меня интересует формула получения t1. из предыдущей. S= ...
Поэтому я и не стал писать ее, предоставив эту возможность тебе.
Цитата pirojok750:
дальше путь пройденный на такси умножается на р1. »
Это я тоже знаю. Но опять таки, написание формулы за автором топика
pva, ИМХО сначала пусть работает "топорно", затем уже вводить ограничения на отрицательную скорость, отношения скоростей пешеход-такси. Предусмотреть, чтобы с сверхзвуковой скоростью не ездили и т.д.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:49, 02-10-2009 | #15

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата lxa85:
затем уже вводить ограничения на отрицательную скорость, отношения скоростей пешеход-такси. Предусмотреть, чтобы с сверхзвуковой скоростью не ездили и т.д. »
Я написал типовые постановки задач (и уже назвал классификацию). Это обозначает что решение задачи существует (доказано), известно (есть алгоритм решения) и нужно тупо следовать алгоритму (лучше ничего не придумали).
ИМХО надо приучать студентов к общему алгоритму решения любой (абстрактной) задачи:
1. физическая постановка
2. математическа постановка
3. классификация (мат.постановка согласно постановке типовых задач)
4. решение методом согласно классификации
классическая задача линейного программирования (решается в общем случае симплекс-методом) выглядит так:
Код: Выделить весь код
  c1*x1 + c2*x2 + c3*x3 + ... ->min
  x1 >= 0
  x2 >= 0
  x3 >= 0
  ...
  a11*x1 + a12*x2 + a13*x3 + ... <= b1
  a21*x1 + a22*x2 + a23*x3 + ... <= b2
  a31*x1 + a32*x2 + a33*x3 + ... <= b3
  ...
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:07, 02-10-2009 | #16


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


Уважаемые pva, и lxa85, в начале поста я просил помоч мне решить простую задачу.вы ушли от простой математики к задачам линейного программирования,усложнив мне ее решение.можно как нибудь попроще решить данную зачаду??

Отправлено: 15:21, 02-10-2009 | #17


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


pirojok750, никуда мы не уходили.
Математика - это математика.
Линейное программирование - это последовательно выполнение ряда действий над переменными. (В данном случае T,t1,V1,t2,V2,S и т.д.)
Оно(линейное программирование) самое простое. Вот когда добавятся условия, векторы чисел, объекты и потоки, там да, там возникают сложности.
Сейчас надо про них забыть, и решать так, как решается!
Т.е. по шагам, в одном единственном направлении.
Это и называется линейное программирование. (Не путать с линейной алгеброй )

Сейчас от вас требуется из формулы
S = v1t1 + v2T - v2t1;
выразить t1.


Полученную формулу вписать в алгоритм и всё. Всё остальное лирика и красивые слова.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:27, 02-10-2009 | #18


Пользователь


Сообщения: 76
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо lxa85, все оказалось достаточно просто.я думаю закодировать это мне не составит труда.

Отправлено: 19:06, 02-10-2009 | #19

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата pirojok750:
Всё остальное лирика и красивые слова »
Не совсем если ограничение на время нестрогое ( <= ), то:
1. у этой задачи всегда есть решение (следовательно программа не заглючит, а в предложенном варианте нет проверки на вырожденные случаи, когда например даже на такси не успеешь доехать, и не используется условие "с минимальными затратами")
2. надо добавить пару ветвлений алгоритма

pirojok750, простейший пример пренебрежения проверкой ограничений: компьютерный червь Kido использует переполнение строкового буффера чтобы проникнуть в чужую систему. Ну забыли проверить что строчка меньше определённой длины должна быть...
Надо приучаться не лениться даже на простых примерах.

И ещё: простота решения не связана простотой рассуждений. Бывает что вспомнишь все теории на свете, чтобы прийти к решению типа "result = a + b", и объяснить, почему имено так, без теории не получается.

Последний раз редактировалось pva, 03-10-2009 в 12:36. Причина: смайлы зло

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 03-10-2009 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Математическая задача

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Задача по информатике Triz Программирование и базы данных 22 24-12-2012 23:02
Теория - Задача ManHack Программирование и базы данных 4 23-01-2009 18:21
Delphi - Простая задача rim_muvies Программирование и базы данных 13 31-03-2008 13:44
Сетевая задача TechNoir Microsoft Windows NT/2000/2003 8 29-01-2007 19:04
Задача С++ papam Программирование и базы данных 1 28-11-2005 11:34




 
Переход