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

Почему выдает 0, и что надо исправить в вызове функции? - C++

Восстановить пароль Регистрация
 
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 203
26.11.2014, 01:29     Почему выдает 0, и что надо исправить в вызове функции? #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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <math.h>
 int ch1,ch2,osn, summa,PROI,PR,pr ;
 
 
 int Perevert(int x)//
{
   int xp = 0;
   while(x)
   {
       xp = xp*10 + x%10;
       x /= 10;
   }
   return xp;
}
 
int slozhenie(int ch1,int ch2,int osn,int summa)//????
{
    int zts,pts,o,o1,o2;
    summa=0; 
    zts=0;
do 
{
                   o1=ch1%10;
                   o2=ch2%10;
                   o=(o1+o2+zts);
                   if (o>=osn) 
                   {
                               pts=(o-osn);
                               summa=(summa*10+pts);
                               zts=(o/osn);
                               ch1 /= 10;
                               ch2 /= 10;
                   }
                   else
                   {
                       zts=(o/osn);
                       summa=(summa*10+o);
                       ch1 /= 10;
                       ch2 /= 10;
                   }          
}
                   while ((ch1>0)||(ch2>0));
                Perevert(summa);
       
}
 
 
int proizvedenye(int ch1,int ch2,int osn,int PROI)// 
{
    int pro,ztspr,ptspr,o1,o2,PR,pr;
   do
   {
    pr=0;
    ztspr=0;
    o2=ch2%10;
    PR=0;
    do
    {
              o1=ch1%10;
              pro=o2*o1+ztspr;
               
              if (pro>=osn) 
              {
                            ptspr=pro%osn;
                            ztspr=pro/osn;
                            ch1 /=10;
                            pr=pr*10+ptspr;
                            }
                            else 
                            {
                                 ptspr=pro%osn;
                                 pr=pr*10+ptspr;
                                 ztspr=pro/osn;
                                 ch1 /=10;
                                 }
                                 }
                                 while (ch1>0);
                                 
                                 slozhenie(Perevert(pr)*10,PR,osn,PROI);
                                 PR=PROI;
                                 ch2 /=10;//???
     }
while (ch2>0);
/*PROI /=10;
return PROI;*/
}
int main()
{ 
  printf("\n ch1: ");
  scanf("%d",&ch1);
  printf("\n ch2: ");
  scanf("%d",&ch2);
  printf("\n osn: ");
  scanf("%d",&osn);
printf("%d",proizvedenye(ch1,ch2,osn,PROI/10));
 
getchar();
getchar();
}
эта функция должна умножать числа в определенной системе счисления по принципу умножения в столбик:сначала берется последняя цифра второго числа и последовательно умножается на каждую цифру первого числа(если произведение этих цифр больше основания то записываем остаток от целочисленного деления и запоминаем цифру,которую переносим в старший разряд(целая часть от деления произведения на основание системы счисления), итак мы получаем первое число,но в перевернутом виде,вызываем функцию сложения и складываем все получающиеся числа,при этом умножая их на 10(сдвиг в разрядах).функция сложения рабоччая(100%).но при вызове функции умножения выдает 0, ибо в последнем принте не до конца понимаю,как правильно вызвать эту функцию.прошу помочь начинающему программисту
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2014, 01:29     Почему выдает 0, и что надо исправить в вызове функции?
Посмотрите здесь:

C++ Нужна помощь мож что то надо исправить.
Почему не компилирует слова по русски, а выводит иероглифы какието? что для этого сделать надо? C++
C++ Не могу понять, как исправить ошибку в при вызове методов класса
C++ Почему в main(); При вызове объекта не выводится в консоль?
с++ шаблон функции, прога выдает 3 ошибки, как их исправить? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
arch-vile
 Аватар для arch-vile
3151 / 766 / 23
Регистрация: 12.07.2009
Сообщений: 3,184
26.11.2014, 02:05     Почему выдает 0, и что надо исправить в вызове функции? #2
Функция proizvedenye у вас не возвращает никакого значения (тот кусочек который должен возвращать закомментирован). Вариантов два:
1й - расставить в функции return'ы.
2й - передавать параметр PROI по ссылке (тогда метод сможет изменять его значение):
C++
1
int proizvedenye(int ch1,int ch2,int osn,int & PROI)
а вызывать и выводить так:
C++
1
2
proizvedenye(ch1,ch2,osn,PROI/10);
printf("%d",PROI);


Добавлено через 5 минут
И функция сложения кстати тоже не возвращает значение, тоже неплохо было бы дополнить ее return'ами. А еще переменной PROI нигде не присваивается значение. Нужно в функции main(), где-нибудь перед вызовом функции proizvedenie() добавить присвоение или ввод значения с клавиатуры)
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 203
26.11.2014, 21:24  [ТС]     Почему выдает 0, и что надо исправить в вызове функции? #3
Ели передаю по ссылке, то программа выдает ошибку и не запускается, если же с ретернами ,то все равно ноль выдает(
arch-vile
 Аватар для arch-vile
3151 / 766 / 23
Регистрация: 12.07.2009
Сообщений: 3,184
26.11.2014, 22:51     Почему выдает 0, и что надо исправить в вызове функции? #4
Цитата Сообщение от Дарья1997 Посмотреть сообщение
Ели передаю по ссылке, то программа выдает ошибку и не запускается, если же с ретернами ,то все равно ноль выдает(
Значит еще косяк с алгоритмом все-таки есть. Ща гляну.
А чтобы вызвать функцию с параметром по ссылке, в вызове должно содержаться только имя переменной, а не PROI/10. Извиняюсь.

Добавлено через 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <stdio.h>
#include <math.h>
int ch1,ch2,osn, summa,PROI,PR,pr ;
 
 
int Perevert(int x)//
{
    int xp = 0;
    while(x)
    {
        xp = xp*10 + x%10;
        x /= 10;
    }
    return xp;
}
 
int slozhenie(int ch1,int ch2,int osn,int summa)//????
{
    int zts,pts,o,o1,o2;
    summa=0; 
    zts=0;
    do 
    {
        o1=ch1%10;
        o2=ch2%10;
        o=(o1+o2+zts);
        if (o>=osn) 
        {
            pts=(o-osn);
            summa=(summa*10+pts);
            zts=(o/osn);
            ch1 /= 10;
            ch2 /= 10;
        }
        else
        {
            zts=(o/osn);
            summa=(summa*10+o);
            ch1 /= 10;
            ch2 /= 10;
        }          
    }
    while ((ch1>0)||(ch2>0));
    return Perevert(summa);
 
}
 
 
int proizvedenye(int ch1,int ch2,int osn,int  & PROI)// 
{
    int pro,ztspr,ptspr,o1,o2,PR,pr;
    do
    {
        pr=0;
        ztspr=0;
        o2=ch2%10;
        PR=0;
        do
        {
            o1=ch1%10;
            pro=o2*o1+ztspr;
 
            if (pro>=osn) 
            {
                ptspr=pro%osn;
                ztspr=pro/osn;
                ch1 /=10;
                pr=pr*10+ptspr;
            }
            else 
            {
                ptspr=pro%osn;
                pr=pr*10+ptspr;
                ztspr=pro/osn;
                ch1 /=10;
            }
        }
        while (ch1>0);
 
        PROI = slozhenie(Perevert(pr)*10,PR,osn,PROI);
        PR=PROI;
        ch2 /=10;//???
    }
    while (ch2>0);
    /*PROI /=10;
    return PROI;*/
 
    return PR;
}
int main()
{ 
 
    PROI = 1;
    printf("\n ch1: ");
    scanf("%d",&ch1);
    printf("\n ch2: ");
    scanf("%d",&ch2);
    printf("\n osn: ");
    scanf("%d",&osn);
    printf("%d",proizvedenye(ch1,ch2,osn,PROI));
 
    getchar();
    getchar();
}
Вот так работает..

Добавлено через 6 минут
У вас было так (в функции proizvedenie):
C++
1
slozhenie(Perevert(pr)*10,PR,osn,PROI);
То есть функция сложение выполняется, но результат ее выполнения нигде не используется.
Надо так:
C++
1
PROI = slozhenie(Perevert(pr)*10,PR,osn,PROI);
И тоже самое в функции slozhenie:
C++
1
Perevert(summa);
Функцию переверт вызываете, но значение не используете.
Я сделал так:
C++
1
return Perevert(summa);
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 203
27.11.2014, 00:21  [ТС]     Почему выдает 0, и что надо исправить в вызове функции? #5
извините,а вы пробовали работу программы?просто все равно выдает ноль при любых числах,уже все перепробовала
думаю ошибка в последнем принте,там где PROI...но не могу догнать.спасибо за то,что помогаете

Добавлено через 8 минут
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
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <math.h>
int ch1,ch2,osn,summa;
int Perevert(int ch)//
{
 int chp = 0;
   while(ch>0)
  {
      chp = chp*10 + ch%10;
      ch /= 10;
   }
   return chp;
}
 
int slozhenie(int ch1,int ch2,int osn,int summa)//????
{
    int zts,pts,o,o1,o2;
    summa=0; 
    zts=0;
do 
{
                   o1=ch1%10;
                   o2=ch2%10;
                   o=(o1+o2+zts);
                   if (o>=osn) 
                   {
                               pts=(o-osn);
                               summa=(summa*10+pts);
                               zts=(o/osn);
                               ch1 /= 10;
                               ch2 /= 10;
                   }
                   else
                   {
                       zts=(o/osn);
                       summa=(summa*10+o);
                       ch1 /= 10;
                       ch2 /= 10;
                   }          
}
                   while ((ch1>0)||(ch2>0));
                Perevert(summa);
       
}
int main()
{ 
  printf("\n ch1: ");
  scanf("%d",&ch1);
  printf("\n ch2: ");
  scanf("%d",&ch2);
  printf("\n osn: ");
  scanf("%d",&osn);
  printf("%d",slozhenie(ch1,ch2,osn,Perevert(summa)));
  getchar();
  getchar();
                                            
}
вот отдельно функция сложения,она работает,не знаю может поможет...
arch-vile
 Аватар для arch-vile
3151 / 766 / 23
Регистрация: 12.07.2009
Сообщений: 3,184
27.11.2014, 11:46     Почему выдает 0, и что надо исправить в вызове функции? #6
Цитата Сообщение от Дарья1997 Посмотреть сообщение
извините,а вы пробовали работу программы?
Да, я же скинул вам исправленный, мной запущенный и точно работающий вариант. В десятичной системе счисления по крайней мере.
Миниатюры
Почему выдает 0, и что надо исправить в вызове функции?  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2014, 18:54     Почему выдает 0, и что надо исправить в вызове функции?
Еще ссылки по теме:

Почему выдает такой ответ что делать C++
C++ Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов
Почему выдает ошибку при работе с большим файлом, напишите как исправить ? C++

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

Или воспользуйтесь поиском по форуму:
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 203
27.11.2014, 18:54  [ТС]     Почему выдает 0, и что надо исправить в вызове функции? #7
да,действительно на числах 12*3 работает,но я вбивала другие и во многих случаях выходит 0(если к примеру 3*12 или если например умножаешь более большие по модулю числа,и еще выходит неверный ответ если числа оканчиваются на 0)
Yandex
Объявления
27.11.2014, 18:54     Почему выдает 0, и что надо исправить в вызове функции?
Ответ Создать тему
Опции темы

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