Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите доделать задачку : комплексные числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Димас
Задача: Дан массив комплексных чисел 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
volvo
Димас, ну у тебя же есть практически весь модуль... Сложение/умножение ты нашел сам, вычитание/деление есть тут: Записи

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

А вот с заданием понятно далеко не все: откуда, например, берется N в задании... Ну, есть у нас массив из M чисел, как отсюда получить матрицу NxM?
klem4
Димас Ты же не первый раз на форуме, переименуй тему, иначе она будет закрыта в течении часа.
Димас
Цитата
А вот с заданием понятно далеко не все: откуда, например, берется 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
volvo
Димас, во-первых, у тебя ошибка в реализации 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.

Димас
Volvo
ОГО ! rolleyes.gif
не ожидал, Спасибо !!! smile.gif
viagra online with prescription
Amoxicillin Elixir
azithromycin for throat infectio
Cialis De Marca
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.