Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2010, 13:54   #11
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

AnsiString содержится в библиотеке VCL. В консольных приложениях используйте вместо нее стандартную строку C++ std::string.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 24.02.2010, 08:16   #12
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
В консольных приложениях используйте вместо нее стандартную строку C++ std::string.
Ээ.. Расскажи подробнее, пожалуйста

Написал так
Код:
#include <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}

string Int_To_StrHex(int A)
{
   string S, S1, Str = "01234567890ABCDEF";
   cout << S[0] << endl;

   if (A == 0)
   {
      S1 = "0000";
      return S1;
   }

   while (A > 0)
   {
      S += Str[A % 16];
      A = A / 16;
   }

   if ((S.size() % 5) == 1) S += string("000");
   if ((S.size() % 5) == 2) S += string("00");
   if ((S.size() % 5) == 3) S += string("0");

   for (int k = 0; k < S.size(); k++)
   {
      S1 += S[S.size() - 1 - k];
   }

   return S1;
}
 
int main()
{
        setlocale(LC_ALL, "Russian");
        int etalonChislaV10SS; // эталон числа в 10 СС
        int chisloV10SS;//Число в десятичной СС
        int chisloV2SS = 0;//Искомое число в двоичной CC
        int razrjadChislaV2SS = 0;//Разряд двоичного числа
        int chisloV8SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV8SS = 0; // разряд восьмеричного числа
        int chisloV16SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV16SS = 0; // разряд восьмеричного числа
 
                cout.setf(ios::left, ios::adjustfield);//Выравнивание по левому краю
 
   cout << setw(12) << "Dec" << setw(12) <<"Bin"  << setw(12) << "Oct"  << setw(12) << "Hex" << endl;
 
   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
        cout << setw(12) << chisloV10SS;
 
        chisloV2SS = 0;
        razrjadChislaV2SS = 0;
        chisloV8SS = 0;
        razrjadChislaV8SS = 0;
        chisloV16SS = 0;
        razrjadChislaV16SS = 0;
 
        etalonChislaV10SS = chisloV10SS;
// преобразование в 2 СС
        while(chisloV10SS > 1)
        {
           chisloV2SS += (chisloV10SS%2) * pow(10, razrjadChislaV2SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 2;
           razrjadChislaV2SS++;
        }
 
        chisloV2SS += chisloV10SS * pow(10, razrjadChislaV2SS);
 
        cout << setw(12) << chisloV2SS;
// преобр. в 8 СС
 
        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }
 
        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
        cout << '0' << setw(12) << chisloV8SS;
// преобр. в 16 СС
        chisloV10SS = etalonChislaV10SS;

        string s = Int_To_StrHex(chisloV10SS);
        cout << setw(12) << s.c_str();

        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
Только почему-то после вывода числа в 8 СС происходит переход на следующую строку, хотя там нет endl; Почему?

Последний раз редактировалось fs444; 24.02.2010 в 08:38.
fs444 вне форума Ответить с цитированием
Старый 25.02.2010, 08:10   #13
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Вот, надеюсь, финальный вариант кода:
Код:
#include <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;

int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}

string Int_To_StrHex(int A)
{
   string S, S1, Str = "01234567890ABCDEF";
   cout << "0x" << S[0];

   if (A == 0)
   {
      S1 = "0000";
      return S1;
   }

   while (A > 0)
   {
      S += Str[A % 16];
      A = A / 16;
   }

   if ((S.size() % 5) == 1) S += string("000");
   if ((S.size() % 5) == 2) S += string("00");
   if ((S.size() % 5) == 3) S += string("0");

   for (int k = 0; k < S.size(); k++)
   {
      S1 += S[S.size() - 1 - k];
   }

   return S1;
}

int main()
{
        setlocale(LC_ALL, "Russian");
        int etalonChislaV10SS; // эталон числа в 10 СС
        int chisloV10SS;//Число в десятичной СС
        int chisloV2SS = 0;//Искомое число в двоичной CC
        int razrjadChislaV2SS = 0;//Разряд двоичного числа
        int chisloV8SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV8SS = 0; // разряд восьмеричного числа
        int chisloV16SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV16SS = 0; // разряд восьмеричного числа

                cout.setf(ios::left, ios::adjustfield);//Выравнивание по левому краю

   cout << setw(12) << "Dec" << setw(12) <<"Bin"  << setw(12) << "Oct"  << setw(12) << "Hex" << endl;

   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
        cout << setw(12) << chisloV10SS;

        chisloV2SS = 0;
        razrjadChislaV2SS = 0;
        chisloV8SS = 0;
        razrjadChislaV8SS = 0;
        chisloV16SS = 0;
        razrjadChislaV16SS = 0;

        etalonChislaV10SS = chisloV10SS;
// преобразование в 2 СС
        while(chisloV10SS > 1)
        {
           chisloV2SS += (chisloV10SS%2) * pow(10, razrjadChislaV2SS);//Присваиваем i-тому разряду остаток от деления (здесь вместо i написано razrjadChislaV2SS)
           chisloV10SS /= 2;
           razrjadChislaV2SS++;
        }

        chisloV2SS += chisloV10SS * pow(10, razrjadChislaV2SS);

        cout << setw(12) << chisloV2SS;
// преобр. в 8 СС

        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }

        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);

        cout << '0' << setw(12) << chisloV8SS;
// преобр. в 16 СС
        chisloV10SS = etalonChislaV10SS;

        string s = Int_To_StrHex(chisloV10SS);
        cout << setw(12) << s.c_str() << endl;

        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
fs444 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер. алгоритм перевода 16-ричного однобайтного числа в 10-тичное. kir83 Помощь студентам 9 20.01.2010 15:30
Программа перевода чисел с плавающей запятой Veselyn Помощь студентам 4 03.01.2010 19:49
Программа для перевода из 16-ной с/c в 2-ную fult Паскаль, Turbo Pascal, PascalABC.NET 0 05.05.2009 21:57
Алгоритм перевода числа в hex text. Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 02.12.2008 21:36
Алгоритм перевода двоичного числа в десятичное и обратно strab Общие вопросы Delphi 5 17.06.2008 21:33