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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.06.2012, 16:25   #1
AnnieBond
 
Регистрация: 09.06.2012
Сообщений: 9
Сообщение Pascal ABC: Программирование матричных операций

1) Рассчитать элементы квадратной матрицы A = (aij ), i,j = 1,2,...,n по заданной формуле;
2) Вычислить элементы вектора-столбца X = (xi), i = 1,2,...,n по заданному правилу;
3) Вычислить произведение матрицы А на столбец Х;
5) вычисления значения Y по заданной формуле.
Размерность задачи: n=5.
Изображения
Тип файла: jpg Безымянный5.jpg (22.1 Кб, 173 просмотров)

Последний раз редактировалось AnnieBond; 09.06.2012 в 17:15.
AnnieBond вне форума
Старый 09.06.2012, 18:45   #2
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

В первом примере индексы правильные или нет? Там Aij или Aji?
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума
Старый 10.06.2012, 05:23   #3
AnnieBond
 
Регистрация: 09.06.2012
Сообщений: 9
По умолчанию

Все 100% правильно.Я сделала только первый пункт, дальше не знаю
Код:
Program Lab05;
Const
     n=5;
Var
   i,j:Integer;
   A:Array [1..n,1..n] of Real;
  Begin
//Вычисление элементов матрицы
   For i:=1 to n do
      For j:=1 to n do
         Begin
             A[j,i]:=(n*j)/((n-j+1)*(n+i));
         End;
//Выводим матрицу
For i:=1 to n do
   Begin
        For j:=1 to n do
            Write(A[j,i]:12:5);
           Writeln;
   End;
   End.

Последний раз редактировалось AnnieBond; 10.06.2012 в 06:42.
AnnieBond вне форума
Старый 10.06.2012, 09:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
//Второе
   For i:=1 to n do
      For j:=1 to n do begin s:=0;
        For k:=1 to i do s:=s+a[i,k];
        x[i]:=x[i]+a[i,j]-s;
      end;
I'm learning to live...
Stilet вне форума
Старый 10.06.2012, 12:03   #5
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Код:
//Выводим матрицу
For i:=1 to n do
Begin
   For j:=1 to n do
      Write(A[j,i]:12:5);
   Writeln;
End;
Неправильно выводишь элементы матрицы!!! Ты выводишь элементы столбца в строку. Надо write(A[i,j]:4:2,' ')! Да и заполняешь тоже не так, как нужно. Следи за индексами.
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума
Старый 10.06.2012, 14:52   #6
AnnieBond
 
Регистрация: 09.06.2012
Сообщений: 9
По умолчанию

ByAlex, я же говорю, здесь строки и столбцы так и должны быть названы, все правильно. Размерность сказал преподаватель.
AnnieBond вне форума
Старый 10.06.2012, 15:04   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
program Lab05;

const
  n = 5;

var
  i, j: Integer;
  A: Array [1..n, 1..n] of Real;

begin
  //Вычисление элементов матрицы
  for j := 1 to n do
    for i := 1 to n do
    begin
      A[j, i] := (n * j) / ((n - j + 1) * (n + i));
    end;
  //Выводим матрицу
  for j := 1 to n do
  begin
    for i := 1 to n do
      Write(A[j, i]:12:5);
    Writeln;
  end;
end.
При заполнении, циклы должны располагаться так, чтобы программа работала быстрее.
При выводе нужно циклы тоже поменять местами, иначе матрица выводится транспонированной.

Если не верите, что вывод неправильный, то возьмите любой элемент, лежащий не на главной диагонали, например, A23.
Элемент находится во 2 строке, в 3 столбце.
Рассчитываем по формуле значение в этой ячейке: 5*2/((5-2+1)(5+3))=10/(4*8)=0.3125, а у вас другое

Чтобы не плодить сообщения, буду добавлять код в это сообщение.
Оказалось, что подсчет вектора от Stilet'а работает неверно.
Код:
program Lab05;

const
  n = 5;

var
  i, j, k: Integer;
  A: Array [1..n, 1..n] of Real;
  X, Z: Array [1..n] of Real;
  s, c, y: real;
  t: boolean;

begin
  //Вычисление элементов матрицы
  for j := 1 to n do
    for i := 1 to n do
    begin
      A[j, i] := (n * j) / ((n - j + 1) * (n + i));
    end;
  //Выводим матрицу
  writeln('Matrix A');
  for j := 1 to n do
  begin
    for i := 1 to n do
      Write(A[j, i]:12:5);
    Writeln;
  end;
  //Рассчитываем вектор Х
  for i := 1 to n do
  begin
    x[i] := 0;
    for j := 1 to n do 
      x[i] := x[i] + a[i, j];     
    s := 0;
    for k := 1 to i do 
      s := s + a[i, k];
    x[i] := x[i] - n * s;
  end;
  //Выводим вектор Х
  writeln('Vector X');
  for i := 1 to n do
    Write(x[i]:12:5);
  writeln;
  //Рассчитываем вектор Z
  for i := 1 to n do
  begin
    z[i] := 0;
    for j := 1 to n do
      z[i] := z[i] + a[i, j] * x[j];
  end;
  //Выводим вектор Z
  writeln('Vector Z=AX');
  for i := 1 to n do
    Write(z[i]:12:5);
  writeln;
  //Рассчитываем c
  c := 0;
  for i := 1 to n do
    c := c + x[i];
  c := c / n;
  //Рассчитываем y
  y := 1;
  t := false;
  for i := 1 to n do
    if x[i] > c then
    begin
      t := true;
      y := y * x[i];
    end;
  //Выводим y
  if t then
    writeln('y=', y:0:5)
  else
    writeln('y can not calculate');   
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.06.2012 в 15:47.
BDA вне форума
Старый 10.06.2012, 15:10   #8
AnnieBond
 
Регистрация: 09.06.2012
Сообщений: 9
По умолчанию

спасибо а как выполнить 3 и 4 пункты?
AnnieBond вне форума
Старый 10.06.2012, 18:42   #9
AnnieBond
 
Регистрация: 09.06.2012
Сообщений: 9
По умолчанию

Спасибо большое!!!
AnnieBond вне форума
Старый 10.06.2012, 23:53   #10
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от AnnieBond Посмотреть сообщение
ByAlex, я же говорю, здесь строки и столбцы так и должны быть названы, все правильно. Размерность сказал преподаватель.
Это понятно! Заполнять можно и так, но вывод у вас не правильный!!! У вас результирующая матрица получается транспонированной.
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ABC. Программирование матричных операций. Христо Помощь студентам 0 23.05.2012 15:03
Программирование матричных операций(Delphi) darko666 Помощь студентам 0 08.12.2011 16:40
ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ lords Паскаль, Turbo Pascal, PascalABC.NET 2 23.03.2011 19:35
ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ Obrey Помощь студентам 5 17.12.2010 15:05
программирование матричных операций! darinochka Microsoft Office Excel 4 11.10.2010 12:25