Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 996

/ вопрос решён /

Здравствуйте, эксперты! У меня такая проблема! Нужно чтобы программа вывела, скажем в Memo, все числа в диапозоне от 000000000 до 999999999, а потом при нажатии кнопки сохранила все эти числа в txt.
Заранее благодарю!

Ученый Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 14 октября 2008, 19:10
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Аксион

Здравствуйте, Ученый!
Используйте вот этот код:
var
x:integer;
begin
for x:= 0 to 999999999 do
begin
memo1.Lines.Add(inttostr(x));
if x=999999999 then memo1.Lines.SaveToFile('name.txt');
end;
end;
Комментарии излишне...
П.с. ждать вы будите ОЧЕНЬ долго :-)

Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 14 октября 2008, 19:29
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: ANBsoft

Здравствуйте, Ученый!
А зачем проверка в цикле?
Лучше так:
var
x:integer;
begin
for x:= 0 to 999999999 do
memo1.Lines.Add(inttostr(x));
memo1.Lines.SaveToFile('name.txt');
end;
Но ничего хорошего из этого не выйдет, в системе не хватит памяти для выполнения.
1 000 000 000 строк по 9 байт = примерно 9 гигабайт,
виндовс (не х64) обеспечит максимум 2Гб.
Если сильно нужно - пишите в цикле сразу в файл - будет долго, но должно сделать (при условии что на диске NTFS а не FAT32).

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 14 октября 2008, 19:37
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 15 октября 2008, 14:11; участников в обсуждении: 6.
Ученый

Ученый (статус: 8-ой класс), 14 октября 2008, 19:36 [#1]:

to Блазер. Но проблема в том что в данном случае числа иду 1,2,3 и тд., а мне надо чтобы они шли 000000001, 000000002, 000000003 и так до 999999999.
ANBsoft

ANBsoft (статус: Студент), 14 октября 2008, 19:41 [#2]:

нужно 000000001,
примерно так:
var
x:integer;
s:String;
begin
for x:= 0 to 999999999 do begin
s:=inttostr(x);
while length(s<9) do s:='0'+s';//Можно сделать чуть быстрее, но врядли будете писать до 999999999
memo1.Lines.Add(s);
end;
memo1.Lines.SaveToFile('name.txt');
end;
Ученый

Ученый (статус: 8-ой класс), 14 октября 2008, 19:45 [#3]:

to Бубырь Александр Николаевич. Выдаёт [Error] Unit1.pas(35): Incompatible types: 'String' and 'Integer'!
Аксион

Аксион (статус: 4-ый класс), 14 октября 2008, 19:45 [#4]:

to Бубырь Александр Николаевич Извените не подумал :) Да, так правельнее...
to Ученый, а для чего если не секрет?
Ученый

Ученый (статус: 8-ой класс), 14 октября 2008, 19:46 [#5]:

Задание мне дали такое! Для чего пока сам с трудом понимаю.
ANBsoft

ANBsoft (статус: Студент), 14 октября 2008, 19:48 [#6]:

не попал:
while length(s)<9 do s:='0'+s';
Amidamaru

Amidamaru (статус: 4-ый класс), 14 октября 2008, 19:50 [#7]:

помоему вместо while length(s<9) do s:='0'+s';
быстрее s:=format('%.9d',[x]);
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
ANBsoft

ANBsoft (статус: Студент), 14 октября 2008, 19:54 [#8]:

согласен, сам форматом никогда не пользовался, потому написал на скорую руку.
Впрочем задача чисто академическая, на практике она не отработает (по крайней мере с этими числами).
Dron

Dron (статус: Студент), 14 октября 2008, 22:41 [#9]:

С
x: integer
ничего работать не может в принципе.
С уважением.
ANBsoft

ANBsoft (статус: Студент), 14 октября 2008, 23:15 [#10]:

почему не может?
Integer –2147483648..2147483647 signed 32-bit
Dron

Dron (статус: Студент), 15 октября 2008, 08:36 [#11]:

Цитата:

почему не может?
Integer –2147483648..2147483647 signed 32-bit

Упс. Действительно, погорячился - спутал со SmallInt.
С уважением.
Вадим К

Вадим К (статус: Академик), 15 октября 2008, 10:44 [#12]:

да не по 9 байт, а по 11, если чесно посмотреть.
А добавлять в Мемо нормально - так это только Блазер мог догадаться...:))
Мемо начнёт загибаться уже на десятке тысяч записей. То есть, добавлять будет, но очень медленно.
Галочка "подтверждения прочтения" - вселенское зло.
Ученый

Ученый (статус: 8-ой класс), 15 октября 2008, 12:34 [#13]:

А во что лучше добавить?
Вадим К

Вадим К (статус: Академик), 15 октября 2008, 12:39 [#14]:

зачем 11 гигов текста????? редкий блокнотозаменитель первые 100 мб сможет открыть.
Если на диске файловая система FAT16/FAT32, то такой файл не удастся сохранить.на двух гигабайтах согнется.
Я бы использовал TFileStream. Он бы отработал, но я никогда не пробовал такие массивы данных записать.
Галочка "подтверждения прочтения" - вселенское зло.
Dron

Dron (статус: Студент), 15 октября 2008, 14:11 [#15]:

Автор вопроса, а зачем вам вообще это нужно? Наверняка есть способ решить задачу проще.
С уважением.

31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:34
Выполнено за 0.03 сек.