Привет, всем! Условие следующее: есть массив чисел, заданных в шестнадцатеричной системе счисления. Числа читаются из текстового файла. Необходимо упорядочить этот массив по неубыванию, не переводя числа в другую С.С. Собственно вопрос: как реализовать сравнение двух чисел, заданных в шестнацатеричной С.С.
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)
Покажи, как ты читаешь числа из файла (а самое главное - КУДА? В массив строк или все-таки в массив чисел?)
читаю в массив чисел, вот так:
var f:text; mas:array[1..100,1..100] of integer; kol:integer;
procedure write_file; var ch:char; i:integer; begin Assign(f,'data.txt'); Reset(f); for i:=1 to 100 do for kol:=1 to 100 do mas[i,kol]:=-1; i:=1; kol:=0; while not EOF(f) do begin read(f,ch); case ch of '0':begin mas[kol+1,i]:=0; inc(i); end; '1':begin mas[kol+1,i]:=1; inc(i); end; '2':begin mas[kol+1,i]:=2; inc(i); end; '3':begin mas[kol+1,i]:=3; inc(i); end; '4':begin mas[kol+1,i]:=4; inc(i); end; '5':begin mas[kol+1,i]:=5; inc(i); end; '6':begin mas[kol+1,i]:=6; inc(i); end; '7':begin mas[kol+1,i]:=7; inc(i); end; '8':begin mas[kol+1,i]:=8; inc(i); end; '9':begin mas[kol+1,i]:=9; inc(i); end; 'A':begin mas[kol+1,i]:=10; inc(i); end; 'B':begin mas[kol+1,i]:=11; inc(i); end; 'C':begin mas[kol+1,i]:=12; inc(i); end; 'D':begin mas[kol+1,i]:=13; inc(i); end; 'E':begin mas[kol+1,i]:=14; inc(i); end; 'F':begin mas[kol+1,i]:=15; inc(i); end; #13: begin inc(kol); i:=1; end; end; end; Close(f); end;
Добавлено через 5 мин.
Цитата(мисс_граффити @ 20.06.2007 5:45)
выводит правильный результат?
если S1 дополнить фиктивными нулями, то результат будет правильным... но как то это уж слишком просто
samec
20.06.2007 10:04
вот, наваял... читаю строки из файла в массив строк, дополняю их фиктивными нулями, сортирую, убираю фиктивные нули и делаю вывод... вроде работает...
program sistem; uses crt; var f:text; mas:array[1..100] of string; kol:integer;
procedure write_file; var ch:char; i:integer; begin Assign(f,'data.txt'); Reset(f); i:=1; kol:=1; while not EOF(f) do begin read(f,ch); if (ch=#13) then inc(kol) else if (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:=2 to kol do if (max<length(mas[i])) then max:=length(mas[i]); for i:=1 to kol do while (length(mas[i])<max) do mas[i]:='0'+mas[i]; end;
procedure sort; var st:string; i,k:integer; begin for k:=1 to kol-1 do for i:=1 to kol-k do if(mas[i]>mas[i+1]) then begin st:=mas[i]; mas[i]:=mas[i+1]; mas[i+1]:=st; end; end;
procedure del; var i:integer; begin for i:=1 to kol do while (mas[i,1]='0') do delete(mas[i],1,1); end;
procedure print; var i:integer; begin for i:=1 to 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
так и сделал
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.