Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
1

Преобразование типов.

11.09.2011, 21:52. Показов 980. Ответов 14
Метки нет (Все метки)

Всем привет.
Суть вопроса - ответ программы должен содержать только два знака после запятой.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main(void)
{
    float p, sh, pe, otvet, p1 = 240, sh1 = 12;
    cout << "Pound: ";
    cin >> p;
    cout << "Shilling: ";
    cin >> sh;
    cout << "Penny: ";  
    cin >> pe;
    otvet = ((p * p1) + (sh * sh1) + pe) / p1; 
    cout << "Answer: " << otvet << endl;
    system ("pause");
    return 0;
}
Можно ли для решения вопроса применить метод преобразования типов (без использования округления)? Если да - тогда как?
За ранее благодарю Вас.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2011, 21:52
Ответы с готовыми решениями:

Преобразование типов
Как понять выражение x=(int) y/z; применение типа (int) при значениях y=78, z=25? = 3.12...

Преобразование типов
Как преобразовать char * в float?

Преобразование типов
Вообщем допустим есть два класа, класс T и класс A, комплексные числа в разной форме...

Преобразование типов
Как преобразовать массив char message в строку char *strmessage ?????

14
2553 / 1318 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 21:56 2
Пойдет?
1
65 / 65 / 16
Регистрация: 25.11.2009
Сообщений: 283
11.09.2011, 21:58 3
Перед написанием вопроса рекомендую взглянуть на описанное ранее
Флаги форматирования и манипуляторы
А именно
C++
1
2
3
4
//Печатаем вещественные числа в форме с фиксированной точкой, 
        //точность определяем строкой ниже в setprecision
        std::cout.flags(std::ios::fixed);
        std::cout<<std::setprecision(2)<<_double<<std::endl;
0
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.09.2011, 22:02 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main(void)
{
        float p, sh, pe, otvet, p1 = 240, sh1 = 12;
        cout << "Pound: ";
        cin >> p;
        cout << "Shilling: ";
        cin >> sh;
        cout << "Penny: ";      
        cin >> pe;
        otvet = ((p * p1) + (sh * sh1) + pe) / p1; 
        cout.precision(2);
        cout << "Answer: " << otvet << fixed << endl;
        system ("pause");
        return 0;
}
1
235 / 172 / 25
Регистрация: 13.11.2010
Сообщений: 425
11.09.2011, 22:02 5
C++
1
2
    std::cout.setf(std::ios::fixed,std::ios::floatfield);
    std::cout.precision(2);
1
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.09.2011, 22:03 6
ну да, неоригинально
1
65 / 65 / 16
Регистрация: 25.11.2009
Сообщений: 283
11.09.2011, 22:07 7
От каждого по способу ?
1
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
11.09.2011, 22:11  [ТС] 8
... я аж растерялся
Всем спасибо!
Сей час попробую каждый из способов.
0
6242 / 3543 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
11.09.2011, 22:14 9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
 
int main(void)
{
        float p, sh, pe, otvet, p1 = 240, sh1 = 12;
        printf("Pound: ");
        scanf("%f", &p);
        printf("Shilling: ");
        scanf("%f", &sh);
        printf("Penny: ");
        scanf("%f", &pe);
        otvet = ((p * p1) + (sh * sh1) + pe) / p1; 
        printf("Answer: %.2f\n", otvet);
        system ("pause");
        return 0;
}
1
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.09.2011, 22:15 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <boost/format.hpp>
 
using namespace std;
int main(void)
{
        float p, sh, pe, otvet, p1 = 240, sh1 = 12;
        cout << "Pound: ";
        cin >> p;
        cout << "Shilling: ";
        cin >> sh;
        cout << "Penny: ";      
        cin >> pe;
        otvet = ((p * p1) + (sh * sh1) + pe) / p1; 
        cout.precision(2);
        cout << "Answer: " << boost::format("%.2f") % otvet << endl;
        system ("pause");
        return 0;
}
да и у меня там otvet и fixed местами перепутаны %)
0
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
11.09.2011, 22:50  [ТС] 11
В общем так.
Не буду перечислять не корректно работающие варианты, укажу рабочий:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
 
{
        float p, sh, pe, otvet, p1 = 240, sh1 = 12;
        printf("Pound: ");
        scanf("%f", &p);
        printf("Shilling: ");
        scanf("%f", &sh);
        printf("Penny: ");
        scanf("%f", &pe);
        otvet = ((p * p1) + (sh * sh1) + pe) / p1; 
        printf("Answer: %.2f\n", otvet);
        system ("pause");
        return 0;
}
Как она работает - пока не знаю (выполняю задания по результатам второй главы Р. Лафорте "ООП в С++"), но ответ программа выдает правильный!
Ребята, всем спасибо!

Добавлено через 15 минут
Из-за того, что пока не понимаю как это работает - удовольствия от решения проблемы не получил.
Но тем не менее всем спасибо!
0
2553 / 1318 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 22:53 12
Как она работает - пока не знаю
C
1
%.2f
Вся соль тут. 2 - кол-во цифр после запятой. f - тип переменной. Все просто.
1
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
11.09.2011, 23:51  [ТС] 13
Спасибо, я это понял.
Если %.2f заменить на %.4f - тогда число будет выводиться с четырьмя знаками после запятой.
Но для меня пока не понятно как оно работает, что это такое, откуда берется и как функционирует std::cout.setf(std::ios::fixed,std::ios::floatfield);.
0
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
15.09.2011, 08:29  [ТС] 14
А Г А ! ! !
Я сам её решил! И вот правильный листинг:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main(void)
{
    int p, sh, pe, x1;
    const float x2 = 2.4;       
    cout << "Pound: ";
    cin >> p;
    cout << "Shilling: ";
    cin >> sh;
    cout << "Penny: ";  
    cin >> pe;
    x1 = (sh * 12 + pe);
    x1 = static_cast<float>(x1)/x2;
    cout << "Answer: " << p << "." << x1 << endl;
    system ("pause");
    return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11055 / 7011 / 1657
Регистрация: 25.07.2009
Сообщений: 12,775
15.09.2011, 08:36 15
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <math.h>
 
int main(void){
    int i;
 
    for ( i = 0; i < 10; ++i )
        printf("%.*f\n", i, M_PI);
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2011, 08:36

Преобразование типов
Возможно ли преобразовать vector &lt;Transport_Vehicle*&gt; Cars_for_transportation в vector &lt;MotorCar*&gt;...

преобразование типов
Уважаемые специалисты, у меня имеется одна проблема. Есть два числа. double и float. Надо из...

Преобразование типов
Какое значение примет переменная x после выполнения следующего фрагмента программы при значениях...

Преобразование типов
что-то не пойму почему такая ошибка код такой... .... cnetPars.parse(xml, m_creator, m_name,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru