Вычисление изменений в купюрах и монетах из двух входов - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть школьное задание, чтобы вычислить изменение в счетах и ​​монетах после предоставления двух входных данных, которые являются стоимостью предмета и предложенными деньгами.В инструкциях упоминается контрольный пример, в котором написано

. Пожалуйста, включите в качестве контрольного примера случай, в котором количество долларов, если оно умножено на 100,0, приведено к int без крошечной суммы, добавленной в, было бы просто не хватает правильного целого числа копеек.

Я не уверен, что именно требуется, когда говорится, что это просто не хватает правильного целого числа копеек.Если кто-то может объяснить, это будет действительно полезно.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
  double dcost, dtendered;
  int    icost, itendered;
  int    itwenties, itens, ifives, iones, iquarters, idimes, inickels, ipennies;
  /* add any additional variables between here -> */
  int itotal;
  /* <- and here*/

  scanf("%lf", &dcost);
  scanf("%lf", &dtendered);

  icost     = (int)((dcost * 100.0) + 0.000001);
  itendered = (int)((dtendered * 100.0) + 0.000001);

  /* add code to calculate itwenties, itens, etc., between here -> */
  itotal    = itendered - icost;
  itwenties = itotal / 2000;
  itotal    = itotal % 2000;
  itens     = itotal / 1000;
  itotal    = itotal % 1000;
  ifives    = itotal / 500;
  itotal    = itotal % 500;
  iones     = itotal / 100;
  itotal    = itotal % 100;
  iquarters = itotal / 25;
  itotal    = itotal % 25;
  idimes    = itotal / 10;
  itotal    = itotal % 10;
  inickels  = itotal / 5;
  itotal    = itotal % 5;
  ipennies  = itotal;

  /* <- and here */

  printf("%2d twenties\n", itwenties);
  printf("%2d tens\n", itens);
  printf("%2d fives\n", ifives);
  printf("%2d ones\n", iones);
  printf("%2d quarters\n", iquarters);
  printf("%2d dimes\n", idimes);
  printf("%2d nickels\n", inickels);
  printf("%2d pennies\n", ipennies);

  while (1)
    getchar();
  return 0;
}      

в строке 23, 24 я добавил эту крошечную сумму

Редактировать: я прилагаю лист инструкций для этого назначения по этой ссылке, пожалуйста, посмотрите один раз.https://docs.google.com/document/d/1RolSvpg5Purn4_IrhG1cbrrcSwHjYvnDcIZQ3uoQM8U/edit?usp=sharing

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Подсказка просит вас найти сумму в целых долларах, которая дает на один доллар меньше плюс 99 центов при конвертации без + 0.000001.
Т.е. вы, вероятно, должны осознать проблемы неточности математики с плавающей запятойна компьютере.

Вам не нужно делать это в вашей программе, наоборот, вы должны конвертировать правильно.

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

Это означает, что если вы сдадите в основном правильную программу, она будет проверена с такой суммой.Если этот тест (который в противном случае мог бы рассматриваться как крайний случай) не удался, то вы не только допустили незначительную ошибку, но и не выполнили четко заявленные требования.
Я полагаю, это означало бы больший штраф к вашей оценке...

0 голосов
/ 21 сентября 2019

Я думаю, что вас просят проверить, что происходит, когда itendered < icost.Возможно, попросите своего учителя уточнить!

Можете ли вы объяснить логику, стоящую за + 0.000001)?Знаете ли вы, как поплавки брошены в броню?Что такое усечение?

Знаете ли вы, почему валюта не должна быть представлена ​​как число с плавающей точкой?(Вы видели офисное пространство? Супермен 2?)

...