|
Вопрос # 4 212/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
вопрос таков... задача- сделать калькулятор(+ - / *), считать он должен в десятичной и двоичной системах счисления. переключение между ними происходит с помощью 2х радио кнопок. числа вводятся в 2 разных поля edit.
собственно проблема у меня в счете в двоичной системе(перевод из сист в систему надо производить без стандартных функций, как в коде).
по моей идеи он должен считать таким образом - при нажатии на кнопку + - / * он смотрит какая радиокнопка нажата и в зависимости от этого, либо просто считают(в десят сист), либо переводят содержимое ячеек из двоичного кода в десятичный, считают, затем выводят ответ переведя его в двоичный код опять. у меня не получается этого сделать + организовать повторяющиеся переводы из сист в сист с помощью отдельных функций(чтоб каждый раз не переписывать их)
Извините за глупость конечно, но уже застопорился надолго над этим, спасибо за терпение. фрагмент кода
 |
Вопрос задал: scvorec (статус: Посетитель)
Вопрос отправлен: 23 мая 2010, 19:03
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
// Переводит целое в двоичное
function IntToBin(Value: Longint; Digits, Spaces: Integer): string;
begin
Result := '';
if Digits > 32 then Digits := 32;
while Digits > 0 do begin
if (Digits mod Spaces) = 0 then Result := Result + ' ';
Dec(Digits);
Result := Result + IntToStr((Value shr Digits) and 1);
end;
end;
// Пpеобpазует число по основанию B в стpоке S в целое десятичное.
function Numb2Dec(S: string; B: Byte): Longint;
var
I, P: Longint;
begin
I := Length(S);
Result := 0;
S := UpperCase(S);
P := 1;
while (I >= 1) do begin
if S[I] > '@' then Result := Result + (Ord(S[I]) - 55) * P
else Result := Result + (Ord(S[I]) - 48) * P;
Dec(I);
P := P * B;
end;
end;
// Пpеобpазует целое число N в число по основанию B,
// дополняя слева нулями до длины A.
function Dec2Numb(N: Longint; A, B: Byte): string;
var
C: Integer;
Number: Cardinal;
begin
if N = 0 then Result := '0'
else begin
Number := N;
Result := '';
while Number > 0 do begin
C := Number mod B;
if C > 9 then C := C + 55
else C := C + 48;
Result := Chr(C) + Result;
Number := Number div B;
end;
end;
if Result <> '' then Result := AddChar('0', Result, A);
end;
// Добавляет слева к стpоке S символы C до длины S=N.
function AddChar(C: Char; const S: string; N: Integer): string;
begin
if Length(S) < N then
Result := MakeStr(C, N - Length(S)) + S
else Result := S;
end;
// Фоpмиpует стpоку из N символов C.
function MakeStr(C: Char; N: Integer): string;
begin
if N < 1 then Result := ''
else begin
SetLength(Result, N);
FillChar(Result[1], Length(Result), C);
end;
end; К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 24 мая 2010, 09:57
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 24 мая 2010, 09:38; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 23 мая 2010, 21:17 [#1]:
Не понимаю, что тебя напрягает. Перевод из одной СС в другую или что? Написать за тебя функции IntToBin() и BinToInt()?
Это несложно, однако всё давно написано за тебя. Есть старый добрый пакет RxLib 2.75 с модулем RxStrUtils.pas.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
scvorec (статус: Посетитель), 23 мая 2010, 22:10 [#2]:
дело в том что переводы я написал(код представлен в вопросе), но не получается организовать расчет по одной кнопки и в двоичной и в десятичной системах(в зависимости от выбора радиокнопки)
|
|
min@y™ (статус: Доктор наук), 23 мая 2010, 22:28 [#3]:
А5 не могу понять, в чём проблема. По нажатию кнопки переводи введённое в любой СС число в обычный двоичный Integer или Cardinаl, производи расчёты, а затем переводи в требуемую СС и выводи на экран.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
scvorec (статус: Посетитель), 24 мая 2010, 08:54 [#4]:
в том то и дело, что это не получается, хотя делаю именно так
|
|
min@y™ (статус: Доктор наук), 24 мая 2010, 09:38 [#5]:
Скачай RxLib и на парься.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|