Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2008, 00:36   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

угу. Только отбросить - это не то же самое, что округлить! Для округления надо проверять следующую цифру после Y
если больше 4 - то увеличивать на единичку в младшем разряде. делать это в строчке - очень муторно - для числа проще.
Кстати, если хотите, могу кинуть код для Паскаля, который округляет вещественное число до любого заданного числа знаков...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2008, 00:52   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Оп-па... Внимание, вопрос - а как огругляется дробное число, в системе счисления, отличной от десятичной?!
Например, 5.4 в четверичной системе счисления =
11.121212 (это если верить вышеприведённой программе ;-)
Так округлить до одного знака после запятой будет
11.1 или 11.2 ?
Есть какое-нибудь правило?
Я бы сформулировал как если следующее число меньше или равно ПОЛОВИНЕ основания системы счисления - то остальные разряды просто отбрасываем, если больше - то увеличиваем последний разряд на единичку...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2008, 00:55   #13
Gon
Пользователь
 
Регистрация: 30.04.2008
Сообщений: 16
По умолчанию

Все, спасибо, разобрался со всем сам.

Код:
PROGRAM RGR(INPUT, OUTPUT);
USES CRT;
VAR
  X: STRING;
  Ch, Y: REAL;
  CC, Ch1: INTEGER;
CONST Digit: STRING[16] = '0123456789ABCDEF';
FUNCTION Fromdec(N, Radix: LONGINT): STRING;
VAR
  S: STRING;
BEGIN
  S := '';
  REPEAT
    S := Digit[(N MOD Radix) + 1] + S;
    N := N DIV Radix;
  UNTIL N = 0;
  Fromdec := S;
END;
FUNCTION From_dec(X: REAL; Radix: INTEGER; CONST Max_Prec: INTEGER): STRING;
CONST
  Digit: STRING[16] = '0123456789ABCDEF';
VAR
  _frac: REAL;
  S_frac: STRING;
  Precision: INTEGER;
BEGIN
  _frac := FRAC(X); S_frac := '.';
  Precision := 0;
  WHILE(_frac > 0) AND (Precision < Max_prec)
  DO
    BEGIN
      _frac := _frac * Radix;
      S_frac := S_frac + Digit[(TRUNC(_frac)) + 1];
      INC(Precision);
      _frac := FRAC(_frac);
    END;

  From_dec := Fromdec(TRUNC(X), Radix) + S_frac;
END;
BEGIN
  WRITE('Введите число ');
  READLN(Ch);
  WRITE('Введите СС ');
  READLN(CC);
  WRITE('Число знаков после запятой ');
  READLN(Ch1);
  WRITELN(From_Dec(Ch, CC, Ch1));
END.
Вот такой вот получился код, округляется все в функции через константу Max_Prec.

Последний раз редактировалось Gon; 02.05.2008 в 01:00.
Gon вне форума Ответить с цитированием
Старый 02.05.2008, 09:56   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Gon, вы всё сделали правильно. И, если Вас (и вашего преподавателя, ведь это же учебная задача, так?) этот вариант удовлетворяет — то я Вас поздравляю!

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49
Большие числа Лубышев Помощь студентам 6 27.02.2008 22:57
Факториал от дробного числа RIO Помощь студентам 11 26.12.2007 18:36
Про числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 6 12.12.2007 07:18
Числа Палиндромы в С++ grerg Помощь студентам 0 27.11.2007 11:42