![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте, нужна помощь, не могу создать программу, в которой необходимо считать из внешнего файла 9 чисел(записанных через пробел в строку), и сформировать на форме массив (3х3) этих чисел, проблема в том что я не понимаю как из файла со строкой чисел сделать массив...
как открывать файл понятно, но вот как обработать нет. наведите на мысль пожалуйста... |
#2
|
||||
|
||||
![]() TStrings
property Delimiter property DelimitedText Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() Цитата:
а как из этого сделать массив 3х3? |
#4
|
||||
|
||||
![]() На форму добавить поле Memo и диалог открытия файлов OpenDialog. Ну и кнопку, вот ее обработчик:
Код:
procedure TForm1.Button1Click(Sender: TObject); var F : TextFile; mass : array [0..2] of array [0..2] of integer; i,j : integer; begin if OpenDialog1.Execute then begin AssignFile(F, OpenDialog1.FileName); Reset(F); while not EOF(F) do begin for i := 0 to 2 do for j := 0 to 2 do Read(F, mass[i][j]); end; end; for i := 0 to 2 do for j := 0 to 2 do Memo1.Lines.Add('mass [' + IntToStr(i) + ']' + '[' + IntToStr(j) + ']' + ' = ' + IntToStr(mass[i][j])); end; |
Этот пользователь сказал Спасибо orion_asm за это полезное сообщение: | ||
Archer666 (05.05.2013)
|
#5
|
|||
|
|||
![]() Цитата:
спасибо, помогло ![]() а как реализовать вывод в Label в виде таблицы 3х3? |
#6
|
||||
|
||||
![]() Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var F : TextFile; mass : array [0..2] of array [0..2] of integer; i,j : integer; begin if OpenDialog1.Execute then begin AssignFile(F, OpenDialog1.FileName); Reset(F); while not EOF(F) do begin for i := 0 to 2 do for j := 0 to 2 do Read(F, mass[i][j]); end; end; for i := 0 to 2 do for j := 0 to 2 do StringGrid1.Cells[i,j] := IntToStr(mass[i][j]); end; end. ![]() Последний раз редактировалось orion_asm, 05.05.2013 в 16:25. |
Этот пользователь сказал Спасибо orion_asm за это полезное сообщение: | ||
Archer666 (05.05.2013)
|
#7
|
|||
|
|||
![]() Цитата:
точно, так и сортировать потом проще ![]() большое спасибо! ![]() |
#8
|
|||
|
|||
![]() orion_asm, а как можно отсортировать? по возрастанию например..
|
#9
|
||||
|
||||
![]() Я делал на TFileStream и TMemoryStream подобия n-мерных массивов.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#10
|
||||
|
||||
![]() В секции implementation добавляешь такое: (SgSort взят и частично изменен с cyberforum.ru)
Код:
implementation // Процедура сортировки StringGrid procedure SgSort(aSg : TStringGrid; const aCol : Integer; aCompare : TStringListSortCompare = nil); var SlSort, SlRow : TStringList; i, j : Integer; begin SlSort := TStringList.Create; for i := aSg.FixedRows to aSg.RowCount - 1 do begin SlRow := TStringList.Create; SlRow.Assign(aSg.Rows[i]); SlSort.AddObject(aSg.Cells[aCol, i], SlRow); end; if Assigned(aCompare) then SlSort.CustomSort(aCompare) else SlSort.Sort; j := 0; for i := aSg.FixedRows to aSg.RowCount - 1 do begin SlRow := Pointer(SlSort.Objects[j]); aSg.Rows[i].Assign(SlRow); SlRow.Free; Inc(j); end; FreeAndNil(SlSort); end; // Сортировка по возрастанию function CompNumAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; var N1, N2 : Extended; begin N1 := StrToFloatDef(aSl[aIndex1], 0); N2 := StrToFloatDef(aSl[aIndex2], 0); if N1 < N2 then Result := -1 else if N1 > N2 then Result := 1 else Result := 0; end; // По убыванию function CompNumDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; var N1, N2 : Extended; begin N1 := StrToFloatDef(aSl[aIndex1], 0); N2 := StrToFloatDef(aSl[aIndex2], 0); if N1 > N2 then Result := -1 else if N1 < N2 then Result := 1 else Result := 0; end; Код:
procedure TForm1.Button1Click(Sender: TObject); var F : TextFile; mass : array [0..2] of array [0..2] of integer; i,j : integer; begin if OpenDialog1.Execute then begin AssignFile(F, OpenDialog1.FileName); Reset(F); while not EOF(F) do begin for i := 0 to 2 do for j := 0 to 2 do Read(F, mass[i][j]); end; end; for i := 0 to 2 do for j := 0 to 2 do begin StringGrid1.Cells[i,j] := IntToStr(mass[i][j]); end; // Сортируем все столбцы по возрастанию SgSort(StringGrid1, 0, CompNumAsc); SgSort(StringGrid1, 1, CompNumAsc); SgSort(StringGrid1, 2, CompNumAsc); end; end. Последний раз редактировалось orion_asm, 30.07.2013 в 04:58. |
#11
|
|||
|
|||
![]() Цитата:
проблема в том что, отсортированные должны быть в соседней таблице.. |
#12
|
||||
|
||||
![]() Цитата:
Здесь его заполняем вместе с первым: Код:
... for i := 0 to 2 do for j := 0 to 2 do begin StringGrid1.Cells[i,j] := IntToStr(mass[i][j]); StringGrid2.Cells[i,j] := IntToStr(mass[i][j]); end; А здесь сортируем: Код:
SgSort(StringGrid2, 0, CompNumAsc); SgSort(StringGrid2, 1, CompNumAsc); SgSort(StringGrid2, 2, CompNumAsc); Обыкновенная копипаста и замена единственного числа. |
#13
|
|||
|
|||
![]() Цитата:
извиняюсь, затупил.. спасибо за помощь. |