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

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

Войти
Регистрация
Восстановить пароль
 
deepz
49 / 49 / 29
Регистрация: 04.10.2013
Сообщений: 224
#1

Проверьте пожалуйста, что не так? - C++

08.12.2013, 19:04. Просмотров 258. Ответов 3
Метки нет (Все метки)

условие задачи: написать и протестировать функцию, которая находит сумму всех цифр введенного целого числа, если оно является простым и произведение цифр в обратном случае.


Так вот когда я делаю функцию, почему-то не правильно определяется число (простое оно или нет)

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
#include <stdio.h> 
#include <conio.h>
int fun(int n)
{int d=2, r, sum=0, pr=1;  // r - остаток от деления d-делитель
while (r!=0)
    {   
        r=n%d;
        if (r!=0)
        d++;
    }
        
                if (d == n)
                     {
                              printf("%d - Prostoe\n" ,n);
                        {
                         while (n)
                            {
                                sum=sum+n%10;
                                n=n/10;
                            }
                        }
                        printf("sum=%d", sum);
                    }
                else 
                     {
                        printf("%d - Ne prostoe\n" ,n);
                            {
                             while (n>0)
                                {
                                     pr*=n%10;
                                    n=n/10;
                                 }
                             }
    printf("pr=%d", pr);
 
                    }
 
}
int main()
{
int n;
puts("Bawe chislo");
scanf("%d", &n);
fun(n);
}
А если я делаю просто в main то все правильно работает. Почему так?
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
#include <stdio.h> 
#include <conio.h>
int main()
{
int d=2, n, r, sum=0, pr=1;  // r - остаток от деления d-делитель
puts("Bawe chislo");
scanf("%d", &n);
    while (r!=0)
    {   
        r=n%d;
        if (r!=0)
        d++;
    }
                if (d == n)
                     {
                              printf("%d - Prostoe\n" ,n);
                        {
                         while (n)
                            {
                                sum=sum+n%10;
                                n=n/10;
                            }
                        }
                        printf("sum=%d", sum);
                    }
                else 
                     {
                        printf("%d - Ne prostoe\n" ,n);
                            {
                             while (n>0)
                                {
                                     pr*=n%10;
                                    n=n/10;
                                 }
                             }
    printf("pr=%d", pr);
 
                    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 19:04     Проверьте пожалуйста, что не так?
Посмотрите здесь:

C++ подскажите пожалуйста, что не так?
проверьте пожалуйста! C++
C++ проверьте что не так в коде?
Проверьте пожалуйста указатели , размерность ответа не влазит что изменить C++
C++ проверьте пожалуйста!
C++ Подскажите пожалуйста, что не так
Подскажите,пожалуйста ,что не так с кодом! C++
скажите пожалуйста что не так? C++
C++ проверьте что не так
C++ Друзья исправьте пожалуйста если что не так
Подскажите пожалуйста что не так C++
Ткните, пожалуйста, носом в ошибку. я не могу понять где, что не так C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.12.2013, 19:11     Проверьте пожалуйста, что не так? #2
1) функция должна возвращать void.
2) r объявлена без инициализации, хотя тут же в цикле проверяется. Это "неопределенное поведение". Скорее всего из-за этого
deepz
49 / 49 / 29
Регистрация: 04.10.2013
Сообщений: 224
08.12.2013, 19:34  [ТС]     Проверьте пожалуйста, что не так? #3
Цитата Сообщение от nexen Посмотреть сообщение
1) функция должна возвращать void.
2) r объявлена без инициализации, хотя тут же в цикле проверяется. Это "неопределенное поведение". Скорее всего из-за этого
так, а что мне делать?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.12.2013, 19:35     Проверьте пожалуйста, что не так? #4
deepz, при инициализации r поставь сразу:
C++
1
int r = n%d;
Yandex
Объявления
08.12.2013, 19:35     Проверьте пожалуйста, что не так?
Ответ Создать тему
Опции темы

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