Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 04.12.2012, 13:16   #1 (permalink)
turcia7
Member
 
Регистрация: 05.11.2012
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Программирование матричных операций

Помогите пожалуйста)
Разработать программу решения четырех взаимосвязанных задач частой работы:
1) расчета элементов квадратной матрицы A = (ai,j ), i,j = 1,2,...,n по заданной формуле;
2) вычисления элементов вектора X = (xi), i = 1,2,...,n по заданному правилу;
3) требуемого упорядочения элементов матрицы А или вектора Х;
4) вычисления значения y по заданной формуле.
Размерность задачи n назначается преподавателем.
ниже на скринах представленны задание и пример блок схему
есть образец программы

Program Lab5;
const n=5;
type matr=array[1..n, 1..n] of real;
vect=array[1..n] of real;
var
i, j : integer;
y:real;
a : matr;
x : vect;


Procedure _matrica(n:integer; A:matr);
var i, j : integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=Sin(i)/Cos(i)+Cos(j)/Sin(j);
write (A[i,j]:8:3);
end;
writeln;
end;
end;

Procedure Matrica(n:integer; var A:matr);
var i,j:integer;
Begin
for i:=1 to n do
for j:=1 to n do
a[i,j]:=Sin(i)/Cos(i)+Cos(j)/Sin(j);
End;

Procedure Vector(n:integer; A:matr; var x:vect);
var i,j,k:integer;
s:real;
Begin
Writeln;
Writeln;
writeln('********************************');
for j:=1 to n do
Begin
s:=A[1,1];
for i:=1 to n do
Begin
k:=j mod 2;
if (A[i,j]>s) and (k=0) then s:=A[i,j] else begin
if (A[i,j]<s) and (k<>0) then s:=A[i,j];
End;end;
x[j]:=s;
End;
End;

Procedure Porjdok(n:integer; var A:matr);
var i,j:integer;
c:real;
Begin
Writeln;
Writeln;
writeln('***************************');
for i:=1 to n do
for j:=i+1 to n do
Begin
if Abs(a[1,i])>Abs(a[1,j]) then
Begin
c:=a[1,i];
a[1,i]:=a[1,j];
a[1,j]:=c;
End;
End;
End;

Function Fyn(n:integer; X:vect):real;
Var i,k:integer;
s, y:real;
Begin
Writeln;
Writeln;
writeln('***************************************** *');
y:=0;
i:=2;
while i <= n do
Begin
s:=0;
y:=y + (x[i]*x[n+1-i]);
i:=i+2;
End;
k := 1;
for i:=1 to n do k:=k*i;
y:=y/k;
Fyn:=y;
End;


begin
matrica(n, a);
Writeln(' ':20,'MATPICA A');
for i:=1 to n do
Begin
for j:=1 to n do Write(a[i,j]:8:3);
writeln;
End;

Vector(n,a,x);
Writeln(' ':20,'BEKTOP X');
for i:=1 to n do write(x[i]:8:3);
writeln;
Porjdok(n,a);
Writeln(' ':5,'YPOR 1 CTROKI MATPICU A');
for i:=1 to n do
Begin
for j:=1 to n do Write(a[i,j]:8:3);
writeln;
End;
y:=Fyn(n,x);
Writeln('Rez y= ',y:10:3);

readln;
end.
Миниатюры
aacuiyiiue.png   1.png   2.png   3.png   4.png  

5.png  
turcia7 вне форума   Ответить с цитированием

Старый 04.12.2012, 13:16
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я думаю, что проблему решать легче есть набраться больше информации

Программирование матричных операций
VBA программирование
Web программирование
Паскаль АВС, сортировка в одномерном массиве без функций и операций

Старый 04.12.2012, 15:23   #2 (permalink)
turcia7
Member
 
Регистрация: 05.11.2012
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Помогите кто-нибудь пожалуйста
turcia7 вне форума   Ответить с цитированием
Старый 04.12.2012, 17:28   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Помочь, конечно, можно, но...
1. Правильно ли я понимаю, что выложенные листинги - это "пример", а само задание - на рисунке? Или наоборот?
2. Простите великодушно, но смысл пунктов 3 и 4 до меня не доходит напрочь. В чем состоит задание? Можно подробнее?
Vladimir_S вне форума   Ответить с цитированием
Старый 04.12.2012, 21:26   #4 (permalink)
turcia7
Member
 
Регистрация: 05.11.2012
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Задание которое написано это в общем. Само задание на скрине "Вариант 50"
Начал писать программу, но не знаю как среднеарифметическое значение положительных чисел i-ой строки написать
turcia7 вне форума   Ответить с цитированием
Старый 04.12.2012, 21:41   #5 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Среднее арифм. сумма всех элементов разделить на их кол-во.
Gruvi вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 04.12.2012, 21:56   #6 (permalink)
turcia7
Member
 
Регистрация: 05.11.2012
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

да это то без проблем...как это в программе изобразить
turcia7 вне форума   Ответить с цитированием
Старый 04.12.2012, 23:07   #7 (permalink)
turcia7
Member
 
Регистрация: 05.11.2012
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Надо вывести, для начала матрицу, элементы которой рассчитываются по 1 формуле.
далее надо вывести на экран вектор Х, элементы которого определяются по 2 заданию.
далее необходимо вывести на экран, тоже можно сказать, вектор, элементами которого будут элементы матрицы но упорядоченные по возрастанию.ну и в конце необходимо вычислить значение функции У
turcia7 вне форума   Ответить с цитированием
Старый 05.12.2012, 09:45   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от turcia7 Посмотреть сообщение
Надо вывести, для начала матрицу, элементы которой рассчитываются по 1 формуле.
далее надо вывести на экран вектор Х, элементы которого определяются по 2 заданию.
далее необходимо вывести на экран, тоже можно сказать, вектор, элементами которого будут элементы матрицы но упорядоченные по возрастанию.ну и в конце необходимо вычислить значение функции У
Ах ты ж, а я третью снизу строку (у = ...) приписываю к третьему пункту, смотрю, как баран, и ничего понять не могу. Ладно, разобрался, сделаю.

Всё, получИте и распишитесь:

Код:
Program Lab5;
const
 N=5;
type
 matr=array[1..N, 1..N] of real;
 vect=array[1..N] of real;
var
 Y:real;
 A:matr;
 X:vect;


Procedure Matrica;
var i,j:integer;

function sign(q:integer):integer;
begin
 if (q mod 2)=0 then sign:=1 else sign:=-1;
end;

begin
 for i:=1 to N do
  begin
   for j:=1 to N do
    begin
     A[i,j]:=sign(i+j)*(4.3-i)/Abs(0.2-i*j)/N;
     write(A[i,j]:8:3);
    end;
   writeln;
  end;
 writeln;
end;

Procedure Vector;
var
 i,j,k:integer;
 s:real;
begin
 for i:=1 to N do
  begin
   k:=0;
   s:=0;
   for j:=1 to N do
    if A[i,j]>0 then
     begin
      s:=s+A[i,j];
      Inc(k);
     end;
   if k>0 then X[i]:=s/k else X[i]:=0;
   Writeln('X[',i,']= ',X[i]:0:3);
  end;
 Writeln;
end;

Procedure Porjadok;
var
 i,j,k:integer;
 c:real;
begin
 for j:=1 to N do
  for i:=1 to N-1 do
   for k:=1 to N-i do
    if A[k,j]>A[k+1,j] then
     begin
      c:=A[k,j];
      A[k,j]:=A[k+1,j];
      A[k+1,j]:=c;
     end;
 for i:=1 to N do
  begin
   for j:=1 to N do
    Write(A[i,j]:8:3);
   Writeln;
  end;
 Writeln;
end;

Procedure Fun;
var
 Max,Min:Real;
 i:Integer;
begin
 Max:=X[1];
 Min:=X[1];
 For i:=2 to N do
  begin
   if X[i]>Max then Max:=X[i];
   if X[i]<Min then Min:=X[i];
  end;
 Y:=(Max-Min)/2;
 Write('Y= ',Y:0:3);
end;

Begin
 Matrica;
 Vector;
 Porjadok;
 Fun;
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 05.12.2012, 11:02   #9 (permalink)
turcia7
Member
 
Регистрация: 05.11.2012
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Не могли бы сделать так чтобы размерность N не задавалась автоматически, а мы ее задавали. И если б немного пояснили Владимир, то было бы просто отлично
turcia7 вне форума   Ответить с цитированием
Старый 05.12.2012, 11:35   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от turcia7 Посмотреть сообщение
Не могли бы сделать так чтобы размерность N не задавалась автоматически, а мы ее задавали.
Что, настолько по нулям, что с таким пустяком не справиться самостоятельно? Ладно:
Код:
Program Lab5;

const
 Nmax=10;

type
 matr=array[1..Nmax, 1..Nmax] of real;
 vect=array[1..Nmax] of real;
var
 N:Integer;
 Y:real;
 A:matr;
 X:vect;


Procedure Matrica;
var i,j:integer;

function sign(q:integer):integer;
begin
 if (q mod 2)=0 then sign:=1 else sign:=-1;
end;

begin
 for i:=1 to N do
  begin
   for j:=1 to N do
    begin
     A[i,j]:=sign(i+j)*(4.3-i)/Abs(0.2-i*j)/N;
     write(A[i,j]:8:3);
    end;
   writeln;
  end;
 writeln;
end;

Procedure Vector;
var
 i,j,k:integer;
 s:real;
begin
 for i:=1 to N do
  begin
   k:=0;
   s:=0;
   for j:=1 to N do
    if A[i,j]>0 then
     begin
      s:=s+A[i,j];
      Inc(k);
     end;
   if k>0 then X[i]:=s/k else X[i]:=0;
   Writeln('X[',i,']= ',X[i]:0:3);
  end;
 Writeln;
end;

Procedure Porjadok;
var
 i,j,k:integer;
 c:real;
begin
 for j:=1 to N do
  for i:=1 to N-1 do
   for k:=1 to N-i do
    if A[k,j]>A[k+1,j] then
     begin
      c:=A[k,j];
      A[k,j]:=A[k+1,j];
      A[k+1,j]:=c;
     end;
 for i:=1 to N do
  begin
   for j:=1 to N do
    Write(A[i,j]:8:3);
   Writeln;
  end;
 Writeln;
end;

Procedure Fun;
var
 Max,Min:Real;
 i:Integer;
begin
 Max:=X[1];
 Min:=X[1];
 For i:=2 to N do
  begin
   if X[i]>Max then Max:=X[i];
   if X[i]<Min then Min:=X[i];
  end;
 Y:=(Max-Min)/2;
 Write('Y= ',Y:0:3);
end;

Begin
 Write('N= ');
 Readln(N);
 Matrica;
 Vector;
 Porjadok;
 Fun;
 Readln
End.
Цитата:
Сообщение от turcia7 Посмотреть сообщение
И если б немного пояснили Владимир, то было бы просто отлично
Боюсь, что в свете предыдущего пункта это будет бессмысленно. Впрочем, готов ответить на конкретные вопросы.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:51.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.