Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230

Перевод из 6-ричной системы в десятичную

10.10.2014, 20:16. Показов 2036. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На вход программе подается строка символов, оканчивающаяся точкой, и состоящая из ненулевого количества неотрицательных целых чисел, записанных в 6-ричной системе счисления. Каждые 2 соседних числа разделены непустой последовательность пробелов и/или :. Каждое число состоит не более, чем из 5-ти разрядов, ведущие нули и знак + не используется. Общая длина строки, включая точку, не должна превышать 64.
Требуется написать программу, которая вводит указанную строку и печатает выходную строку, содержащую все числа исходной строки, записанные в десятичной системе счисления, и упорядоченные по возрастанию. Каждые 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
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
#include <cstdlib>
#include <iostream>
#include <stdio.h>
    #define INPUT_ARRAY_SIZE 32
    #define SYSTEM_BASE 6
 
using namespace std;
int input [INPUT_ARRAY_SIZE] ;
 
int main(int argc, char *argv[])
{
  
   
        char current_char,
             prev_char = ' ';
        int current_number = 0;
        int i = 0, j, k, m, tmp, s, p=0, l;
     
        //ввод чисел
        while (current_char=getchar(), current_char != '.')
        {
            if (current_char == ':' || current_char == ' ')
            {
                if (prev_char != ' ' && prev_char != ':')
                {
                    input[i++] = current_number;
                    current_number = 0;
                }
                prev_char = current_char;
                continue;
            }
            current_number = current_number * 6 + (current_char - '0');
            prev_char = current_char;
        };
     
        if (i == 0)
        {
            return 0;
        }
     
        input[i++] = current_number;
        //сортировка
        if (i > 1)
        {
            for(j=1; j<i; j++)
            {               
                for(m=1; m<i; m++)
                {
                         if (input[m]>input[m+1])
                         {
                                tmp = input[m];
                                input[m] =  input[m+1];
                                input[m+1] = tmp;               
                         }
                }
            }
        }
     
        for (j=0;j<=i;j++)
        {
            // преобразование в 10 систему.           
            while (input[j]>1)
            {
                  tmp = input[j]/6;
                  printf("%d",input[j]-2*tmp);
                  input[j] = tmp;
            }
            printf("%d",' ');
            
        }
        getchar();
     system("PAUSE");
        return 0;
}
Программа выдает отрицательные числа. Помогите исправить, пожалуйста
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2014, 20:16
Ответы с готовыми решениями:

Функция перевода из 16-ричной системы счисления в десятичную
Есть ли в си++ такая фун-я?

Перевод из двоичной системы в десятичную
Перевод из двоичной системы в десятичную, помогти прошу надо на турбо с++

Перевод из троичной системы в десятичную
Помогите пожалуйста сделать программу которая позволяет ввести число в троичной системе и перевести его в десятичную. Спасибо заранее)

8
79 / 79 / 34
Регистрация: 26.10.2011
Сообщений: 220
10.10.2014, 21:06
Отрицательные числа выдает, потому, что ошибка в сортировке:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            //for(j=1; j<i; j++)
            for(j=0; j<i-1; j++)
            {               
                //for(m=1; m<i; m++)
                for(m=j; m<i-1; m++)
                {
                         if (input[m]>input[m+1])
                         {
                                tmp = input[m];
                                input[m] =  input[m+1];
                                input[m+1] = tmp;               
                         }
                }
            }
Еще чтобы правильно результат выдавала, нужно убрать последнее преобразование (оно не нужно):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        /*
        for (j=0;j<=i;j++)
        {
          
            // преобразование в 10 систему.           
          
            while (input[j]>1)
            {
                  tmp = input[j]/6;
                  printf("%d",input[j]-2*tmp);
                  input[j] = tmp;
            }
            
            printf("%d",' ');
        }
        */
        for( j=0; j<i; j++ )
          printf("%d ", input[j]);
0
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
10.10.2014, 21:15  [ТС]
Если я все правильно поняла, результат должен быть таким?
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
#include <cstdlib>
#include <iostream>
#include <stdio.h>
    #define INPUT_ARRAY_SIZE 32
    #define SYSTEM_BASE 6
 
using namespace std;
int input [INPUT_ARRAY_SIZE] ;
 
int main(int argc, char *argv[])
{ 
        char current_char,
             prev_char = ' ';
        int current_number = 0;
        int i = 0, j, k, m, tmp, s, p=0, l;
     
        //ввод чисел
        while (current_char=getchar(), current_char != '.')
        {
            if (current_char == ':' || current_char == ' ')
            {
                if (prev_char != ' ' && prev_char != ':')
                {
                    input[i++] = current_number;
                    current_number = 0;
                }
                prev_char = current_char;
                continue;
            }
            current_number = current_number * 6 + (current_char - '0');
            prev_char = current_char;
        };
     
        if (i == 0)
        {
            return 0;
        }     
        input[i++] = current_number;
        //сортировка
        if (i > 1)
        {
            for(j=0; j<i-1; j++)
            {                
                for(m=0; m<i-1; m++)
                {
                         if (input[m]>input[m+1])
                         {
                                tmp = input[m];
                                input[m] =  input[m+1];
                                input[m+1] = tmp;               
                         }
                }
            }
        }
     
        for (j=0;j<=i;j++)
        {    
            printf("%d ",input[j]);
            
        }
        getchar();
     system("PAUSE");
        return 0;
        
}
Добавлено через 30 секунд
Результаты по-прежнему неверны
0
79 / 79 / 34
Регистрация: 26.10.2011
Сообщений: 220
10.10.2014, 21:17
Не совсем:

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
#include <cstdlib>
#include <iostream>
#include <stdio.h>
    #define INPUT_ARRAY_SIZE 32
    #define SYSTEM_BASE 6
 
using namespace std;
int input [INPUT_ARRAY_SIZE] ;
 
int main(int argc, char *argv[])
{
  
        char current_char,
             prev_char = ' ';
        int current_number = 0;
        int i = 0, j, k, m, tmp, s, p=0, l;
     
        //ввод чисел
        while (current_char=getchar(), current_char != '.')
        {
            if (current_char == ':' || current_char == ' ')
            {
                if (prev_char != ' ' && prev_char != ':')
                {
                    input[i++] = current_number;
                    current_number = 0;
                }
                prev_char = current_char;
                continue;
            }
            current_number = current_number * 6 + (current_char - '0');
            prev_char = current_char;
        };
     
        if (i == 0)
        {
            return 0;
        }
     
        input[i++] = current_number;
        //сортировка
        if (i > 1)
        {
            //for(j=1; j<i; j++)
            for(j=0; j<i-1; j++)
            {               
                //for(m=1; m<i; m++)
                for(m=j; m<i-1; m++)
                {
                         if (input[m]>input[m+1])
                         {
                                tmp = input[m];
                                input[m] =  input[m+1];
                                input[m+1] = tmp;               
                         }
                }
            }
        }
        /*
        for (j=0;j<=i;j++)
        {
          
            // преобразование в 10 систему.           
          
            while (input[j]>1)
            {
                  tmp = input[j]/6;
                  printf("%d",input[j]-2*tmp);
                  input[j] = tmp;
            }
            
            printf("%d",' ');
        }
        */
        for( j=0; j<i; j++ )
          printf("%d ", input[j]);
 
        getchar();
     system("PAUSE");
        return 0;
}
1
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
10.10.2014, 21:21  [ТС]
все равно отрицательные числа. А у Вас нормально работает программа?
0
79 / 79 / 34
Регистрация: 26.10.2011
Сообщений: 220
10.10.2014, 21:34
Вот пример работы программы:
12 3 4 15.
3 4 8 11 Для продолжения нажмите любую клавишу . . .
попробуйте скопировать весь текст, от начала до конца...
0
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
10.10.2014, 21:42  [ТС]
sergestus, какая у вас среда? У меня dev c++
0
79 / 79 / 34
Регистрация: 26.10.2011
Сообщений: 220
10.10.2014, 22:04
Visual Studio, попробуйте в дебагере поискать в чем ошибка...
1
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
13.10.2014, 19:52  [ТС]
sergestus, моя главная ошибка была в незнании принципа работы функции getchar(). Я после каждого символа использовала enter, что было грубой ошибкой. В итоге прога получилась вот такая:
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 <math.h>
#include <conio.h>
#include <stdio.h>
#define INPUT_ARRAY_SIZE 32
 
int input [INPUT_ARRAY_SIZE] ;
int main(int argc, char* argv[])
{
    char current,
    prev = ' ';
    int number = 0;
    int i = 0, j, m, tmp, count = 0;    
    current=getchar(); 
    while (current != '.')
        {
                   //проверка корректности вводимых символов, остальные символы игнорируются
            if (current == ':' || current == ' ' || current == '1' || current == '0' || current == '2' || current == '3' || current == '4' || current == '5' ) 
            {      
                   if (current == ':' || current == ' ') prev = current;
                   else
                   {
                       if (prev == ' ' || prev == ':')
                       {
                                input[i++] = current-'0';
                                count =1;                    
                      }
                      else 
                      {
                           //каждое число состоит не более, чем из 5-ти разрядов
                           if (count<6)
                           {
                              input[i-1] = input[i-1] * 6 + (current - '0');                           
                              count +=1;
                           }
                      } 
                      prev = current;               
                   } 
            }   
            current=getchar();          
        };         
    //пузырьковая сортировка 
        if (i > 1)
        {
            for(j=1; j<i; j++)
            {               
                for(m=0; m<i-j; m++)
                {
                         if (input[m]>input[m+1])
                         {
                                tmp = input[m];
                                input[m] =  input[m+1];
                                input[m+1] = tmp;               
                         }
                }
            }
        }
    for(j=0; j<i; j++)
    { 
            printf("%d ", input[j]); 
    }
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2014, 19:52
Помогаю со студенческими работами здесь

Перевод из двоичной системы счисления в десятичную
Я создал программу, но вот она выдает размерность введенного массива, вместо десятичного числа. Ошибки я найти не могу. Вот сам код: ...

Перевод из двоичной системы счисления в десятичную
Почему самописная функция long long int From2to10(string s) { long long int r = 0; int i, j = 0; for (i = 0; i &lt;...

Перевод из 16-ичной системы счисления в десятичную
здесь код из 16 в 2 есть такой же для из 16 в 10? - C++ #include &lt;conio.h&gt; #include &lt;iostream&gt; int main() { char c; ...

Перевод из двоичной системы счисления в десятичную
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;cstring&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include...

Перевод чисел из двоичной системы в десятичную
У меня получается перевести число из двоичный системы в десятичную, если оно одно: int num = 0; char text = &quot;00100000&quot;; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru