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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2008, 14:25   #1
Gon
Пользователь
 
Регистрация: 30.04.2008
Сообщений: 16
По умолчанию Преобразование дробных чисел

Здравствуйте.
Нужно сделать программу на паскале которая переводила бы дробное число из 10 СС в другу СС.
Поиском я искал, но помоему там нет програм которые могут перевести дробное число, а как отредактировать те програмы под дробное число я незнаю.
Вот задание:
Ввод: дробное число в 10 СС, конечная СС, число знаков в дробной части конечного представления.
Вывод: округленное дробное число в n-ой СС.
Надеюсь на вашу помощь.
Зарание спасибо.

Последний раз редактировалось Gon; 30.04.2008 в 20:49.
Gon вне форума Ответить с цитированием
Старый 30.04.2008, 20:50   #2
Gon
Пользователь
 
Регистрация: 30.04.2008
Сообщений: 16
По умолчанию

Скажите хотя бы как отделить дробную часть от дробного числа и записать ее в отдельную переменную.
Gon вне форума Ответить с цитированием
Старый 30.04.2008, 20:55   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Frac(X)
или, что то-же самое
X - Int(X)
alexBlack вне форума Ответить с цитированием
Старый 01.05.2008, 00:33   #4
Gon
Пользователь
 
Регистрация: 30.04.2008
Сообщений: 16
По умолчанию

Написал программу:
Код:
PROGRAM Transform(INPUT, OUTPUT);
USES CRT;
VAR
  ss, b, s: STRING;
  Ch1, p, k: INTEGER;
  n, Ch2: REAL;
BEGIN
  s := '0123456789ABCDEF';
  WRITELN('Введите число');
  READ(n);
  WRITELN('Введите СС');
  READ(k);
  Ch1 := TRUNC(n);
  Ch2 := n - Ch1;
  WHILE Ch1 >= 1
  DO
    BEGIN
      p := Ch1 mod k;
      IF p >= 10
      THEN
        b := COPY(s, p, 1)
        ELSE
          STR(p, b);
          ss := b + ss;
          Ch1 := Ch1 DIV k;
    END;
  WRITELN(ss);
  READKEY;
END.
Но не смог перевести дробную часть. Подскажите как ее можно перевести и если гдето что то неправильно исправте пожалуста.

Последний раз редактировалось Gon; 01.05.2008 в 00:38.
Gon вне форума Ответить с цитированием
Старый 01.05.2008, 08:38   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Вот код, который переводит только дробную часть из десятичной в другую и обратно.

Код:
{ перевод дробной части из десятичной в систему с основание C
  T - точность
}
type CC = 2..16;
function fromDec(x:real; C:CC; T:integer):String;
var S:String;
    a:integer;
begin
   x := frac(x);    // на всякий случай
   S := '0.';
   while length(S)-2 < T do begin
      x := x * C;
      a := trunc(x);
      if a >= 10
      then S := S + chr(a-10+ord('A'))
      else S := S + chr(a+ord('0'));
      x := x - a;
   end;
   fromDec := S;
end;

{ Из системы счисления C в десятичную
  Только для дробной части
}
function toDec(S:String; C:CC):real;
var k, x:real;
    p, i, n:integer;
begin
   x := 0;
   p := pos('.', S);
   k := C;
   for i:=p+1 to length(S) do begin
      n := ord(S[i]);
      if n >= ord('A')
      then n := n - ord('A') + 10
      else n := n - ord('0');
      x := x + n/k;
      k := k * C
   end;
   toDec := x
end;

   // Пример использования
   x := 0.75;
   S := fromDec(x, 2, 5);   // S = 0.11
   y := toDec(S, 2);  // y = 0.75

   x := 0.123;
   S := fromDec(x, 16, 7); // S = 0.1F7CE 
   y := toDec(S, 16);  //y = 0.122999...
По Вашему коду. Внешне кажется все правильно. Можете сравнить с другими примерами на форуме. Это вопрос задавался часто. А чтобы быть уверенным, что код работает сделайте тестовые примеры и прогоните их.
alexBlack вне форума Ответить с цитированием
Старый 01.05.2008, 13:12   #6
Gon
Пользователь
 
Регистрация: 30.04.2008
Сообщений: 16
По умолчанию

Спасибо теперь я разобрался, просто проблема была в том что я с функциями не умею работать, ну щас почитал литературы и вроде бы все понял.
Gon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование чисел artemavd Общие вопросы Delphi 15 30.07.2008 15:48
Преобразование... prizrak1390 Общие вопросы Delphi 2 02.04.2008 11:24
вычисление суммы чисел, кратных 3 из последовательности, состоящей из 10 чисел, заранее заданных Белка Помощь студентам 3 27.10.2007 11:53