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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2007, 18:07   #11
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Хех =), в таком случае прога работает, но не правильно считает.
Например ввёл

1 2 0 1 и 0 1 3 2 (соответственно вводил в как по строкам и столбцам, а не по одной строке). Должен быть ответ 6 5 3 2, но получается 4 2 0 1.

Вот такие пироги )

Последний раз редактировалось POPOV; 28.10.2007 в 13:24.
POPOV вне форума Ответить с цитированием
Старый 28.10.2007, 12:20   #12
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Ну шо, вариантов нет значит ?
POPOV вне форума Ответить с цитированием
Старый 28.10.2007, 12:43   #13
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Не читал ветку =)
Считать должна правильна. Через полчасика гляну....
Maslan вне форума Ответить с цитированием
Старый 28.10.2007, 14:04   #14
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Хм.... у меня как раз
6 5 3 2 и выдаёт....

может где-то не то что-то поставил?
Проверяй:
Код:
s:=Edit2.Text;
A_r:=StrToInt(Copy(S,1,Pos(',',s)-1));
A_c:=StrToInt(Copy(S,Pos(',',s)+1,Length(s)));
B_r:=A_c;
s:=Edit6.Text;
B_c:=StrToInt(Copy(S,Pos(',',s)+1,Length(s)));
for i := 1 to A_r do
  begin
   s:=Memo1.Lines.Strings[i-1];
   if s[Length(s)]<>' ' then s:=s+' ';
  for j := 1 to A_c do
    begin
      s1:=Copy(s,1,Pos(' ',s)-1);
      a[i,j]:=StrToInt(s1);
      delete(s,1,Length(s1)+1);
    end;
  end;
for i := 1 to B_r do
  begin
   s:=Memo4.Lines.Strings[i-1];
   if s[Length(s)]<>' ' then s:=s+' ';
  for j := 1 to B_c do
    begin
      s1:=Copy(s,1,Pos(' ',s)-1);
      b[i,j]:=StrToInt(s1);
      delete(s,1,Length(s1)+1);
    end;
  end;S:='';
for i := 1 to A_r do
 begin
  for j := 1 to B_c do
   begin
     rez:=0;
     for k := 1 to B_r do
      rez:=rez+a[i][k]*b[k][j];
    s:=s+IntToStr(rez)+' ';
   end;
 end;
 Memo3.Text:= Memo3.Text+s;
Maslan вне форума Ответить с цитированием
Старый 28.10.2007, 15:15   #15
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

А можно по этой части ещё вопросик задать ?
Считает теперь правильно, осталось сделать чтоб результат тоже выводился в виде матрицы, а не строки...
POPOV вне форума Ответить с цитированием
Старый 28.10.2007, 15:50   #16
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
Подмигивание

Ну а самому подумать? Ну хоть чуток? Эх, студиоузы..... =)
Код:
Memo1.Clear;
for i := 1 to A_r do
 begin
  for j := 1 to B_c do
   begin
     rez:=0;
     for k := 1 to B_r do
      rez:=rez+a[i][k]*b[k][j];
    s:=s+IntToStr(rez)+' ';
   end;
  Memo3.Lines.Add(s); 
  s:='';
 end;
А вот ЧТО и ГДЕ этим заменить - думай сам
Maslan вне форума Ответить с цитированием
Старый 28.10.2007, 16:21   #17
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Сделал, спасибо друг ))
Я бы подумал, если бы что-то понимал в работе со строками и массивами.
Я поступил на специальность где преподают и железо и программирование на многих языках. Теоретически я должен стать специалистом знающим компьютер как программно, так и с точки зрения железа. Но так как преподаватель Delphi и многих других языков выдался плохой (умеет тока читать нотации и давать задания без объяснений), я пожалел что не поступил на Электронщика. Ещё я заметил что от молодых специалистов можно получить гораздо больших знаний чем от такого, какой у нас). А так вообще лабораторные работы не касающиеся матриц я стараюсь выполнять без помощи форумчан =)
Вот мне осталось из этой лабораторки решить ту же задачу ещё двумя способами (с TString Grid и метод загрузки матрицы из текстового файла) . Мне уже не удобно грузить тебя дальше, поэтому пойду наверное на другой форум )


Господа админы, прошу прощения за этот пост не по теме )

Последний раз редактировалось POPOV; 28.10.2007 в 16:23.
POPOV вне форума Ответить с цитированием
Старый 28.10.2007, 16:36   #18
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

"поэтому пойду наверное на другой форум " - да лан те, оставайся. У нас тут хорошо =)

"щё двумя способами (с TString Grid " - так ведь он работает уже у тебя??

"метод загрузки матрицы из текстового файла)" - типизированные файлы форум пожёвывал тут: http://www.programmersforum.ru/showthread.php?t=8201 почитай, попробуй - что не получится - пиши =)
Maslan вне форума Ответить с цитированием
Старый 28.10.2007, 16:58   #19
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

В TStringGrid матрицы перемножаются просто элемент на элемент и выводится результат, а мне нужно чтобы матрицы перемножались по правилам (как ты сделал мне для TMemo). Сейчас я этим занимаюсь, и всё что я сумел сделать (благодаря твоей проге) это создать 2 матрицы с размерами из эдитов, причём не только квадратных. А, забыл, ещё осуществил вывод матрицы в третий TStringGrid. А вот как делать само перемножение по правилам, где какие циклы ставить понятия не имею ).

Вот то что сейчас написано :

procedure TForm1.Button7Click(Sender: TObject); // Содать матрицу 1
var s:string;
begin
s:=edit1.text;
A_r:=StrToInt(Copy(S,1,Pos(',',s)-1));
A_c:=StrToInt(Copy(S,Pos(',',s)+1,L ength(s)));
B_r:=A_c;
StringGrid1.ColCount:=A_c;
StringGrid1.RowCount:=A_r;
StringGrid1.height:=A_r*StringGrid1 .DefaultRowHeight+10;
StringGrid1.Width:=A_c*StringGrid1. DefaultColWidth+10;
end;

procedure TForm1.Button1Click(Sender: TObject); // Создать матрицу 2
var s:string;
A_r,A_c:integer;
begin
s:=edit5.text;
A_r:=StrToInt(Copy(S,1,Pos(',',s)-1));
A_c:=StrToInt(Copy(S,Pos(',',s)+1,L ength(s)));
StringGrid2.ColCount:=A_c;
StringGrid2.RowCount:=A_r;
StringGrid2.height:=A_r*StringGrid1 .DefaultRowHeight+10;
StringGrid2.Width:=A_c*StringGrid1. DefaultColWidth+10;
end;

procedure TForm1.Button8Click(Sender: TObject); // Само вычисление )
var
i,j,ad,s,k,i1,j1:integer;
begin
for i:=0 to A_r-1 do
for j:=0 to A_c-1 do
begin
ad:=0;
ad:=ad+strtoint(StringGrid1.Cells[i,j]) * strtoint(StringGrid2.Cells[i1,j1]);
StringGrid3.ColCount:=ad;
StringGrid3.RowCount:=ad;
StringGrid3.height:=ad*StringGrid3. DefaultRowHeight+10;
StringGrid3.Width:=ad*StringGrid3.D efaultColWidth+10;
StringGrid3.Cells[i,j]:=Inttostr(ad);
end;
end;


Скрин с расположением объектов где в начале темы выкладывал

Последний раз редактировалось POPOV; 28.10.2007 в 17:03.
POPOV вне форума Ответить с цитированием
Старый 28.10.2007, 17:52   #20
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

"А вот как делать само перемножение по правилам, где какие циклы ставить понятия не имею )." А как вообще матрицы умножаются знаешь?
Maslan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача,опять же с матрицей groth88 Паскаль, Turbo Pascal, PascalABC.NET 3 16.04.2008 13:22
Задача с матрицей. Ломаю голову уже неделю Damokl Помощь студентам 6 19.12.2007 03:20
Задача с матрицей H[o][o]K Помощь студентам 1 15.12.2007 16:51
Задача с матрицей(нужна помощь) VDK23RUS Помощь студентам 5 14.06.2007 12:55
Задача с матрицей, Паскаль Integra Помощь студентам 1 25.04.2007 16:14