IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача по матрицам
Eskel
сообщение 24.12.2008 23:54
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Заполняется с клавиатуры верхняя часть. Потом с помощью операторов присваивания, надо сделать матрицу симметричной... Помогите, плиз, написать саму часть где матрица делается симметричной...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 9)
volvo
сообщение 25.12.2008 0:01
Сообщение #2


Гость






Цитата
надо сделать матрицу симметричной...
Относительно чего? Какая верхняя часть заполняется?
 К началу страницы 
+ Ответить 
Eskel
сообщение 25.12.2008 0:05
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


"Заполнить с клавиатуры симметричную квадратную действительную матрицу N-го порядка (вводить только верхнюю треугольную матрицу, нижний треугольник заполнить программно, при помощи операторов присваивания)." - Задание выглядит так... Я тож думаю... Про какой треугольник они говорят...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.12.2008 0:12
Сообщение #4


Гость






По определению: http://ru.wikipedia.org/wiki/%D0%A2%D1%80%...%B8%D1%86%D0%B0 - вводить надо то, что над главной диагональю (включая ее). А потом:
  for i := 1 to n do
for j := i + 1 to n do
a[j, i] := a[i, j];



Сообщение отредактировано: volvo - 25.12.2008 0:29
 К началу страницы 
+ Ответить 
Eskel
сообщение 25.12.2008 0:25
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


а главная диагональ как заполнится?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.12.2008 0:28
Сообщение #6


Гость






А главную ты должен заполнять, потому что верхнетреугольная матрица включает ее.
 К началу страницы 
+ Ответить 
Eskel
сообщение 25.12.2008 0:59
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Спасибо. Вот еще, помогите ошибку из проги убрать. Препод сказал, что я неправильно открытый массив использовал:
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]3.gif1,' ') 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 для кортежа С
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.12.2008 1:18
Сообщение #8


Гость






Цитата(Eskel @ 24.12.2008 23:59) *
Препод сказал, что я неправильно открытый массив использовал:
Правильно сказал: открытые массивы всегда индексируются с 0, а не с 1-цы, так что либо меняй границы циклов (что предпочтительно), либо f[ i ] меняй на f[i - 1] там, где работаешь с открытым массивом.
 К началу страницы 
+ Ответить 
Eskel
сообщение 25.12.2008 1:26
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


я так понимаю i:=0 to k-1
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.12.2008 1:55
Сообщение #10


Гость






Я б на твоем месте вообще вот так сделал:
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;


begin
clrscr;
randomize;
write('vvedite x '); readln(x);
zap(a); writeln('massiv A'); vivod(a);
zap(b); writeln('massiv B'); vivod(b);
zap©; writeln('massiv C'); vivod©;

nax(a, k1); nax(b, k2); nax(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(x,a); vivod(a) end
else
if (k2<k1) and (k2<k3) then begin umnog(sqr(x),b); vivod(b) end
else
if (k3<k1) and (k3<k2) then begin umnog(x/10,c); vivod© end
else writeln('kol-va ravni');
readln
end.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"