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

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

Войти
Регистрация
Восстановить пароль
 
 
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
#1

Перевод из одной системы счисления в другую - C++

30.11.2011, 21:32. Просмотров 898. Ответов 16
Метки нет (Все метки)

Посмотрите, пожалуйста, кому не сложно код в с++.
При компиляции выдает ошибку invalid function declaration
Текст задачи: Десятичное целое положительное число m переводится в двоичную систему счисления, разряды в этой записи переставляются в обратном порядке, и снова производится перевод в десятичную систему счисления. Напечатать в виде таблицы все полученные значения для m=512,513,514,...,1023.
Начало таблицы имеет вид 512 1000000000 0000000001 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
#include <stdio.h>
#include <limits.h>
#include <conio.h>
#include <ctype.h>
#include <iostream>
#include <iomanip>
#include <math.h>
 
void perevod (int a, int *m, int *n) // ïåðåâîä ГЁГ§ äåñÿòè÷Г*îé ñèñòåìû Гў äâîè÷Г*ГіГѕ
      { int i=0;
       *n=0;
       while (a!=0)
       { if (a % 2 == 1)
       m[i]=1 ;
       else  m[i]=0;
       a=a/2;
       i++;
       *n++ ;
       } ;
       for (i=*n-1; i>=0 ; i-- )
      printf ("\f", m[i]) ;
       for (i=0;i<*n;i++)
        printf ("\f", m[i]) ;
    } 
 
       
  void podprogramma (int *m, int *n) // ïåðåâîä ГЁГ§ äâî÷èГ*îé ñèñòåìû Гў äåñÿòè÷Г*ГіГѕ
  {
        double k=1, x=0, p;
        p=*n;
        for (int i=0; i<*n; i++)
      {
        k=m[i]*pow(2,p-1);
        x=x+k;
        *n--;
      };
      printf ("\f", x);
      } 
    
  int main  
   {
      int n, c;
        for (c=512; c<=1023; c++)
    {
       printf ("n\f", c);
        n=0;
       while (c!=0)
       {c=c % 2;
        n++};
        int *m=new int[n];
        perevod (c, m, &n);
        podprogramma (m,&n);
       delete [] m; 
     } ;
      getch ()
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 21:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод из одной системы счисления в другую (C++):

Перевод из одной системы счисления в другую - C++
Может кто подскажет ссылки где можно почитать про перевод чисел из однйо системы счисления в другую? К примеру из двоичной в...

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

Перевод из одной системы счисления в другую - C++
Помогите разобраться с переводом из любой системы счисления в любую. Хотел составить программу типа: Основание системы (вход): 15 ...

Перевод из одной системы счисления в другую от 2 до 36 - C++
Помогите пожалуйсто, сколько сижу ничего стоющего не приходит в голову! Дано целое неотрицательное число в I-ричной системе счисления....

Перевод из одной системы счисления в другую - C++
перевод чисел(в том числе с дробной частью) из сс q в сс p.(q, p от 2 до 16) помогите протестить: #include &lt;iostream&gt; #include...

Перевод с одной системы счисления в другую - C++
Приветствую вас, товарищи программисты. Помогите пожалуйста. Не могу решить, маленькую проблемку. Как сделать так, что-бы при вводе...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
30.11.2011, 21:48 #2
обязательно с массивами?
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 21:49  [ТС] #3
да
нужно поправить именно эту программу
компилятор выводит ошибку в 41 строке
второй день не могу ее найти
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 21:56 #4
компилятор выводит ошибку в 41 строке
второй день не могу ее найти
Кого, 41 строку?
Текст ошибки приведите.

Добавлено через 47 секунд
Можете не приводить. После main пропустили ()
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 21:56  [ТС] #5
invalid function declaration
а я привела в первом сообщении


я поставила ()
теперь ерунду какую-то выводит на экран
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 22:16 #6
Цитата Сообщение от ПаЗитиФкА Посмотреть сообщение
printf ("\f", m[i])
Вот это что?
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 22:17  [ТС] #7
soon, ой, с этим да.
там надо %
только особо ничего не изменилось
на экране 51201


еще в 35 строчке надо заменить на p--
но это опять же ничего не дает
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 22:55 #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
#include <iostream>
#include <cstring>
 
int reverceBin(int num)
{
    int tmp = 1;
    std::string str(""); 
    while(tmp <= num)
    {
        str = str + ((tmp & num) ? ('1') : ('0'));
        tmp <<= 1;
    }
    int ln = str.length();
    int i;
    for(i = 0; (str[i] != '1') && (i < ln); ++i);
    int sum;
    for(sum = 0; i < ln; ++i)
        if(str[i] == '1')
            sum += (1 << (ln - i - 1));
    return sum;
}
    
int main()
{   
    std::cout << reverceBin(10) << std::endl;
    return 0;
}
Тестируйте
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 22:59  [ТС] #9
soon, все нормально, но тут строки
а у нас тема без использования строк, к сожалению
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 23:07 #10
Цитата Сообщение от ПаЗитиФкА Посмотреть сообщение
soon, все нормально, но тут строки
а у нас тема без использования строк, к сожалению
Сейчас, уже работаю над избавлением от строки, это набросок, так сказать =)

Добавлено через 2 минуты
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
#include <iostream>
 
int reverceBin(int num)
{
    int sum = 0;
    int tmp = 1;
    while(tmp <= num)
    {
        if(tmp & num)
        {
            ++sum;
            break;
        }
        tmp <<= 1;
    }
    
    tmp <<= 1;
    
    while(tmp <= num)
    {
        sum <<= 1;
        if(tmp & num)
            ++sum;
        tmp <<= 1;
    }
    return sum;
}
    
int main()
{   
    int n;
    while(std::cin >> n)
        std::cout << reverceBin(n) << std::endl;
    return 0;
}
В два цикла, зато без лишних if-ов =)
upd. Поправил. Теперь выглядит компактнее.
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 23:18  [ТС] #11
я наверное совсем глупая, но я тут ничего не понимаю(((

Добавлено через 4 минуты
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
#include <stdio.h>
#include <limits.h>
#include <conio.h>
#include <ctype.h>
#include <iostream>
#include <iomanip>
#include <math.h>
 
void perevod (int a, int *m, int *n) // ïåðåâîä ГЁГ§ äåñÿòè÷Г*îé ñèñòåìû Гў äâîè÷Г*ГіГѕ
      { int i=0;
       while (a!=0)
       { if (a % 2 == 1)
       m[i]=1 ;
       else  m[i]=0;
       a=a/2;
       i++;
       } ;
       for (i=*n-1; i>=0 ; i-- )
       printf ("%d", m[i]);
       for (i=0;i<*n;i++)
        printf ("%d", m[i]) ;
    } 
 
       
  void podprogramma (int *m, int *n) // ïåðåâîä ГЁГ§ äâî÷èГ*îé ñèñòåìû Гў äåñÿòè÷Г*ГіГѕ
  {
        double k=1, x=0;
        int p;
        p=*n;
        for (int i=0; i<*n; i++)
      {
        k=m[i]*pow(2,p-1);
        x=x+k;
        p--;
      };
      printf ("%d", x);
      } 
    
    
     void kolichestvo (int c, int *n) \\количество цифр в числе, чтобы память выделить динамически
     { 
     while (c!=0)
     { c=c/10 ;
     *n=*n+1 ;} ;
     }
    
    
    
    
  int main  ()
   {  int c, n;
        for (c=512; c<=1023; c++) 
    {  printf ("%d", c); 
      n=0;
       kolichestvo (c,&n);
      int *m=new int[n]; 
     perevod (c, m, &n); 
      podprogramma (m,&n); 
     delete [] m; 
      } ;
     getch ();
     return 0;
     }
я попыталась исправить свой вариант, тоже, по-моему, не лучше получилось
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 23:30 #12
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
#include <iostream>
 
int reverceBin(int num)
{
    int sum = 0;        //Искомое число
    int tmp = 1;        //Временная переменная, используется для сравнения с num
    while(tmp <= num)
    {
        if(tmp & num)   //Если в бинарном представлении чисел что-нибудь совпадает, то...
        {
            ++sum;
            break;
        }
        tmp <<= 1;      //Увеличиваем tmp в 2 раза
    }
    
    tmp <<= 1;          //Можно было запихнуть в if первого цикла, можно тут оставить, дело вкуса
    
    while(tmp <= num)   
    {
        sum <<= 1;      //Увеличиваем искомое число в 2 раза
        if(tmp & num)   //См. 1 цикл
            ++sum;
        tmp <<= 1;      //См. 1 цикл
    }
    return sum;
}
    
int main()
{   
    int n;
    while(std::cin >> n)
        std::cout << reverceBin(n) << std::endl;
    return 0;
}
С комментариями.

Логика программы: изначально пробегаемся по бинарному представлению числа num переменной tmp. Если там есть совпадающие биты(а они будут, если только num != 0), увеличиваем sum на единицу, и выходим из цикла. Не забываем увеличить tmp в 2 раза, т.к. в цикле мы этого не делаем. Заходим во второй цикл. Все то-же самое, но теперь еще sum увеличивается в 2 раза, и если биты совпадают, то прибавляем единицу к sum. Выводим sum.
Код
num = 10(d) = 1010(b)
1) tmp = 0001(b), 0001(b) & 1010(b) = false;
   tmp = 0010(b), 0010(b) & 1010(b) = true(заметили, в чем разница?) -> sum = 001(b), break;

tmp = 0100(b);

2) sum =  010(b), tmp = 0100(b), 0100(b) & 1010(b) = false;
   sum = 100(b), tmp = 1000(b), 1000(b) & 1010(b) = true -> ++sum, sum = 101(b) = 5(d);
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 23:39  [ТС] #13
Боже мой, мне перед Вами уже стыдно
комментарии, объяснения....а я как дура сижу и ничего не понимаю
спасибо большое, что весь вечер на меня тратите!
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 23:42 #14
Ну, главное, чтобы это не было впустую, верно?
Если остались непонятные места в программе или алгоритме, спрашивайте.
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
30.11.2011, 23:44  [ТС] #15
чувствую, меня щас далеко пошлют, но ладно....
я вообще ничего не поняла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 23:44
Привет! Вот еще темы с ответами:

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

Перевод из одной системы счисления в другую - C++
Составить программу перевода натурального числа из позиционной системы счисления с основанием m в позиционную систему счисления с...

Перевод из одной системы счисления в другую - C++
Число представленное в десятичной системе счисления перевести в шестнадцатеричную систему счисления. Я только начал изучать...

Перевод из одной системы счисления в другую - C++
Проблема с переводом из двоичной системы в десятичную. Допустим у нас есть такое число 11101101 это 237 моя программа хорошо переводит, но...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.11.2011, 23:44
Ответ Создать тему
Опции темы

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