Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.10.2012, 15:51
Евгений79 Евгений79 вне форума
Прохожий
 
Регистрация: 24.04.2011
Сообщения: 24
Репутация: 156
По умолчанию Простая задача, разбить массив на равные n частей

Вроде чистый паскаль, а что-то голову сломал уже..

Разделить список с N строк на M равных частей и сохранить каждую в отдельный файл.

Например 5324 надо разделить на 5 файлов
5324 div 5 = 1064
1064 * 5 = 5320
4 строки теряются.
Строю какой то монструозный код, с костылями докладывающие этот остаток в последний кусок. Но уверен, есть изящное решение в несколько строк.
Ответить с цитированием
  #2  
Старый 18.10.2012, 16:30
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

В чем проблема? Код должен выглядеть примерно так

Код:
procedure xxx;
var
i,M,N,FileNum:integer;
begin
FileNum:=1;
for i:=1 to N do
begin
//тут должен быть код записи строки с номером i в файл с номером FileNum
if ((i div (N div M))=0) and (FileNum<M) then inc(FileNum);
end;
end;

Будет происходить следующее (на примере приведенных тобой цифр)

Строки будут перебираться поочередно. Как только счетчик строк i дойдет числа, кратного N div M (то есть 1064), и если номер файла меньше, чем допустимое M номер файла меняется на следующий.
Ответить с цитированием
  #3  
Старый 18.10.2012, 18:43
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Сорь, ошибочка... Вот так
Код:
procedure xxx;
var
i,M,N,FileNum:integer;
begin
FileNum:=1;
for i:=1 to N do
begin
//тут должен быть код записи строки с номером i в файл с номером FileNum
if ((i mod (N div M))=0) and (FileNum<M) then inc(FileNum);
end;
end;
Ответить с цитированием
  #4  
Старый 19.10.2012, 06:59
Евгений79 Евгений79 вне форума
Прохожий
 
Регистрация: 24.04.2011
Сообщения: 24
Репутация: 156
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i,M,N,FileNum:integer;
begin
 memo1.Clear;
 FileNum:=1;
 n:=11;
 m:=3;
 for i:=1 to N do
 begin
  //тут должен быть код записи строки с номером i в файл с номером FileNum
  if ((i div (N div M))=0) and (FileNum<M) then inc(FileNum);
  memo1.Lines.Add('i = ' + IntToStr(i) + '; Filenum = '+ IntToStr(filenum));
 end;

end;

i = 1; Filenum = 2
i = 2; Filenum = 3
i = 3; Filenum = 3
i = 4; Filenum = 3
i = 5; Filenum = 3
i = 6; Filenum = 3
i = 7; Filenum = 3
i = 8; Filenum = 3
i = 9; Filenum = 3
i = 10; Filenum = 3
i = 11; Filenum = 3
Ответить с цитированием
  #5  
Старый 20.10.2012, 15:27
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я же сказал там ошибка! Бери второй пример!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter