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

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

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

 
 Ответить  Открыть новую тему 
> перевод из 2-ичной в 16-ичную с.с., прога нехо работать правильно :(
MiX
сообщение 21.09.2007 19:47
Сообщение #1





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

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


Вообщем нужна перевести из 2 в 16 с.с. из Double Word-a в Double Word.
Я вот силами несилами вот такое склеил, но она недоконца работает. Мне препод говорит что бя ввел тридцать две единицы а она непашет правильно. Помогите пожалуста, может ее можно както упростить.

Код
uses crt;
var s:string;
b,c,d,h,i,t:longint;   a:word;
n:array [1..255] of longint;
f:Boolean;
begin
  clrscr;
  writeln('vvetite chislo v formate DOUBLE WORD ');
  readln(s);
  if length(s) > 32  then
  writeln('4islo bolwe Double word')
  else
  f:=true;
  for i:=1 to length(s) do
    if (s[i]<>'1') and (s[i]<>'0') then
    begin
      clrscr;
      writeln('ERROR');
     f:=false;
     readkey;
  end;
  if f then begin
  a:=0; b:=1;
  for i:=length(s) downto 1 do
    begin
      a:=a+((ord(s[i]))-ord('0'))*b;
      b:=b*2;
    end;
   writeln('desyatkove chislo  ',a);
   write('16 chislo- ');
   if (a<=9) and (a>=1) then writeln(a) else
      case a of
      10:write('A');
      11:write('B');
      12:write('C');
      13:write('D');
      14:write('E');
      15:write('F');
      end;
   while a>=16 do
   begin
     d:=a div 16;
     h:=a mod 16;
     n[i]:=h;
     i:=i+1;
     if d<16 then
     begin
       n[i]:=d;
       i:=i+1;
       a:=d;
     end
     else
       a:=d;
        end;
        for i:=i-1 downto 1 do
        begin
          a:=n[i];
          if (a>=0)and(a<=9) then
          write(a)
          else
            begin
              case a of
              10:write('A');
              11:write('B');
              12:write('C');
              13:write('D');
              14:write('E');
              15:write('F');
             end
             end;
end;
writeln;
readln;
end;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.09.2007 20:12
Сообщение #2


Гость






Цитата
может ее можно както упростить.

Можно попробовать:

uses crt;
var
s, st, _result: string;
i: integer;

const
hexs: array[0 .. $F] of char = (
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
);
bins: array[0 .. $F] of string[4] = (
'0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111'
);
begin
clrscr;
writeln('vvetite chislo v formate DOUBLE WORD ');
readln(s);
if length(s) > 32 then writeln('4islo bolwe Double word')
else begin
_result := '';
repeat

if length(s) < 4 then
while length(s) < 4 do begin
s := '0' + s;
writeln(s);
end;

st := copy(s, length(s) - 3, 4);
delete(s, length(s) - 3, 4);

for i := 0 to $f do
if bins[i] = st then _result := hexs[i] + _result;

until s = '';
end;
writeln(_result);
readln;
end.
 К началу страницы 
+ Ответить 
Айра
сообщение 21.09.2007 21:40
Сообщение #3


Профи
****

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

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


Эх, volvo, опередил, а я так старалась smile.gif)

Один момент:
а вот тут разве не должно быть наоборот:
   if length(s) < 4 then
while length(s) < 4 do begin
s := '0' + s; \\s:=s+'0';
writeln(s);
end;

по-моему нули дописываются в конец числа..

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


Гость






Цитата
по-моему нули дописываются в конец числа
То есть, ты хочешь сказать, что '11' не должно переводиться, как '0011', а должно - как '1100'? smile.gif
 К началу страницы 
+ Ответить 
Айра
сообщение 21.09.2007 21:49
Сообщение #5


Профи
****

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

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


wink.gif это если число дробное.. мы же с целыми работаем.. сорри.. unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MiX
сообщение 21.09.2007 22:47
Сообщение #6





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

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


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

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

 



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