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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 10:39   #1
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию Организовать ввод массивов как из текстовых файлов, так и с клавиатуры.

Дана матрица A(N, M). Найти ее наибольший элемент и номера строки и столбца, на пересечении которых он находится.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var max,n,m,i,j,ii,jj:integer;
A:array[0..30,0..30] of Integer;
begin
N := SpinEdit1.Value; //количество строк
M := SpinEdit2.Value; //количество столбцов
for i:=0 to n-1 do
for j:=0 to m-1 do
 A[i,j]:=StrToInt(StringGrid1.Cells[j, i]);
 max:=A[0,0]; ii:=0; jj:=0;
 for i:=0 to n-1 do
  for j:=0 to m-1 do
   if A[i,j]>max then
    begin
     max:=A[i,j];
     ii:=i;
     jj:=j;
end;
label4.Caption:=('Максимальный элемент матрицы '+IntToStr(max)+' находится на пересечении '+IntToStr(ii)+'-й строки и '+IntToStr(jj)+' столбца');
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
StringGrid1.RowCount := SpinEdit1.Value;
end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
StringGrid1.ColCount := SpinEdit2.Value;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Tstr,TstrBuff:TStringList;
 i,j:Integer;
begin
if OpenDialog1.Execute then
Begin
TstrBuff:= TStringList.Create;
TstrBuff.Delimiter:=' ';
 
Tstr:= TStringList.Create;
Tstr.LoadFromFile(OpenDialog1.FileName);

StringGrid1.RowCount:= Tstr.Count+1; // задаем количество строк в таблице
 
for i:=0 to Tstr.Count-1 do
 begin
 // определяем, нужно ли расширить таблицу
 TstrBuff.DelimitedText:=Tstr.Strings[i];
 if TstrBuff.Count> StringGrid1.ColCount-1 then  StringGrid1.ColCount:=TstrBuff.Count+1;
 
 // заполняем очередную строку таблицы соответствующими данными
 StringGrid1.Rows[i].Delimiter:=' ';
 StringGrid1.Rows[i].DelimitedText:= Tstr.Strings[i];

 end;
Tstr.Free;
TstrBuff.Free;
end;
end;
Когда я с клавиатуры ввожу,то все хорошо работает,находит пересечение,а вот из текстового файла когда открываю,то пишет,что максимальный элемент -1 находится на пересечении 0 столбца и 0 строки,а вот если я установлю в SpinEdit количество строк и столбцов,то оно только тогда начинает определять...
Подскажите,пожалуйста,можно ли сделать так,чтобы когда я вывожу из текстового файла,то автоматически количество строк и столбцов заносилось в StringGrid?
GalaiAnton вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как загрузить в Memo 20+ текстовых файлов? ZverBlin Общие вопросы Delphi 12 22.03.2012 21:38
Как организовать ввод чисел в строку через пробел hoop Помощь студентам 0 16.10.2011 15:44
Degree d^n, как организовать ввод\вывод? sig_GB Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 15 21.04.2010 20:29
Как организовать ввод строки с пробелами? Adminx Общие вопросы C/C++ 11 20.11.2009 02:33
Как в C++ организовать ввод данных в одну строчку? amdbodia Общие вопросы C/C++ 10 16.05.2009 18:03