21.07.2019, 06:22 [+3 UTC]
в нашей команде: 3 751 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.07.2019, 12:26

Последний вопрос:
20.07.2019, 17:15
Всего: 149945

Последний ответ:
20.07.2019, 16:43
Всего: 258714

Последняя рассылка:
21.07.2019, 01:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
29.05.2012, 19:22 »
Megaloman
Хотя задача и не решена, в ответе содержится полезная информация применительно к поставленной задаче. Возможно я что-то не понимаю при использовании соединения, организованного сторонней организацией. [вопрос № 186157, ответ № 270948]
07.02.2010, 19:16 »
Калимуллин Дамир Рустамович
Второй способ действительно помог, спасибо [вопрос № 176541, ответ № 259279]
25.09.2010, 20:16 »
kot31
Спасибо, мой ответ был таким же, но не так подробно и всё по полочкам... [вопрос № 180022, ответ № 263185]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 209
puporev
Статус: Профессионал
Рейтинг: 26
Асмик Гаряка
Статус: Советник
Рейтинг: 0

Перейти к консультации №:
 

Консультация онлайн # 143292
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Ильнур
Отправлена: 07.09.2008, 19:22
Поступило ответов: 3

Здравствуйте уважаемые эксперты, как начинающий программист я начал писать калькулятор. с простыми вычислениями справился.
Начал писать инженерный калькулятор, и столкнулся с массой проблем:
1.Как осуществить перевод из одной системы счисления в другую, (хочу сделать процедуру при нажатии RadioButton1,2,3) Как делать клавиши неактивными понял.
2.Сделал так же процедуры вычисления синуса, косинуса, тангенса. Вроде бы считает хорошо, да проблемка одна.. На те же самые вычисления калькулятор Windows выдает другие ответы.
3.Ну и вопрос таки не в тему)) Чем отличаются кнопки C и CE на калькуляторе?.. Ведь они обе очищают поле Edit1.Text..
4.Как осуществить процедуру нажатия на кнопку % что бы он вычислял так же как и Windows калькулятор.
5. Ну и ещё вопросик)) как осуществить процедуру нажатия кнопки Backspace что бы при нажатии кнопки удалялся последний символ.
6.Если это можно считать за вопрос)): как сделать так что бы при нажатии на клавиатуре чисел или мат. Действий происходило нажатие на кнопки)).
Спасибо.

Приложение:

Состояние: Консультация закрыта

Ответ # 228740 от monah

Здравствуйте, Ильнур!
1 Перевод из одной системы в другую можно делать несколькими способами.
Проше всего переводить использую возможности делфи. Для перевода из десятичной IntToBin и IntToHex возвращают строку. А если к строке подставить "Н" или "0" то функция StrToInt вернет десятичное значение.
2 Скорее всего вы не перевели градусы в радианы. Перевод осуществляется так Rad=grad*PI/180 Где PI это число "пи".
3 "С" сбрасывает весь буфер памяти а "СЕ" только значение на экране
4 Не совсем понял вопрос, извините.
5 Копируете значение в переменную и удаляете del(s, LenGth(s), 1)
6 Необходимо перехватить нажати кнопок. Это события формы onKeyXXXXX В них можно отловить либо значение символа нажатой (onKeyPress) кнопки, либо его номер для нажатия или отпускания.

Надеюсь что достаточно ответил на Ваши вопросы и помог.


Консультировал: monah
Дата отправки: 07.09.2008, 20:14

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 228741 от Олекса aka SoW

Здравствуйте, Ильнур!
Вот ответ на некоторые из Ваших вопросов:

1) Сам таким не интересовался, но в Интернете достаточно много написано о переводе чисел с одной системы счисления в другую. Например, здесь - http://articles.org.ru/cn/showdetail.php?cid=5868

2) Процедуры Delphi вычисляют функции, предполагая, что аргумент представлен в радианах. Если Вам нужно делать вычисления в градусах, нужно аргумент умножить на число 2*pi/180 (около 0,0349). Например, для вычисление косинуса 180 градусов нужно записать cos(180*0.0349)

3) Кнопка С – удаляет все вычисления, СЕ – только последнее введенное число.
Например, если набрать «9», потом «/», «3», «С», «9», «=» , то в результате мы получим число «9». Если вместо «С» нажать «СЕ», то получим «1» (результат деления 9 на 9)

5-6) Создаем процедуру, и задаем ее в качестве обработчика события onKeyPress для формы, edit и всех кнопок.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
if Key='1' then Button1.Click;
if Key='2' then Button2.Click;
.....
if Key=’/’ then Button13.Click;
//и так для всех чисел и операций

//Следующий текст для обработчика нажатия Backspace
if Key=#8 then
begin
if Edit1.Text='0' then Exit;
if length(Edit1.Text)=1 then Edit1.Text:='0'
else begin
s:=Edit1.Text;
Delete(s,length(s)-1,1);
Edit1.Text:=s;
end;
end;

end;


Консультировал: Олекса aka SoW
Дата отправки: 07.09.2008, 20:16

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 228742 от SHERRY

Здравствуйте, Ильнур!
1.
Вот Вам два алгоритма преобразования чисел - в из десятичной в двоичную сс, из двоичной в десятичную сс. Опитмально будет прописать использование этих функций в событии OnClick Ваших RadioButton-ов

function ToBin(var x: integer): string; // Переход к двоичной системе
var rez: string; // результат декодирования будет, как известно, строкового типа
    y: integer; // а здесь будем хранить число в исходном типе данных (десятичном)
begin
  rez := '';  y := x; 
  //  Опишу вкратце алгоритм преобразования десятичного числа в двоичную сс
  //  Перебираем число по цифре, начиная с конца, и смотрим: если цифра делится на 2 без остатка,
  //  в результат дописываем нуль, в противном случае - единичку. Реализация сего нехитрого алгоритма ниже.
  Repeat 
   if (y mod 2 = 0) then rez := '0' + rez
     else rez := '1' + rez;
   y := y div 2;
  Until y < 1;
  ToBin := rez;
end;

function ToNormal(var x: string): integer; // переход к десятичной системе
var y: string;  // исходное число в строковом типе
    rez: real;  //  результат - вещественный тип (для удобства при вычислениях)
    i,t: integer;
begin
  y := x; rez := 0;
  //  Рассмотрим вариант перевода числа из десятичной системы счисления в двоичную.
  //  Перебираем побитово строку, выполняя следующее действие
  //  Преобразовываем символ в число функцией StrToInt() 
  //  в результат записываем выражение: результат + число умноженное на двойку, 
  //  возведённую в степень, равную порядковому номеру символа в строке (отсчёт ведём справа налево)
  //  например '1010' (10) = (0 * 2^1) + (1 * 2^2) + (0 * 2^3) + (1 * 2^4) = 0 + 2 + 0 + 8 = 10
  for i:=0 to length(y)-1 do
   begin
     t := StrToInt(y[Length(y) - i]);
     rez := rez + t * Exp(i * ln(2));
   end;
  ToNormal := Round(int(rez));
end;


5.
Это легко: помещаем содержимое строки ввода в отдельную переменную и процедурой Delete() удаляем 1 символ в конце строки. Если же в исходной строке всего лишь 1 символ, то запишем в неё нуль.

if length(edit1.text) = 1 then edit1.text := '0' else begin
    s := edit1.text;
    delete(s,length(s),1);
    edit1.text := s;
   end;


6.
В свойствах формы найдите KeyPreview и установите ему значение true.
Теперь свободно можете отлавливать на форме нажимаемые клавиши клавиатуры:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case key of
       '*' : {выполнять умножение};
       '/' : {выполнять деление};
       '-' : {вычитание};
       '+' : {сложение};
       chr(13) : {подсчитать результат (кнопка "=")};
       '.' : {запятая (точка)};
     end;
end;


Также можно отлавливать нажатие кнопок Escape и Backspace:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case key of
      vk_Escape: {делать что-нибудь};
      vk_back: {и ещё что-то};
   end;
end;


Аналогично можно перехватывать цифровые кнопки.


Консультировал: SHERRY
Дата отправки: 07.09.2008, 20:22

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16448 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35