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

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

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

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

27.03.2013, 20:16. Просмотров 1230. Ответов 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');
}
Суть в том, что некоторые числа считаются правильно, некоторые неправильно. Понимаю, что задача легкая. Но всё же, если кто видит ошибку, подскажите пожалуйста. Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сумма цифр дробной части (C++):

Определить равна ли сумма k цифр дробной части заданного вещественного числа сумме цифр целой части - C++
Помогите доделать задание, исправьте пожалуйста код!!! Срочно! Задание: Выполнить задания, выделяя цифры числа, хранящегося в переменной...

Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной части - C++
Нада написать 2 программки 1. Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной...

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

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

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

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

14
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;
}
0
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 20:42  [ТС] #3
так это полностью рабочий код или только часть? а мой код совсем для решения задачи не подходит?
0
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;
}
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 21:18 #5
Цитата Сообщение от GetVariable Посмотреть сообщение
мой код полностью рабочий.
Весьма спорное утверждение. Первый код свалится на числах, в которых длина дробной части меньше трех символов. Второй некорректно работает на отрицательных числах.
0
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 21:30 #6
Цитата Сообщение от soon Посмотреть сообщение
Весьма спорное утверждение. Первый код свалится на числах, в которых длина дробной части меньше трех символов. Второй некорректно работает на отрицательных числах.
Насчёт первого кода, в тз было сказано, что эти 3 числа после запятой имеются, если об этом уже было сказано, зачем делать проверки?
0
soon
27.03.2013, 21:36
  #7

Не по теме:

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

0
GetVariable
27.03.2013, 21:40
  #8

Не по теме:

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

0
soon
27.03.2013, 21:44
  #9

Не по теме:

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

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

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

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

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

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

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

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


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

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

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