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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Создание диапазона длинных чисел
Unconnected
сообщение 1.10.2009 14:46
Сообщение #1


mea culpa
*****

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

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


Привет всем. У меня такая проблема: нужно сгенерировать и записать в файл диапазон телефонных номеров. Число после префикса выходит за рамки LongInt. Я попробовал представить число в виде массива цифр, только не очень работает..

var
Form6: TForm6;
ch,ch2:array[1..10] of byte;
f:textfile;
implementation

{$R *.dfm}

Function prov:boolean;
var k:byte;
begin
result:=true;
for k:=1 to 10 do
begin
if ch[k]<>ch2[k] then begin
result:=false;
break;
end;
end;
end;

function mas:string;
var j:byte;
begin
result:='';
for j:=1 to 10 do result:=result+inttostr(ch[j]);
end;

procedure TForm6.sButton1Click(Sender: TObject);
var d1,k2:byte;
begin
assignfile(f,sedit4.text+'.txt');
rewrite(f);
for d1:=1 to 10 do
begin
ch[d1]:=strtoint(form6.sEdit2.text[d1]);
ch2[d1]:=strtoint(form6.sEdit3.text[d1]);
end;
repeat
for k2:=10 downto 1 do
begin
writeln(f,form6.sedit1.text+mas);
if ch[k2]<>9 then inc(ch[k2]) else begin
ch[k2]:=0;
inc(ch[k2-1]);
break
end;
end;
until prov;



sedit4 - в этом поле записано имя создаваемого текстового файла, sedit2 - нижняя граница диапазона; sedit3 - верхняя граница диапазона, sedit1 - префикс номера, например, +7 для России, он будет одинаковым для каждого номера из диапазона. Мой код выдаёт AV даже при первой записи в файл..
Надеюсь, понятно обрисовал задачу. Наверное, можно было это сделать при помощи "длинной арифметики"..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Unconnected
сообщение 1.10.2009 20:14
Сообщение #2


mea culpa
*****

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

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


И я опять в замешательстве. Следующий код:

var diap1,diap2:cardinal;
begin
diap1:=strtoint(copy(form1.sedit5.text,3,length(form1.sedit5.text)-2));
diap2:=strtoint(copy(form1.sedit6.text,3,length(form1.sedit6.text)-2));
end;


делает странные вещи. Поле form1.sedit5.text содержит значение +79030000000, трассировка вышеприведённого кода даже подтверждает это. Но тем не менее переменной diap1 всегда присваивается вместо 9030000000 значение 444208773! Что за феномен, кто-нибудь знает?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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