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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 5.00
adbrey
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 28
08.11.2012, 14:35     Перевод чисел из 10очной системы счисления в 3ую #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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    cout << "Введите число" << endl;
    int a = 0;
    int b = a / 3;
    int c = a % 3; // этот остаток выводится на экран
    cin >> a;
      if(a / 3 == b, b > 3)
        true
           int ost[k++] = c {};
              if(a = b) 
                continue;
 
         false
            int ost[k++] = b {};
             int i = 0;
               for(i = k-i; i >= 0; i--)
                  cout << ost[i];
 
    return 0;
}


Сегодня:
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
 #include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    cout << "Введите число" << endl;
    int a = 0;
    int b;
    int c = a % 3; // c это остаток который выводится на экран
    cin >> a;
      if(a / 3 == b || b > 3)//to
         true
            int ostat[c++]=c {};// ошибка: ожидается ';' до 'INT'
              if(a == b)
                continue;//go //ошибка: продолжать заявление не в цикле
 
         false
            int ostat[c++]=b {};// ошибка: ожидается ';' до 'INT'
             int i = 0;
               for(i = c; i >= 0; i--)
                  cout << ostat[i] << endl;//ошибка: 'ostat "не был объявлен в этой сфере
 
   return 0;
}
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
08.11.2012, 22:42     Перевод чисел из 10очной системы счисления в 3ую #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
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    setlocale(LC_ALL,"Rus");
    
    int chislo;
 
    cout<<"Введите число, которое необходимо перевести(из 10-ой в 3-ую): ";
    cin>>chislo;
 
    int ostatok;
 
    while(chislo>0)
    {
        ostatok=chislo%3;
        chislo/=3;
        cout<<ostatok;
    }
 
    cout<<endl;
 
    return 0;
}

Теперь все это надо вывести наоборот: справа налево. Например, через вектор, или дин. массив. Для вектора вот так:
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
#include<iostream>
#include<vector>        //для
using std::vector;      //вектора
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    setlocale(LC_ALL,"Rus");
    
    int chislo;
 
    vector<int>ivec;    //создаем пустой вектор
 
    cout<<"Введите число, которое необходимо перевести(из 10-ой в 3-ую): ";
    cin>>chislo;
 
    int ostatok;
 
    while(chislo>0)
    {
        ostatok=chislo%3;
        chislo/=3;
        ivec.push_back(ostatok);    //здесь записываем остаток в вектор
    }
 
    //выводим справа налево:
 
    for(vector<int>::size_type i=ivec.size()-1; ;--i)
    {
        cout<<ivec[i];
 
        if(i==0)    //если вектор пуст, завершаем цикл
            break;
    }
    cout<<endl;
 
    return 0;
}
Миниатюры
Перевод чисел из 10очной системы счисления в 3ую   Перевод чисел из 10очной системы счисления в 3ую   Перевод чисел из 10очной системы счисления в 3ую  

adbrey
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 28
09.11.2012, 07:02  [ТС]     Перевод чисел из 10очной системы счисления в 3ую #3
Цитата Сообщение от DPS Посмотреть сообщение
В википедии же есть алгоритм перевода...
Cпасибо! Откровенно говоря это моя первая программа которую пытаюсь написать сам в кодоблоке на линукс. Про вектора читал, но ещё не пользовал.
Я должен соединить блок-схему что на скрыне. Пока криво выходит. Как поступать в строках с массивами(что сделать пока хз), что делать с переменной к, правильно ли я инициализировал и присвоил значение переменной с Сегодня внизу кода прибрался:
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
 #include <iostream>
#include <cmath>
//#include <conio.h>
 
using namespace std;
 
int main(){
    cout << "Введите число" << endl;
    //int k = 0;
    int a;
    int b;
    int c = a % 3;               // c это остаток который выводится на экран
    cin >> a;                     // Ввод переводимого числа с клавиатуры
    //int ostat[c++];
      if(a / 3 == b || b > 3)  //to // если а делёное на 3 равно b или b больше трёх
         true                    // правда
            int ostat[c++]=с; // ошибка: ожидается ';' до 'INT'
              if(a == b)
                continue;       //go //ошибка: продолжать заявление не в цикле
 
         false                   // ложь
            int ostat[c++]=b; // ошибка: ожидается ';' до 'INT'
             int i = 0;
               for(i = c-i; i >= 0; i--){ // цикл выводящий элементы массива от последнего к первого
                  cout << ostat[i];        //ошибка: 'ostat "не был объявлен в этой сфере
               }
   //getch(); // используется чтобы окно програмы не закрывалось сразу
   return 0; // возвращает нулевое значение
}
Ругается на библиотеку #include <conio.h>, я хотел подключить getch();
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
09.11.2012, 09:34     Перевод чисел из 10очной системы счисления в 3ую #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
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    setlocale(LC_ALL,"Rus");    
    int chislo; 
    cout<<"Введите число, которое необходимо перевести(из 10-ой в 3-ую): ";
    cin>>chislo; 
    int ostatok;
    int *pRezults;
     int countnum=1;
     int temp=chislo;
     while(temp/=3)
         ++countnum;
    pRezults=new int[countnum];
    pRezults[0]=0;
    temp=0;
    while(chislo)
    {
        ostatok=chislo%3;
        chislo/=3;
        pRezults[temp++]=ostatok;
    }
 
    for(int i=countnum-1;i>=0;--i)
    {
        cout<<pRezults[i];
    }
    cout<<endl;
 
    cin.get();
    cin.get();
    return 0;
}
И как вариант, с рекурсией.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
void PrintX3(int num){
    if (num/3)
        PrintX3(num/3);
    std::cout<<num%3;
}
 
int main(){
    setlocale(LC_ALL,"Russian");
    int number;
    std::cout<<"Введите число -> ";
    std::cin>>number;
    PrintX3(number);
    std::cout<<std::endl;
    std::cin.get();
    std::cin.get();
    return 0;
}
Блок схему добром не видно, картинка мутно-телефонного качества.
adbrey
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 28
10.11.2012, 18:06  [ТС]     Перевод чисел из 10очной системы счисления в 3ую #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Без вектора.
Праграмма ваша работает, высчитывает Спасибо ещё раз! Всё-таки хочется и свой вариант допинать и осознать Посматривал на ваш код и свой катаю:

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 <cmath>
//#include <conio.h>
 
using namespace std;
 
int main(){
    int chislo; // Число которое нужно перевести
    cout << "Введите число" << endl;
    cin >> chislo;// Ввод переводимого числа с клавиатуры
 do {
    int ostatok = chislo% 3;
ОСТАТОК ВВОДИТСЯ В МАССИВ И КАЖДОЕ НОВОЕ ПОВТОРЕНИЕ
ЦИКЛА ДОБАВЛЯЕТ ЕГО НОВЫЙ ЭЛЕМЕНТ
    int rezult = chislo/ 3;  // Результат вычисления без остатка
    } while (rezult > 3)
ЕСЛИ ЛОЖЬ ЦИКЛ ОСТАНАВЛИВАЕТСЯ И
ОСТАТОК ВЫВОДИТСЯ В МАССИВ КАК ПОСЛЕДНИЙ ЭЛЕМЕНТ
ЕСЛИ ПРАВДА ЦИКЛ ПОВТОРЯЕТСЯ
 
               for(int i= ostatok-i; i >= 0; i--){ // цикл выводящий елементы массива от последнего к первого
                  cout << ostatok[i];
               }
   //getch(); // используется чтобы окно програмы не закрывалось сразу
   return 0; // возвращает нулевое значение
}
Добавлено через 14 часов 38 минут
Цитата Сообщение от DPS Посмотреть сообщение
В википедии же есть алгоритм перевода...
В коде встречаются строки: (temp/=3), chislo/=3; я не знаю как это произнести речью на русском

++countnum это наверно счётчик.

Вот ещё вариант кода:
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
 ////////////////////////////////////////////////////////////////////////////
//Программа для перевода заданного числа из 10-ой в 3-ую систему счисления//
//Писалась в операционной системе linux в среде Code::Bloks               //
////////////////////////////////////////////////////////////////////////////
#include <stdio.h>//Подключение библиотеки стандартного ввода-вывода
#include <cmach>                 //Библиотека алгебраические функции
#include <iostream> //Подключение библиотеки потокового ввода-вывода
main()
{
//---Блок ввода исходной информации (число a для перевода в троичную систему)-
int x[]; // массив, в элементах которого будут храниться разряды троичного числа
int b=3; // b - константа, основание троичной системы счисления;
int a;   // исходное число для перевода в троичную систему счисления
std::cout<<"Введите десятичное число для перевода в троичную систему счисления a = "<< endl;
std::cin>>a;
//--------Блок перевода исходного числа в троичную систему счисления----------
int i=0; // служебная переменная, используемая в циклах в качестве счетчиков
while (a>=b)
{
i++;
x[i]=a%b;
a=a/b;
}
//-------Блок вывода результата (Исходное число в троичной системе)------------
std::cout<<"Исходное число в троичной системе счисления a = "<< endl;
for(int j=i-j; j>=1; j--){
std::cout<<x[j];
}
return 0;
}
Добавлено через 6 часов 12 минут
Последний код ваще не рабочий... хз как запускался Как же я всё-таки далёк и как понять тоже не даходит

Добавлено через 5 часов 17 минут
Ругается на этот код что в виндоус что линукс error: stray ‘\240’ in program и error: stray ‘\302’ in program
Почитал что это ошибки в текстовом файле, но хде

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
 #include <iostream>
#include <stdio.h>
#include <math.h>
 
using namespace std;
 
main(){
i******nt a;
******cout <<"Введите число"<< endl;
****** cin >> a;**
****** int m[100];
****** int i=0,j=0;
****** while (a!=0){ **
********* if (a % 3==1){m[i]=1;} **
********* else {m[i]=0;} **
********* a/=3; **
********* ++i; ++j; ***
****** };
****** cout <<"ответ:";
****** for (i=j-1;i > =0;i--){ **
********** cout<<m[i];
********** }
********* *
getch(); **
return 0; **
}
А как закинул код на форум пля... откуда эти звёздачки... Этот код я сначала скапировал в ворд документ с него в среду.

Добавлено через 8 минут
Удалил все эти звёздачки код ваще перемешался...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
11.11.2012, 13:25     Перевод чисел из 10очной системы счисления в 3ую #6
Цитата Сообщение от adbrey Посмотреть сообщение
Ругается на этот код что в виндоус что линукс error: stray ‘\240’ in program и error: stray ‘\302’ in program
Почитал что это ошибки в текстовом файле, но хде
Сохраните фаил с кодом в кодировке ANSI
adbrey
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 28
11.11.2012, 14:02  [ТС]     Перевод чисел из 10очной системы счисления в 3ую #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Сохраните фаил с кодом в кодировке ANSI
Самостаятельно пока не как. Пытаюсь на русский код перевести чтоб осознать как шаг за шагом работает порограмма. Выделение денамической помяти и указателями тоже не пользовал
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
 #include<iostream>
#include<locale.h>
using std::cout;// using namespace std; называется - раскрытием пространства имен. using std::cout;. Это единственный правильный способ, по двум причинам.
using std::cin; // 1. Не приходится переживать о перекрытии/смешении функций/классов с другим, открытым пространством имен.
using std::endl;// 2. при использовании нескольких библиотек в проекте, указание пространства имен, позволяет четко понимать, чьи классы/методы используются.
 
int main()
{
    setlocale(LC_ALL,"Rus"); // Способ вывода кириллицы в консоль. Нужно подключить заголовочный файл locale.h.
    int chislo; // Инициализайия переменной chislo.
    cout<<"Введите число, которое необходимо перевести(из 10-ой в 3-ую): ";// Предложение которое отображается в окне консоли.
    cin>>chislo; // Ввод числа пользователем.
    int ostatok;// Инициализация переменной ostatok.
    int *pRezults;// Oбъявление указателя *pRezults.
     int count=1; // Инициализируется переменная-счётчик cout и ей присваивается значение 1(начальное значение ближайшего цикла while).
     int temp=chislo;// Инициализируется переменная temp и ей присваивается значение перенной chislo.
     while(temp=temp/3){//Заголовок(условие продолжения) цикла while (ПОКА). Делим  значение переменной temp на 3 и результат деления присваивается переменной temp.
         ++count;} //Тело цикла while. Префиксный оператор-счётчик увеличения, сначала увеличивается оператор cout.
    pRezults=new int[count];//count указывает длину создаваемого одномерного массива. Адрес первого элемента возвращается и помещается в pRezults поэтому.
    pRezults[0]=0;//pRezults[0] значение нулевого элемента массива (считая от нулевой позиции) и ему присваевается значение 0.
    delete[] pRezults;//Любая динамическая память выделенная при помощи new[] должна освобождаться при помощи оператора delete[].
    temp=0;// Инициализируется переменная-счётчик temp и ей присваивается значение 0(начальное значение цикла while(ПОКА)).
    while(chislo)//Заголовок(условие продолжения) цикла while. Условие chislo. Более одного оператора = фигурные скобки обязательны.
    {
        ostatok=chislo%3;//Переменной ostatok присваивается значение остатока от деления на 3 значения переменной chislo
        chislo= chislo/3;//Переменной chislo присваивается значение результата деления на 3 значения переменной chislo
        pRezults[temp++]=ostatok;//????????????????????????????????????????????????????????????????????????????????
    }
 
    for(int i=count-1;i>=0;--i)//Для(
    {
        cout<<pRezults[i];//Выводится на экран результат вычисления
    }
           cout<<endl;// Пропуск отображающей в окне строки следующая после вывода результата
    cin.get();//Функция get() стандартного потока ввода cin заставляет систему ожидать ввода пользователем любого символа,
    cin.get();//оторый она считывает, и программа завершается. Проблема в том, что работает cin.get() далеко не всегда.
    return 0;//ноль возвращается в вызывающую функцию, когда программа была выполнена успешно. 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2012, 14:31     Перевод чисел из 10очной системы счисления в 3ую
Еще ссылки по теме:

Перевод чисел из одной системы счисления в другую C++
C++ Перевод чисел из одной системы счисления в другую!
C++ Перевод чисел из десятичной системы счисления в 2, 8 и 16

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
11.11.2012, 14:31     Перевод чисел из 10очной системы счисления в 3ую #8
Строчка 21 сразу не правильно.
Память эта нам еще нужна будет, а Вы её освобождаете.
Вставьте её перед return 0;

Добавлено через 7 минут
C++
1
2
int chislo; // Инициализайия переменной chislo.
int ostatok;// Инициализация переменной ostatok.
Это объявление переменных, а не инициализация.

Добавлено через 16 минут
Добавил несколько комментариев к Вашим.
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
#include<iostream>
#include<locale.h>
using std::cout;// using namespace std; называется - раскрытием пространства имен. using std::cout;. Это единственный правильный способ, по двум причинам.
using std::cin; // 1. Не приходится переживать о перекрытии/смешении функций/классов с другим, открытым пространством имен.
using std::endl;// 2. при использовании нескольких библиотек в проекте, указание пространства имен, позволяет четко понимать, чьи классы/методы используются.
 
int main()
{
    setlocale(LC_ALL,"Rus"); // Способ вывода кириллицы в консоль. Нужно подключить заголовочный файл locale.h.
    int chislo; // Объявление переменной chislo,для хранения числа, введенного пользователем.
    cout<<"Введите число, которое необходимо перевести(из 10-ой в 3-ую): ";// Предложение которое отображается в окне консоли.
    cin>>chislo; // Ввод числа пользователем.
    int ostatok;// Объявление переменной ostatok, в которою будет записываться остаток от деления
    int *pRezults;// Oбъявление указателя *pRezults.
     int count=1; // Инициализация переменной count. В неё будет записано количество символов, необходимых для записи числа в троичной СС.
     int temp=chislo;// Инициализируется переменная temp и ей присваивается значение перенной chislo.
     //В данном цикле определяется сколько понадобится для записи числа в троичной системе счисления
      while(temp=temp/3){//Делим temp на основание системы в которую переводим число. Результат заносим в temp. Если результат деления 0 - то выход из цикла.
         ++count;} //Увеличиваем count (кол-во символов, необходимых для записи числа)
    pRezults=new int[count];//Вы деление памяти, для хранения цифр числа в троичной СС. pRezults указывает на начало блока выделенной памяти
    pRezults[0]=0;//pRezults[0] значение нулевого элемента массива (считая от нулевой позиции) и ему присваевается значение 0.
    temp=0;// Инициализируется переменная-счётчик temp и ей присваивается значение 0(начальное значение цикла while(ПОКА)).
    //В этом цикле происходит перевод числа. Если введено число 0, то цикл не выполниться, поэтому было сделано pRezults[0]=0
     while(chislo)//Заголовок(условие продолжения) цикла while. Условие chislo. Более одного оператора = фигурные скобки обязательны.
    {
        ostatok=chislo%3;//Переменной ostatok присваивается значение остатока от деления на 3 значения переменной chislo
        chislo= chislo/3;//Переменной chislo присваивается значение результата деления на 3 значения переменной chislo
        pRezults[temp++]=ostatok;//Остаток заносится в pZeluts[temp] и после этого temp увеличивается на 1. Можно разложить так:
          //pRezults[temp]=ostatok;
          //++temp;
    }
 //Выводим остатки от деления в обратном порядке.
    for(int i=count-1;i>=0;--i)//Для(
    {
        cout<<pRezults[i];//Выводится на экран результат вычисления
    }           
     cout<<endl;// Пропуск отображающей в окне строки следующая после вывода результата
     delete[] pRezults;//Любая динамическая память выделенная при помощи new[] должна освобождаться при помощи оператора delete[].
    cin.get();//Функция get() стандартного потока ввода cin заставляет систему ожидать ввода пользователем любого символа,
    cin.get();//оторый она считывает, и программа завершается. Проблема в том, что работает cin.get() далеко не всегда.
     return 0;//ноль возвращается в вызывающую функцию, когда программа была выполнена успешно. 
}
Yandex
Объявления
11.11.2012, 14:31     Перевод чисел из 10очной системы счисления в 3ую
Ответ Создать тему
Опции темы

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