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

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

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

 
Closed Topic Открыть новую тему 
> дополнительный код в виде строки 16-х цифр, помогите
сообщение
Сообщение #1





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

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


Задача!!!
Исходная информация: целое число, записанное в виде строки шестнадцатеричных цифр, которой может предшестововать знак.
Задание: записать это число в дополнительном коде в виде строки шестнадцатеричных цифр.
Примечание: можно считать, что первая цифра исходного числа не превосходит 7.


пожалуйста, помогите! Я решил остальные задачи по Лабе, но с этой очень большие проблемы! Я окончательно запутался! Хелп помогите мне выкрутится!!! Буду всем очень благодарен, надеюсь не кто меня не посчитает халявщиком и тем кто не хочет учиться !:!help:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






var
n: string;
L: word;

begin
n := '75F';
writeln(fromdec( not(word(todec(n, 16))) + $1, 16 ));
end.


Реализация FromDec/ToDec - здесь: FAQ: Общие вопросы по математике

Этот код будет работать со строками длиной до 4-х символов...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Прогрессор
****

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

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


Один из способов:
Цитата
Переписываем исходную последовательность битов числа справа налево до первой единицы, включая ее. Остальные биты заменяем их дополнениями (инвертируем).


Читаем строку справа налева. Если очередной символ '0', то ничего с ним не делаем. Иначе применяем к этому символу функцию FirstOne {вообще-то удобнее былобы её процедурой сделать, ну да ладно...} и затем ко всем ещё непрочитанным символам строки применяем функцию InvertHex.

Это всё для положительного числа. Для отрицательного легче: просто убрать минус, а к первому слева символу применить операцию Plus8 (этим самым заменяя старший бит с нуля на единицу)



Код

function InvertHex(ch:char):char;
begin
case ch of
'0': InvertHex:='F';
'1': InvertHex:='E';
'2': InvertHex:='D';
'3': InvertHex:='C';
'4': InvertHex:='B';
'5': InvertHex:='A';
'6': InvertHex:='9';
'7': InvertHex:='8';
'8': InvertHex:='7';
'9': InvertHex:='6';
'A': InvertHex:='5';
'B': InvertHex:='4';
'C': InvertHex:='3';
'D': InvertHex:='2';
'E': InvertHex:='1';
'F': InvertHex:='0';
end;
end;

function FirstOne(ch:char):char;
begin
case ch of
'1': FirstOne:='F';
'2': FirstOne:='E';
'3': FirstOne:='D';
'4': FirstOne:='C';
'5': FirstOne:='B';
'6': FirstOne:='A';
'7': FirstOne:='9';
'8': FirstOne:='8';
'9': FirstOne:='7';
'A': FirstOne:='6';
'B': FirstOne:='5';
'C': FirstOne:='4';
'D': FirstOne:='3';
'E': FirstOne:='2';
'F': FirstOne:='1';
end;
end;

function Plus8(ch:char):char;
begin
case ch of
'0': Plus8:='8';
'1': Plus8:='9';
'2': Plus8:='A';
'3': Plus8:='B';
'4': Plus8:='C';
'5': Plus8:='D';
'6': Plus8:='E';
'7': Plus8:='F';
end;
end;





{когда писал, ещё не видел ответа volvo smile.gif}

Сообщение отредактировано: Atos -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Atos, в принципе, если работать со строками - то решение будет еще проще, чем ты думал:

const
digit: string[16]='0123456789ABCDEF';
var
n, s: string;
i, p, shift: integer;

begin
n := '1275F0'; s := '';
shift := 1;
for i := length(n) downto 1 do begin
p := succ(16 - pos(n[i], digit)) + shift;
if p > 16 then begin
dec(p, 16); shift := 1
end
else shift := 0;

s := digit[p] + s;
end;
writeln(s);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


всем спасибо, волво прости за тему на другом форуме...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 21.11.2017 16:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"