![]() |
|
|
#1
|
|||
|
|||
![]() Всем Привет!!! Помогите, пожалуйста!!! Экзамен никак не сдам!!!
Задача: Необходимо составить инженерный калькулятор (похожий на стандартный) с переводом чисел во все системы счисления. Долго мучилась но ничего не получается. Заранее спасибо!!! |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
||||
|
||||
![]() Ну, а что именно, не получается?
|
#4
|
|||
|
|||
![]() Да вроде бы всё правильно ввожу, а он не пашет. А с системами счисления вообще ничего, даже не понимаю как их делать.
|
#5
|
||||
|
||||
![]() Вот код для двоичного исчисления:
Код:
procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text := '0'; //Изначально зануляем поле Edit1 end; procedure TForm1.RadioButton1Click(Sender: TObject); var i, x: integer; s1, s2: string; begin x:=StrToInt (Edit1.Text); // Алгоритм исчисления while x > 1 do begin s1:=s1+IntToStr(x mod 2); x:=x div 2; end; s1:=s1+'1'; // Переворачиваем строку (смотри теорию) for i:=length(s1) downto 0 do begin s2:=s2+s1[i]; end; // Выводим результат (заносим в поле Edit1) Edit1.Text := s2; end; Для других систем исчисления просто подставляешь свой алгоритм (читай теорию). |
#6
|
|||
|
|||
![]() может есть у кого готовый? дайте пожалста, очень нужен!!!
|
#7
|
|||
|
|||
![]() Вот тоже функции по преобразованиям :
Код:
function Convert_Int10_to_Another(v10 : cardinal; BaseAnother : integer) : string; //Перевод целого 10-чного числа (v10) в систему счисления //с основанием (BaseAnother [2..36]) //Функция возвращает представление числа //в заданной системе счисления Var vFrac : integer; //остаток по модулю (основание) vFracStr : string;//строковое представления остатка begin Result:=''; if (BaseAnother>1) and (BaseAnother<=36) then begin repeat vFrac:=v10 MOD BaseAnother; //v10 – (v10 div BaseAnother)*BaseAnother v10:=v10 DIV BaseAnother; //trunc(v10/BaseAnother) if vFrac>9 then begin //Это буква латинского алфавита vFracStr:=CHR(ORD('A')-10+vFrac) end else begin //переводим остаток в строковое представление STR(vFrac,vFracStr); end; Result:=Result+vFracStr; until v10=0; //Инвертируем результат Result:=InversionString(Result); end; end; function Convert_IntAnother_to_10(vAnother : string; BaseAnother : integer) : cardinal; //Перевод целого числа (vAnother) из системы счисления BaseAnother [2..36] //в десятичную систему счисления //Функция возвращает представление числа //в десятичной системе счисления var i : integer; Res, ValNum : integer; begin Result:=0; if (BaseAnother>1) and (BaseAnother<=36) then begin vAnother:=Trim(vAnother); if length(vAnother)>0 then begin vAnother:=AnsiUpperCase(vAnother); for i:=1 to length(vAnother) do begin //Конвертируем текущий символ в число VAL(vAnother[i],ValNum,Res); if Res<>0 then begin //если это не число - считаем, //что буква латинского алфавита //и вычисляем по позиции ValNum:=10+ORD(vAnother[i])-ORD('A'); end; //Вычисляем соответствующую степень и суммируем Result:=Result+sp_XpowerN(BaseAnother,length(vAnother)-i)*ValNum; end; end; end; end; function sp_XpowerN(X, N :integer ):cardinal; //X в степени N var i : integer; begin Result:=1; for i:=1 to N do begin Result:=Result*X; end; end; function InversionString(Sx : string) : string; //Инвертировать строку Var i : integer; begin Result:=Sx; if Length(Sx)>0 then begin Result:=''; for i:=Length(Sx) downto 1 do begin Result:=Result+Sx[i]; end; end; end; |