| 
| 
 | Вопрос # 3 250/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!нужна помощь в написание программы 3 способами!преобразовать матрицу порядка MxN,добавив к каждому элементу главной диагонали сумму предыдущих элементов данной строки.например 4х4
 1.1 - первый элемент главной диагонали будет неизменным,
 2.2 = 2.1+2.2 а результат записывается в 2.2
 33 = 3.1+3.2+3.3 запись в 3.3 и так дальше
 ОЧЕНЬ ПРОШУ ПОМОЩИ
 
|  |   Вопрос задал: sv2311 (статус: Посетитель)Вопрос отправлен: 4 октября 2009, 12:54
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Способ номер раз:
 program p3250;
 
{$APPTYPE CONSOLE}
 
type
  TMatrix = array of array of Integer; // Замени на Extended, если будут дробные числа
 
procedure ChangeMatrix(var X: TMatrix);
var
  i, k: Integer;
  Sum: Integer; // Замени на Extended, если будут дробные числа
begin
  for i:= 0 to High(X) do
    begin
      Sum:= 0;
      for k:= 0 to i - 1 do
        Sum:= Sum + X[i, k];
      X[i, i]:= X[i, i] + Sum;
    end;
end;
 
procedure FillMatrix(var X: TMatrix; const M, N: Cardinal);
var
  i, j: Integer;
begin
  SetLength(X, M, N);
  for i:= 0 to M - 1 do
    for j:= 0 to N - 1 do
      X[i, j]:= Random(10);
end;
 
procedure PrintMatrix(const X: TMatrix);
var
  i, j: Integer;
begin
  for i:= 0 to High(X) do
    begin
      for j:= 0 to High(X[0]) do
        Write(X[i, j]: 4);
      WriteLn;
    end;
end;
 
var
  X: TMatrix;
 
begin
  Randomize();
  FillMatrix(X, 5, 5);
  WriteLn('  Source matrix:'#13#10);
  PrintMatrix(X);
 
  ChangeMatrix(X);
  WriteLn(#13#10'  Changed matrix:'#13#10);
  PrintMatrix(X);
 
  ReadLn;
end.Какие ещё способы тебе предложить?
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 4 октября 2009, 13:24
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 4 октября 2009, 17:46; участников в обсуждении: 3. 
|   | Егор (статус: 10-ый класс), 4 октября 2009, 13:31 [#1]:кстати, админы, а что там в правилах насчёт имён пользователей? Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | sv2311 (статус: Посетитель), 4 октября 2009, 13:35 [#2]:мне нужно решить это условие 3 способами в делфи |  
|   | min@y™ (статус: Доктор наук), 4 октября 2009, 13:40 [#3]: Цитата (sv2311): мне нужно решить это условие 3 способами в делфи  
 А почему не 33-мя способами?
 Кто придумал такие условия?
 Я свой способ предложил, пусть другие эксперты напишут свои способы. С миру по нитке, как говориццо...
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | sv2311 (статус: Посетитель), 4 октября 2009, 13:41 [#4]:и на этом спасибо |  
|   | sv2311 (статус: Посетитель), 4 октября 2009, 14:01 [#5]:вот мой код оно считывает совсем не то что бы хотелось( unit Unit1;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, StdCtrls, Buttons;
 
 type
 TForm1 = class(TForm)
 StringGrid1: TStringGrid;
 Edit1: TEdit;
 Label1: TLabel;
 Label2: TLabel;
 Button1: TButton;
 Button3: TButton;
 Label3: TLabel;
 StringGrid2: TStringGrid;
 BitBtn1: TBitBtn;
 procedure Button1Click(Sender: TObject);
 procedure Button3Click(Sender: TObject);
 procedure BitBtn1Click(Sender: TObject);
 
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form1: TForm1;
 c,r,n:byte;sum:integer;
 implementation
 
 {$R *.dfm}
 
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 Randomize;
 n:=strtoint(edit1.text);
 with Stringgrid1 do
 begin
 inc(n);
 colcount:=n;
 rowcount:=n;
 width:=defaultcolwidth*(n+1);
 height:=defaultrowheight*(n+1);
 cells[0,0]:='?';
 for c:=1 to colcount do
 cells[c,0]:=inttostr(c);
 for r:=1 to rowcount do
 cells[0,r]:=inttostr(r);
 for c:=1 to colcount do
 for r:=1 to rowcount do
 Cells[c,r]:=inttostr(Random(10));
 end;
 with Stringgrid2 do
 begin
 colcount:=n;
 rowcount:=n;
 width:=defaultcolwidth*(n+1);
 height:=defaultrowheight*(n+1);
 cells[0,0]:='¹';
 for c:=1 to colcount do
 cells[c,0]:=inttostr(c);
 for r:=1 to rowcount do
 cells[0,r]:=inttostr(r);
 color:=clactiveborder;
 gridlinewidth:=3;
 font.Name:='Tahoma';
 font.size:=10;
 end; end;
 
 
 
 procedure TForm1.BitBtn1Click(Sender: TObject);
 var i,sum:integer; c,r:byte;
 begin
 n:=StrToInt(Edit1.Text);
 sum:=0;
 for c:=1 to n do
 for r:=1 to n do
 if c>r then begin
 sum:=strtoint(stringgrid1.Cells[c,r])+sum;
 end;
 for c:=1 to n do
 for r:=1 to n do
 IF (c=r) then
 stringgrid2.Cells[c,r]:=inttostr(strtoint(stringgrid1.Cells[c,r])+sum)
 else
 stringgrid2.Cells[c,r]:=inttostr(strtoint(stringgrid1.Cells[c,r]));
 end;
 
 procedure TForm1.Button3Click(Sender: TObject);
 begin
 close;
 end;
 
 
 end.
 |  
|   | min@y™ (статус: Доктор наук), 4 октября 2009, 14:04 [#6]:Жуть какая, даже читать не буду. Чо, мой код не помог?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | sv2311 (статус: Посетитель), 4 октября 2009, 14:10 [#7]:нет |  
|   | min@y™ (статус: Доктор наук), 4 октября 2009, 14:12 [#8]:Почему? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | sv2311 (статус: Посетитель), 4 октября 2009, 14:14 [#9]:просто твой код я не понял |  
|   | min@y™ (статус: Доктор наук), 4 октября 2009, 14:25 [#10]:Этот код решает поставленную задачу. Что тебе непонятно? Спрашивай.
 А компилить ты его пробовал?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | sv2311 (статус: Посетитель), 4 октября 2009, 14:35 [#11]:да работает она то верно спасибо но мне нужно не через консоль - ну сейчас буду переделывать - мне просто кроме то как нужно решить эту задачу тремя способами нужна будет еще делать не которые условия |  
|   | min@y™ (статус: Доктор наук), 4 октября 2009, 14:39 [#12]: Цитата (sv2311): но мне нужно не через консоль А какая разница? Я написал консольную программу только ради отладки функции ChangeMatrix(). Функция отлажена, теперь её можно вставить в любую программу и пользоваться.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |