Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 25.11.2019, 07:42   #1
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 120
По умолчанию найти не достающие числа

есть файл с цифрами
1
3
5
...

т.е не хватает цифры 2 и 4

Как программно узнать что не хватает этих двух цифр?
brownb вне форума   Ответить с цитированием
Старый 25.11.2019, 10:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

наверное, не цифр, а чисел?


Цитата:
Сообщение от brownb Посмотреть сообщение
Как программно узнать что не хватает этих двух цифр?
если файл отсортирован, то вообще никаких проблем, читаем числа по порядку и сравниваем со счётчиком, если число больше, чем счётчик - выводим значение счётчика и увеличиваем счётчик. повторяем вывод, пока счётчик не сравняется с числом. Повторяем цикл чтения из файла.
всё.

если файл не отсортирован, то проще всего (если задача это позволяет), прочитать его в память, отсортировать и дальше пройтись в цикле от начала до конца по алгоритму, описанному выше.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 25.11.2019, 10:39   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,942
По умолчанию

1. составить список(множество) допустимых(возможных) знечений
Код:
s:=[0..9]; файл с цифрами
2.прочитать число из ...
Код:
read(f,r);
3.вычеркнуть известное значение из списка
Код:
s:=s -[r]; //exclude(s, r);
4.если есть числа повторить п.2
Код:
while not eof(f) do
...
end;
5.пройти по всему множеству
Код:
for j:=0 to 9 do begin 
....
end;
6.если мы его не вычеркнули и элемент остался в множестве, то ....
Код:
if j in s then ...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.11.2019 в 10:42.
evg_m вне форума   Ответить с цитированием
Старый 30.11.2019, 20:24   #4
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 120
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
1. составить список(множество) допустимых(возможных) знечений
Код:
s:=[0..9]; файл с цифрами
2.прочитать число из ...
Код:
read(f,r);
3.вычеркнуть известное значение из списка
Код:
s:=s -[r]; //exclude(s, r);
4.если есть числа повторить п.2
Код:
while not eof(f) do
...
end;
5.пройти по всему множеству
Код:
for j:=0 to 9 do begin 
....
end;
6.если мы его не вычеркнули и элемент остался в множестве, то ....
Код:
if j in s then ...
У меня есть тхт файл с числами от 1000000 до 2000000 по порядку

И есть файл котором тоже числа от 1000000 до 2000000 но уже не по порядку многих не хватает.Помогите решить проблему
brownb вне форума   Ответить с цитированием
Старый 01.12.2019, 12:19   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,942
По умолчанию

Цитата:
1. составить список(множество) допустимых(возможных) знечений
Код:
r:=TstringList.create;
r.loadFromFile(...); // у меня есть файл с числами по порядку
// или
memo1.Lines.LoadFromFile(....); //
Цитата:
2.прочитать число из ...
Код:
r2:=TstringList.Create;
r2.LoadFromFile(...); //файл в котором тоже но не попорядку

s:=r2.Strings[j]; // число("текстовая" запись числа) на какой-то строке
Цитата:
3.вычеркнуть известное значение из списка
Код:
x:=r.IndexOf(s); //а есть ли оно там и где именно
if x>=0 then // если оно есть
  r.Delete(x); //вычеркнуть
Цитата:
4.если есть числа повторить п.2
Код:
for j1:=0 to r2.Count-1 do begin
...
end;
Цитата:
6.если мы его не вычеркнули и элемент остался в множестве, то ....
Код:
r.SaveToFile(...);
// в зависимости от вар.п.1.
memo.Lines.SavetoFile(....);
P,S. быстро и легко добавить недостающие(найденные/оставшиеся) числа к ...
Код:
r2.AddStrings(r); //r2.AddStrings(memo.Lines);
r2.SaveToFile(....);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.12.2019 в 12:36.
evg_m вне форума   Ответить с цитированием
Старый 02.12.2019, 18:15   #6
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 120
По умолчанию

Пробую так не работает((((
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
r:TstringList;
begin
with OpenDialog1, Memo1 do
      if Execute then
         Lines.LoadFromFile(FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
with OpenDialog1, Memo2 do
      if Execute then
         Lines.LoadFromFile(FileName);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
j:integer;
s:string;
j1:integer;
x:integer;
begin
for j1:=0 to memo2.lines.Count-1 do begin
s:=memo2.lines[j];
x:=memo2.lines.IndexOf(s); //а есть ли оно там и где именно
if x>=0 then // если оно есть
  memo2.lines.Delete(x); //вычеркнуть
end;
end;
brownb вне форума   Ответить с цитированием
Старый 02.12.2019, 23:38   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,942
По умолчанию

Цитата:
Код:
for j1:=0 to memo2.lines.Count-1 do begin
s:=memo2.lines[j];
x:=memo2.lines.IndexOf(s); //а есть ли оно там и где именно
if x>=0 then // если оно есть
  memo2.lines.Delete(x); //вычеркнуть
end;
end;
memo2 это список ВСЕХ чисел по порядку.
А где же список исходный ?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 03.12.2019, 09:31   #8
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 120
По умолчанию

Спасибо работает!Но программа зависает жуть.Пробую проверить 500 000 тыс чисел
brownb вне форума   Ответить с цитированием
Старый 03.12.2019, 10:06   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,942
По умолчанию

Цитата:
Но программа зависает жуть
1. вместо мемо использовать TStringList. ничего не будет видно, но скорость повысится.
2. "скобки" Memo.Lines.BeginUpdate/EndUpdate так чтобы обновление(показа!!! обновлений) результатов происходило пореже (не при каждом удалении)
3.сортированный список
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2,3,4,5,6,7,8,9. Afonichka Помощь студентам 2 27.10.2019 22:45
[Python] Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна. Джина Ким Помощь студентам 0 18.05.2018 19:39
в выделенных ячееках найти числа вне диапазона 5.43 до 5.47 заменить на случаные числа в этом диапазоне? alx83 Microsoft Office Excel 1 22.06.2012 05:37
Задачи в ТурбоПаскаль: найти числа Армстронга и просуммировать числа в последовательности номера которых простые числа Lena1808 Помощь студентам 1 17.05.2012 08:00
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 22:49