Заполняется с клавиатуры верхняя часть. Потом с помощью операторов присваивания, надо сделать матрицу симметричной... Помогите, плиз, написать саму часть где матрица делается симметричной...
volvo
25.12.2008 4:01
Цитата
надо сделать матрицу симметричной...
Относительно чего? Какая верхняя часть заполняется?
Eskel
25.12.2008 4:05
"Заполнить с клавиатуры симметричную квадратную действительную матрицу N-го порядка (вводить только верхнюю треугольную матрицу, нижний треугольник заполнить программно, при помощи операторов присваивания)." - Задание выглядит так... Я тож думаю... Про какой треугольник они говорят...
for i := 1 to n do for j := i + 1 to n do a[j, i] := a[i, j];
Eskel
25.12.2008 4:25
а главная диагональ как заполнится?
volvo
25.12.2008 4:28
А главную ты должен заполнять, потому что верхнетреугольная матрица включает ее.
Eskel
25.12.2008 4:59
Спасибо. Вот еще, помогите ошибку из проги убрать. Препод сказал, что я неправильно открытый массив использовал:
Program art2; uses crt; Const m=15; Var a,b:array[1..m] of real; c:array[1..m+5] of real; x:real; k1,k2,k3:integer; procedure zap(k:integer; var f:array of real); Var i:integer; begin for i:=1 to k do f[i]:=200*random-100 end; procedure vivod(k:integer; var f:array of real); Var i:integer; begin for i:=1 to k do write(f[i]1,' ') end; procedure nax(k:integer; f:array of real; var r:integer); Var i:integer; Begin r:=0; for i:=1 to k do if f[i]<0 then r:=r+1 end; procedure umnog(k:integer; r:real; var f:array of real); var i:integer; Begin for i:=1 to k do f[i]:=f[i]*r end; Begin clrscr; Randomize; write('vvedite x '); readln(x); zap(m,a); writeln('massiv A'); vivod(m,a); writeln; zap(m,b); writeln('massiv B'); vivod(m,b); writeln; zap(m+5,c); writeln('massiv C'); vivod(m+5,c); writeln; nax(m,a,k1); nax(m,b,k2); nax(m+5,c,k3); writeln('kol-vo otriz v masA= ',k1); writeln('kol-vo otriz v masB= ',k2); writeln('kol-vo otriz v masC= ',k3); if (k1<k2) and (k1<k3) then begin umnog(m,x,a); vivod(m,a) end else if (k2<k1) and (k2<k3) then begin umnog(m,sqr(x),b); vivod(m,b) end else if (k3<k1) and (k3<k2) then begin umnog(m+5,x/10,c); vivod(m+5,c) end else writeln('kol-va ravni'); readln End.
Задание: Дано целое число М, вещественное число Х, вещественные кортежи А,В[1..М], C[1..M+5]. Кортеж, имеющий наименьшее кол-во отриц элементов(в предположении, что такой кортеж один), домножить на R, где R=X для кортежа А, R=sqr(x) для кортежа В и R=X/10 для кортежа С
volvo
25.12.2008 5:18
Цитата(Eskel @ 24.12.2008 23:59)
Препод сказал, что я неправильно открытый массив использовал:
Правильно сказал: открытые массивы всегда индексируются с 0, а не с 1-цы, так что либо меняй границы циклов (что предпочтительно), либо f[ i ] меняй на f[i - 1] там, где работаешь с открытым массивом.
Eskel
25.12.2008 5:26
я так понимаю i:=0 to k-1
volvo
25.12.2008 5:55
Я б на твоем месте вообще вот так сделал:
Program art2; uses crt;
procedure zap(var f: array of real); var i:integer; begin for i := low(f) to high(f) do f[i] := 200 * random - 100 end;
procedure vivod(const f: array of real); var i: integer; begin for i := low(f) to high(f) do write(f[i] :3 :1, '':1); writeln; end;
procedure nax(const f: array of real; var r:integer); var i: integer; begin r := 0; for i := low(f) to high(f) do if f[i] < 0 then inc® end;
procedure umnog(r: real; var f:array of real); var i: integer; begin for i := low(f) to high(f) do f[i] := f[i] * r end;
const m=15; var a, b: array[1..m] of real; c: array[1..m+5] of real; x: real; k1,k2,k3: integer;