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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
#1

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

23.08.2012, 11:09. Просмотров 2756. Ответов 5
Метки нет (Все метки)

Вот условие:
Вклад в банке составляет 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++ Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
Необработанное исключение в "0x1027c9c7 (msvcr100d.dll)" в "gh.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefeee". C++
Вывести текст файла, заменив цифры от 0 до 9 на слова "ноль", "один"."девять", начиная каждое предложение с новой строки C++
C++ Необработанное исключение в "0x76f015de" в "контрольная 1 задача 2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x334e2c64"
Необработанное исключение в "0x0fc1d484 (msvcr100d.dll)" в "1.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00aee0af" C++
C++ Наследуемым классом для комплексного числа объявить класс "радиус-вектор", имеющий данные "длина" и "угол"
Необработанное исключение в "0x775e15de" в "laba3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdf9". C++
C++ Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc"
C++ Через ООП: Дать для числа наименование: "рубль", "рубля", "рублей";
C++ Банковские проценты
Перегрузка функций "ввести в поток", "вывести с потока", "умножить вектор на число" C++
C++ Задача на нахождение "+" и "-" элементов в массиве

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
87 / 739 / 75
Регистрация: 11.04.2012
Сообщений: 971
23.08.2012, 11:33     Задача "Банковские проценты" #2
второй вариант
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 689
23.08.2012, 11:39     Задача "Банковские проценты" #3
второй вариант, не учитывает то, что клиент может внести сумму на вклад с копейками, как и сумма y тоже может быть с копейками.
и процент: ты вводишь процент как целочисленное число, а если там 1,35% что тогда?
так что 1
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 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
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
26.09.2012, 12:22     Задача "Банковские проценты" #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
x /= 100;// здесь x=120.35 ( и в следующем вычислении участвуют и 35 копеек,хотя по условию они должны быть отброшены)
years++;
Цитата Сообщение от PG94 Посмотреть сообщение
после чего дробная часть копеек отбрасывается.
дробная часть копеек, а не копейки(дробная часть рублей)

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

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