Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
bestage
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 24
1

Изменить эту программу так, чтобы для вычисления процентов она использовала только целые числа

17.05.2014, 00:24. Просмотров 1081. Ответов 7
Метки нет (Все метки)

Товарищи, дан пример с книги Дейтелов по расчету суммы денег на конец года на протяжении 10 лет. вот код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include<math.h>
 
main()
{
int year;
double amount, principal = 1000.0, rate = .05;
 
printf("%4s%21s\n", "Year", "Amount on deposit");
 
for(year = 1; year <= 10; year++)
{
amount = principal * pow(1.0 + rate, year);
printf("%4d%21.2f\n", year, amount);
}
}
а в конце темы есть задача в которой предлагается изменить эту программу так чтобы для вычисления процентов она использовала только целые числа. подскажите что нибудь или дайте наводку. спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2014, 00:24
Ответы с готовыми решениями:

Изменить программу так, чтобы она вводила числа в массив с клавиатуры
Как изменить программу так, чтобы она вводила числа в массив с клавиатуры?...

Изменить программу, чтобы она выводила только количество слов?
#include &lt;stdio.h&gt; int main() { char ch, flag=-1; unsigned c=0, n=0,...

Как сделать так, чтобы можно вводить только целые цифры, без запятых?
Задание: За номером дня месяца вывести на экран предыдущее число, если в месяце...

Переделать программу так, чтобы она включала в себя функции
Добрый день, нужно переделать программу так, чтобы она включала в себя функции,...

Переставить числа так, чтобы сначала шли только 0, затем только 1, затем только 2
Даны целые числа A,A,A,...,A, каждое из которых является либо 0, либо 1, либо...

7
tegauss
30 / 24 / 27
Регистрация: 06.05.2014
Сообщений: 161
17.05.2014, 00:45 2
Лучший ответ Сообщение было отмечено easybudda как решение

Решение

bestage, можно было бы как-то так, например:

C
1
2
3
4
5
6
int pwr(int num, int pow) 
{
  return !pow ? 1 : num * pwr(num, pow - 1);
}
 
amount = principal * pow(105, year);
Тогда, целая часть amount - это amount / (100^year), остаток - amount % (100^year).

Печаль в том, что 105^10 уже не влезает даже в long long, кажется. (не уверен)
0
bestage
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 24
17.05.2014, 00:56  [ТС] 3
да я тоже думал над таким вариантом как перевести все в центы, но там получаются огромные числа. нужен какой нить другой вариант

Добавлено через 1 минуту
мне пока что такие короткие записи трудно читать) еще только учусь)
0
Chiken
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 8
17.07.2014, 20:27 4
bestage, Ты решил эту задачу? а то я тоже на ней встал))) скинь код, буду признателен
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
18.07.2014, 01:00 5
Цитата Сообщение от tegauss Посмотреть сообщение
Печаль в том, что 105^10 уже не влезает даже в long long, кажется. (не уверен)
Я проверил - 105^10 не влезает даже в unsigned long long. А ведь потом это число еще на сумму умножать.

Что делать - ума не приложу. Разве что писать свои функции для работы с бесконечными целыми числами?
0
Vlad0922
30 / 24 / 5
Регистрация: 20.11.2013
Сообщений: 65
18.07.2014, 02:32 6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main(void)
{
  double percent=0.05;
  double money=100.35;
  int intPercent=percent*100;
  int dollars=(int)money;
  int cents=money-dollars;
  int period=100;
  int i;
 
  for(i=0;i<period;++i){
      cents+=dollars*100;
      cents+=cents*intPercent/100;
      dollars=cents/100;
      cents%=100;
    }
 
  money=dollars+(double)cents/100;
 
  printf("%f",money);
 
  return 0;
}
Нечто вроде этого.
Но наблюдается небольшая потеря, связанная с целочисленным делением и потерями остатков.
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
18.07.2014, 08:51 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>      // printf
 
int add_percent(int amount, int percent)
{
    percent += 100;
    amount *= percent;  // получили сумму в сотых долях цента
    percent = amount;
    amount /= 100;      // а теперь округляем до центов
    if( percent - amount * 100 > 49 ) {
        ++amount;       // добавляем один цент, если остаток больше 49 сотых цента
    }
    return amount;
}
 
int main(void)
{
    int money = 10035;
 
    for( int i = 0; i < 10; ++i ) {
        money = add_percent(money, 5);
        printf("%d\n", money);
    }
 
    return 0;
}
0
Chiken
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 8
18.07.2014, 12:18 8
Может не совсем по заданию, но на нечто большее я не смог разогнать свой мозг
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<math.h>
int main()
{
    int principal = 100000, rate = 5;
    double year;
    long amount;
 
    printf("%4s%21s\n", "Year", "Amount on deposit");
 
    for (year = 1; year <= 10; year++){
        amount = principal * pow(100 + rate, year) / pow(100, year);
        printf("%4.0f%21d.%d\n", year, amount / 100, amount % 100);
    }
    return 0;
}
0
18.07.2014, 12:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2014, 12:18

Изменить программу так, чтобы там присутствовали Printf scanf for и т.д
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; using...

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

Изменить программу, чтобы выводился весь файл, а не только первая строка
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; struct a { int id; char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru