|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Простая задача, разбить массив на равные n частей
Вроде чистый паскаль, а что-то голову сломал уже..
Разделить список с N строк на M равных частей и сохранить каждую в отдельный файл. Например 5324 надо разделить на 5 файлов 5324 div 5 = 1064 1064 * 5 = 5320 4 строки теряются. Строю какой то монструозный код, с костылями докладывающие этот остаток в последний кусок. Но уверен, есть изящное решение в несколько строк. |
#2
|
||||
|
||||
В чем проблема? Код должен выглядеть примерно так
Код:
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
|
||||
|
||||
Сорь, ошибочка... Вот так
Код:
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
|
|||
|
|||
Код:
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
|
||||
|
||||
Я же сказал там ошибка! Бери второй пример!
|