Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2017, 13:56   #1
kim-im
Пользователь
 
Регистрация: 07.11.2017
Сообщений: 42
По умолчанию Поиск количества граммов в общем асорти

Нужна помощь в решении задачи. Условие таково:
Есть два вида печенья. "Бурратино" стоит P руб/кг, "Наполеон" N - руб/кг. Продавец решил продавать ассорти из этих видов печенья, для этого он смешал два вида печенья. Стоимость ассорти стала стоить А руб/кг.
Зная, значения P, N, А, нужно найти сколько грамм "Бурратино" содержится в ассорти (с точностью до десятых), иначе вывести -1, если определить невозможно.
Задача как бы проста, на определение процента, но вот мой код что-то лишь проходит 1 тест из 12.
Код:
var p,n,a,a1,m,m1,m2:real;
begin
  read(p,n,a);
   a1:=p+n;
   m:=(a/a1)*2;
   m1:=m*(a-n)/(p-n);
   m2:=m-m1;
   write (m2*1000:0:1);
end.
Идея такова
A1=P+N (цена за 1 кг)
m = A/A1 (всего кг)
m1 +m2 =m => m2=m-m1
m1*P+(m-m1) *N = m*A =>m1:=m*(a-n)/(p-n)>0, если <0 то невозможно
код я написал без учёта -1, но все равно что-то не работает. В программе как бы считает.
Спасибо за помощь
kim-im вне форума Ответить с цитированием
Старый 19.12.2017, 14:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

A1=P+N (цена за 1 кг)всего лиць СТОИМОСТЬ ДВУХ кг смеси и вполне определенной к тому же.
"полтора землекопа" ©В стране невыученных уроков
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.12.2017, 14:17   #3
kim-im
Пользователь
 
Регистрация: 07.11.2017
Сообщений: 42
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
A1=P+N (цена за 1 кг)всего лиць СТОИМОСТЬ ДВУХ кг смеси и вполне определенной к тому же
спасибо за поправку
kim-im вне форума Ответить с цитированием
Старый 19.12.2017, 14:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

или я ошибаюсь, или Вы перемудрили.

формула же:
X = (A-N)/(P-N);

проверьте такой код:
Код:
program ideone;
var p,n,a:real;
begin
  read(p,n,a);
  if (abs(p-n)<0.001) and (abs(a-p)<0.001) then WriteLn(500.0:0:1)
  else
  if (p<=n) or (a<n) or (abs(a-n)>abs(p-n)) then WriteLn(-1)
  else writeLn((a-n)/(p-n)*1000:0:1);
end.

p.s. Внимание! Насчёт того, что проверки у меня написаны верно - не уверен!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2017, 14:27   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А зачем там m в уравнении? Наверно так Px+N(1-x)=A -> x=(A-N)/(P-N), где x<=1
если P=N, то решение возможно только если A=N и x любой от 0 до 1кг
иначе если A=N, то решение x=0
иначе решение только для положительного результата не большего 1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.12.2017, 14:34   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
если P=N, то решение возможно только если A=N и x любой от 0 до 1кг
точно. это я упустил. если P=N нужно выводить -1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2017, 15:52   #7
kim-im
Пользователь
 
Регистрация: 07.11.2017
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
или я ошибаюсь, или Вы перемудрили.
Спасибо. Точно перемудрил
Вот работающий код:
Код:
var p,n,a:real;
begin
  read(p,n,a);
   if (p=n) then WriteLn(-1)
  else writeLn((a-n)/(p-n)*1000:0:1);
end.
Ещё раз все спасибо, кто помог
kim-im вне форума Ответить с цитированием
Старый 19.12.2017, 16:04   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

для a=100, p=40, n=10 он не работающий )) Проверки не все сделал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.12.2017, 16:07   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от kim-im Посмотреть сообщение
Вот работающий код:
Точно? Работающий?

Ну, значит, ребята с исходными данными для теста не сильно заморочились.

попробуйте посчитать для
10 5 100 (это P, N и A соответственно)

или попробуйте посчитать для
10 20 1

всё корректно получилось?

но, впрочем, дело хозяйское. Главное, чтобы код приняли.
А дальше, правильный он или нет, только разных гиков и педантов интересует

добавлено
Аватар опередил!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.12.2017, 12:10   #10
kim-im
Пользователь
 
Регистрация: 07.11.2017
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Точно? Работающий?
Спасибо за подбор тестов, но программа сдала все 12 тестов. Видать преподы не сильно заморачивались с тестами для задачи.
Впрочем мне нужен был результат и вы мне его дали. Большое спасибо ещё раз
kim-im вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск минимального количества повторов чисел Дима85 C# (си шарп) 7 24.07.2016 18:55
Поиск количества оценок за каждый день zargandr1 SQL, базы данных 1 28.06.2014 11:51
Пойманную мышь посадили в клетку. За первый день она съела s граммов сыра... jager666 Паскаль, Turbo Pascal, PascalABC.NET 1 10.11.2012 12:02
Поиск точного количества строк Pamparam SQL, базы данных 5 27.06.2012 11:41
Поиск значения ячейки в другой, содержащей значение первой в общем тексте onenures Microsoft Office Excel 16 03.03.2012 11:49