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

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

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

 
 Ответить  Открыть новую тему 
> Помогите доделать задачку : комплексные числа, реализовать в модуле
Димас
сообщение 10.09.2007 14:03
Сообщение #1


Пионер
**

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

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


Задача: Дан массив комплексных чисел A[M], Получить массив B[N,M], каждая строка которого получается возведением в степень, равную номеру этой строки в массиве А.
~~~
Реализовать в виде модуля набор подпрограмм для выполнения следующих операция над комплексными числами:
* сложения
* вычитания
* умножения
* деления
* вычисления модуля комплексного числа
* возведения комплексного числа в степень n
* комплексное число предоставить следующим типом:
type complex = record
re : real;
im : real;
end;

используя этот модуля решить данную задачу.

у меня есть(нарыл поиском тут wink.gif ) :
 
Unit m_1369;

interface

uses crt;

type
complex = record
re, im: real
end;

var
Eps: real;
z, res:Complex;

implementation

{Функция для определения модуля комплексного числа}
function AbsComplex(z: Complex): real;
begin
AbsComplex := sqrt(sqr(z.re) + sqr(z. im))
end;

{Процедура сложения двух комплексных чисел}
procedure AddComplex(z1,z2: Complex; var res:Complex);
begin
res.re := z1.re + z2.re;
res.im := z1.im + z2.im;
end;

{процедура умножения двух комплексных чисел}
procedure Multicomplex(z1,z2: Complex; var res:Complex);
begin
res.re := z1.re * z2.re - z1.im * z2.im;
res.im := z1.re * z2.im - z1.im * z2.re
end;
{Процедура деления комплексного числа на вещественное}
procedure MultCoplToReal(var z:Complex; c:real);
begin
z.re := z.re * c;
z.im := z.im * c
end;

end.



как быть? mega_chok.gif

Сообщение отредактировано: Димас - 11.09.2007 17:40


--------------------
Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.09.2007 15:02
Сообщение #2


Гость






Димас, ну у тебя же есть практически весь модуль... Сложение/умножение ты нашел сам, вычитание/деление есть тут: Записи

Возведение в степень можно представить как последовательное умножение (n раз) двух одинаковых комплексных чисел (сначала одно на другое, а потом - на результат предыдущей операции)...

А вот с заданием понятно далеко не все: откуда, например, берется N в задании... Ну, есть у нас массив из M чисел, как отсюда получить матрицу NxM?
 К началу страницы 
+ Ответить 
klem4
сообщение 10.09.2007 16:04
Сообщение #3


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

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

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


Димас Ты же не первый раз на форуме, переименуй тему, иначе она будет закрыта в течении часа.


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


Пионер
**

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

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


Цитата
А вот с заданием понятно далеко не все: откуда, например, берется N в задании... Ну, есть у нас массив из M чисел, как отсюда получить матрицу NxM?


типа вот так:
(но я єто не могу реализовать в модуле mega_chok.gif )
 

var i,j:integer;
m,n:integer;
a:array[1..20,1..2] of integer;
b:array[1..20,1..10,1..2] of integer;
Begin

randomize;
clrscr;
write('Kollichestvo kompleksnih chisel : ');
readln(m);
write('Stepen : ');
readln(n);

for i:=1 to m do
begin
a[i,1]:=random(9)+1;
a[i,2]:=random(9)+1;
end;

writeln;
writeln('Masiv A :');
writeln;

for i:=1 to m do
begin
write(a[i,1],'j');
if a[i,2]>=0 then write('+');
writeln(a[i,2]);
end;

readln;
for i:=1 to m do
begin
b[i,1,1]:=a[i,1];
b[i,1,2]:=a[i,2];
end;

for i:=1 to m do
for j:=2 to n do
begin
b[i,j,1]:=b[i,1,1]*b[i,j-1,2]+b[i,j-1,1]*b[i,1,2];
b[i,j,2]:=b[i,1,1]*b[i,j-1,1]*(-1)+b[i,1,2]*b[i,j-1,2]
end;
writeln;

clrscr;
writeln('Masiv B :');
writeln;
textcolor(8);

for i:=1 to m do
begin
for j:=1 to n do
begin
write(b[i,j,1]);
textcolor(2);
write('j');
textcolor(8);
if b[i,j,2]>=0 then write('+');
write(b[i,j,2]);
textcolor(4);
write(' <-',j,'| ');
textcolor(8);
end;
writeln;
end;
writeln;
write('Dlya vihoda nagmite knopky ...');
readln;
end;


вот wacko.gif

Добавлено через 2 мин.
Цитата(klem4 @ 10.09.2007 16:04) *

Димас Ты же не первый раз на форуме, переименуй тему, иначе она будет закрыта в течении часа.

слушаю и повинуюсь ! smile.gif
не первый и не второй где то *надцятый раз, и до сих пор не поумнел... blink.gif
--------------
Так как же єту задачу побороть? mega_chok.gif

Сообщение отредактировано: Димас - 10.09.2007 18:34


--------------------
Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.09.2007 10:41
Сообщение #5


Гость






Димас, во-первых, у тебя ошибка в реализации Multicomplex: при вычислении res.im надо не минус, а плюс... Ну, а во-вторых, вот программа, делающая то же самое, что и приведенная тобой, но с использованием модуля complex.tpu (исходник модуля я прикрепил...) :

uses crt, complex;

const
max_n = 20;
max_power = 10;

var
i, j: integer;
m, n: integer;
a: array[1 .. max_n] of tcomplex;
b: array[1 .. max_n, 1 .. max_power] of tcomplex;

begin
randomize;
clrscr;

write('Kollichestvo kompleksnih chisel : '); readln(m);
write('Stepen : '); readln(n);

for i := 1 to m do
with a[i] do begin
re := random(9) + 1;
im := random(9) + 1;
end;

writeln;
writeln('Masiv A :');
writeln;

for i := 1 to m do begin
PrintComplex(a[i]); writeln;
end;

readln;
for i := 1 to m do begin
b[i, 1] := a[i];
for j := 2 to n do
PowerComplex(a[i], b[i, j], j);
end;

writeln;
clrscr;
writeln('Masiv B :');
writeln;

textcolor(lightgray);
for i :=1 to m do begin
for j :=1 to n do begin
PrintComplex(b[i, j]);
textcolor(lightred);
write(' <-',j,'| ');
textcolor(lightgray);
end;
writeln;
end;

writeln;
write('Dlya vihoda nagmite knopky ...');
readln;
end.



Прикрепленные файлы
Прикрепленный файл  complex.pas ( 1.86 килобайт ) Кол-во скачиваний: 181
 К началу страницы 
+ Ответить 
Димас
сообщение 11.09.2007 15:54
Сообщение #6


Пионер
**

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

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


Volvo
ОГО ! rolleyes.gif
не ожидал, Спасибо !!! smile.gif


--------------------
Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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