1. Molen12.05.2024 в 04:08от
Загрузка...
Загрузка...

Нужна помощь с c++

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем rivizoft, 30.06.2017.

Метки:
  1. rivizoft

    rivizoft

    Статус:
    Оффлайн
    Регистрация:
    02.05.17
    Сообщения:
    39
    Репутация:
    2 +/-
    Прохожу курс по C++. Нужно решить задачку на тему процентов, второй день маюсь не понимаю в чем проблема :dntknw:

    Процентная ставка по вкладу составляет P процентов годовых, которые прибавляются к сумме вклада через год. Вклад составляет X рублей Y копеек. Определите размер вклада через K лет.

    Формат входных данных
    Программа получает на вход целые числа P, X, Y, K .

    Формат выходных данных
    Программа должна вывести два числа: величину вклада через K лет в рублях и копейках. Дробное число копеек по истечение года отбрасывается. Перерасчет суммы вклада (с отбрасыванием дробных частей копеек) происходит ежегодно.

    Sample Input:
    12
    179
    0
    5

    Sample Output:
    315 43

    На выходе у меня получается число 315 45, вместо 315 43. Пробовал откидывать копейки в цикле, в итоге тоже самое число... Помогите)

    Код:
    #include <iostream>
    #include <iomanip>
    #include <cmath>
    
    using namespace std;
    
    int main () {
        int pcent, rub, year, a = 0;
        double summ, cop, summ2, summ3, summ4;
        cin >> pcent >> rub >> cop >> year;
        summ = rub + cop * 0.01;   
        while (a != year) {
            summ2 = summ * pcent / 100;
            summ = summ + summ2;
            a++;
        }
        cout << trunc(summ) << " " << int((summ - (int)summ) / 0.01);
    return 0;
    }
    
     
  2. tomorrowmc

    tomorrowmc

    Статус:
    Оффлайн
    Регистрация:
    20.02.13
    Сообщения:
    10
    Репутация:
    47 +/-
    Код:
    #include "stdafx.h"
    #include <iostream>
    #include <cstring> // Подключение типа string
    #define Percent 0.12 // В общем случае это макрос,  но у нас это константа
    
    using namespace std; // Использование пространства имён
    
    int main()
    {
        string a; // Для преобразования числа в строку
        char buf[10]; // То же что и на строке 10
        int P = 0, X = 0, Y = 0, K = 0; // Обнуление переменных
        cin >> P >> X >> Y >> K; // Ввод переменных
        _itoa_s(Y, buf, 10); // Преобразование числа в строку
        a = string(buf); // Преобразование буффера buf типа char в тип string
        double res = 0, sec = 0; // Переменная res для накопления суммы, sec для остатка от деления
        double sum = (Y / (pow(10, a.length()))) + X; // Y / pow(10, a.length())) широкоспециальное применение получения дробного числа 0. и тд. Число копеек умножается на 10 в степени количества цифр копеек.
    
        for (int i = 0; i < K; i++) // Цикл на 5 лет
        {
            if (i == 0) {
                res = sum + (sum * Percent);
                res = round(res); // Round для округления, а не отбрасывания остатка
            }
            else {
                res += res * Percent;
                if (i + 1 != K) res = round(res);
            }
        }
    
        sum = modf(res, &sec); // В переменную sum - остаток в sec - целая часть. modf получение целой и дробной части числа
    
        cout << "Whole part: " << sec << " Fraction: " << sum << endl; // Вывод двух чисел
    
        system("pause"); // Пристановка выполнения программы (Так как программа открывается в cmd, то в ней можно использовать команды среды выполнения. Эта строчка отправляет среде выполнения команду pause
        return 0;
    }
    Почему не получается: всё зависит от среды выполнения от ОСИ и тд. Аспектов тут много. Скорее всего тот кто давал задачу имеет другой компилятор и там другая точность и вообще другая точность вычисления именно поэтому ваши результаты не совпадают. У меня получилось вообще 72 копейки.
    Так же советую тебе обнулять переменные, когда ты их объявляешь. Иногда, если ты это не сделаешь ты можешь столкнутся с проблемой, что в ней хранится мусор и все твои вычисления будут неправильными. trunc отбрасывает остаток. По этому с ним вообще получится 313,что вообще не так. По этому я использую round. Пытайся оформлять код красивее. Допустим логические блоки, допустим там где ты что то считаешь выделяй enter'ами. Тут while не обязателен. Легче было бы использовать for так как не нужно объявлять ещё одну переменную, точнее конечно нужно, но после выполнения цикла она уйдёт в небытие. И ещё программировать не нужно говнокодом. Т.е. не нужно решать задачу ускоспециализированно. Твоя задача пойдёт только на двузначные копейки. То есть это неправильно. Я прокомментировал как решить эту же задачу широкоспециально выше.
     
  3. Marakasi4

    Marakasi4

    Статус:
    Оффлайн
    Регистрация:
    04.01.18
    Сообщения:
    74
    Репутация:
    25 +/-
    Спустя пол года, да да я

    #include <iostream>
    using namespace std;
    #include <cmath>

    int main(int argc, char** argv) {
    double x=0,p=0,y=0;
    int z=0;
    int res=0;
    cin>>x>>p>>y;
    while (y>x){
    x=x+x*p*0.01;
    x=x*100;
    x=(int)x;
    x=x/100;
    z=z+1;

    }
    cout<<z;
     
      FunnyFup нравится это.
  4. kraxer24

    kraxer24

    Статус:
    Оффлайн
    Регистрация:
    22.05.16
    Сообщения:
    70
    Репутация:
    43 +/-
    Stepik? Там должны быть ответы в комментариях