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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
KennyLM
0 / 0 / 0
Регистрация: 17.07.2011
Сообщений: 4
#1

Округление дробового числа - C++

17.07.2011, 18:07. Просмотров 1530. Ответов 7
Метки нет (Все метки)

Здраствуйте . Нужно написать программку. У пользователя должны спросить какое число ввести надо, к примеру он введет 1.234567. Потом у пользователя спрашивают сколько оставить чисел, если 3 то должно получится 1.23, если 5 то 1.2346. Ну и округлить предведущие числа.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
17.07.2011, 20:22     Округление дробового числа #2
Не мудрствуя лукаво
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void){
    double val;
    int pre;
    
    printf("Value: ");
    scanf("%lf", &val);
    printf("Precision: ");
    scanf("%d", &pre);
    printf("Result: %.*f\n", pre, val);
    
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
17.07.2011, 20:26     Округление дробового числа #3
Если интересен сам алгоритм округления, а не работа стандартных функций, то вот реализация
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.h>
 
void main()
{
    cout<<"Vvedite chislo\t";
    double num;cin>>num;
    cout<<"Skolko chisel posle zapyatoi ostavit'?\r\n";
    int m;cin>>m;
    int celay_chast = 2*(num/2);
    num -= celay_chast;
    for(int i = 0; i < m; i++)
        num *= 10;
    int drobn_chast = num;
    if(4 < int(num*10 - drobn_chast*10))
        drobn_chast += 1;
    cout<<celay_chast<<"."<<drobn_chast<<"\r\n";
    //ÄîáГ*ГўГЁГ« äëÿ âîçìîæГ*îñòè ââîäГ* ñëåä Г·ГЁГ±ГҐГ«
    cout<<"Nazmite NUM1 dlya povtornogo vvoda\r\n";
    int iKEY;cin>>iKEY;
    if(iKEY == 1)
        main();
}
Миниатюры
Округление дробового числа  
nameless
17.07.2011, 20:32
  #4

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
if(iKEY == 1) 
    main();
Ох, и нехорошо же так делать..

-=ЮрА=-
Заблокирован
Автор FAQ
17.07.2011, 21:03     Округление дробового числа #5
Хорошо,как по другому реализовать повторное выполненте алгоритма?если вводить цикл-код усложняется,использовать безусловный переход,тоже не рекомендовано,а вот рекурсия иногда даже рекомендована или я не прав?мэйн в рамках указанной программы юзаю как рекурсивную функцию...
ValeryLaptev
Эксперт С++
1016 / 795 / 48
Регистрация: 30.04.2011
Сообщений: 1,614
17.07.2011, 21:06     Округление дробового числа #6
Цитата Сообщение от nameless Посмотреть сообщение

Не по теме:


Ох, и нехорошо же так делать..

Более того, по стандарту - запрещено.
Хотя я с ТурбоС++ еще баловался...

Добавлено через 45 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Хорошо,как по другому реализовать повторное выполненте алгоритма?если вводить цикл-код усложняется,использовать безусловный переход,тоже не рекомендовано,а вот рекурсия иногда даже рекомендована или я не прав?мэйн в рамках указанной программы юзаю как рекурсивную функцию...
Надо просто написать отдельную рекурсивную функцию и вызвать ее в main().
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
18.07.2011, 03:01     Округление дробового числа #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
сам алгоритм округления

Не по теме:

Да разве ж это синкопа? Вот синкопа!
(с)


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
 
#define ROUND(v, p) (floor(v * pow(10.0, p) + 0.5) / pow(10.0, p))
 
int main(void){
    double val;
    int precision;
    
    while ( printf("Value: ") && scanf("%lf", &val) == 1 && printf("Precision: ") && scanf("%d", &precision) == 1 )
        printf("Rounded value: %.10f\n", ROUND(val, precision));
    
    return 0;
}
При большом желании floor() и pow() тоже можно свои написать, зачем только?..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 04:31     Округление дробового числа
Еще ссылки по теме:

C++ Округление вещественного числа до заданного количества знаков
C++ Погрешность числа (округление)
C++ Округление числа до ближайшего целого
Округление числа C++
Округление числа до двух цифр C++

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

Или воспользуйтесь поиском по форуму:
rrrFer
Заблокирован
18.07.2011, 04:31     Округление дробового числа #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если вводить цикл-код усложняется,использовать безусловный переход,тоже не рекомендовано,а вот рекурсия иногда даже рекомендована или я не прав
используйте цикл. Рекурсия - это большие издержки, связанные с активным использованием стека для сохранения значений локальных переменных перед вызовом функции, передачей аргументов функции и получения результата - все это через стек.
Стек не резиновый, да и инструкций больше.
Везде где можно надо рекурсию преобразовывать в цикл.
Yandex
Объявления
18.07.2011, 04:31     Округление дробового числа
Ответ Создать тему
Опции темы

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