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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2009, 13:53   #1
oleg52
 
Регистрация: 14.05.2009
Сообщений: 5
По умолчанию задача с системами исчисления

помогите решить такую задачу:
для заданного натурально числа K найти наименьшее основание Р системы счисления, в которой представление числа К не содержит нулей. напечатать это представление.
сам алгоритм перевода из десятичной в другую систему такой
program N;
uses crt;
const n=12;
var
n10,n2,i,j=word;
a:array[1..n] of word;
begin
writeln ('введите число');
readln(n10);
writeln ('в какую систему');
readln (n2);
i:=1; x:=n10
while (x div n2)>0 do
begin
a[i]:=x mod n2;
x:=div n2;
i:=i+1;
end;
a[i]:=x mod n2;
for j:=i downto 1 do writeln (a[i])
end.

не хватает соображалки на решение((((
oleg52 вне форума Ответить с цитированием
Старый 14.05.2009, 16:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

дык главное у Вас уже есть, в цикле наращиваете основание системы счисления. Переводите заданное число. если в записи есть нули, то повторяете цикл.
да. насколько мне известно, практически допустима система счисления с основанием 26 (больше уже не хватит буковок для кодирования символов)...
Так что, если до 26 дошли - можно выдавать текст о невозможности представления данного числа без ноликов..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2009, 21:30   #3
oleg52
 
Регистрация: 14.05.2009
Сообщений: 5
По умолчанию

вот в этом и проблема. не могу понять как в цикле записать подходящее условие. получается что надо работать с счетчиком послеусловия а как дальше не знаю.
oleg52 вне форума Ответить с цитированием
Старый 15.05.2009, 02:39   #4
oleg52
 
Регистрация: 14.05.2009
Сообщений: 5
По умолчанию

прошу проверить мою программу. больше нет сил думать. если правильная, может кому то может.
program tk;
uses crt;
const
n=12;
var x,s:word;
i,j:word;
n2,n10:word;
a:array[1..n] of word;
begin
s:=1;
clrscr;
write('vvedite chislo');
readln(n10);
n2:=1;
repeat
n2:=n2+1; s:=1;
i:=1; x:=n10;
while (x div n2)>0 do
begin
a[i]:=x mod n2;
x:=x div n2;
s:=s*a[i];
i:=i+1;
end
until s<>0;
a[i]:=x mod n2;
for j:=i downto 1 do write(a[j]);
writeln ('v sisteme=',n2)

end.
oleg52 вне форума Ответить с цитированием
Старый 15.05.2009, 13:43   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

oleg52, всё правильно сделано.
Два замечания:
1) код лучше форматировать и помещать в теги [СODE][/СODE] - выделить текст и нажать значок "#"

2) всё таки, при основании больше>10 выведенная строка неверна! Вместо циферок 10 (11, 12.. и т.д.) надо выводить буковки...

поясню: возьмите число 30240
програма выдаёт для него результат:
621014 v sisteme = 17
а теперь выделите, какие циферки получились (
x0*1 + x1*17 + x2*17^2
подскажу,если вывести через пробел, то получим:
6 2 10 14
согласитесь, что так понятнее.
а если взять такой код:
Код:
program tk;
uses crt;
const
  n = 12;
var x, s: word;
  i, j: word;
  n2, n10: word;
  a: array[1..n] of word;
begin
  s := 1;
  clrscr;
  write('vvedite chislo: ');
  readln(n10);
  n2 := 1;
  repeat
    n2 := n2 + 1; s := 1;
    i := 1; x := n10;
    while (x div n2) > 0 do
    begin
      a[i] := x mod n2;
      x := x div n2;
      s := s * a[i];
      i := i + 1;
    end
  until s <> 0;
  a[i] := x mod n2;
  if n2<=26 then
     for j := i downto 1 do
       begin
         if a[j] < 10 then write(a[j])
                      else write(chr(a[j]+ord('A')-10))
       end
  else
     for j := i downto 1 do write(a[j],' ');
  writeln(' v sisteme = ', n2)
end.
то получим для числа 30240
такой результат:
62AE v sisteme = 17

согласитесь, что это более правильно?..

но в целом, молодец. Зачёт!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2009, 15:15   #6
oleg52
 
Регистрация: 14.05.2009
Сообщений: 5
По умолчанию

за перевод чисел в буквенную систему отдельное спасибо. препод может докопаться, надо ему уменьшать шансы

Последний раз редактировалось oleg52; 15.05.2009 в 15:27.
oleg52 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто-нибудь знаком с системами технического зрения? Mikhail Bakurov Свободное общение 0 20.01.2009 23:17
перевод системы исчисления (16 ->10) adwaer Помощь студентам 5 15.06.2008 20:29
16-я система исчисления:вопрос Mustang Общие вопросы Delphi 4 23.09.2007 17:57