Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Отбросить нули - C++

20.03.2013, 09:51. Просмотров 1577. Ответов 30
Метки нет (Все метки)

Ребят помогите отбросить нули. Например я ввожу 0000000000000005,45 а он должен принимать 5,45. И еще вопрос как сделать чтобы он не округлял значение? Потому что если я ввожу больше 16 символов то он последние округляет а мне нужно чтобы просто брал первые 16. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <stdio.h>
 
int main()
 
{
setlocale(0,"rus");
 
double A, Z, U; 
char a[256];
char *c=0;
 
while(true)
    {
    printf("Введите значение числа A(Не более 16 символов)\n");
    scanf("%s", a);
    if(getchar()==' ') 
        {
        fflush (stdin);
        continue;
        }
fflush (stdin);
A=strtod(a,&c);
{
            printf("\nA=%.2f \n",A);
            if(!isdigit(c[0]) && c[0]!=0)
                {
                printf("\nОшибка в следующем:%s\n", c);
                printf("\nПопробуй еще раз\n\n");
                continue;
                }
break;
            }
    }
 
while(true)
    {
    printf("Введите значение числа Z(Не более 16 символов)\n");
    scanf("%s", a);
    if(getchar()==' ') 
        {
        fflush (stdin);
        continue;
        }
fflush (stdin);
Z=strtod(a,&c);
{
            printf("\nZ=%.2f \n",Z);
            if(!isdigit(c[0]) && c[0]!=0)
                {
                printf("\nОшибка в следующем:%s\n", c);
                printf("\nПопробуй еще раз\n\n");
                continue;
                }
break;
            }
    }
 
printf("U=%g\n", U=(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z));
 
return 0;
}
Добавлено через 7 минут
Я пробовал сделать вот так scanf("%16s", a); Но если ввести 000000000000000000000000000000000000000000005,45 то напишет что А=0 а надо чтоб отрбросил нули и взял 5,45 или же просто не округлял значение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 09:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отбросить нули (C++):

Нужно отбросить нули - C++
Вот смотрите. У меня стоит условие что если ввести больше 16 символов то попросит ввести заново. Как сделать так что если ввести...

Как отбросить пробелы после числа? - C++
Нужно чтобы программа не считала пробел за символ. Когда я ввожу пробелы перед числом то он их отбрасывает, а вот когда после числа то...

Как отбросить последние символы строки - C++
У меня есть строка. В ней, ну пусть 20 символов. А мне только первые 10 нужны. Подскажите наиболее простой способ отбросить последние 10...

Как отбросить сотые без округления? - C++
Есть число, например, 3,46 как отбросить сотые, чтобы число получилось просто 3,4?

из N выставленных оценок отбросить минимальную и максимальную и усреднить оставшиеся оценки - C++
The_Immortal, пожалуйста помогите мне составить Построить и записать алгоритм определения судейской оценки на спортивных соревнованиях....

Перед каждой буквой третьего слова поставить '/'. Лишние символы (с 81-ого) отбросить - C++
Задание : Перед каждой буквой третьего слова поставить '/'. Лишние символы (с 81-ого) отбросить. Обработку строки реализовать с помощью...

30
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
21.03.2013, 07:26 #16
Цитата Сообщение от MishkaSh Посмотреть сообщение
Вот смотри, мне нужно чтобы не округлял
э парень, так не получится
у любого числа есть предел
у double мантиса равна 53 бита( по крайней мере у меня так)
предел числа посчитай сам
почитай про IEEE формат

Добавлено через 1 минуту
Цитата Сообщение от MishkaSh Посмотреть сообщение
Я работаю в double суть в том что можно ввести хоть 5 миллионов символов но он должен взять первые 16 как и положено double и не округлять их что в целой части что после запятой
работай со строкой, анализируй а потом приводи к double
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 07:27  [ТС] #17
Цитата Сообщение от ValeryS Посмотреть сообщение
э парень, так не получится
у любого числа есть предел
у double мантиса равна 53 бита( по крайней мере у меня так)
предел числа посчитай сам
почитай про IEEE формат

Добавлено через 1 минуту

работай со строкой, анализируй а потом приводи к double
Так оно так и делает просто мне нужно чтобы не округлял или вылезало сообщение мол введите разумное число или будет расчеты с погрешностью вот как это сделать?
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
21.03.2013, 07:37 #18
Цитата Сообщение от MishkaSh Посмотреть сообщение
Так оно так и делает просто мне нужно чтобы не округлял или вылезало сообщение мол введите разумное число или будет расчеты с погрешностью вот как это сделать?
а у doudle всегда погрешности если не на вводе то при расчетах точно будут
могу предложить ввести свои данные как в бухгалтерских программах
структуру(класс) в которой две целочисленных одно для целого, другое для дробного
у целочисленных погрешностей не бывает( ну кроме переполнения)
или работать с long long
т.е твое число умноженное на 100 с ним делать все действия, а при выводе делить на 100
какой порядок у тебя в числах 10 в 16 или больше?
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 07:41  [ТС] #19
Цитата Сообщение от ValeryS Посмотреть сообщение
а у doudle всегда погрешности если не на вводе то при расчетах точно будут
могу предложить ввести свои данные как в бухгалтерских программах
структуру(класс) в которой две целочисленных одно для целого, другое для дробного
у целочисленных погрешностей не бывает( ну кроме переполнения)
или работать с long long
т.е твое число умноженное на 100 с ним делать все действия, а при выводе делить на 100
какой порядок у тебя в числах 10 в 16 или больше?
Не понял ничего если честно
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
21.03.2013, 07:46 #20
в бухгалтерских программах doudle не используется (из-за погрешностей)
а используется типа такого
C++
1
2
3
4
5
struct MyDouble
{
int integer;// целая часть
int fractional;// дробная часть
}
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 07:53  [ТС] #21
Цитата Сообщение от ValeryS Посмотреть сообщение
в бухгалтерских программах doudle не используется (из-за погрешностей)
а используется типа такого
C++
1
2
3
4
5
struct MyDouble
{
int integer;// целая часть
int fractional;// дробная часть
}
Теперь понял. А можно сделать чтобы если я ввожу более 16 символов то он мне выдает сообщение что будет использовано вычисление с погрешностями, если не хотите погрешностей то нажмите на кнопку(Y) и введите заново, а если вас устраивают погрешности то для продолжения нажмите(U). Можно так сделать?
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
21.03.2013, 08:08 #22
Цитата Сообщение от MishkaSh Посмотреть сообщение
Можно так сделать?
можно
анализируй строку
но это тебя не убережет от погрешностей в doudle всегда найдется число которое неточно выразится
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 08:09  [ТС] #23
Цитата Сообщение от ValeryS Посмотреть сообщение
можно
анализируй строку
но это тебя не убережет от погрешностей в doudle всегда найдется число которое неточно выразится
Можешь пример кода привести?
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
21.03.2013, 17:46 #24
я бы сделал так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char cc;
do
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
 
A=strtod(a,&c);
int tmp=A*100;
A=(double)tmp/100.0;
 
printf("A=%.2f \n",A);
 
 
printf("Ваше число для работы  A=%.2f \n Желаете продолжить Y или введите другое N",A);
scanf("%c", &cc);
 
}while(cc!='Y);
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 18:04  [ТС] #25
Цитата Сообщение от ValeryS Посмотреть сообщение
я бы сделал так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char cc;
do
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
 
A=strtod(a,&c);
int tmp=A*100;
A=(double)tmp/100.0;
 
printf("A=%.2f \n",A);
 
 
printf("Ваше число для работы  A=%.2f \n Желаете продолжить Y или введите другое N",A);
scanf("%c", &cc);
 
}while(cc!='Y);
А есть функция чтобы округление убирать?
0
IrineK
Заблокирован
21.03.2013, 18:23 #26
Убирает округление floor: http://www.cplusplus.com/reference/cmath/floor/
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 18:25  [ТС] #27
Цитата Сообщение от IrineK Посмотреть сообщение
Убирает округление floor: http://www.cplusplus.com/reference/cmath/floor/
Floor округляет к меньшим значениям
0
IrineK
Заблокирован
21.03.2013, 18:30 #28
Тогда уточните термин "убирает округление".
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
21.03.2013, 18:36  [ТС] #29
Цитата Сообщение от IrineK Посмотреть сообщение
Тогда уточните термин "убирает округление".
Вот к примеру double принимает 16 символов максимум и если я пишу больше 16 символов то чтобы он просто брал эти первые 16 символов и не округлял последний символ
Пример: ввожу 777777777777777777777777777777777777777777777777777777777
Должен вывести: 7777777777777777 а не 7777777777777778
Ну это я условный пример привел мне это нужно сделать в целой и дробной части
0
IrineK
Заблокирован
21.03.2013, 18:42 #30
Работайте со строками, при необходимости перегоняйте их в числа. В свое структуре или классе можно держать отдельно целую и дробную части, любой желаемой размерности.
0
21.03.2013, 18:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:42
Привет! Вот еще темы с ответами:

Дано число. Отбросить в нем все цифры, стоящие левее самой правой единицы. - C++
вообщем такое задание, &quot;Дано число. Отбросить в нем все цифры, стоящие левее самой правой единицы.&quot; вроде легко, но я даже не знаю с чего...

Отбросить от строки последние N символов и вывести оставшуюся часть строки - C++
:help: 1. Лабораторная работа №1. Ввод-вывод в стандартные файлы. Задание: разработать программу с использованием базовых системных...

Дано натуральное число n. Отбросить в нем все цифры, стоящие правее самой правой единицы либо оставить число без изменений, если единицы в нем нет - C++
Дано натуральное число n. Отбросить в нем все цифры, стоящие правее самой правой единицы либо оставить число без изменений, если единицы в...

Задача Нули - C++
Опять проблема с вводом/выводом через файлы. Как решить вот эту задачу:Нули (Время: 1 сек. Память: 16 Мб Сложность: 16%) Требуется...


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

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

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