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

Пожалуйста найдите ошибку - C++

Восстановить пароль Регистрация
 
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 15:39     Пожалуйста найдите ошибку #1
На форуме нашел такую задачу:
Гражданин 1 марта открыл счет в банке, вложив 1000 рублей.
Через каждый месяц размер вклада увеличивается на 2 % от имеющейся суммы.
Определить за какой месяц величина ежемесячного увеличения вклада превысит 30 рублей.
Решил ее обобщить и сделать так чтобы можно было указать сумму вклада, процент и предел. Задача довольна простая, но я в этом деле новичок. У меня получился такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
int main(void)
{setlocale(LC_ALL, "Russian");
cout<<"Введите сумму денег, которую желаете вложить\n";
int vklad,dohod,mes,predel,pr,vklad1;
cin>>vklad;
cout<<"На сколько процентов размер вкалада увеличивается каждый месяц?\n";
cin>>pr;
cout<<"Введите число, чтобы определить в какой месяц прибыль от процентов привысит это число за каждый месяц\n";
cin>>predel;
vklad1=0;
mes=0;
dohod=0;
while(dohod<predel) // 20<30   
{vklad1=vklad+vklad*pr/100;// 1020      1040    
dohod=vklad1-vklad;// 1020-1000=20      1040-1020=40
vklad=vklad1; //vklad=1020              =1040
mes++;}//1                              2  
cout<<"В "<<mes<<" месяц величина ежемесечного увелечения вклада привысит "<<predel<<" рублей"<<endl;
return 0;
}
Программа запускается, но когда я ввел данны которые даны в задаче (т.е. 1000 2% 30)
получилось что величина ежемесячного увеличения вклада превысит 30 рублей в 22 месяце, а по идее то должен во 2ом.
Пожалуйста помогите найти ошибку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2011, 15:39     Пожалуйста найдите ошибку
Посмотрите здесь:

Найдите пожалуйста ошибку C++
C++ Найдите ошибку пожалуйста...
найдите пожалуйста ошибку C++
Пожалуйста, найдите ошибку) C++
C++ Найдите ошибку, пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 17:51     Пожалуйста найдите ошибку #2
Sokolov, Примерно в 22 и будет. Явно не во втором.

2 процента от 1000 - 20. 1000+20=1020 и т.д.
У меня вышло что в 21. Считать вручную как-то лень. Прогу ща скину.

Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    double start=1000;
    const double proc=0.02;
    const int sum=30;
    int cnt=0;
    while(start * proc < sum)
    {
        ++cnt;
        start+=start*proc;
    }
    std::cout<<cnt<<'\n';
    return 0;
}
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 18:18  [ТС]     Пожалуйста найдите ошибку #3
Да, уже понял свою ошибку
Цитата Сообщение от Sokolov Посмотреть сообщение
dohod=vklad1-vklad;// 1020-1000=20 1040-1020=40
спасибо за помощь

Добавлено через 19 минут
Объясните пожалуйста почему Ваша программа нне считает первый месяц?
Если добавить вывод на экран промежуточного числа в цикл, то видно что начинается со второго месяца 20.4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
        double start=1000;
        const double proc=0.02;
        const int sum=30;
        int cnt=0;
        while(start * proc < sum)
        {
                ++cnt;
                start+=start*proc;
                std::cout<<start*proc<<"\n";
        }
        std::cout<<cnt<<'\n';
        return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 18:21     Пожалуйста найдите ошибку #4
Sokolov, Считает)
C++
1
2
3
4
5
6
7
        while(start * proc < sum)
        {
               
                start+=start*proc;
                                ++cnt;
                                std::cout<<start*proc<<"\n";
        }
Как вы думаете, что здесь происходит (построчно)?
Цикл в котором условие что цикл идет до тех пор пока start * proc < 30
Затем - прибавляется процент, затем тикает счетчик, затем печатается start*proc. Если хотите увидеть вместе с 1-ым месяцем поставьте вывод перед прибавлением процента
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 18:21  [ТС]     Пожалуйста найдите ошибку #5
Спасибо еще раз
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 18:25     Пожалуйста найдите ошибку #6
Sokolov, Все учитывается оО. Прочтите выше - вставьте в код.
Разве нужно считать март в который ничего не прибавилось? Начало прибавляться то только в апреле
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 18:35  [ТС]     Пожалуйста найдите ошибку #7
Вы хотите сказать что будет 21 месяц?
1) 20
2) 20.4
3) 20.808
4) 21.2241
5) 21.6487
6) 22.0817
7) 22.5232
8) 22.9738
9) 23.4332
10 23.9019
11) 24.3799
12) 24.8674
13) 25.3649
14) 25.8722
15) 26.3895
16) 26.9174
17) 27.4557
18) 28.0049
19) 28.5649
20) 29.1362
21) 29.719
22) 30.3134
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 19:08     Пожалуйста найдите ошибку #8
Sokolov, 22. Да да. Но не учитывается самый последний месяц. Ибо цикл я уже объяснил как идет

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
int main()
{
        double start=1000;
        const double proc=0.02;
        const int sum=30;
        int cnt=0;
        while(1)
        {
                std::cout<<start*proc<<"\n";
                ++cnt;
                if(start * proc > 30)
                    break;
                start+=start*proc;
        }
        std::cout<<cnt<<'\n';
        return 0;
}
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 19:19  [ТС]     Пожалуйста найдите ошибку #9
Цитата Сообщение от ForEveR Посмотреть сообщение
while(1)
разве не бесконечный цикл?
C++
1
2
if(start * proc > 30)
                                        break;
это условие выхода из цикла?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 19:59     Пожалуйста найдите ошибку #10
Sokolov, Именно
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 20:09  [ТС]     Пожалуйста найдите ошибку #11
Спасибо, не знал такого способа.

Добавлено через 6 минут
еще не по теме хочу узнать есть ли разница между
C++
1
2
3
cout<<"\n";
//и
cout<<endl;
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 20:15     Пожалуйста найдите ошибку #12
Sokolov, Да.
Первое - просто переводит каретку на след. строку
Второе - чистит буфер и переводит каретку
Sokolov
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 20:24  [ТС]     Пожалуйста найдите ошибку #13
В каких случаях нужно очищать буфер? )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2011, 20:33     Пожалуйста найдите ошибку
Еще ссылки по теме:

C++ Пожалуйста найдите ошибку
C++ Найдите ошибку пожалуйста
C++ найдите ошибку пожалуйста

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 20:33     Пожалуйста найдите ошибку #14
Sokolov, Многие предпочитают в С++ использовать endl. Я предпочитаю использовать \n. Про endl почитайте подробнее в интернете/книжках
Yandex
Объявления
04.01.2011, 20:33     Пожалуйста найдите ошибку
Ответ Создать тему
Опции темы

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