Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

sv2311 (статус: Посетитель), 4 октября 2009, 13:35 [#2]:

мне нужно решить это условие 3 способами в делфи
min@y™

min@y™ (статус: Доктор наук), 4 октября 2009, 13:40 [#3]:

Цитата (sv2311):

мне нужно решить это условие 3 способами в делфи


А почему не 33-мя способами?
Кто придумал такие условия?
Я свой способ предложил, пусть другие эксперты напишут свои способы. С миру по нитке, как говориццо...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
sv2311

sv2311 (статус: Посетитель), 4 октября 2009, 13:41 [#4]:

и на этом спасибо
sv2311

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™

min@y™ (статус: Доктор наук), 4 октября 2009, 14:04 [#6]:

Жуть какая, даже читать не буду.
Чо, мой код не помог?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
sv2311

sv2311 (статус: Посетитель), 4 октября 2009, 14:10 [#7]:

нет
min@y™

min@y™ (статус: Доктор наук), 4 октября 2009, 14:12 [#8]:

Почему?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
sv2311

sv2311 (статус: Посетитель), 4 октября 2009, 14:14 [#9]:

просто твой код я не понял
min@y™

min@y™ (статус: Доктор наук), 4 октября 2009, 14:25 [#10]:

Этот код решает поставленную задачу.
Что тебе непонятно? Спрашивай.
А компилить ты его пробовал?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
sv2311

sv2311 (статус: Посетитель), 4 октября 2009, 14:35 [#11]:

да работает она то верно спасибо но мне нужно не через консоль - ну сейчас буду переделывать - мне просто кроме то как нужно решить эту задачу тремя способами нужна будет еще делать не которые условия
min@y™

min@y™ (статус: Доктор наук), 4 октября 2009, 14:39 [#12]:

Цитата (sv2311):

но мне нужно не через консоль

А какая разница? Я написал консольную программу только ради отладки функции ChangeMatrix(). Функция отлажена, теперь её можно вставить в любую программу и пользоваться.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 4 октября 2009, 17:46 [#13]:

sv2311:
min@y™ сделает то, что надо (не то что в консоли - даже под линукс и мак) :)
но! за пиво. :)
это же было указано явно :D

к тому же, не мешает поблагодарить эксперта хотя бы пятёркой за ответ
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.05 сек.