Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2015, 08:35   #1
гризлик
Новичок
Джуниор
 
Регистрация: 21.06.2015
Сообщений: 6
По умолчанию Вывод чисел в файл.

Здраствуйте!
Возникла необходимость в написании программы которая записала бы в файл все комбинации чисел от 0 до 9999999999. Я конечно понимаю что это школьный курс, но я этот курс закончил более 15 лет назад и никогда больше не писал. Моих знаний хватило только на это:
Код:
var
f: file;
a: longint;
begin
assign(f,'list.txt');
rewrite(f);
a:=0;
while a>999999999 do begin
a:=a+1;
writeln(f,a);
end;
close(f);
end.
На строке writeln(f,a) выводится ошибка 63 - Неверный тип файла. Какой правильный тип я должен задать переменой f?
И еще, тип longint имеет предел в 2147483647, а мне нужен 9999999999. Соответственно тоже какой правильный тип нужен*
Спасибо!
гризлик вне форума Ответить с цитированием
Старый 21.06.2015, 09:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
0 до 9999999999
Вас совсем не смущает, что текстовый файлик будет около 110 Гб размером? (если надо, несложно подсчитать размер файла, который должен получиться, с точностью до байта!)
Генерится он будет явно не быстро (думаю, что около 15-20 минут).
А зачем? Что Вы будете с этим файлом делать?!

Цитата:
Какой правильный тип я должен задать переменой f?
так это зависит от типа файла, который Вы хотите получить.
Если нужен ТЕКСТОВЫЙ файл, тогда:
Код:
var f : TextFile;
Цитата:
тип longint имеет предел в 2147483647, а мне нужен 9999999999.
берите int64
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.06.2015, 09:47   #3
гризлик
Новичок
Джуниор
 
Регистрация: 21.06.2015
Сообщений: 6
По умолчанию

Спасибо!
Цитата:
Вас совсем не смущает, что текстовой файлик будет около 110 Гб размером?
Нет. Я вполне себе отдаю отчет что он будет большим
Цитата:
так это зависит от типа файла, который Вы хотите получить.
Если нужен ТЕКСТОВЫЙ файл, тогда:
Код:

var f : TextFile;

Цитата:
тип longint имеет предел в 2147483647, а мне нужен 9999999999.
берите int64

Я так понимаю я должен модуль еще какой-то подключить?
гризлик вне форума Ответить с цитированием
Старый 21.06.2015, 10:44   #4
гризлик
Новичок
Джуниор
 
Регистрация: 21.06.2015
Сообщений: 6
По умолчанию

Вроде разобрался. Переменой f нужно присвоить тип Text. И в while не тот знак поставил. Перпутал < нужно вместо > С мальнькими числами работает. А вот с 10 значным числом проблемы. Int64 в Турбо Паскале вообще нет оказывается. Какой еще тип можно задать?
гризлик вне форума Ответить с цитированием
Старый 21.06.2015, 11:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

На правах быдлокода:
Код:
var s:string; i:array[1..9] of integer; 
...
s:='';
for i[1]:=1 to 9 do for i[2]:=1 to 9 do for i[3]:=1 to 9 do for i[4]:=1 to 9 do 
for i[5]:=1 to 9 do for i[6]:=1 to 9 do for i[7]:=1 to 9 do for i[8]:=1 to 9 do 
for i[9]:=1 to 9 do 
 for j:=1 to 9 do write(f,i[j]); writeln;
end;
А вообще можно ИМХО рекурсивную функцию написать, которая бы формировала строку поразрядно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.06.2015, 13:27   #6
гризлик
Новичок
Джуниор
 
Регистрация: 21.06.2015
Сообщений: 6
По умолчанию

Спасибо!
Я на Фри Паскале все сделал. Там этого геморроя нету Да и потом подумал что действительно столько комбинаций мне не нужно. Я просто изначально планировал словарик числовой создать, а потом подумал что в принципе и номеров телефонов хватит
Код:
var
f: text;
a: int64;
begin
assign(f,'list1.txt');
rewrite(f);
a:=81000000;
while a<9900000000 do begin
if (a>89999999) and (a<9030000000) then a:=9030000001;
if (a>9039999999) and (a<9050000000) then a:=9050000001;
if (a>9069999999) and (a<9090000000) then a:=9090000001;
if (a>9299999999) and (a<9510000000) then a:=9510000001;
if (a>9519999999) and (a<9530000000) then a:=9530000001;
if (a>9539999999) and (a<9600000000) then a:=9600000001;
if (a>9689999999) and (a<9800000000) then a:=9800000001;
a:=a+1;
writeln(f,a);
end;
close(f);
end.
И этого хватит. Хоть школу вспомнил Вообщем еще раз всем спасибо!!!
гризлик вне форума Ответить с цитированием
Старый 21.06.2015, 13:29   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну если "побыстрячку" то можно и так. Но лучше длинную арифметику.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2015, 15:39   #8
гризлик
Новичок
Джуниор
 
Регистрация: 21.06.2015
Сообщений: 6
По умолчанию

Разрешите еще один нубский вопросик тут задать?
Нужно что бы программа вывыодила цифры от 001 до 999
Подскажите пожалуйста чего нехватает в цикле?
Код:
var
a,b,c :integer;
begin
a:=0;
b:=0;
c:=0;
while (a<>10) and (b<>10) and (c<>10) do begin
c:=c+1;
if c=10 then begin
c:=0;
b:=b+1;
end;
if b=10 then begin
c:=0;
b:=0;
a:=a+1;
end;
writeln(a,b,c);
end;
end.
В данный момент выводятся числа до 1000, а мне нужно чтобы он на 999 останавливался. Изночально в while вместо 10 стояли 9, то тогда он только до 900 доходит.

Последний раз редактировалось гризлик; 22.06.2015 в 15:42.
гризлик вне форума Ответить с цитированием
Старый 22.06.2015, 15:51   #9
гризлик
Новичок
Джуниор
 
Регистрация: 21.06.2015
Сообщений: 6
По умолчанию

вопрос снят.
гризлик вне форума Ответить с цитированием
Старый 22.06.2015, 16:10   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Нужно что бы программа вывыодила цифры от 001 до 999
Старый коварный студенческий ход:
Код:
var i:integer;
begin
 for i:=0 to 999 do
  if (i < 10) then write('00',i) else
   if (i < 100) then write('0',i) else
    if (i < 1000)=0 then write(i);
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать в файл последовательного доступа N натуральных чисел: a1, a2, ... аn (числа получить с помощью генератора случайных чисел Casillas1 Помощь студентам 15 15.05.2014 11:41
5.Создать файл из 100 целых чисел, лежащих на отрезке [150,9000], используя генератор случайных чисел. -Вывести эти viktoriya95 Паскаль, Turbo Pascal, PascalABC.NET 0 21.02.2014 22:36
вывод вещественных чисел в файл iris_ka Помощь студентам 1 30.09.2013 19:05
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов в порядке возрастания zzz6 Помощь студентам 1 04.07.2011 12:59
Создать файл целых чисел с данным именем и записать в него N первых положительных четных чисел prelest' Паскаль, Turbo Pascal, PascalABC.NET 4 01.06.2011 10:27