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

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

Восстановить пароль Регистрация
 
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
11.09.2011, 21:52     Преобразование типов. #1
Всем привет.
Суть вопроса - ответ программы должен содержать только два знака после запятой.

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;
}
Можно ли для решения вопроса применить метод преобразования типов (без использования округления)? Если да - тогда как?
За ранее благодарю Вас.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 21:52     Преобразование типов.
Посмотрите здесь:

Преобразование типов C++
Преобразование типов C++
C++ Преобразование типов
Преобразование типов C++
C++ Преобразование типов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 21:56     Преобразование типов. #2
Пойдет?
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 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;
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
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;
}
almazsr
232 / 169 / 7
Регистрация: 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);
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.09.2011, 22:03     Преобразование типов. #6
ну да, неоригинально
}{NiM
 Аватар для }{NiM
64 / 64 / 2
Регистрация: 25.11.2009
Сообщений: 283
11.09.2011, 22:07     Преобразование типов. #7
От каждого по способу ?
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
11.09.2011, 22:11  [ТС]     Преобразование типов. #8
... я аж растерялся
Всем спасибо!
Сей час попробую каждый из способов.
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 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;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
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 местами перепутаны %)
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
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 минут
Из-за того, что пока не понимаю как это работает - удовольствия от решения проблемы не получил.
Но тем не менее всем спасибо!
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 22:53     Преобразование типов. #12
Как она работает - пока не знаю
C
1
%.2f
Вся соль тут. 2 - кол-во цифр после запятой. f - тип переменной. Все просто.
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
11.09.2011, 23:51  [ТС]     Преобразование типов. #13
Спасибо, я это понял.
Если %.2f заменить на %.4f - тогда число будет выводиться с четырьмя знаками после запятой.
Но для меня пока не понятно как оно работает, что это такое, откуда берется и как функционирует std::cout.setf(std::ios::fixed,std::ios::floatfield);.
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2011, 08:36     Преобразование типов.
Еще ссылки по теме:

C++ С++ преобразование типов
Преобразование типов C++
C++ Преобразование типов

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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;
}
Yandex
Объявления
15.09.2011, 08:36     Преобразование типов.
Ответ Создать тему
Опции темы

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