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

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

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

 
 Ответить  Открыть новую тему 
> Вычислить матрицу на Tp7
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


Гость






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

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


Новичок
*

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

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


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

====

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



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


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

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

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


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


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


Гость






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

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


Новичок
*

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

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


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

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


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

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

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


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


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


Новичок
*

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

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


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


Профи
****

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

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


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


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


Новичок
*

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

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


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

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


Профи
****

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

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


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


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Цитата
Вот ещё один вопрос возник.. а как быть если степень отрицательная?
Насколько я помню, в математике для квадратной матрицы определена только операция возведения в целую НЕотрицательную степень...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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... Согласись, что это не одно и то же...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


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

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

 





- Текстовая версия 19.03.2024 17:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name