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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2009, 20:30   #1
GorNikSar
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 11
Восклицание Две задачки на матрицы и одна на сумму бесконечного сходящегося ряда... Кто сможет помочь?

Три задачи, с которыми никак не могу разобраться. Помогите решить:

1. Вычислить сумму ряда
S=(x-1)/(x+1)+1/3*((x-1)/(x+1))^3+... ...+(1/(2n+1))*((x-1)/(x+1))^(2n+1)
0,2<=x<=1

2. Дана матрица A 5 на 8. Сформировать матрицу И, первый столбец которой равен последнему столбцу исходной матрицы, второй столбец матрицы равен предпоследнему столбцу исходной и так далее...

3. Дана матрица А 5 на 8. Сдвинуть по часовой стрелке на одну позицию все элементы, расположенные на её периметре.
GorNikSar вне форума Ответить с цитированием
Старый 11.01.2009, 20:57   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вторая задача:
Код:
uses crt;
const m=5; n= 8;
var
a,b : array[1..m,1..n] of integer;
i,j : integer;

begin
clrscr;
randomize;
for i:=1 to m do
  begin
  for j:=1 to n do
    begin
    a[i,j] := random(15);
    write(a[i,j]:5);
    end;
  writeln;
  end;
writeln('-------------');
{-----}
for j:=1 to n do
 for i:=1 to m do
  b[i,j] := a[i,n-j+1];

for i:=1 to m do
 begin
 for j:=1 to n do
  write(b[i,j]:5);
 writeln;
 end;

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.01.2009, 21:13   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Первая задача:
Код:
uses crt;
var
n,i : integer;
x,sum,k,r : real;
begin
clrscr;
write('Enter n: ');
readln(n);
write('Enter x: ');
readln(x);
if (x>1) or (x<0.2) then exit;
sum := 0;
k := (x-1)/(x+1);
if k<>0 then r := 1/k;
for i:=0 to n do
  begin
  r := r*k*k;
  sum := sum + r/(2*i+1);
  end;
writeln('Summa= ',sum:7:4);
readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.01.2009, 21:43   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию 1 задача! Не забудь отзыв! ))

Вот код первой задачи - есть вопросы - спрашивай:
Код:
program ex1;
var
 n,i : byte;
 s,x : real;

 function power ( m : real; st : byte ) : real;  { Функция написана                    для целочисленной степени! }
 var
  a : boolean;
 begin
   if m=0 then
    if st=0 then writeln ('0 v 0 neopredelen')
    else
    begin
      power:=0;
      exit
    end;
   a:=odd(st);
   if m>0 then power:=exp(ln(m)*st)
   else
    if a then power:=(-1)*exp(ln(abs(m))*st)
    else power:=exp(ln(abs(m))*st)

 end;

begin

  write ('vvedite x: ');
  readln(x);

  if (x>=0.2) and (x<=1) then
  begin
    write ('Vvedite n (natural''noe): ');
    readln(n);
    s:=0;
    for i:=0 to n do
     s:=s+(1/(2*i+1))*power((x-1)/(x+1),2*i+1)
  end
  else writeln ('Ne tot diapozon x');

  writeln ('Summa= ',s:0:3);
  readln;
end.
capta1n вне форума Ответить с цитированием
Старый 11.01.2009, 22:05   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Третья задача:
Получилось громоздко. Наверняка можно сделать проще. Но это работает )

Код:
uses crt;
const m=5; n=8;
var
a : array[1..m,1..n] of integer;
b : array[1..(2*m+2*n-4)] of integer;
i,j,k,tmp : integer;

begin
clrscr;
randomize;
for i:=1 to m do
  begin
  for j:=1 to n do
    begin
    a[i,j] := random(20);
    write(a[i,j]:5);
    end;
  writeln;
  end;
writeln('-------');
{---------}

k:=1;
for j:=1 to n do
 begin
 b[k]:=a[1,j];
 inc(k);
 end;
for i:=2 to m do
 begin
 b[k]:=a[i,n];
 inc(k);
 end;
for j:=n-1 downto 1 do
 begin
 b[k]:=a[m,j];
 inc(k);
 end;
for i:=m-1 downto 2 do
 begin
 b[k]:=a[i,1];
 inc(k);
 end;
{--------}
tmp:=b[k-1];
for i:=k-1 downto 2 do
 b[i]:=b[i-1];
b[1]:=tmp;
{-------}
k:=1;
for j:=1 to n do
 begin
 a[1,j]:=b[k];
 inc(k);
 end;
for i:=2 to m do
 begin
 a[i,n]:=b[k];
 inc(k);
 end;
for j:=n-1 downto 1 do
 begin
 a[m,j]:=b[k];
 inc(k);
 end;
for i:=m-1 downto 2 do
 begin
 a[i,1]:=b[k];
 inc(k);
 end;
{---------------}

for i:=1 to m do
 begin
 for j:=1 to n do
  write(a[i,j]:5);
 writeln;
 end;

readln;
end.
------------------------
capta1n Не понимаю, к чему писать код, если уже присутствует более короткий и "легкий" вариант.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.01.2009, 22:06   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Задача 3. Решена по принципу сдвига в линейных массивах. Может не очень изящно, но работает.
Код:
uses crt;
const n=5;
      m=8;
var a:array[1..n,1..m] of integer;
    i,j,x1,x2,x3:integer;
begin
clrscr;
writeln('Ishodnaja matrica:');
for i:=1 to n do
  begin
    for j:=1 to m do
      begin
        a[i,j]:=10*i+j;//для наглядности
        write(a[i,j]:4);
      end;
    writeln;
  end;
x1:=a[1,m];  //сдвигаем в первой строке
for j:=m downto 2 do
a[1,j]:=a[1,j-1];
a[1,1]:=a[2,1];
x2:=a[n,m]; //сдвигаем в последнем столбце
for i:=n downto 3 do
a[i,m]:=a[i-1,m];
a[2,m]:=x1;
x3:=a[n,1]; //сдвигаем в последней строке
for j:=1 to m-2 do
a[n,j]:=a[n,j+1];
a[n,m-1]:=x2;
for i:=2 to n-2 do //сдвигаем в первом столбце
a[i,1]:=a[i+1,1];
a[n-1,1]:=x3;
writeln('Rezultat:');
for i:=1 to n do
  begin
    for j:=1 to m do
    write(a[i,j]:4);
    writeln;
  end;
readln
end.
Во, почти один к одному написали!
puporev вне форума Ответить с цитированием
Старый 11.01.2009, 22:20   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

puporev Действительно ) Сначала тоже хотел примерно так сделать, но решил, что будет циклов многовато. Но в итоге так и вышло )
Видимо, по-другому не сделать...
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.01.2009, 22:25   #8
GorNikSar
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 11
По умолчанию

Парни, благодарю! Вы меня очень выручили!!!
GorNikSar вне форума Ответить с цитированием
Старый 11.01.2009, 22:53   #9
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Отзыв не забудь! ))
capta1n вне форума Ответить с цитированием
Старый 13.01.2009, 04:25   #10
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Sazary - то что у вас код короче не говорит о том, что у вас он понятнее, легче и быстрее, к тому же я думаю, что я не натворил что-то плохое, если отписал свой вариант для человека, который, я считаю, намного понятнее, потому что реально описана функция вычисления степени и запись цикла идет в сравнение с формулой - так пользователю понятнее да и остальным программистам тоже должно быть легко.
К тому же я уверен, что моя программа работает быстрее вашей, а еще я не понимаю зачем вводить "N" если Х вне диапозона Не обижайтесь - но какой вопрос такой и ответ
capta1n вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен кто-нибудь, кто сможет подсказать, как подступиться к программированию Delphi & C++ Koshka_Kali Помощь студентам 2 30.11.2008 13:23
Расчитывание суммы бесконечного ряда до определённого значения SLec Помощь студентам 3 17.11.2008 22:18
Delphi. Вычислить сумму бесконечного ряда Alex1991 Помощь студентам 1 23.10.2008 22:39
Паскаль. Сумма бесконечного ряда Tream Помощь студентам 4 13.10.2007 23:42