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

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

Войти
Регистрация
Восстановить пароль
 
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
#1

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

04.01.2011, 15:39. Просмотров 880. Ответов 13
Метки нет (Все метки)

На форуме нашел такую задачу:
Гражданин 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ом.
Пожалуйста помогите найти ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2011, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пожалуйста найдите ошибку (C++):

Найдите ошибку, пожалуйста - C++
Задача: Дано ряд символов. Заменить в нем круглые скобки на квадратные. Строку считывает, выводит не заменив скобки.:wall: ...

Пожалуйста, найдите ошибку) - C++
вот такая задачка. Вывести на экран первые пять совершенных чисел (функция возвращает 1, если число совершенное, 0 – в противном...

найдите пожалуйста ошибку - C++
почему то слепляет возраст и имя 2го и 3го рабочих #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; main() { int...

Найдите ошибку пожалуйста... - C++
Программа считает сумму ряда с точность 0.001, формула n!/3*n^n Вроде все правильно, программа запускается но сразу вылетает с ошибкой...

Пожалуйста найдите ошибку - C++
У меня возникла проблема с програмой. Мне нужно вывести данные про ну например троих студентов, тоесть фамилию, имя, возраст и успеваемость...

Найдите ошибку пожалуйста - C++
Дана функция f(x) = x3 – 3*sin(x), необходимо определить минимум данной функции на отрезке методом дихотомии. При запуске вылетает...

13
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
}
1
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;
}
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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-ым месяцем поставьте вывод перед прибавлением процента
0
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 18:21  [ТС] #5
Спасибо еще раз
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.01.2011, 18:25 #6
Sokolov, Все учитывается оО. Прочтите выше - вставьте в код.
Разве нужно считать март в который ничего не прибавилось? Начало прибавляться то только в апреле
0
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
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
}
1
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;
это условие выхода из цикла?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.01.2011, 19:59 #10
Sokolov, Именно
1
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
04.01.2011, 20:09  [ТС] #11
Спасибо, не знал такого способа.

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

найдите ошибку пожалуйста - C++
Программа крашится сразу после входа в функцию sortsumma, не могу понять, что не так(функция на 49 строке) #include &lt;stdio.h&gt; ...

Найдите пожалуйста ошибку - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;ctime&gt; using namespace std; int main(){ char a; int zvezd,probel,b; int...

Не работает, найдите пожалуйста ошибку - C++
// lr2.cpp: главный файл проекта. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

найдите ошибку и покажите пожалуйста - C++
Прошу помочь, сейчас изучаю логическую переменную bool а также такие логические операторы (и,или,не)...так вот. Не могу понять в чем...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
04.01.2011, 20:33
Ответ Создать тему
Опции темы

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