Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi].Работа с файлами


Автор: defeat 10.1.2008, 13:44
Добрый день! Вот задача :"При выполнении задания необходимо размерности массива и сам массив считать из файла.
Дан двумерный массив размером n*m. 

1.      Заменить максимальный элемент каждого столбца нулем 

2.      Вставить после всех строк, содержащих максимальный по модулю элемент, первую строку. 

3.      Удалить из него строку и столбец, на перекрестье которых находится максимальный по модулю элемент.. 

4.      Поменять местами последний  и предпоследний столбцы. 

В проект добавить вывод результатов программы в исходный текстовый файл с комментариями." 
Собственно саму задачу я сделал...вот она : "

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   m:array[0..500] of integer;
implementation

{$R *.dfm}




procedure TForm1.Button1Click(Sender: TObject);
var
f:textfile ;
s,ss:string;
i,j,n,m,k,b,l,u:integer;
y:array of string;
begin
assignfile(f,'file.txt');
k:=1;
j:=0;
b:=0;
reset(f);
while not seekeof(f) do begin
  readln(f,s);
   StringGrid1.RowCount:=StringGrid1.rowCount+1;
  for  i:=0 to length(s) do begin
    if s[i]=' ' then begin
     if k=1 then
       ss:=copy(s,k,i-k)
     else
       ss:=copy(s,k+1,i-k-1);
       k:=i;
      b:=b+1;
      StringGrid1.ColCount:=b;
      StringGrid1.Cells[b-1,j]:=ss;
     end;
  end;
  b:=0;
  k:=1;
  j:=j+1;
end;
StringGrid1.RowCount:=StringGrid1.RowCount-1;
closefile(f);

StringGrid2.RowCount:=StringGrid1.rowcount;
StringGrid2.colCount:=StringGrid1.colcount;
for i:=0 to StringGrid1.colCount-1 do begin
k:=strtoint(StringGrid1.cells[i,0]);
  for j:=0 to StringGrid1.rowCount-1 do begin
     if strtoint(StringGrid1.cells[i,j])>k then
     k:=strtoint(StringGrid1.cells[i,j])
  end;
  for j:=0 to StringGrid1.rowCount-1 do begin
     if strtoint(StringGrid1.cells[i,j])=k then
      StringGrid2.cells[i,j]:='0'
     else
      StringGrid2.cells[i,j]:=StringGrid1.cells[i,j]
  end;
end;
assignfile(f,'file.txt');
append(f);
writeln(f);
writeln(f,'Заменить максимальный элемент каждого столбца нулем');
s:='';
for i:=0 to StringGrid2.rowCount-1 do begin
  for j:=0 to StringGrid2.colCount-1 do begin
    if StringGrid2.cells[j,i]<>'' then
    s:=s+StringGrid2.cells[j,i]+' '
  end;
  write(f,s);
  writeln(f);
  s:='';
end;
closefile(f);
showmessage('Заменить максимальный элемент каждого столбца нулем');

k:=strtoint(StringGrid1.cells[0,0]);
for i:=0 to StringGrid1.ColCount-1 do begin
  for j:=0 to StringGrid1.rowCount-1 do begin
   StringGrid2.cells[i,j]:=StringGrid1.cells[i,j];
   if abs(strtoint(StringGrid1.cells[i,j]))>abs(k) then begin
     k:=strtoint(StringGrid1.cells[i,j]);//Максимальный элемент по модулю
     b:=i;//Столбец с максимальным
     l:=j;//Сстрока с минимальным
   end;
  end;
end;
showmessage('Максимум по модулю '+inttostr(k));
showmessage(StringGrid2.cells[b,l]);
i:=0;
while i<=StringGrid2.ROWCount-1 do begin
  for j := 0 to StringGrid2.colCount-1 do begin
     if strtoint(StringGrid2.cells[j,i])=k then begin
          u:=1;
          for n := i+1 to StringGrid2.rowCount-1 do begin
           for m := 0 to StringGrid2.colCount-1 do begin
             setlength(y,u);
             y[u-1]:=StringGrid2.cells[m,n];
             u:=u+1;
           end;
          end;
          StringGrid2.rowcount:=StringGrid2.rowcount+1;
          for m := 0 to StringGrid2.colCount-1 do begin
            StringGrid2.cells[m,i+1]:=StringGrid1.cells[m,0];
          end;
          u:=1;
          for n := i+2 to StringGrid2.rowCount-1 do begin
           for m := 0 to StringGrid2.colCount-1 do begin
              StringGrid2.cells[m,n]:=y[u-1];
              u:=u+1;
           end;
          end;
        i:=i+1;
     end;
  end;
i:=i+1;
end;
assignfile(f,'file.txt');
append(f);
writeln(f);
writeln(f,'Вставить после всех строк, содержащих максимальный по модулю элемент, первую строку');
s:='';
for i:=0 to StringGrid2.rowCount-1 do begin
  for j:=0 to StringGrid2.colCount-1 do begin
    if StringGrid2.cells[j,i]<>'' then
    s:=s+StringGrid2.cells[j,i]+' '
  end;
  write(f,s);
  writeln(f);
  s:='';
end;
closefile(f);
showmessage('Вставить после всех строк, содержащих максимальный по модулю элемент, первую строку');


StringGrid2.RowCount:=StringGrid1.RowCount;
StringGrid2.colCount:=StringGrid1.colCount;
for j:=0 to StringGrid1.rowCount-1 do begin
  for i:=0 to StringGrid1.colCount-1 do begin
    StringGrid2.cells[i,j]:=StringGrid1.cells[i,j]
  end;
end;
        if b<>StringGrid2.ColCount-1 then begin    //удаляем столбец с максимальным
          u:=1;
          for n := b+1 to StringGrid2.ColCount-1 do begin
           for m := 0 to StringGrid2.rowCount-1 do begin
             setlength(y,u);
             y[u-1]:=StringGrid2.cells[n,m];
             u:=u+1;
           end;
          end;
          StringGrid2.colcount:=StringGrid2.colcount-1;
          u:=1;
          for n := b to StringGrid2.ColCount-1 do begin
           for m := 0 to StringGrid2.rowCount-1 do begin
              StringGrid2.cells[n,m]:=y[u-1];
              u:=u+1;
           end;
          end;
       end else
        StringGrid2.colcount:=StringGrid2.colcount-1;

        if l<>StringGrid2.rowCount-1 then begin    //удаляем строку с максимальным
          u:=1;
          for n := l+1 to StringGrid2.rowCount-1 do begin
           for m := 0 to StringGrid2.colCount-1 do begin
             setlength(y,u);
             y[u-1]:=StringGrid2.cells[m,n];
             u:=u+1;
           end;
          end;
          StringGrid2.rowcount:=StringGrid2.rowcount-1;
          u:=1;
          for n := l to StringGrid2.rowCount-1 do begin
           for m := 0 to StringGrid2.colCount-1 do begin
              StringGrid2.cells[m,n]:=y[u-1];
              u:=u+1;
           end;
          end;
       end else
        StringGrid2.rowcount:=StringGrid2.rowcount-1;

assignfile(f,'file.txt');
append(f);
writeln(f);
writeln(f,'Удалить из него строку и столбец, на перекрестье которых находится максимальный по модулю элемент');
s:='';
for i:=0 to StringGrid2.rowCount-1 do begin
  for j:=0 to StringGrid2.colCount-1 do begin
    if StringGrid2.cells[j,i]<>'' then
    s:=s+StringGrid2.cells[j,i]+' '
  end;
  write(f,s);
  writeln(f);
  s:='';
end;
closefile(f);
showmessage('Удалить из него строку и столбец, на перекрестье которых находится максимальный по модулю элемент');


StringGrid2.RowCount:=StringGrid1.RowCount;
StringGrid2.colCount:=StringGrid1.colCount;
for j:=0 to StringGrid1.rowCount-1 do begin
  for i:=0 to StringGrid1.colCount-1 do begin
    StringGrid2.cells[i,j]:=StringGrid1.cells[i,j]
  end;
end;
for i:=0 to StringGrid2.rowcount-1 do begin
  k:=strtoint(StringGrid2.Cells[StringGrid2.colcount-1,i]);
  StringGrid2.Cells[StringGrid2.colcount-1,i]:=StringGrid2.Cells[StringGrid2.colcount-2,i];
  StringGrid2.Cells[StringGrid2.colcount-2,i]:=inttostr(k);
end;
assignfile(f,'file.txt');
append(f);
writeln(f);
writeln(f,'Поменять местами последний  и предпоследний столбцы');
s:='';
for i:=0 to StringGrid2.rowCount-1 do begin
  for j:=0 to StringGrid2.colCount-1 do begin
    if StringGrid2.cells[j,i]<>'' then
    s:=s+StringGrid2.cells[j,i]+' '
  end;
  write(f,s);
  writeln(f);
  s:='';
end;
closefile(f);
showmessage('Поменять местами последний  и предпоследний столбцы');
end;


end."
Но мне надо, чтобы полученные мною данные выводились в текстовом файле красиво...то есть цифра под цифрой...у меня выводятся, допустим, вот так:
1 2 3 -7
76 77 1 4
а надо:
  1   2 3 -7
76 77 1  4 
КАК СДЕЛАТЬ?! Подскажите пожалуйста!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)