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

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

Войти
Регистрация
Восстановить пароль
 
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
#1

Сумма цифр дробной части - C++

27.03.2013, 20:16. Просмотров 1099. Ответов 14
Метки нет (Все метки)

Всем привет!

Весь день пытаюсь найти ошибку в своей программе. Задача вот такая: Найдите сумму первых трех цифр дробной части вещественного числа. Например, для числа 23,16809 она равна 15.
Написал следующий код на Си:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
void main (void)
{
  float f;
  long int x, y, z, i;
  char c;
  do
    {      
      clrscr ();
      printf ("Vvedite chislo \n");
      scanf ("%f", &f);
      x = (int (f*10)) % 10;
      y = (int (f*100)) % 10;
      y = (int (f*1000)) % 10;
      i = x+y+z;
      printf ("Summa pervih treh tsifr drobnoy chasti chisla %f ravna %d \n", f, i);
      printf ("Eshe raz? y/n \n");
      scanf ("%c", &c);
    }
  while (c == 'y');
}
Суть в том, что некоторые числа считаются правильно, некоторые неправильно. Понимаю, что задача легкая. Но всё же, если кто видит ошибку, подскажите пожалуйста. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 20:16     Сумма цифр дробной части
Посмотрите здесь:

Найти вещественные числа, у которых сумма цифр целой и дробной части равны - C++
2)Дан текстовый файл с неизвестным количеством вещественных чисел. Написать функцию для определения есть ли среди них число у которого...

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

Написать функцию для определения наличия в файле чисел, у которых сумма цифр целой и дробной части равны - C++
2)Дан текстовый файл с неизвестным количеством вещественных чисел. Написать функцию для определения есть ли среди них число у которого...

Классы. Как посчитать количество цифр в дробной части числа - C++
class Chislo { double znach; //Значение char zapis; //Запись числа public: Chislo() // Конструктор без параметров...

В вещественном числе определить, равны ли суммы цифр целой и дробной части - C++
Дан текстовый файл с неизвестным количеством вещественных чисел. Написать функцию для определения есть ли среди них число у которого...

Определить, есть ли среди k-первых цифр дробной части вещественного числа цифра 0 - C++
Помогите пожалуйста решить задачки: 1. Определить, есть ли среди k-первых цифр дробной части вещественного числа цифра 0. 2. Даны два...

Задача найти сумму первых трех цифр дробной части вещественного числа - C++
Программа работает. Но мне не понятно, почему она работает только если вычитать 48? Изначально я делала алгоритм без того и считалось...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 20:27     Сумма цифр дробной части #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main()
{
    std::string number;
 
    std::cin >> number;
 
    int answer = 0;
 
    for(size_t i = 0; i < number.length(); ++i)
        if(number[i] == ',' || number[i] == '.')
            answer += (number[i+1]-48) + (number[i+2]-48) + (number[i+3]-48);
    
    std::cout << answer << std::endl;
 
    return 0;
}
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 20:42  [ТС]     Сумма цифр дробной части #3
так это полностью рабочий код или только часть? а мой код совсем для решения задачи не подходит?
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 20:56     Сумма цифр дробной части #4
мой код полностью рабочий.

Добавлено через 2 минуты
также можно вот так:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    double number;
    int answer = 0;
 
    std::cin >> number;
 
    for(int i = 10; i <= 1000; i *= 10)
        answer += (int)((number)*(i)) % 10;
 
    std::cout << answer << std::endl;
 
    return 0;
}
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 21:18     Сумма цифр дробной части #5
Цитата Сообщение от GetVariable Посмотреть сообщение
мой код полностью рабочий.
Весьма спорное утверждение. Первый код свалится на числах, в которых длина дробной части меньше трех символов. Второй некорректно работает на отрицательных числах.
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 21:30     Сумма цифр дробной части #6
Цитата Сообщение от soon Посмотреть сообщение
Весьма спорное утверждение. Первый код свалится на числах, в которых длина дробной части меньше трех символов. Второй некорректно работает на отрицательных числах.
Насчёт первого кода, в тз было сказано, что эти 3 числа после запятой имеются, если об этом уже было сказано, зачем делать проверки?
soon
27.03.2013, 21:36
  #7

Не по теме:

Цитата Сообщение от GetVariable Посмотреть сообщение
Насчёт первого кода, в тз было сказано, что эти 3 числа после запятой имеются, если об этом уже было сказано, зачем делать проверки?
Я три раза перечитал первое сообщение, но так и не увидел упоминания об этом. Не могли бы вы процитировать ТС, если это вас не затруднит?

GetVariable
27.03.2013, 21:40
  #8

Не по теме:

Цитата Сообщение от Netti Посмотреть сообщение
Найдите сумму первых трех цифр дробной части
если идёт разговор о первых трех цифр дробной части, исходя из здравого смысла и логике задания, можно извлечь тот факт, что эти цифры имеются.

soon
27.03.2013, 21:44
  #9

Не по теме:

GetVariable, вы же не будете спорить, что 1.1 эквивалетно 1.10?

Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 21:50  [ТС]     Сумма цифр дробной части #10
Мне всё абсолютно понятно, хочу напоследок два вопроса задать:

1) Мой код(я автор темы) изначально неверный и непригоден для решения данной задачи?

2) Если да, то больше вопросов нет. Если нет, то не мог бы кто-нибудь указать ошибки?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 22:14     Сумма цифр дробной части #11
Netti, ваш код верен, но у вас есть одна опечатка. Скажем так, переменная z в вашем коде не используется по назначению. Ну и про отрицательные я уже говорил
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 22:50  [ТС]     Сумма цифр дробной части #12
Про переменную z действительно опечатка. Но дело, видимо, в чем то еще, так как даже исправленный вариант не всегда верно работает. К примеру, при введении числа 1.165 выдается сумма 11. HELP
Про отрицательные пока не говорю, но думаю, что достаточно взять абсолютное значение введенного числа.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 23:08     Сумма цифр дробной части #13
В данном случае вы столкнулись с невозможностью представления данных типа float с нужной точностью. Говоря честно, я не слежу за Си, но, насколько я помню, там нет типа double, хотя код с ним успешно компилируется. Я могу посоветовать вам воспользоваться решением на C++, либо воспользоваться типом double, вместо float. Учтите, что считывать его надо через %lf
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 23:47  [ТС]     Сумма цифр дробной части #14
Спасибо за помощь, но к сожалению замена типа float на double ничего не изменила. Может, у кого-нибудь есть еще какие-нибудь варианты? Или задача таким образом не решается? Просто в инете читал материал по C, и там было подобное решение для нахождения второй цифры дробной части. Поэтому и делаю таким способом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 01:36     Сумма цифр дробной части
Еще ссылки по теме:

Определить, встречается ли введенная цифра M среди первых трёх цифр дробной части вещественного числа P - C++
Проблема в вычислениях / проблема актуальна. На форуме уже отвечали на этот вопрос, но уже в имеющихся ответах используется то что я еще...

Классы. Вывести значение числа цифр в дробной части числа - C++
#include &quot;stdafx.h&quot; #include &lt;locale.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; class Chislo { ...

Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа цифра ноль - C++
Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа...

Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.програма на С++ - C++
Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++.ПОЖАЛУЙСТА...

Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++ - C++
Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++.Нужна полная...


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

Или воспользуйтесь поиском по форуму:
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
28.03.2013, 01:36     Сумма цифр дробной части #15
Если немного с цифрами поиграться, то что то вроде такого можно сочинить:
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
#include <iostream>
#include <cmath>
 
int main() 
{
    const unsigned numOfdigits = 3; //количество цифр после комы
    unsigned result = 0;
    double d_val;
    
    std::cout<<"Enter number: ";
    std::cin>>d_val;
    
    d_val = std::abs(d_val);
    unsigned i_val = d_val;
    d_val -= i_val;
    for (unsigned i = 0; i<numOfdigits; ++i) d_val *= 10;
    
    while (d_val > 0)
    {
        result += static_cast<int>(d_val)%10;
        d_val /= 10;
    }
        
    std::cout<<"result = "<<result<<"\n";
    
    return 0;
}
Yandex
Объявления
28.03.2013, 01:36     Сумма цифр дробной части
Ответ Создать тему
Опции темы

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