Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi].Работа с файлами 
:(
    Опции темы
defeat
Дата 10.1.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.12.2007

Репутация: нет
Всего: нет



Добрый день! Вот задача :"При выполнении задания необходимо размерности массива и сам массив считать из файла.
Дан двумерный массив размером 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 
КАК СДЕЛАТЬ?! Подскажите пожалуйста!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.