|
Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|