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

Простейшая прога но не хочет компилиться - C++

Восстановить пароль Регистрация
 
\\max
 Аватар для \\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
31.05.2012, 09:44     Простейшая прога но не хочет компилиться #1
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    int i ;
    scanf("%d",&i);
    int kol = 1;
    double d = i;
    for(int j = 0;  ; j++)
    {
        d = d / 10;
        if( d < 1 ) break;
        else kol++;
    }
    int ost;
    int sum;
    printf( "%d\n", kol );
    for(int l = 0; l < kol ; l++)
    {
        ost = i % pow(10,kol-l-1);
        sum += (i - ost) / pow(10,kol-l-1);
        i = ost;
    }
    printf("%d",sum);
    getch();
    return 0;
}
Компилятор ругается на эту строку
ost = i % pow(10,kol-l-1);
пишет :
Illegal use of floating point in function main()
Скажите пожалуйста в чем проблема?
Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
31.05.2012, 09:51     Простейшая прога но не хочет компилиться #2
C++
1
ost =  i % (int)pow(10,kol-l-1);
Но это плохое решение. Ругается на то, что ты пытаешься поделить по модулю тип данных double, а этого сделать нельзя.
\\max
 Аватар для \\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
31.05.2012, 10:02  [ТС]     Простейшая прога но не хочет компилиться #3
Цитата Сообщение от Лжец Посмотреть сообщение
Но это плохое решение. Ругается на то, что ты пытаешься поделить по модулю тип данных double, а этого сделать нельзя.
я делю int на 10 в степени (kol-l-1)
при чём тут double?
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
31.05.2012, 10:07     Простейшая прога но не хочет компилиться #4
автоматическое приведение типов

pow объявлен так pow(double _X, double _Y) и результат приводится к double
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
31.05.2012, 10:09     Простейшая прога но не хочет компилиться #5
Единственное, что могу сказать, функция pow() перегружена в том числе и на double, возможно в связи с какими-то известными компилятору "соображениями", он использует именно её.

Лично у меня, при компиляции вашего кода вышло следующее:

error C2297: '%' : illegal, right operand has type 'double'
Отсюда и вывод об ошибке и ее решении.

Upd:
Собственно вам уже ответили.
\\max
 Аватар для \\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
31.05.2012, 10:16  [ТС]     Простейшая прога но не хочет компилиться #6
Есть всё сделал работает пришлось еще чуток подкоректировать код и получилось

Добавлено через 1 минуту
Заменил предыдущую строку таким видом и поменял тип одной переменной с инта на дабл и пошло
p = pow(10,kol-l-1);
ost = i % p;


Еще раз всем спасибо!
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
31.05.2012, 10:24     Простейшая прога но не хочет компилиться #7
Почему-то у многих возведение целого числа в целую степень
выполняется через функцию pow(), которая возводит действительное число
в действительную стемень. Зачем издеваться над компьютером!
C++
1
2
3
4
5
6
7
int pown(int n,int m)
{
    int r=1;
    for(int i=0;i<m;i++)
         r*=n;
    return r;
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.05.2012, 10:47     Простейшая прога но не хочет компилиться #8
Цитата Сообщение от \\max Посмотреть сообщение
я делю int на 10 в степени (kol-l-1)
при чём тут double?
при типе функции.

Добавлено через 2 минуты
Цитата Сообщение от defer Посмотреть сообщение
и результат приводится к double
бред сивой кобылы, если результат подставляется в интовый оператор, то приводиться к double уже не может. Да и если бы приводился, то компилятор бы не ругался: он ругается именно на то, что привести не может. Результат уже double, а приводятся параметры функции.

Добавлено через 3 минуты
Цитата Сообщение от \\max Посмотреть сообщение
Заменил предыдущую строку таким видом и поменял тип одной переменной с инта на дабл и пошло
p = pow(10,kol-l-1);
ost = i % p;
то есть i теперь тоже double? Ещё хуже. Тебе надо избавиться от даблов, а ты плодишь их на пустом месте. Перегрузи функцию на
C++
1
int pow(int, unsigned int)
.

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
int pown(int n,int m)
{
  int r=1;
  for(int i=0;i<m;i++)
    r*=n;
  return r;
}
не правильно: если показатель знаковый, то значение степени может быть и дробным. Надо хотя бы так:
C++
1
2
3
4
5
6
7
8
9
int pown(int a, unsigned int n)
{
 int r;
 for(r=1; n>0; --n)
 {
  r*=a;
 }
 return r;
}
.
\\max
 Аватар для \\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
31.05.2012, 10:49  [ТС]     Простейшая прога но не хочет компилиться #9
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    int i ;
    scanf("%d",&i);
    int kol = 1;
    double d = i;
    for(int j = 0;  ; j++)
    {
        d = d / 10;
        if( d < 1 ) break;
        else kol++;
    }
    int ost;
    double sum;
    int p;
 
    printf( "%d\n", kol );
    for(int l = 0; l < kol ; l++)
    {
        p = pow(10,kol-l-1);
        ost = i % p;
        sum += (i - ost) / p;
        i = ost;
    }
    printf("%lf",sum);
    getch();
    return 0;
}
вот код
Цитата Сообщение от taras atavin Посмотреть сообщение
то есть i теперь тоже double?
нет конечно зачем это делать?? я переменную sum в дабл запилил
-=ЮрА=-
31.05.2012, 11:23
  #10

Не по теме:

\\max, можно увидеть твоё задание к программе?

\\max
 Аватар для \\max
4 / 4 / 1
Регистрация: 19.05.2012
Сообщений: 19
31.05.2012, 11:27  [ТС]     Простейшая прога но не хочет компилиться #11
нжно посчитать сумму цифр с каких состоит число например: 1927 =1+9+2+7 = 19
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
31.05.2012, 11:29     Простейшая прога но не хочет компилиться #12
Все делается на много проще:
C++
1
2
3
4
while ( number != 0 ) {
   sum += number % 10;
   number /= 10;
}
-=ЮрА=-
Заблокирован
Автор FAQ
31.05.2012, 11:49     Простейшая прога но не хочет компилиться #13
Цитата Сообщение от \\max Посмотреть сообщение
нжно посчитать сумму цифр с каких состоит число например: 1927 =1+9+2+7 = 19
- это задание на 5-ть строк кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int val;
    while(true)
    {
        cout<<"Enter value : ";cin>>val;
        if(val < 0)
            val = -1*val;
        int sum = val%10;
        while(val /= 10)
            sum += val%10;
        cout<<"Digits sum : "<<sum<<endl;
    }
    return 0;
}
PS:Toshkarik, всё норм только не забываем о том что можем ввести и отрицательное тогда разряды будут идти с минусом
Миниатюры
Простейшая прога но не хочет компилиться  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 11:52     Простейшая прога но не хочет компилиться
Еще ссылки по теме:

Почему программа компилится, хотя компилиться не должна? C++
C++ Задача не компилиться
C++ Функция русификации перестала компилиться

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

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
31.05.2012, 11:52     Простейшая прога но не хочет компилиться #14
Это был всего лишь намек так сказать
Yandex
Объявления
31.05.2012, 11:52     Простейшая прога но не хочет компилиться
Ответ Создать тему
Опции темы

Текущее время: 10:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru