Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 212

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
вопрос таков... задача- сделать калькулятор(+ - / *), считать он должен в десятичной и двоичной системах счисления. переключение между ними происходит с помощью 2х радио кнопок. числа вводятся в 2 разных поля edit.
собственно проблема у меня в счете в двоичной системе(перевод из сист в систему надо производить без стандартных функций, как в коде).
по моей идеи он должен считать таким образом - при нажатии на кнопку + - / * он смотрит какая радиокнопка нажата и в зависимости от этого, либо просто считают(в десят сист), либо переводят содержимое ячеек из двоичного кода в десятичный, считают, затем выводят ответ переведя его в двоичный код опять. у меня не получается этого сделать + организовать повторяющиеся переводы из сист в сист с помощью отдельных функций(чтоб каждый раз не переписывать их)
Извините за глупость конечно, но уже застопорился надолго над этим, спасибо за терпение. фрагмент кода

scvorec Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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™

min@y™ (статус: Доктор наук), 23 мая 2010, 21:17 [#1]:

Не понимаю, что тебя напрягает. Перевод из одной СС в другую или что? Написать за тебя функции IntToBin() и BinToInt()?
Это несложно, однако всё давно написано за тебя. Есть старый добрый пакет RxLib 2.75 с модулем RxStrUtils.pas.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
scvorec

scvorec (статус: Посетитель), 23 мая 2010, 22:10 [#2]:

дело в том что переводы я написал(код представлен в вопросе), но не получается организовать расчет по одной кнопки и в двоичной и в десятичной системах(в зависимости от выбора радиокнопки)
min@y™

min@y™ (статус: Доктор наук), 23 мая 2010, 22:28 [#3]:

А5 не могу понять, в чём проблема. По нажатию кнопки переводи введённое в любой СС число в обычный двоичный Integer или Cardinаl, производи расчёты, а затем переводи в требуемую СС и выводи на экран.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
scvorec

scvorec (статус: Посетитель), 24 мая 2010, 08:54 [#4]:

в том то и дело, что это не получается, хотя делаю именно так
min@y™

min@y™ (статус: Доктор наук), 24 мая 2010, 09:38 [#5]:

Скачай RxLib и на парься.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.04 сек.