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

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

Восстановить пароль Регистрация
 
deepz
43 / 43 / 25
Регистрация: 04.10.2013
Сообщений: 199
08.12.2013, 19:04     Проверьте пожалуйста, что не так? #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
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);
 
                    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.12.2013, 19:11     Проверьте пожалуйста, что не так? #2
1) функция должна возвращать void.
2) r объявлена без инициализации, хотя тут же в цикле проверяется. Это "неопределенное поведение". Скорее всего из-за этого
deepz
43 / 43 / 25
Регистрация: 04.10.2013
Сообщений: 199
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     Проверьте пожалуйста, что не так?
Ответ Создать тему
Опции темы

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