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

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

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

> Системы счислений, Hex(доп. код) to Dec(прямой код)
Morfey85
сообщение 14.01.2006 23:21
Сообщение #1


Новичок
*

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

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


Исходная информация: целое число , записанное в виде строки шестнадцатиричных цифр в дополнительном коде.
Задание: записать это число в прямом коде в виде строки десятичных цифр.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Morfey85
сообщение 15.01.2006 14:56
Сообщение #2


Новичок
*

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

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


Долго пыжился но написал
Код

uses crt;
var
  znak,ch:Char;
  s:string;
  x:longint;

Procedure Info;
begin
  Writeln('Перевести целое число из шестнадцатиричной системы счислений');
  Writeln('в дополнительном коде, в прямой код в виде строки десятичных');
  Writeln('цифр со знаком.');
end;

Function BinToInt(bin_s:string):longint;
var
  bin,mult:longint;
  i:integer;
begin
  mult:=1; bin:=0;
  for i:=length(bin_s) downto 1 do
  begin
    if bin_s[i]='1' then bin:=bin+mult;
    mult:=mult shl 1;
  end;
  BinToInt:=bin
end;

Function HexToBin(s:string):string;
var
  i:byte;
  s1,a:string;
begin
  s1:='';
  for i:=length(s) downto 1 do
  begin
    case Upcase(s[i]) of
      '0': a:='0000';
      '1': a:='0001';
      '2': a:='0010';
      '3': a:='0011';
      '4': a:='0100';
      '5': a:='0101';
      '6': a:='0110';
      '7': a:='0111';
      '8': a:='1000';
      '9': a:='1001';
      'A': a:='1010';
      'B': a:='1011';
      'C': a:='1100';
      'D': a:='1101';
      'E': a:='1110';
      'F': a:='1111';
    else Writeln('Vvedeno nevernoe chislo!!!');
    end;
    s1:=a+s1;
  end;
  HexToBin:=s1;
end;

Function DopToObr(s:string):string;
var
i,j:integer;
sa:string;
begin
  if s[1]='0' then znak:='+' else znak:='-';
  sa:='';
  for i:=length(s) downto 2 do
  begin
    sa:=s[i]+sa;
  end;               Writeln('Bin = ',znak,sa);
  for j:=length(sa) downto 1 do
  if sa[j]='0' then sa[j]:='1' else
  begin
    sa[j]:='0';
    Break;
  end;
  Writeln('Obr = ',znak,sa);
  DopToObr:=sa;
end;

Function ObrToPr(s:string):string;
var
  i:integer;
begin
  For i:=length(s) downto 1 do If s[i]='0' then s[i]:='1' else s[i]:='0';
  Writeln('Pr  = ',znak,s);
  ObrToPr:=s;
end;


begin
  repeat
    clrscr;
    Info;
    Write('Hex = ');Readln(s);
    s:=HexToBin(s);
    Writeln('Dop = ',s);
    s:=DopToObr(s);
    s:=ObrToPr(s);
    x:=BinToInt(s);
    Writeln('Dec = ',znak,x);
    write('Press q for exit or any key for continue...');
    ch:=ReadKey
  until upcase(ch)='Q';
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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