IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Перевод числа из 10 в -10 систему счисления, Перевод числа из 10 в -10 систему счисления
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


в качестве основания позиционной системы счисления может быть взято отрицательное число. Например можно рассмотреть систему с основанием -10 . Любое n единственным образом представляется в виде суммы As*(-10)^S+As-1*(-10)^s-1+...+A1(-10)+A0 где 0<=Ai<=9, i=0...s. Из сказанного следует что любое целое n записывается в системе с основанием -10 в виде целого числа без знака As As-1...A1 A0

Дано целое число n. ПОстроить представлени n в системе с основанием -10 те найти соответствующие As , As-1,..,A0
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


тоесть ты имееш ввиду просто раскласти в виде полинома?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


Цитата(amega @ 5.04.2009 16:43) *

тоесть ты имееш ввиду просто раскласти в виде полинома?


нет надо просто цифры вывести например
436 как я подсчитал уже 5*(-10)^2 + 7*(-10)^1 + 6 то есть надо эти цифры и вывести ( 5 7 6)

если надо могу выложить свою прогу которую щас сделал...почти работает но только почему то для трехзначных чисел...для остальных зацикливается
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Рустам @ 5.04.2009 16:56) *
Дано целое число n. ПОстроить представлени n в системе с основанием -10 те найти соответствующие As , As-1,..,A0

Вот:
var
b: array[1..100]of byte;
i,l,d: integer;
a,c: LongInt;

begin
Write('Type in a number: ');
ReadLn(a);
l:=0;
while a>0 do begin
d:=a mod 10;
a:=a div 10;
Inc(l);
if Odd(l) or (d=0) then b[l]:=d else begin
b[l]:=10-d;
a:=a+1
end
end;
Write('-10 based notation: ');
for i:=l downto 1 do Write(b[i]);
WriteLn;
Write('Back to normal: ');
c:=0;
for i:=l downto 1 do c:=c*(-10)+b[i];
WriteLn©
end.


Сообщение отредактировано: Lapp -


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +



Спасибо огромное!!! но почему для отрицательных не работает...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Рустам @ 6.04.2009 5:30) *
Спасибо огромное!!! но почему для отрицательных не работает...
Хм.. Про отрицательные я как-то не подумал даже.. lol.gif
Но только проблемы никакой нет. Перед началом преобразования запоминаешь знак числа a. После преобразования приписываешь его результату. Вот так примерно:
var
b: array[1..100]of byte;
i,l,d: integer;
a,c: LongInt;
s: string[1];

begin
Write('Type in a number: ');
ReadLn(a);
if a<0 then begin
s:='-';
a:=-a
end
else s:='';
l:=0;
while a>0 do begin
d:=a mod 10;
a:=a div 10;
Inc(l);
if Odd(l) or (d=0) then b[l]:=d else begin
b[l]:=10-d;
a:=a+1
end
end;
Write('-10 based notation: ',s);
for i:=l downto 1 do Write(b[i]);
WriteLn;
Write('Back to normal: ');
c:=0;
for i:=l downto 1 do c:=c*(-10)+b[i];
if s='-' then c:=-c
WriteLn©
end.

(Не проверял, просто исправил)

Меня, если честно, больше смущает совсем другое - неоднозначность представления. Например:
-110 = -1-10 = 19-10
Но это, по-видимому, такое свойство системы счисления с отрицательным основанием, которое нужно просто принять, хоть оно и необычно smile.gif. Если в условии не сказано найти все представления, то все в порядке.

Сообщение отредактировано: Lapp -


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


Огромное спасибо)) я только сдал ту программу которая без учёта отрицательных чисел...
Кстати насчёт не однозначности...Учительница говорила с точки зрения алгебры чисел должно быть например
12(в 10) = 192(в -10)
а -12 = -192 ...вот а с точки зрения алгебры чисел -12= 28 будет неверным))) так что спасибо))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


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


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Рустам @ 8.04.2009 19:32) *
я только сдал ту программу которая без учёта отрицательных чисел...

А почему отрицательные не прокатили? blink.gif

Цитата(Рустам @ 8.04.2009 19:32) *
Кстати насчёт не однозначности...Учительница говорила с точки зрения алгебры чисел должно быть например
12(в 10) = 192(в -10)
а -12 = -192 ...вот а с точки зрения алгебры чисел -12= 28 будет неверным))) так что спасибо))
Не совсем понял тебя. Напиши основания во втором равенстве (кстати, используй тэг SUB для индексов). Я говорил про то, что одно и то же число (просто число, без привязки к системе счисления, как пять пирожков) в СС с основанием -10 может иметь больше, чем одно представление. В пример привел минус единицу (что означает, что ты должен один пирожок Пете). Это число в СС-10 представляется двумя способами: как -1-10 и как 19-10.
Но, повторяю, я не вижу тут большого греха. Никто не обязывал СС быть однозначной. Просто лишний повод не пользоваться этой СС на практике)).

Стоп.. Если убрать запись с лидирующим минусом, то однозначность восстановится.. Ага, понял. Ты это имел в виду? Поэтому отрицательные не прокатили? Тебе годится только запись без минуса?.. Хорошо, я напишу прожку..

Цитата(amega @ 8.04.2009 21:10) *
с точки зрения дичитичной 1+1 =2 , а двочной 1+1=10, для каждой системы счисления своя алгебра, если взять шеснадцатиричную ... в диситичной нетже а б с д е ф, если есть неоднозначность , то нельзя ее спихивать на алгебру...
amega, потрудись вникнуть перед тем, как отвечать в тему. Речь совершенно не об этом.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Lapp @ 8.04.2009 23:43) *
запись без минуса?.. Хорошо, я напишу прожку.
Вот, написал.. Если честно - недоволен своим творением. Все как-то через ж..
Суть такова: если число меньше нуля, то я конструирую число p+a, где p - минимальная нечетная степень десяти, превосходящая |a|. Это число я перевожу в СС-10. А число (-p) в СС-10 будет представлено единицей в нечетной позиции. Сложить числа (p+a) и (-p) будет означать просто добавить единицу в ту самую нечетную позицию. Это я и делаю.
var
b: array[1..100]of byte;
i,l,d,q: integer;
a,c,p: LongInt;
Neg: boolean;

begin
Write('Type in a number: ');
ReadLn(a);
Neg:=a<0;
if Neg then begin
a:=-a;
p:=10;
q:=1;
while p<a do begin
p:=p*100;
q:=q+2
end;
a:=p-a
end;
l:=0;
while a>0 do begin
d:=a mod 10;
a:=a div 10;
Inc(l);
if Odd(l) or (d=0) then b[l]:=d else begin
b[l]:=10-d;
a:=a+1
end
end;
if l=0 then begin
l:=1;
b[1]:=0
end;
if Neg then begin
l:=q+1;
if l<q then b[q]:=0;
b[l]:=1;
end;
Write('-10 based notation: ');
for i:=l downto 1 do Write(b[i]);
WriteLn;
Write(' Back to normal: ');
c:=0;
for i:=l downto 1 do c:=c*(-10)+b[i];
WriteLn©
end.

Должен быть более логичный способ, не так сильно зависящий от знака числа. Он же, думаю, и более простой. Но слова "более простая программа" абсолютно не значат, что ее проще написать.. smile.gif

Да, и еще один исправил баг: если введенное число было равно нулю, то вообще ничего не выводилось. В принципе, это правильно, но лучше все же придерживаться общепринятых обозначений smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Андрей, что-то не так...

Type in a number: 124
-10 based notation: 284
Back to normal: 124

Type in a number: -12
-10 based notation: 1028
Back to normal: -1012

Type in a number: -10
-10 based notation: 10
Back to normal: -10

Type in a number: -451
-10 based notation: 1669
Back to normal: -451

Почему -10 восстанавливается нормально, -451 тоже. А все числа в интервале (-91) .. (-11) - нет?.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 9.04.2009 13:20) *
-10 восстанавливается нормально, -451 тоже. А все числа в интервале (-91) .. (-11) - нет?.
Хм.. интересно...
Сейчас проверю.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


Ничё се прожку я дал....Спасибо всем огромное я сдал прогу уже давно!!! Lapp тебе отдельное) за первую прогу я её и то и сдал)) ...после 50 минут "общения" с преподом... Сдал бы и за 10 минут если бы она не посмотрела на запись "Back to normal" а так спасибоsmile.gif Щас мучают другие головные боли с более сложными темами буду разбираться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Рустам @ 10.04.2009 22:07) *
я сдал прогу уже давно!!! Lapp тебе отдельное) за первую прогу я её и то и сдал)) ...после 50 минут "общения" с преподом... Сдал бы и за 10 минут если бы она не посмотрела на запись "Back to normal"
Рустам, сдал или не сдал - это твои проблемы. Ты родил тему - дальше она живет сама. А для меня, например, неверно решенная задача - это заноза в за*нице..)) К тому же, я не припомню, чтобы СС с отрицательным основанием засвечивались тут, на Форуме. Так что не серчай, решение я добил. Всего-то нужно было сконцентрироваться и заставить себя исходить из самых общих принципов..

Трюк с конструированием числа p+a не проходит, увы. Ошибка в том, что в его записи может быть цифр больше, чем я думал, и сложение не будет столь простым; и это настолько существенно, что зарубает всю идею на корню. Я сделал совершенно новое решение, которое работает на общем принципе позиционных систем (деление и остаток). Это решение, как и полагается, нечувствительно к знаку числа, то есть одинаково работает и для положительных, и для отрицательных. Исключением по-прежнему является ноль, который приходится добавлять искуственно)).
var
b: array[1..100]of byte;
i,l,d: integer;
a,c: LongInt;

begin
Write('Type in a number: ');
ReadLn(a);
l:=0;
while a<>0 do begin
d:=a mod(-10);
a:=a div(-10);
if d<0 then begin
d:=10+d;
Inc(a)
end;
Inc(l);
b[l]:=d
end;
if l=0 then begin
l:=1;
b[1]:=0
end;
Write('-10 based notation: ');
for i:=l downto 1 do Write(b[i]);
WriteLn;
Write(' Back to normal: ');
c:=0;
for i:=l downto 1 do c:=c*(-10)+b[i];
WriteLn©;
ReadLn
end.


А старые два решения пусть останутся памятником вечной идее перехитрить самого себя..))

Добавлено через 3 мин.
Кстати, а чем не понравилось "back to normal"? Проверка никогда не вредит. Здесь, как видишь, помогла (спасибо volvo)).

И еще интересное замечание: оказывается, система с отрицательным основанием вообще не требует лидируещего минуса в звписи числа! У меня это с трудом укладывается башке: с одной стороны, минус вроде как совсем не нужен уже, а с другой - само основание как-то же надо записывать! Если записать его в той же самой СС-10, то получится просто 10, - и что дальше?.. С одной стороны это вроде и правильно, с другой - это же не десятка на самом деле! blink.gif В этом месте меня плющит.. Я не знаю, насколько это плохо, но что-то явно нехорошо. Вроде бы нормально, что основание СС нельзя записать цифрой той же СС, но тут еще и знак приплелся, и крыша окончательно едет.. Кто-нить может внести ясность? smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


Как мне объясняли... что вот в 10 системе.. 123 например 1*102+2*101+3*100

а вот -123 в -10 это -1*1*102+2*101+3*100 вот это всё что я уяснил из её рассказа.) Не знаю насколько это верно...всё таки учитель можно доверять ...наверное...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Рустам @ 11.04.2009 10:01) *
Как мне объясняли... что вот в 10 системе.. 123 например 1*102+2*101+3*100
Безусловно верно.

Цитата(Рустам @ 11.04.2009 10:01) *
а вот -123 в -10 это -1*1*102+2*101+3*100 вот это всё что я уяснил из её рассказа.)
Либо ты плохо уяснил, либо плохой рассказ был..

Цитата(Рустам @ 11.04.2009 10:01) *
Не знаю насколько это верно...всё таки учитель можно доверять ...наверное...
угу, наверное.. Доверяй да проверяй.

Значица так, смотри и запоминай smile.gif
-123-10 = -( 1*(-10)2+2*(-10)1+3*(-10)0 )
- и никак иначе.

А если ты хочешь число -12310 представить в СС-10, то ты (как ты и писал в своем самом первом мессадже) должен найти соответствующие кэффициенты (проще гря, цифры). Именно это и делает моя программа. Причем, как для отрицательных, так и для положительных, и вполне успешно smile.gif (пока никто не нашел ошибки)))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  1  +


Ууу да я отсюда больше узнаю чем от нашей училки)) спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.09.2025 20:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name