Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 12:49   #1
nexzis
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 48
По умолчанию треугольный вид матрицы

мм нужно привести матрицу к треугольному виду. У меня в результате выводит 1 число и то я не уверен что оно верное... подскажите что сделал не так
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1; f:textfile;  a:array[1..5,1..5] of real;
   s:string;  q :real ;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var i,j:integer;
begin
assignfile( f,'äîê.txt');
reset(f);
for i:=1 to 5 do begin
for j:=1 to 5 do begin
read(f,a[i,j]);
s:=s+floattostr(a[i,j])+#9;
end;
s:=s+#13;

end;
 label1.Caption:=s;
 end;
procedure TForm1.Button2Click(Sender: TObject);
var v:integer ;  i,j:integer;
begin
   for v:=1 to 5-1 do
   begin
   for i:=v+1 to 5 do
   q:= a[i,v]/a[v,v] ;
   for j:=1 to 5 do  begin
   a[i,j]:= a[i,j]-q*a[v,j];
   s:= format('%5.1F',[(a[i,j])])+#9;

end;
s:=s+#13;
end;
   label2.caption:=s ;

end;

end.
nexzis вне форума Ответить с цитированием
Старый 10.12.2010, 13:57   #2
cybermetal
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

А обрезка ненужного после диагонали, главной или побочной, не пойдет?
Получится очень даже треугольник..Если матрица квадратная...
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
      n:=10;
      form1.Memo1.Text:='';
      setLength(Mas,n,n);
      for i:=0 to n-1 do
      for j:=0 to n-1 do
      begin Mas[i,j]:=Random(9)+1;
      end;
      for i:=0 to n-1 do
      begin form1.Memo1.Text:=form1.Memo1.Text+#10+#13;
      for j:=0 to n-i-1 do
      begin form1.Memo1.Text:=form1.Memo1.Text+inttostr(Mas[i,j])+' '+#10+#13;
      end;
      end;

end;
Код:
1 1 8 2 3 7 3 2 4 4 
1 5 1 8 1 3 9 4 7 
7 8 7 3 2 3 5 3 
5 2 8 3 7 9 5 
2 2 5 1 6 1 
6 2 7 6 9 
1 7 5 8 
7 9 7 
7 3 
2
cybermetal вне форума Ответить с цитированием
Старый 10.12.2010, 14:15   #3
nexzis
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 48
По умолчанию

нет к сожалению не пойдёт нужно чтоб нули были, да и обнулять ещё надо верхний правый треугольник...мне б разобраться как обычная диагональ делается
nexzis вне форума Ответить с цитированием
Старый 10.12.2010, 14:39   #4
cybermetal
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

это вообще без проблем ))
главная диагональ это
Код:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
условие для нее не менее простое
Код:
if i=j then <...>
Если заполняеш нулями, то треугольник образуется числовыми значениями матрицы, а не визуальным выводом (яснее излагай условие задачи).
Плюс ты не говорил, что нужно обнулить правый верхний треугольник.
cybermetal вне форума Ответить с цитированием
Старый 10.12.2010, 14:51   #5
nexzis
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 48
По умолчанию

не говорил но мне бы понять как обычный делается а потом над правым горбатиться.

полное условие задачи такое вывести матрицу из файла привести к треугольному виду и вывести на метку
я не могу понять почему выводит 1 число вместо матрицы
Код:
for k:=1 to n-1 do
 begin
  for j:=k+1 to n do  //ïðÿìîé õîä Ãàóññà
   begin
    r:=a[j,k]/a[k,k];
    for i:=k+1 to n-1 do
    a[j,i]:=a[j,i]-r*a[k,i];
    a[j,n]:=a[j,n]-r*a[k,n];
   end;
 end;
//âûâîä ðåçóëüòàòà
for i:=1 to n do
for j:=1 to n do
label2.Caption:=FloatToStrF(a[i,j],ffFixed,6,2);
end;

Последний раз редактировалось Stilet; 10.12.2010 в 17:16.
nexzis вне форума Ответить с цитированием
Старый 10.12.2010, 15:13   #6
cybermetal
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

Код:
for i:=0 to n-1 do
      for j:=0 to n-1 do
      begin if i=j then       //если элемент принадлежит главной диагонали
        begin for j:=i+1 to n-1 do        //то все, что после этого числа
              Mas[i,j]:=0;               //превращается в ноль
        end;
      end;
НО
ввиду того, что номер строки по счастливому стечению обстоятельств равен номеру столбцов этой строки
при обнулении всех элементов правее числа с индексом i=j, то небольшое изменение вложенного for даст тот же результат
Код:
for i:=0 to n-1 do
      for j:=i+1 to n-1 do 
       begin         
            Mas[i,j]:=0;               
       end;
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  i,j,n: integer;
  Mas: array of array of integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
      n:=10;   //размерность массива
      form1.Memo1.Text:=''; //чистим memo
      setLength(Mas,n,n);   //задаем размерность массива

      for i:=0 to n-1 do      //в динамическом массиве индекс с нулевого
      for j:=0 to n-1 do
      begin Mas[i,j]:=Random(9)+1;   //заполняем случайкой от 1 до 9
      end;

      for i:=0 to n-1 do
      for j:=i+1 to n-1 do 
       begin         
            Mas[i,j]:=0;               
       end;

      for i:=0 to n-1 do    //вывод по строкам и столбцам
      begin form1.Memo1.Text:=form1.Memo1.Text+#10+#13;
      for j:=0 to n-1 do
      begin form1.Memo1.Text:=form1.Memo1.Text+inttostr(Mas[i,j])+' '+#10+#13;
      end;
      end;

end;


end.
данные из файла сам возьмеш.
На форме 2 элемента - TMemo И TButton
Код:
1 0 0 0 0 0 0 0 0 0 
1 5 0 0 0 0 0 0 0 0 
7 8 7 0 0 0 0 0 0 0 
5 2 8 3 0 0 0 0 0 0 
2 2 5 1 6 0 0 0 0 0 
6 2 7 6 9 6 0 0 0 0 
1 7 5 8 5 6 9 0 0 0 
7 9 7 7 2 2 9 8 0 0 
7 3 1 6 3 8 2 3 5 0 
2 2 3 2 6 5 3 2 6 7

Последний раз редактировалось Stilet; 10.12.2010 в 17:17.
cybermetal вне форума Ответить с цитированием
Старый 10.12.2010, 15:16   #7
nexzis
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 48
По умолчанию

тогда вопрос как из файла взять динамический массив?
nexzis вне форума Ответить с цитированием
Старый 10.12.2010, 15:20   #8
cybermetal
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

а собственно, я динамический взял только для того, чтобы количество элементов в последующем легче было менять. Просто удали динамический массив, создай простой индексный...
var
Mas: array [0..9,0..9] of integer;
строку setLength(Mas,n,n); удали к чертям
cybermetal вне форума Ответить с цитированием
Старый 10.12.2010, 15:20   #9
nexzis
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 48
По умолчанию

спасибо попробую если что напишу

нет что то не получается в 8 посте нет сортировки, он просто переписывает значения.. можешь изменить то что у меня не так?
собственно говоря там сейчас ничего нет и Я прошу написать тебя часть отвечающую за обнуление

кто нибудь может помочь с такой программой?нужно привести матрицу взятую из файла к такому виду
Код:
1 х х х
0 1 х х
0 0 1 х
размерность не важна.Из файла вывожу, но когда так обмениваю либо одно число вылезает либо ошибка в чём проблема не знаю..кто может написать часть отвечающую за такую сортировку для [B]статического [B] массива буду очень благодарен а ещё лучше если б была готовая программа но это если вам не сложно
Вложения
Тип файла: rar Новая папка.rar (165.3 Кб, 13 просмотров)

Последний раз редактировалось Stilet; 10.12.2010 в 17:18.
nexzis вне форума Ответить с цитированием
Старый 10.12.2010, 16:26   #10
cybermetal
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

Цитата:
нужно привести матрицу к треугольному виду
обнулять ещё надо верхний правый треугольник...
вывести матрицу из файла привести к треугольному виду и вывести на метку
в 8 посте нет сортировки, он просто переписывает значения
Парень, меня щас инфаркт хватит))
Во первых, какая тебе нужна сортировка? ты про нее ничего не говорил!
Во вторых, что значит "просто переписывает значения"???
По твоему "обнулять" это не "просто переписывать значения"?
В третьих, обнуляющую часть я тебе уже написал.
В четвертых, в твоей программе не добавлен Memo на форму
Ну и в пятых, я совсем не понимаю, как криво ты заполняеш массив из файла...
cybermetal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вид папок EpicBobrik Операционные системы общие вопросы 2 24.07.2010 00:51
Вид ХР в программу apromix Общие вопросы C/C++ 2 01.07.2010 00:27
Современный вид KoBRaAndrey Общие вопросы Delphi 3 01.10.2009 21:34
ВИд benjaminfran Софт 2 22.02.2008 08:55