Привет, всем! Условие следующее: есть массив чисел, заданных в шестнадцатеричной системе счисления. Числа читаются из текстового файла. Необходимо упорядочить этот массив по неубыванию, не переводя числа в другую С.С. Собственно вопрос: как реализовать сравнение двух чисел, заданных в шестнацатеричной С.С.
volvo
20.06.2007 2:18
Сорри, а какая разница, КАК ты описываешь числа? Если ты напишешь: A := $12, а потом сделаешь WriteLn(A), что получишь на экране? Однако, заметь, ты ж не переводил число в другую с/с ...
samec
20.06.2007 2:52
что то я не пойму, как мне это может помочь? По условию, числа записаны в файле следующим образом: по одному числу в строке, цифры разделены пробелами.
volvo
20.06.2007 3:06
Покажи, как ты читаешь числа из файла (а самое главное - КУДА? В массив строк или все-таки в массив чисел?)
Malice
20.06.2007 3:40
Цитата(samec @ 19.06.2007 23:01)
Собственно вопрос: как реализовать сравнение двух чисел, заданных в шестнацатеричной С.С.
Сравнивай как обычные строки и все..
мисс_граффити
20.06.2007 5:45
хмм.. то есть ты считаешь, что
var s1,s2: string;
begin
s1:='F';
s2:='1AAF';
if s1>s2 then
writeln(s1,'>',s2)
else
writeln(s2,'>',s1);
readln;
end.
выводит правильный результат?
samec
20.06.2007 9:05
Цитата(volvo @ 20.06.2007 3:06)
Покажи, как ты читаешь числа из файла (а самое главное - КУДА? В массив строк или все-таки в массив чисел?)
если S1 дополнить фиктивными нулями, то результат будет правильным... но как то это уж слишком просто
samec
20.06.2007 10:04
вот, наваял... читаю строки из файла в массив строк, дополняю их фиктивными нулями, сортирую, убираю фиктивные нули и делаю вывод... вроде работает...
program sistem;
uses crt;
var
f:text;
mas:array[1..100] ofstring;
kol:integer;
procedure write_file;
var
ch:char;
i:integer;
begin
Assign(f,'data.txt');
Reset(f);
i:=1;
kol:=1;
whilenot EOF(f) dobegin
read(f,ch);
if (ch=#13) then
inc(kol)
elseif (ch<>' ')and(ch<>#10) then
mas[kol]:=mas[kol]+ch;
end;
Close(f);
end;
procedure dopoln;
var
i,max:integer;
begin
max:=length(mas[1]);
for i:=2to kol doif (max<length(mas[i])) then
max:=length(mas[i]);
for i:=1to kol dowhile (length(mas[i])<max) do
mas[i]:='0'+mas[i];
end;
procedure sort;
var
st:string;
i,k:integer;
beginfor k:=1to kol-1dofor i:=1to kol-k doif(mas[i]>mas[i+1]) thenbegin
st:=mas[i];
mas[i]:=mas[i+1];
mas[i+1]:=st;
end;
end;
procedure del;
var
i:integer;
beginfor i:=1to kol dowhile (mas[i,1]='0') do
delete(mas[i],1,1);
end;
procedure print;
var
i:integer;
beginfor i:=1to kol do
writeln(mas[i]);
end;
begin
clrscr;
write_file;
dopoln;
sort;
del;
print;
readkey;
end.
Malice
20.06.2007 12:28
Цитата(мисс_граффити @ 20.06.2007 2:45)
хмм.. то есть ты считаешь, что <skip> выводит правильный результат?
Это мелочи жизни.. просто нулями добить и все перед сравнением.
while length (s1)<length (s2) do s1:='0'+s1;
while length (s2)<length (s1) do s2:='0'+s2;
samec
20.06.2007 13:26
так и сделал
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.