Форум программистов, компьютерный форум CyberForum.ru

Задача "Банковские проценты" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
23.08.2012, 11:09     Задача "Банковские проценты" #1
Вот условие:
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается. Каждый год сумма вклада становится больше. Определите, через сколько лет вклад составит не менее y рублей.
Программа получает на вход три натуральных числа: x, p, y и должна вывести одно целое число.
Вот решение с сайта-источника:
C++
1
2
3
4
5
6
7
8
9
10
11
 double x,p,y;
  int years = 0;
  cin>>x>>p>>y;
  while (x<y) {
    x *= (1 + p/100.0);
    x *= 100;
    x = (int) x;
    x /= 100;
    years++;
  }
  cout<<years;
Подскажите, обязательны ли все приведённые действия, верно ли написана программа?
Вот мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
int x,p,y;
    int n=0;
    cin>>x>>p>>y;
    while(x<y)
    {
        x+=x*0.01*p;    
        n++;
    }
    cout<<n;
    getch();
    return 0;
Какой вариант программы правильный и почему? Заранее благодарю за разъяснения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 11:09     Задача "Банковские проценты"
Посмотрите здесь:

C++ "cin","cout" на "printf","scanf"
Создайте вектор, хранящий десять строковых значений "zero", "one", ..., "nine" C++
Что означают команды "fun", "my_max", "my_min" в C++? C++
C++ Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На
C++ Необработанное исключение в "0x776315de" в "c++1.exe": 0xC0000005: Нарушение прав доступа при записи "0x40e000
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
23.08.2012, 11:33     Задача "Банковские проценты" #2
второй вариант
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
23.08.2012, 11:39     Задача "Банковские проценты" #3
второй вариант, не учитывает то, что клиент может внести сумму на вклад с копейками, как и сумма y тоже может быть с копейками.
и процент: ты вводишь процент как целочисленное число, а если там 1,35% что тогда?
так что 1
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.08.2012, 12:10     Задача "Банковские проценты" #4
Цитата Сообщение от Aloir Посмотреть сообщение
второй вариант, не учитывает то, что клиент может внести сумму на вклад с копейками,
по условию задачи не может внести вклад копейками:
Цитата Сообщение от PG94 Посмотреть сообщение
Вклад в банке составляет x рублей.
Второй вариант правильный. Пояснения (см комментарии):
1-ый код:
C++
1
2
3
4
5
6
7
8
9
10
11
 double x,p,y;
  int years = 0;
  cin>>x>>p>>y;
  while (x<y) {
    x *= (1 + p/100.0);// допустим после первого года получилось x=120.35 (120 руб 35 коп)
    x *= 100;// здесь x=12035.0
    x = (int) x;// здесь x=12035 
    x /= 100;// здесь x=120.35 ( и в следующем вычислении участвуют и 35 копеек,хотя по условию они должны быть отброшены)
    years++;
  }
  cout<<years;
2-ой код: во втором коде все правильно.
Вот тест, который показывает разницу в вычислениях:
100 5 2000000
Leonzi
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 3
26.09.2012, 12:14     Задача "Банковские проценты" #5
Ребят вот сюда http://shpargalka.kz/matematika/zada4-na-proc загляните и немного добавьте знанкий с++ и поймете почему 2 вариант решен правильно.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
26.09.2012, 12:22     Задача "Банковские проценты" #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
x /= 100;// здесь x=120.35 ( и в следующем вычислении участвуют и 35 копеек,хотя по условию они должны быть отброшены)
years++;
Цитата Сообщение от PG94 Посмотреть сообщение
после чего дробная часть копеек отбрасывается.
дробная часть копеек, а не копейки(дробная часть рублей)

Добавлено через 3 минуты
во втором варианте нет
Цитата Сообщение от PG94 Посмотреть сообщение
после чего дробная часть копеек отбрасывается.
следовательно он неправилен
первый правильный хотя запись можно и сократить
Yandex
Объявления
26.09.2012, 12:22     Задача "Банковские проценты"
Ответ Создать тему
Опции темы

Текущее время: 17:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru