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

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

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

 
 Ответить  Открыть новую тему 
> Вычислить матрицу на Tp7
warhel
сообщение 3.12.2006 18:52
Сообщение #1


Новичок
*

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

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


Есть задача:
вычислить матрицу вида: C=A3+B3
3 - это степень, степень размер матрицы и т.д. естественно вводит пользователь
вообщем нужно решить всё это на турбо паскале..
я ещё не очень хорошо в нём разбираюсь но вот что всё таки сделал сам:
(работает не правельно, выводит вообще числа и не близкие к ответу)

Код
program matrix;
uses crt;
const
max=10;
var
i,j,amax, bmax,n: integer;
a,b: array [1..max,1..max] of integer;
c: array [1..max,1..max] of real;
begin
writeln('vvedite kol-vo strok v matrice: ');
readln(amax);
writeln('vvedite kol-vo stolbcov v matrice: ');
readln(bmax);
write('vvedite stepen: ');
readln(n);
writeln('vvod matrici A');
for i:=1 to amax do
  for j:=1 to bmax do
   begin
    write('vvedite ',i,'-й элемент ',j,'-строки: ');
    readln(a[i,j]);
   end;
{end for}
writeln('vvod matrici B');
for i:=1 to amax do
  for j:=1 to bmax do
   begin
    write('vvedite ',i,'-й элемент ',j,'-строки: ');
    readln(b[i,j]);
   end;
{end for}
for i:=1 to amax do
  for j:=1 to bmax do
   begin
    c[i,j]:=exp(n*(a[i,j])+exp(n*(b[i,j])) );
   end;
{end fir}
for i:=1 to amax do
  for j:=1 to bmax do
   writeln(c[i,j]);
repeat until keypressed;
end.


Помогите пожалуста smile.gif
спасибо заранее =)

Сообщение отредактировано: warhel - 3.12.2006 18:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 3.12.2006 19:46
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


ну во первых ты судя по всему матрицу не правильно заполняешь,

for i:=1 to amax do
for j:=1 to bmax do
begin
write('vvedite ',i,'-й элемент ',j,'-строки: '); // <------- i - это строка, а j - столбец, а ты видимо наоборот вводишь
readln(a[i,j]);
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
warhel
сообщение 3.12.2006 20:03
Сообщение #3


Новичок
*

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

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


ну это я пробывал менять местами вообщем смысла не меняет, я постоянно пробую вводить в А и в В одинаковые квадратные матрицы 2х2 и все элементы тоже 2. В результате программа выдаёт матрицу: 2;4;2;2, а должна 16;16;16;16..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2006 20:05
Сообщение #4


Гость






c[i,j]:=exp(n*LN(a[i,j]))+exp(n*LN(b[i,j]));
?
 К началу страницы 
+ Ответить 
warhel
сообщение 3.12.2006 20:16
Сообщение #5


Новичок
*

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

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


volvo, ну как я думал эта строчка должна была возводить элемент матрицы А в степень и прибавлять к нему возведённый в степень элемент матрицы В или я не прав? исправь меня тогда пожалуйста =))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2006 20:32
Сообщение #6


Гость






Ты внимательно посмотри, на то, что было у тебя, и на то, что сделал я ...

Особенно внимание - на скобки... Ну, и про Ln не забудь...
 К началу страницы 
+ Ответить 
warhel
сообщение 3.12.2006 20:39
Сообщение #7


Новичок
*

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

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


а извини плз, я подумал что ты просто выделил мою строчку кода и написал вопрос а ты на самом деле написал исправленую =) спасиб пойду пробывать

====

попробывал, всё работает огромное спасибо =)
теперь остался один вопрос только, можно ли как то реализовать тоже самое вычисление но например если матрицы будут не квадратный а скажем одна 2х3 а вторая 3х4.. я неособо в математике силён поэтому честно говоря на бумаге то не уверен что посчитаю =) очень хотел бы узнать сам метод приблезительно..



Сообщение отредактировано: warhel - 3.12.2006 20:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 3.12.2006 21:00
Сообщение #8


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


а разве возведение матрицы в степень - это возведение в степень ее элементов?...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2006 21:31
Сообщение #9


Гость






Цитата
а разве возведение матрицы в степень - это возведение в степень ее элементов?...
smile.gif "That, detective, is the right question" © I, Robot

С этого и надо было начинать, warhel...
Здесь: Массивы. Матрицы. Типичные задачи.
есть возведение матрицы (только квадратной, потому что перемножать можно только "сцепленные" матрицы, а матрица может быть сцеплена сама с собой только если она - квадратная) в степень...
 К началу страницы 
+ Ответить 
warhel
сообщение 3.12.2006 21:46
Сообщение #10


Новичок
*

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

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


неет матрицу в степень мне возводить не надо =) это я и сам бы разобрался как её возвести =)
мне надо было вычилисть матрицу С каждый элемент которой равен элемнт матрицы А в степени + элемент матрицы В в степени =) впрочем с этим я разобрался, проехали =)
теперь только один вопрос можно ли перемножать не квадратные матрицы?.. или перемножать можно только сцепленные матрицы?

п.с. спасибо за ссылку нашёл некоторые полезные вещи =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 3.12.2006 21:58
Сообщение #11


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


так ты определись, надо ли тебе перемножать матрицы или работать с отдельными элементами?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
warhel
сообщение 3.12.2006 22:14
Сообщение #12


Новичок
*

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

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


я плохо наверное обьясняю сори =)
вот значит ещё раз =)
задача:
вычислисть матрицу: An+Bn=C, где n - степень
ну т.е. каждый элемент матрицы С явл. суммой соответствующий элементов матриц А и В в указаной степени.
я решил задачу для квадратных матриц. Теперь только один вопрос, можно ли решить задачу если матрицы будут НЕ квадратные и НЕ сцеплённые? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 3.12.2006 22:30
Сообщение #13


Профи
****

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

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


мисс_граффити и volvo указали тебе на то, что в математике возведение матрицы в степень - это НЕ возведение в степень её элементов. Реши, что тебе надо.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
warhel
сообщение 3.12.2006 22:39
Сообщение #14


Новичок
*

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

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


Archon, я ж пишу, в степень конкретно матрицу возводить мне не надо. Необходимо только её элементы smile.gif

Сообщение отредактировано: warhel - 3.12.2006 22:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 3.12.2006 22:50
Сообщение #15


Профи
****

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

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


Цитата
можно ли решить задачу если матрицы будут НЕ квадратные и НЕ сцеплённые?
нет


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
warhel
сообщение 6.12.2006 11:35
Сообщение #16


Новичок
*

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

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


Вот ещё один вопрос возник.. а как быть если степень отрицательная?
напомню задачу:
определить матрницу С=А3+В3, где 3 - это степень..
я делал так, чтобы вычислять задачу при отрицательной степени:
сделал проверку, если стпень, которую ввёл юзер отрицательна, значит берём модуль и ставим логическую переменную, при выводе ответа опять проверка, если переменная тру, тогда пишем 1/ответ, но почему считает не правельно.. подскажите пожалуйсто.. ну и если ещё какие то недочёты уваидите тоже буду рад =)
вот конечный вариант алгоритма:
Код
program matrix;
uses crt;
const
max=10;
var
i,j,amax, bmax,n: integer;
a,b: array [1..max,1..max] of real;
c: array [1..max,1..max] of real;
flag: boolean;
t: real;
begin
clrscr;
writeln('Будьте внимательны, количество строк и стобцов должно быть больше 0 и меньше ',max);
repeat
  writeln('Введите количество строк в матрице: ');
  readln(amax);
  writeln('Введите количество столбцов в матрице: ');
  readln(bmax);
  if (amax<0) or (amax>max) or (bmax<0) or (bmax>max) then
   writeln('Внимание Вы ввели недопустимо значение, повторите.');
until (amax>0) and (amax<max) and (bmax>0) and (bmax<max);
write('Введите степень: ');
readln(n);
if n<0 then
  begin
   n:=abs(n);
   flag:=true;
  end;
writeln('Ввод матрицы A:');
for i:=1 to amax do
  for j:=1 to bmax do
   begin
    write('Введите ',i,'-й элемент ',j,'-строки: ');
    readln(a[i,j]);
   end;
{end for}
writeln('Ввод матрицы B:');
for i:=1 to amax do
  for j:=1 to bmax do
   begin
    write('Введите ',i,'-й элемент ',j,'-строки: ');
    readln(b[i,j]);
   end;
{end for}
for i:=1 to amax do
  for j:=1 to bmax do
   begin
    c[i,j]:=exp(n*LN(a[i,j]))+exp(n*LN(b[i,j]));
   end;
{end for}
if flag then
  begin
   for i:=1 to amax do
    for j:=1 to bmax do
     t:=1/c[i,j];
     writeln(t);
  end
else
  begin
   for i:=1 to amax do
    for j:=1 to bmax do
     writeln(c[i,j]:3:3);
  end;
repeat until keypressed;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.12.2006 12:10
Сообщение #17


Гость






Цитата
Вот ещё один вопрос возник.. а как быть если степень отрицательная?
Насколько я помню, в математике для квадратной матрицы определена только операция возведения в целую НЕотрицательную степень...
 К началу страницы 
+ Ответить 
volvo
сообщение 6.12.2006 12:20
Сообщение #18


Гость






А ошибка у тебя - в том, что ты СНАЧАЛА складываешь значения, а потом делишь на результат единицу... Тебе же надо складывать обратные значения...

Пример:
пусть определенный элемент матрицы А[1, 1] = 2, и соответственно, элемент B[1, 1] = 3... Что делает твоя программа при возведении в (-3) степень?

C[1, 1] := (2^3) + (3^3) = 35, после чего получаем 1/35

а нужно:
C[1, 1] := 1 / (2^3) + 1/(3^3) = 1/8 + 1/27 = 35/216... Согласись, что это не одно и то же...
 К началу страницы 
+ Ответить 
warhel
сообщение 6.12.2006 12:48
Сообщение #19


Новичок
*

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

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


оо спасиба =) точно, а я сидел голову ломал откуда такие цифры берутся, всё супер спасибо =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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