Вариант 8. Программа перевода целых чисел между десятичной, двоичной, восьмеричной и шестнадцатеричной системами счисления.
Code:
//--------------------------------------------------------------------------- #include < vcl.h > #include < stdlib.h > #include < math.h > #include < stdio.h > #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } // Перевод строки S (шестнадцатеричного числа) в десятичное число int HexToInt(AnsiString S) { int i=0,k=1,b; for (int j=S.Length();j>=1;j--) { if (S[j]=='0')b=0; if (S[j]=='1')b=1; if (S[j]=='2')b=2; if (S[j]=='3')b=3; if (S[j]=='4')b=4; if (S[j]=='5')b=5; if (S[j]=='6')b=6; if (S[j]=='7')b=7; // Перехватов Д. 09МОС(у) if (S[j]=='8')b=8; if (S[j]=='9')b=9; if (S[j]=='a')b=10; if (S[j]=='b')b=11; if (S[j]=='c')b=12; if (S[j]=='d')b=13; if (S[j]=='e')b=14; if (S[j]=='f')b=15; i=i+b*k; k*=16; } return i; } void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Text == "") { ShowMessage("Ощибка! Вы не указали число."); return; } AnsiString pro = Edit1->Text; int leng = pro.Length(); if( leng >=10) { ShowMessage("Ощибка! Слишком большое значение."); return; } int base; int num = 0;// StrToInt(Edit1->Text); int sym=0; bool gg = false; // Перевод из двоичной системы счисления в десятичную if (RadioButton2->Checked) { int a = StrToInt(Edit1->Text); int k = 0; while (a > 0) { int r = a % 10; a = a / 10; sym = sym + r*pow(2,k); k++; } num = sym; gg = true; } // см выше функция перевода шестнадцатеричного в десятичное if (RadioButton3->Checked) { AnsiString s1 = Edit1->Text; num = HexToInt(s1); gg = true; } // Перевод восьмеричной в десятичную if (RadioButton4->Checked) { int a = StrToInt(Edit1->Text); int k = 0; while (a > 0) { int r = a % 10; a = a / 10; sym = sym + r*pow(8,k); k++; } num = sym; gg = true; } if (RadioButton1->Checked) { num = StrToInt(Edit1->Text); } if ((RadioButton1->Checked || gg)&& RadioButton5->Checked) { base = 10; } if ((RadioButton1->Checked || gg)&& RadioButton6->Checked) { base = 2; } if ((RadioButton1->Checked || gg)&& RadioButton7->Checked) { base = 16; } if ((RadioButton1->Checked || gg)&& RadioButton8->Checked) { base = 8; } char s[500]; itoa (num, s, base); /* Переводит десятичное число num, записываем его в строку s, с основание base */ Edit2->Text = s; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_ESCAPE) Close(); } // Проверка ввода, позволяет ввести только возможные символы той или иной сс void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key) { if (RadioButton1->Checked) { if (Key != '9' && Key != '8' && Key != '7' && Key != '6' && Key != VK_BACK && Key != '5' && Key != '4' && Key != '3' && Key != '2' && Key != '1' && Key != '0') { Key = VK_CANCEL; } } if (RadioButton2->Checked) { if (Key != '1' && Key != '0' && Key != VK_BACK) { Key = VK_CANCEL; } // Перехватов Д. 09МОС(у) } if (RadioButton4->Checked) { if (Key != '7' && Key != '6' && Key != VK_BACK && Key != '5' && Key != '4' && Key != '3' && Key != '2' && Key != '1' && Key != '0') { Key = VK_CANCEL; } } if (RadioButton3->Checked) { if (Key != '7' && Key != '6' && Key != VK_BACK && Key != '5' && Key != '4' && Key != '3' && Key != '2' && Key != '1' && Key != '0' && Key != '8' && Key != '9' && Key != 'a' && Key != 'b' && Key != 'c' && Key != 'd' && Key != 'e' && Key != 'F') { Key = VK_CANCEL; } } } void __fastcall TForm1::RadioButton1Click(TObject *Sender) { if (RadioButton1->Checked) { Label3->Caption = "Возможные символы { 1,2,3,4,5,6,7,8,9 }"; } if (RadioButton2->Checked) { Label3->Caption = "Возможные символы { 1,0 }"; } if (RadioButton3->Checked) { Label3->Caption = "Возможные символы { 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f }"; } if (RadioButton4->Checked) { Label3->Caption = "Возможные символы { 1,2,3,4,5,6,7 }"; } Edit1->Text = ""; } //--------------------------------------------------------------------------- void __fastcall TForm1::RadioButton5Click(TObject *Sender) { Edit2->Text = ""; } //---------------------------------------------------------------------------
05 июня 2010, 21:23