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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2010, 21:52   #1
Whitt
 
Регистрация: 06.09.2010
Сообщений: 4
По умолчанию Перевод целого числа из 5 в 8 систему счисления и обратно.

Вобщем задача в заголовке.
Представляю как это делается. Переводим из 5 с/с в 10, потом из 10 в 8.
Аналогично и обратно. из 8 в 10 и из 10 в 5.
Никак не могу сообразить как на паскале записать перевод числа из 5 системы счисления в 10 и из 10 в 8.
Впринципе понимаю как это делается обычно, но записать в паскале не получается...
Прошу помочь с этим...
Видел в интернете несколько вариантов-примеров с другими с/с но при попытке сделать под свой случай получалась ерунда из-за непонимания некоторых обозначений, т.к. паскалем владею не сильно.
Whitt вне форума Ответить с цитированием
Старый 06.09.2010, 22:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

1) примеры перевода из любой системы счисления в любую на форуме решались многократно.
например,
http://programmersforum.ru/showthread.php?t=6770

http://programmersforum.ru/showthread.php?t=14513

2) алгоритмы перевода достаточно просты. Что именно не понятно?

3) а что Вы собственно добиваетесь? Пытаетесь научиться/разобраться или просто получить готовый код?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2010, 23:02   #3
Whitt
 
Регистрация: 06.09.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) примеры перевода из любой системы счисления в любую на форуме решались многократно.
например,
http://programmersforum.ru/showthread.php?t=6770

http://programmersforum.ru/showthread.php?t=14513

2) алгоритмы перевода достаточно просты. Что именно не понятно?

3) а что Вы собственно добиваетесь? Пытаетесь научиться/разобраться или просто получить готовый код?
Спасибо.
Пытаюсь научиться... Понимать что я вижу или что пытаюсь написать...
Whitt вне форума Ответить с цитированием
Старый 07.09.2010, 00:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Пытаюсь научиться... Понимать что я вижу или что пытаюсь написать...
это дело хорошее. Обращайтесь с конкретными вопросами, тут обязательно помогут!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2010, 09:30   #5
Whitt
 
Регистрация: 06.09.2010
Сообщений: 4
По умолчанию

Чёт не нашёл таки программу, которая реально правильно работает...
Числа переводятся не правильно. Пытался разобраться в чем там проблема - не понял вообще методов перевода из одной с/с в другую... Кому не лень объясните пожалуйста на рабочем примере что там делается...

Пытался сам с нуля писать свою программу.
На примере перевод числа 31 в 8 с-ме в 10тичную выглядит так: http://upload.wikimedia.org/math/5/e...4c858975d4.png
для этого значит мне нужно знать длину введенного числа. Это сделать у меня получилось.
var a:integer;
b:string;
begin
writeln('Vvedite chislo');
readln(b);
a:=length(b);

Ну теперь по моей задумке надо брать как в примере каждую цифру из числа и умножать на основание в степени а-1, а-2 и дальше до тех пор, пока "а" не будет меньше нуля.

Помогите это записать... Или если я не прав предложите свой метод решения.

После того как переведу в 10 с/с таким образом мне надо будет переводить уже в меньшую, т.е. либо в 5ричную либо в 8ми.

Последний раз редактировалось Whitt; 07.09.2010 в 09:46.
Whitt вне форума Ответить с цитированием
Старый 07.09.2010, 13:05   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Whitt, пользуетесь Вы моей добротой..
Ладно.
Получите и распишитесь.

Две универсальные функции из десятичной СС в любую (разумную) СистемуСчисления и наоборот.
Код:
const 
  Digits : string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function DecToRadixK( d: LongInt; RadixK : byte) : string;
var 
  One : byte;
  sResult : string;
begin
  if (RadixK<2) or (RadixK>Length(Digits)) then
    DecToRadixK := '#error# Radix is incorrect.'    
  else begin
    sResult := '';
    while d >= RadixK  do
    begin
     One := d mod RadixK;
     sResult := Digits[One+1] + sResult;
     d := d div RadixK;
    end;
    sResult := Digits[d+1] + sResult;
    DecToRadixK := sResult;
  end;
end;

function RadixKtoDec(s : string; RadixK : byte) : LongInt;
var 
  Base,lResult : LongInt;
  i, One : integer;
begin
  Base := 1;
  lResult := 0;
  if (RadixK<2) or (RadixK>Length(Digits)) then begin
     RadixKtoDec := -1;
     Writeln('#error# Radix is incorrect.');
     Exit;
  end;

  for i:=Length(s) downto 1 do begin
    {найдём код текущего символа}
    One := Pos(UpCase(s[i]), Digits);

    {если символ не найден
       или его код больше основания системы счисления,
       выходим с ошибкой!    }
    if (One=0) or (One>RadixK) then begin
      RadixKtoDec := -1;
      Writeln('#error# Symbol ('+s[i]+') at pos ',i:1,' incorrect for radix ',RadixK);
      Exit;
    end;

    lResult := lResult + (One-1)*Base;    
    Base := Base * RadixK;

  end;

  RadixKtoDec := lResult;

end;

var n, k : LongInt;
  s : string;
begin
  WriteLn('Введите число для преобразования (в десятичной СС)');
  Readln(n);
  WriteLn('Введите основание системы счисления (от 2 до 36):');
  Readln(k);

  WriteLn('В системе счисления ',k:1,
                 ' число ',n:1,' представляется в виде: ',DecToRadixK(n,k));

  WriteLn('Введите основание системы счисления (от 2 до 36):');
  Readln(k);

  WriteLn('Введите число для преобразования (в ',k:1,'-ной СС)');
  Readln(s);

  WriteLn('Число ',s,
                 ' в десятичной системе равно: ',RadixKtoDec(s,k):1);

  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2010, 13:58   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Оффтоп: Хы, я помню когда-то преподаватель решил меня грузануть такими переводами из системы в систему. Я написал ему вот что:
Код:
var s:string;m,e:integer;
begin
 e:=25; // Чисо которое перевести
 m:=8; // Система в которую перевести
 e:=(e div m)*10+(e mod m);
 str(e,s);
 Write(s);
 readln;
end.
Это конечно шутка была, но преподаватель очень удивился, и даже хотел в методу это прописать, я конечно же отказался
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2010, 07:14   #8
Whitt
 
Регистрация: 06.09.2010
Сообщений: 4
По умолчанию

Serge_Bliznykov
спасибо, благодарен
Whitt вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает перевод из целого числа в ASCII professor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.06.2010 06:59
Перевод числа в семеричную систему счисления PastoriXx Общие вопросы .NET 5 14.05.2010 12:58
си++ перевод десячичного числа в шестнадцатиричную систему счисления Bonne Помощь студентам 0 07.05.2010 19:57
Перевод вещественного числа из 10 в 2 Систему счисления. [С++] Veselyn Помощь студентам 9 17.01.2010 00:39
перевод из 4-ной в 3-ную систему счисления Mike07 Помощь студентам 1 07.10.2007 18:53