• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Программа не выводит отрицательные числа и нули. Delphi

  • Автор темы Автор темы DK2
  • Дата начала Дата начала

DK2

Ученик
Регистрация
10 Май 2017
Сообщения
6
Реакции
0
Баллы
0
Программа не выводит отрицательные числа и нули. Delphi

Калькулятор не выводит на дисплей отрицательные числа при нажатии на кнопку "Not", он просто оставляет дисплей пустым. А вот при сложении и вычитании выводит. Хотя мне надо чтоб и так и так выводил. Вот в этих функциях где то ошибка, что ему не нравится я не понимаю. Главная при сложении и вычитании выводит, а при использовании "Not" не хочет.
Код:
function CharToInt(Ch:char):integer;
begin //преобразование цифровой литеры в число
  case Ch of
    '0'..'9': Result:= Ord(Ch) - Ord('0');
    'A'..'F': Result:= Ord(Ch) - Ord('A') + 10;
     else Result:= 0;
  end;
end;
function IntToChar(N:integer):char;
begin //преобразование числа в цифровую литеру
  case N of
    0..9   : Result:= char(Ord('0') + N);
    10..15 : Result:= char(Ord('A') + N - 10);
    else Result:= '0';
  end;
end;
function StringToInt(const S: string; Radix: integer): integer;
var i: integer; //преобразуем цифровую строку S в число
   neg : boolean;
begin
  Result := 0;
  neg := false;
  if (Length(S)>0) and (S[1]='-') then neg := true;
  for i := 1 to Length(S) do
    Result := Result * Radix + CharToInt(S[i]);
  if neg then Result := -Result;
end;
function IntToString(N, Radix: integer): string;
var neg, zig : boolean;
begin //преобразуем число N в строку цифр
  neg:= N<0;
  zig:=N=0;
  N := abs(N);
  while abs(N) > 0 do begin
    Result := IntToChar(N mod Radix) + Result;
    N := N div Radix;
  end;
  if neg then Result := '-'+Result;
  if zig then Result := '0';
end;
 
Что-то не то с кодировкой. Русские буквы в виде кракозябриков.
Тут только функции, а где сама программа?

Думаю проблема не в программе, а в формате вывода на экран.
 
при использовании "Not" не хочет.
Это всё потому, что NOT - логический бинарный оператор инверсии, а Вы его пытаетесь применить к десятичному числу, да еще добиться знака минус.
Ничего не выйдет.
 
Так ведь в Калькуляторе Windows это возможно же
 
Зачем эта "самопальщина"?
В Delphi, начиная с версии I, есть встроенные функции по переводу "туды-сюды".
 
Я их не знаю
 
Для этого есть справка, по англицки - Help.
Вы, свою задачу поясните, тогда и будет краткий и емкий ответ :)
 
Ладно, пофиг на этот Not, тогда вопрос таков как сделать так что бы при вводе одного числа и по нажатию на кнопку ROR или ROL производился циклический сдвиг вправо или влево в зависимости какая кнопка нажата. Только не надо мне писать операторы побитовых сдвигов.
 
Так ведь в Калькуляторе Windows это возможно же
Да калькулятор Windows значительно сложней чем кажется. Обратите внимание на то, что кнопки A, B, C, D, E, F недоступны в режиме "Dec", а в Вашем их использование даже при суммировании вызывает ошибку деления на ноль. ;)
как сделать так что бы при вводе одного числа и по нажатию на кнопку ROR или ROL производился циклический сдвиг вправо или влево в зависимости какая кнопка нажата.
Если речь про любую другую систему счисления, кроме двоичной, то никак - это не имеет смысла.
 
Последнее редактирование:
Не знаю что у вас там вызывает, у меня все прекрасно работает, да там доступны все кнопки в любых СС но это так надо на данный момент, это всего лишь маленький прототип.
 
Не знаю что у вас там вызывает, у меня все прекрасно работает...
Серьёзно?
Тогда наберите "С+1=".
Ошибка возникает сразу после запуска программы пока не была изменена система счисления. После её изменения всё работает правильно.
 
Последнее редактирование:
SIGN(x) - определяет знак числа, принимает значения 1 для положительного числа, -1 для отрицательного и 0 для нуля.

Также проверьте, какие ограничения на вывод символов у вас сделаны, возможно, вы просто запретили вывод символа "-" в окно.
 
Назад
Сверху