Другие языки программирования и технологии

Добрый день. Я решил задачу на Си++

Пользователь вводит с клавиатуры время начала и время завершения телефонного разговора (часы минуты и секунды). Посчитать стоимость разговора если стоимость минуты 30 копеек.
Вот код программы:
#include "pch.h"
#include

using namespace std;

int main()
{
setlocale(0, "rus");

int hour;
int min;
double sec;
double cena;
cout << "ввести кол-во разговоров в часах:";
cout << "ввод оставшегося кол-ва минут для разговора";
if (min>60);
cout << "ввод правильного значения в мин" << endl;
cin >> min;
cout << "ввод оставшееся количество секунд для разговора";
if (sec>60);
cout << "ввод правильного количества оставшихся секунд" << endl;
cin >> sec;
cena = (hour * 60 * 0.3) + min * 0.3 + sec * 0.05;
cout << "стоимость звонка" << cena << endl;
return 0;
}

Но программа почему-то работает не правильно. Где я допустил ошибку и как ее мне исправить?
#include <iostream>
#include <string>
using namespace std;
class Time final {
public:
Time() : h_(0), m_(0), s_(0) {}
Time(const int h, const int m, const int s) : h_(h), m_(m), s_(s) {}
int seconds()const {
return h_ * 3600 + m_ * 60 + s_;
}
string time()const {
string box;
prev_zero(box, h_);
box += to_string(h_) + ":";
prev_zero(box, m_);
box += to_string(m_) + ":";
prev_zero(box, s_);
box += to_string(s_);
return box;
}
string difference(const Time& t)const {
const auto diff = abs(t - *this);
const auto h = diff / 3600;
const auto m = (diff - h * 3600) / 60;
const auto s = diff % 60;
Time tmp(h, m, s);
return tmp.time();
}
private:
int h_;
int m_;
int s_;
friend istream& operator>>(istream& in, Time& t) {
cout << "Часов: "; in >> t.h_;
cout << "Минут: "; in >> t.m_;
cout << "Секунд: "; in >> t.s_;
return in;
}
friend int operator-(const Time& a, const Time& b) {
return b.seconds() - a.seconds();
}
static void prev_zero(string& line, const int x) {
if (x < 10) line += "0";
}
};
class Billing final {
public:
using rate_t = double;
explicit Billing(const rate_t rate) : rate_(rate) {}
void start(const Time& t) {
start_ = t;
}
void end(const Time& t) {
end_ = t;
}
double cost()const {
const auto rs = rate_ / 60;
return fabs(end_ - start_) * rs;
}
string show()const {
auto tmp = static_cast<int>(cost() * 1000);
if (tmp % 10 >= 5) tmp += 5;
tmp /= 10;
const auto kop = tmp % 100;
const auto rub = tmp / 100;
auto res = to_string(rub) + ".";
if (kop < 10) res += "0";
res += to_string(kop);
return res;
}
private:
double rate_;
Time start_;
Time end_;
};
int main() {
setlocale(LC_CTYPE, "Russian_Russia.1251");
Time t1; cin >> t1;
cout.put('\n');
Time t2; cin >> t2;
Billing billing(0.30);
billing.start(t1);
billing.end(t2);
cout
<< "Продолжительность звонка: " << t2.difference(t1)
<< "\nСтоимость звонка: " << billing.show() << endl;
system("pause");
}
ИМ
Илья Матушкин
73 525
Лучший ответ
Нурман Жумагалиев Это конечно хорошо, но очень много сложного тут. Нужно упростить.
Ты вводишь только оставшееся время, а где у тебя ввод времени начала разговора?
Алгоритм должен быть такой:
1. Ввод времени начала (чч, мм, сс)
2. Перевод времени в минуты
3. Ввод времени окончания (чч, мм, сс)
4. Перевод времени в минуты
5. Вычесть из времени окончания время начала
6. Умножить результат на 0,3
Максим Мозг
Максим Мозг
17 771
Для начала отсутствует cin >> hour в принципе. Затем что это за условия if (min>60); - у тебя в после условия стоит ; что сразу и заканчивает реакцию на условие. Наконец условия стоят до ввода значений, какой в них вообще тогда смысл.
Если программа не работает, то задачу ты не решил
Нурман Жумагалиев Хорошо, где я в коде допустил ошибку? И как ее исправить? Я это спрашивал.