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

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

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

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

20.03.2013, 09:51. Просмотров 1550. Ответов 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
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
20.03.2013, 10:21 #2
C++
1
2
3
4
5
6
7
char s[100];
cin>>s;// вводим все число
char *p=s;
while(*p=='0')// Сдвигаем указатель до первого ненуля
   p++;
double f;
sscantf(p,"%lf",&f);// преобразуем в число
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
20.03.2013, 11:21  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
char s[100];
cin>>s;// вводим все число
char *p=s;
while(*p=='0')// Сдвигаем указатель до первого ненуля
   p++;
double f;
sscantf(p,"%lf",&f);// преобразуем в число
Большое спасибо, а как сделать чтобы он не округлял значение выводимое на экран?
и если сделать scanf("%16s", a); то он все равно не отбрасывает нули
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
20.03.2013, 12:35 #4
cin>>s;
вводим весь текст до первого пробельного символа.
while(*p=='0')p++;
Сдвигаем указатель до первого ненуля.
В результате p адресует массив, который начинается с символа,
идущего сразу после последнего нуля.

Что не так?
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
20.03.2013, 12:54  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
cin>>s;
вводим весь текст до первого пробельного символа.
while(*p=='0')p++;
Сдвигаем указатель до первого ненуля.
В результате p адресует массив, который начинается с символа,
идущего сразу после последнего нуля.

Что не так?
Может быть я не так вставил в код. Покажи рабочий вариант пожалуйста
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,399
Завершенные тесты: 1
20.03.2013, 17:50 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"Rus");
    double Z; 
    char a[256];
    puts("введите число с нулями:");
    gets(a);// вводим все число
    char *p=a;
    while(*p=='0')// Сдвигаем указатель до первого ненуля
        p++;
    sscanf(p,"%lf",&Z);// преобразуем в число
    printf("\nZ=%10.2lf\n",Z);
    _getch(); 
    return 0;
}
учтите, что в Русской локализации целая часть от дробной отделяется запятой,
т.е. вводить надо так
00000000000000000000000000000000073,25
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
21.03.2013, 05:55  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"Rus");
    double Z; 
    char a[256];
    puts("введите число с нулями:");
    gets(a);// вводим все число
    char *p=a;
    while(*p=='0')// Сдвигаем указатель до первого ненуля
        p++;
    sscanf(p,"%lf",&Z);// преобразуем в число
    printf("\nZ=%10.2lf\n",Z);
    _getch(); 
    return 0;
}
учтите, что в Русской локализации целая часть от дробной отделяется запятой,
т.е. вводить надо так
00000000000000000000000000000000073,25
Спасибо, но еще одно но как убрать округление числа? Я ввожу например 000000000000000073,2564 и вместе 73,25 он выводит 7,26

Добавлено через 19 минут
*73,26
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
21.03.2013, 06:26 #8
вот выделил твой код для проверки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
 
setlocale(0,"rus");
 
double A, Z, U; 
char a[256];
char *c=NULL;
for(int i=0;i<10;i++)
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
    
fflush (stdin);
A=strtod(a,&c);
printf("\nA=%.2f \n",A);
}
 
 }
и вот что получилось
в чем проблемы?
0
Миниатюры
Отбросить нули  
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
21.03.2013, 06:32 #9
Цитата Сообщение от MishkaSh Посмотреть сообщение
while(*p=='0')// Сдвигаем указатель до первого ненуля
А если первым символом будет пробел или минус?

Цитата Сообщение от MishkaSh Посмотреть сообщение
о но как убрать округление числа?
это вывод округляет
Цитата Сообщение от MishkaSh Посмотреть сообщение
printf("\nZ=%10.2lf\n",Z);
ты же сам задал 2 числа после запятой
округляй сам
например так
C++
1
2
int tmp=Z*100;
Z=(double)tmp/100.0;
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
21.03.2013, 06:57  [ТС] #10
Цитата Сообщение от ValeryS Посмотреть сообщение
А если первым символом будет пробел или минус?


это вывод округляет

ты же сам задал 2 числа после запятой
округляй сам
например так
C++
1
2
int tmp=Z*100;
Z=(double)tmp/100.0;
Если пробую так округлить то выдает ошибку, а если убрать 2 знака после запятой?
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
21.03.2013, 07:02 #11
Цитата Сообщение от MishkaSh Посмотреть сообщение
Если пробую так округлить то выдает ошибку,
какую?

Добавлено через 3 минуты
вот код сейчас проверил все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
 
setlocale(0,"rus");
 
double A, Z, U; 
char a[256];
char *c=NULL;
for(int i=0;i<10;i++)
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
 
A=strtod(a,&c);
int tmp=A*100;
A=(double)tmp/100.0;
printf("\nA=%.2f \n",A);
}
 
 }
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
21.03.2013, 07:05  [ТС] #12
Мне так же округление в целой части нужно убрать
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
21.03.2013, 07:07 #13
Цитата Сообщение от MishkaSh Посмотреть сообщение
Мне так же округление в целой части нужно убрать
не понял?
кстати какое у тебя максимальное число
если 16значное то int не пойдет( не хватит разрядов)
нужен long long
0
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
21.03.2013, 07:10  [ТС] #14
Цитата Сообщение от ValeryS Посмотреть сообщение
какую?

Добавлено через 3 минуты
вот код сейчас проверил все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
 
setlocale(0,"rus");
 
double A, Z, U; 
char a[256];
char *c=NULL;
for(int i=0;i<10;i++)
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
 
A=strtod(a,&c);
int tmp=A*100;
A=(double)tmp/100.0;
printf("\nA=%.2f \n",A);
}
 
 }
Вот смотри, мне нужно чтобы не округлял
0
Миниатюры
Отбросить нули  
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 129
21.03.2013, 07:15  [ТС] #15
Цитата Сообщение от ValeryS Посмотреть сообщение
не понял?
кстати какое у тебя максимальное число
если 16значное то int не пойдет( не хватит разрядов)
нужен long long
Я работаю в double суть в том что можно ввести хоть 5 миллионов символов но он должен взять первые 16 как и положено double и не округлять их что в целой части что после запятой

Добавлено через 1 минуту
ну или на крайняк как сделать чтобы например чтобы он писал что если введено больше символов чем надо то будет вычисление с погрешностью или же нажмите(к примеру y) для того чтобы ввести заново
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 07:15
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
21.03.2013, 07:15
Ответ Создать тему
Опции темы

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