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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 00:47   #1
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию формирование масива с матрицы

Добрый Вечер.
Задание поставлено так: есть некая квадратная матрица of real; разрядность которой вводиться с клавы. Нужно сформировать с элементов матрицы вектор Х элементы которого будут результатом умножения элементов i-той строки матрицы ( которая, кстати, определяется по условию: количество отрицательных элементов строки равно количеству положительных элементов строки, но это пока не важно ) на элементы побочной диагонали этой же матрицы.
Всё было бы просто, если бы разрядность матрицы была фиксированная, можно было бы обратится поэлементно и всё перемножить.
Подскажите как можно реализовать умножение элементов строки на элементы побочной диагонали, а результат оформить у вектор с которым в дальнейшем нужно будет еще работать.
MD1 вне форума Ответить с цитированием
Старый 11.11.2011, 15:37   #2
Vadik(R)
Пользователь
 
Регистрация: 10.03.2008
Сообщений: 68
По умолчанию

А в чём сейчас проблема обратиться поэлементно?
Циклом же
Vadik(R) вне форума Ответить с цитированием
Старый 11.11.2011, 22:40   #3
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

Цыклом выделить нужную строчку do a[i,j]* (а как здесь выделить побочную диагональ?)

это я раньше над этим думал, пока не нашол вот это:

k:=1;
for i:=1 to 1 do for j:=1 to n do begin b[k]:=a[i,j]; k:=k+1; end;
{выделяю нужную строчку; поэлементно заполняю масив }

Только что-то не выходит с побочной диагональю таким вот цыклом:
k:=1;
for i:=1 to n do for j:=n to 1 do b2[k]:=a[i,j]; k:=k+1; end; наверное в чом-то элементарная ошибка.
MD1 вне форума Ответить с цитированием
Старый 12.11.2011, 00:54   #4
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Неуверен, но попробуй:
Код:
k:=1;
 for i:=1 to n 
  do for j:=n to 1 do
   begin
    b2[k]:=a[i,j]; 
    k:=k+1; 
   end;
или так:
Код:
k:=0;
 for i:=1 to n 
  do for j:=n to 1 do
   begin
    k:=k+1;
    b2[k]:=a[i,j];
   end;
kuy вне форума Ответить с цитированием
Старый 12.11.2011, 01:32   #5
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

for j:=n to 1 do От n до 1 если, то бред выходит ( если это двумерный масив )

Вот k:=1;
for i:=1 to 1 do for j:=1 to n do begin b[k]:=a[i,j]; k:=k+1; end;
writeln; for i:=1 to n{k-1} do write (b[i]:4); writeln; writeln; нашол строку.

Вот for i:=1 to n do b2[i]:=a[i,n-i+1];
for i:=1 to n do write (b2[i]:4); writeln; writeln; побочную диагональ.

Вот for i:=1 to n do b3[i]:=b2[i]*b[i];
for i:=1 to n do write (b3[i]:4); writeln; перемножил строку на побочную диагональ и получил вектор.

Сейчас нужно определить с этой побочной диагонали максимальный елемент и разумееться его значение. Нашол в инете код:
max:=B[0,Range];
for i:=0 to Range do
begin
j:=Range-i;
if B[i,j]>max then max:=B[i,j]
end;
вроде отдельно прога норм идет, но если этот кусочек вставить в мой код то в результате ноль.
MD1 вне форума Ответить с цитированием
Старый 12.11.2011, 01:51   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Если моя память не спит с другим, в паскале цикл со счетчиком-декрементом пишется так:
Код:
for i := n downto 1 do
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 12.11.2011, 02:03   #7
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

Naive,
надо вспоминать)
а то я тут сотнями клепаю for i:=1 to n do, трудно что-то кроме этого во внимание взять))))
да и на определение максимального елемента код нашолся:

Min := A[1, N];
for i := 2 to N do if A[ i, N+1 - i] < Min then Min := A[ i, N+1 - i];
WriteLn(Min);

Вобщем пока галактеко безопасносте. ( на время сна )
MD1 вне форума Ответить с цитированием
Старый 12.11.2011, 13:26   #8
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

Странно почему не получается:

if s>max then

k:=1;
for i:=1 to 1 do for j:=1 to n do begin b[k]:=a[i,j]; k:=k+1; end;
writeln; for i:=1 to n{k-1} do write (b[i]:4); writeln;
for i:=1 to n do b2[i]:=a[i,n-i+1];
for i:=1 to n do write (b2[i]:4); writeln;
for i:=1 to n do b3[i]:=b2[i]*b[i];
for i:=1 to n do write (b3[i]:4);writeln;

else

for i:=1 to n do t[i]:=a[i,n-i+1];
for i:=1 to n do for j:=1 to n do t1[i]:=a[i,i];
for i:=1 to n do t2[i]:=t[i]+t1[i]; writeln;
for i:=1 to n do write (t2[i]);


end.

Паскаль ругаеться на else.
MD1 вне форума Ответить с цитированием
Старый 12.11.2011, 13:46   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Форматируй код по логическим блокам и тогда все будет понятно, что где и почему паскаль ругается:
Код:
if s>max then
    k:=1; {действие условия заканчивается здесь}
for i:=1 to 1 do for j:=1 to n do begin b[k]:=a[i,j]; k:=k+1; end;
writeln; for i:=1 to n{k-1} do write (b[i]:4); writeln;
for i:=1 to n do b2[i]:=a[i,n-i+1];
for i:=1 to n do write (b2[i]:4); writeln;
for i:=1 to n do b3[i]:=b2[i]*b[i];
for i:=1 to n do write (b3[i]:4);writeln;
{ и элс ни к чему не относится }
else
    for i:=1 to n do t[i]:=a[i,n-i+1];
for i:=1 to n do for j:=1 to n do t1[i]:=a[i,i];
for i:=1 to n do t2[i]:=t[i]+t1[i]; writeln;
for i:=1 to n do write (t2[i]);
end.
Коды действий условий нужно заключать в блоки, для паскаля — это пара begin + end;
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 12.11.2011, 13:50   #10
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

if s>max then begin

k:=1;
for i:=1 to 1 do for j:=1 to n do begin b[k]:=a[i,j]; k:=k+1; end;
writeln; for i:=1 to n{k-1} do write (b[i]:4); writeln;
for i:=1 to n do b2[i]:=a[i,n-i+1];
for i:=1 to n do write (b2[i]:4); writeln;
for i:=1 to n do b3[i]:=b2[i]*b[i];
for i:=1 to n do write ('huynyaAAA',b3[i]:4); end;

else begin

for i:=1 to n do t[i]:=a[i,n-i+1];
for i:=1 to n do for j:=1 to n do t1[i]:=a[i,i];
for i:=1 to n do t2[i]:=t[i]+t1[i]; writeln;
for i:=1 to n do write ('huynyaBBB',t2[i]); end;




end.


Это я тоже пробывал, но ошибка таже: in statement.

Зато такая форма:

if s>max then begin

k:=1;
for i:=1 to 1 do for j:=1 to n do begin b[k]:=a[i,j]; k:=k+1; end;
writeln; for i:=1 to n{k-1} do write (b[i]:4); writeln;
for i:=1 to n do b2[i]:=a[i,n-i+1];
for i:=1 to n do write (b2[i]:4); writeln;
for i:=1 to n do b3[i]:=b2[i]*b[i];
for i:=1 to n do write ('huynyaAAA',b3[i]:4); end;

if s<max then begin

for i:=1 to n do t[i]:=a[i,n-i+1];
for i:=1 to n do for j:=1 to n do t1[i]:=a[i,i];
for i:=1 to n do t2[i]:=t[i]+t1[i]; writeln;
for i:=1 to n do write ('huynyaBBB',t2[i]); end;




end.

удачно компилируется.

Последний раз редактировалось MD1; 12.11.2011 в 13:59.
MD1 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формирование матрицы соединений! chege Microsoft Office Excel 2 15.10.2011 11:05
Формирование вектора из матрицы LittleStudent Помощь студентам 3 07.05.2011 17:47
формирование матрицы из файла Олег093 Помощь студентам 1 24.04.2011 19:56
Формирование матрицы рассечением Mikhail Bakurov Помощь студентам 4 31.01.2010 13:39
Формирование матрицы по спирали RomT24 Помощь студентам 5 18.01.2010 02:38