Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поменять местами целую и дробную часть 
V
    Опции темы
ioManip
  Дата 2.10.2012, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



Дано число R вида nnn.ddd. Получить ddd.nnn  smile 


Это сообщение отредактировал(а) ioManip - 2.10.2012, 13:57
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
bsa
Дата 2.10.2012, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



nnn = int(nnn_ddd);
ddd = (nnn_ddd - nnn) * 1000;
ddd_nnn = ddd + nnn/1000.0;
PM   Вверх
ioManip
Дата 2.10.2012, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



bsa, Благодарю! smile 
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
NoviceF
Дата 2.10.2012, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Вот можно ещё кувалдой немного поработать и получится что-то типа такого smile)

Код

#include <iostream>
#include <string>
#include <algorithm>

int main() {

    std::string str("333.555");
    std::string s1;


    s1.assign(std::find(str.begin(), str.end(), '.') + 1, str.end());
    s1.append(".");
    s1.append(str.begin(), std::find(str.begin(), str.end(), '.'));
    str.swap(s1);


    std::cout << str << std::endl;
}

PM MAIL   Вверх
volatile
Дата 2.10.2012, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(NoviceF @  2.10.2012,  20:25 Найти цитируемый пост)
s1.assign(std::find(str.begin(), str.end(), '.') + 1, str.end());

NoviceF, что будет если она не найдет точки?
и зачем два раза файнд?

ещё кувалдой немного поработать не помешало-бы.
Шутю....smile

Это сообщение отредактировал(а) volatile - 2.10.2012, 21:04
PM MAIL   Вверх
NoviceF
Дата 2.10.2012, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(volatile @ 2.10.2012,  20:59)
Цитата(NoviceF @  2.10.2012,  20:25 Найти цитируемый пост)
s1.assign(std::find(str.begin(), str.end(), '.') + 1, str.end());

NoviceF, что будет если она не найдет точки?
и зачем два раза файнд?

ещё кувалдой немного поработать не помешало-бы.
Шутю....smile

Ну по условию точка просто обязана быть, поэтому проверку не делал smile

А двум файндам альтернатива сохранить позицию точки в итератор и использовать его?

Код

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::string str("333.555");
    std::string s1;
    std::string::iterator it = std::find(str.begin(), str.end(), '.');
    s1.assign(it + 1, str.end());
    s1.append(".");
    s1.append(str.begin(), it);
    str.swap(s1);
    std::cout << str << std::endl;
}


или как-то по-другому?

Это сообщение отредактировал(а) NoviceF - 2.10.2012, 21:26
PM MAIL   Вверх
ioManip
Дата 3.10.2012, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



Ребят, возникла проблемка. Не могу понять, то ли моя ошибка, то ли это зависит от системы в которой я работаю...
Код

#include <stdio.h>
#include <iostream>


int main()
{
    float nnn, ddd, ddd_nnn, nnn_ddd;
    
    std::cin >> nnn_ddd;
    nnn = int(nnn_ddd);
    std::cout << "nnn = " << nnn << std::endl;
    ddd =  (nnn_ddd - nnn) * 1000 ;
    std::cout << "ddd = " << ddd << std::endl;
    ddd_nnn = ddd + nnn / 1000.;
    std::cout << ddd_nnn << std::endl;
    
    system("Pause");
    return 0;
}


Например при вводе 563,123 выдается 123,549...(откуда 549?)
                при вводе 999,657 выдается 657,981...
В чем может быть ошибочка?
P.S. floor and ceil использовал, получалось разрешит проблему, но не для всех значений...
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
bsa
Дата 3.10.2012, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



ioManip, вместо float используй double.
PM   Вверх
volatile
Дата 3.10.2012, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(NoviceF @  2.10.2012,  21:25 Найти цитируемый пост)
Ну по условию точка просто обязана быть, поэтому проверку не делал 

В реальных программах на такое полагаться нельзя.
Предположим в программу поступают числа из другой процедуры, и там на каком-то этапе получилось число 123.000.
Естественно при выводе оно будет преобразовано в "123".
Ваша функция, не найдя точки, выбросит исключение, и отправит всю программу в "нирвану".
Потом доказывайте что точка там просто должна была быть по условию.

Я уж не говорю что может банально попасться како-то Вася, который забудет про точку.

PM MAIL   Вверх
NoviceF
Дата 3.10.2012, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(volatile @  3.10.2012,  18:54 Найти цитируемый пост)
В реальных программах на такое полагаться нельзя.


Если найдётся человек, который будет решать задачу автора таким способом, надеюсь он не забудет выполнить проверку на отсутствие точки smile
PM MAIL   Вверх
volatile
Дата 3.10.2012, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(NoviceF @  3.10.2012,  19:20 Найти цитируемый пост)
надеюсь он не забудет 

я просто показал от куда берутся глюки.
Да. будем надеяться...

PM MAIL   Вверх
agentjamesbolt007
Дата 11.10.2012, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 5.9.2012

Репутация: нет
Всего: нет



если условия именно такие: Дано число R вида nnn.ddd. Получить ddd.nnn , то

Код

#include <iostream>
using namespace std;

int main()
{   
    int num;
    double number, fraction;
    cout <<"Enter the number: ";
    cin >>number;
    num =static_cast<int>(number);
    fraction =number -num;
    cout <<"Your value: " <<fraction *1000 <<'.' <<num <<endl;
    return 0;
}

PM MAIL   Вверх
volatile
Дата 11.10.2012, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(agentjamesbolt007 @  11.10.2012,  07:39 Найти цитируемый пост)
если условия именно такие: Дано число R вида nnn.ddd. Получить ddd.nnn , то

agentjamesbolt007, а если условия такие, но число отрицательно ?
 smile 
PM MAIL   Вверх
agentjamesbolt007
Дата 12.10.2012, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 5.9.2012

Репутация: нет
Всего: нет



Цитата(volatile @  11.10.2012,  21:59 Найти цитируемый пост)
 а если условия такие, но число отрицательно ?


 ))
PM MAIL   Вверх
math64
Дата 12.10.2012, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(volatile @  11.10.2012,  21:59 Найти цитируемый пост)
agentjamesbolt007, а если условия такие, но число отрицательно ?

Все будет работать. Но если число больше 999 (по модулю) или после запятой больше 3 знаков (имеется в виду код bsa) - то нет.
А поскольку числа хранятся в двоичной системе, то из-за ошибок округления ...
В коде agentjamesbolt007 будет неправильно, если число меньше 100.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.