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

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

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

 
 Ответить  Открыть новую тему 
> Как сравнить два шестнацатеричных числа?
samec
сообщение 19.06.2007 22:01
Сообщение #1


Бывалый
***

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

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


Привет, всем! Условие следующее: есть массив чисел, заданных в шестнадцатеричной системе счисления. Числа читаются из текстового файла. Необходимо упорядочить этот массив по неубыванию, не переводя числа в другую С.С.
Собственно вопрос: как реализовать сравнение двух чисел, заданных в шестнацатеричной С.С.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.06.2007 22:18
Сообщение #2


Гость






Сорри, а какая разница, КАК ты описываешь числа? Если ты напишешь: A := $12, а потом сделаешь WriteLn(A), что получишь на экране? Однако, заметь, ты ж не переводил число в другую с/с ...
 К началу страницы 
+ Ответить 
samec
сообщение 19.06.2007 22:52
Сообщение #3


Бывалый
***

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

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


что то я не пойму, как мне это может помочь?
По условию, числа записаны в файле следующим образом: по одному числу в строке, цифры разделены пробелами.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.06.2007 23:06
Сообщение #4


Гость






Покажи, как ты читаешь числа из файла (а самое главное - КУДА? В массив строк или все-таки в массив чисел?)
 К началу страницы 
+ Ответить 
Malice
сообщение 19.06.2007 23:40
Сообщение #5


Профи
****

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

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


Цитата(samec @ 19.06.2007 23:01) *

Собственно вопрос: как реализовать сравнение двух чисел, заданных в шестнацатеричной С.С.

Сравнивай как обычные строки и все..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 20.06.2007 1:45
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


хмм..
то есть ты считаешь, что
var s1,s2: string;

begin
s1:='F';
s2:='1AAF';
if s1>s2 then
  writeln(s1,'>',s2)
else
  writeln(s2,'>',s1);
readln;
end.



выводит правильный результат?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 20.06.2007 5:05
Сообщение #7


Бывалый
***

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

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


Цитата(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 дополнить фиктивными нулями, то результат будет правильным... но как то это уж слишком просто smile.gif

Сообщение отредактировано: samec - 20.06.2007 5:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 20.06.2007 6:04
Сообщение #8


Бывалый
***

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

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


вот, наваял... читаю строки из файла в массив строк, дополняю их фиктивными нулями, сортирую, убираю фиктивные нули и делаю вывод... вроде работает...


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.



Сообщение отредактировано: samec - 20.06.2007 6:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.06.2007 8:28
Сообщение #9


Профи
****

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

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


Цитата(мисс_граффити @ 20.06.2007 2:45) *

хмм..
то есть ты считаешь, что <skip>
выводит правильный результат?

Это мелочи жизни.. просто нулями добить и все перед сравнением.
while length (s1)<length (s2) do s1:='0'+s1;
while length (s2)<length (s1) do s2:='0'+s2;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 20.06.2007 9:26
Сообщение #10


Бывалый
***

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

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


так и сделал smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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