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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2014, 20:59   #11
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Нашкрябал на заборе функцию.
Код:
function _3to9(const s: string; out dest: string): boolean;
var
  i, len: integer;
  temp: longword;
begin
  len:= length(s);
  result:= len <> 0;
  dest:= '';
  
  if not result
    then exit;
  
  temp:= 0;
  
  for i:= 1 to len do
    begin
      result:= s[i] in ['0'..'2'];

      if result
        then temp:= temp * 3 + byte(s[i]) - $30
        else exit;
    end;

  repeat
    dest:= char(temp mod 9 + $30) + dest;
    temp:= temp div 9;
  until temp = 0;
end;
Максимальное троичное, влезающее в 4 байта LongWord = 102002022201221111210.

Перевод типа строка(3) ----> строка(9) напрямую писать лень. авось и это прокатит на оценку "сдал".
Тестовая прога - в прицепе.
Вложения
Тип файла: rar 266864.RAR (23.0 Кб, 6 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 14.10.2014 в 21:08.
min@y™ вне форума Ответить с цитированием
Старый 14.10.2014, 21:28   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от min@y™
Код:
function _3to9(const s: string; out dest: string): boolean;
хорошее у Вас "выражение" получилось!

только это не совсем Паскаль! (out, longword, result - это скорее ObjectPascal/Delphi/FreePascal)

впрочем, sapinty sat.



Кстати, если уж строки задействовать, тогда можно и так:
Код:
function _3to9(const s: string; var dest: string): boolean;
var
  i, para : integer;
  para9 : integer;
begin
  dest:= '';
  result := false;
  if length(s) = 0 then Exit;

  for i:= 1 to length(s) do
      if not (s[i] in ['0'..'2']) then Exit;
  result := true;

  i := length(s);
  while i>1 do begin
    dest := IntToStr( StrToInt(Copy(s,i-1,1))*3 + StrToInt(Copy(s,i,1))) + dest;
    dec(i,2);
  end;

  if i>0 then
    dest :=  IntToStr( StrToInt(Copy(s,i,1))) + dest;
end;

var s9 : string;
begin
  if _3to9('20201022111020020222012211112102211', s9) then WriteLn('Result = ', s9)
  else WriteLn('Кривая строка то!');
  readln

end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.10.2014, 21:41   #13
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
хорошее у Вас "выражение" получилось!

только это не совсем Паскаль! (out, longword, result - это скорее ObjectPascal/Delphi/FreePascal)
Зато бесплатно.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.10.2014, 21:56   #14
Lumpup
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
уверены?!!

отличия, в словах "которое" ?!
мда...


стоп. Так эта программа с циклом у Вас считается ВЫРАЖЕНИЕМ?!
Тогда задача имеет решение и очень даже несложное!

p.s. да ещё и функции можно использовать, это вообще супер!!

p.p.s. посмотрите мой пост #3, обратите внимание, что для перевода из троичной в девятиричную нужно брать из троичной записи по два разряда (т.е. вам нужно mod 100, div 100), а потом это двухзначное число уже можно представить одной цифрой девятиричной СС.

Ну, теперь понятней? Сами докрутите? Или всё таки нужно написать вам решение?..
Конечно, это не выражение. Я думал, если пойму, как работает программа, то пойму и как составить выражение. Но не понял.
Если вам не сложно, напишите пожалуйста(не программу).
Lumpup вне форума Ответить с цитированием
Старый 14.10.2014, 22:08   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Если вам не сложно, напишите пожалуйста(не программу).
Опять двадцать пять!
Так Вам выражение нужно или программа?!

Боюсь, что без хакерских приёмов написать такое выражение для произвольного числа в троичной системе не получится!

Нужно чем-то жертвовать.
В каком виде у Вас задано исходное число?
Какова максимальная длина числа в троичной записи?
Нужно ли контролировать, что это именно число в троичной записи, а не Бог весть что?
Можно ли использовать пользовательские функции в данном выражении?

Ответьте на эти вопросы, подумаем, чем можно вашему горю помочь..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.10.2014, 22:18   #16
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Ответьте на эти вопросы
и ещё на этот: препод чо имел в виду-то? может ты его не так понял?
Возьми свой ойфон, включи камеру на запись, подойди к преподу и спроси. Ответ препода - на тытубе выложишь, ссылку - сюда, будем посмотреть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.10.2014, 22:40   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну вот формула преобразования двухзначного троичного в девятиричное. И так справа налево каждые два знака, если левый крайний один знак - дополнить слева нулем
Код:
Chr(48+((Ord(s[1]) and 3)*3+(Ord(s[2]) and 3)))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.10.2014, 00:10   #18
Lumpup
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Опять двадцать пять!
Так Вам выражение нужно или программа?!

Боюсь, что без хакерских приёмов написать такое выражение для произвольного числа в троичной системе не получится!

Нужно чем-то жертвовать.
В каком виде у Вас задано исходное число?
Какова максимальная длина числа в троичной записи?
Нужно ли контролировать, что это именно число в троичной записи, а не Бог весть что?
Можно ли использовать пользовательские функции в данном выражении?

Ответьте на эти вопросы, подумаем, чем можно вашему горю помочь..
Мне нужно выражение, которое с помощью div,mod,сложения, вычитания и умножения переводит число из троичной в девятеричную систему счисления.
1)В общем если n=21 результат вычисления выражения должно быть 7
если n=101, то 11
если n=2222, то 88
2)Об этом ничего не сказано.
3)Вот что мне ответили(То есть дано десятичное число 101, трактуя его как 3-ое нужно получить число 11 (десятичное), которое трактуется как 11 9-ое)
4)Нет.
Lumpup вне форума Ответить с цитированием
Старый 15.10.2014, 00:14   #19
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
То есть дано десятичное число 101, трактуя его как 3-ое нужно
Где хранится данное число?
А если дано число 105, то что делать?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 07:37   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
2)Об этом ничего не сказано.
По-моему задачу решить не получится. По сути перевод это кагбэ разложение в ряд. Это не формула и не выражение, как в математике. В ИТ сфере это цикл.
Я бы всетки у препода уточнил что он курил давече.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Придумать выражение на Паскале. Lumpup Помощь студентам 1 14.10.2014 08:46
Не могу придумать решение. (Вычислить для заданного n указанное выражение.) bakanaev Общие вопросы Delphi 6 31.10.2012 17:24
записать выражение на Паскале express77 Паскаль, Turbo Pascal, PascalABC.NET 1 13.01.2011 23:51
как записать выражение в паскале? Галина-90 Помощь студентам 2 16.12.2010 20:38
как записать в паскале выражение 92DMITRY Помощь студентам 3 21.06.2010 22:46