FreeBasic
Главная
Вход
Регистрация
Среда, 07.12.2022, 19:32Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Freebasic » Вопросы по языку FreeBasic » Вычисления значения и производной полинома по схеме Горнера (Вычисления значения и производной полинома по схеме Горнера)
Вычисления значения и производной полинома по схеме Горнера
haavДата: Воскресенье, 23.10.2011, 15:39 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Вычисления значения и производной полинома по схеме Горнера


перенесено обсуждение отсюда

Quote
Временно забудем о кодировке! Такой темы еще нет, но для программистов будет интересно. Ниже приведена программа вычислениz значения и производной полинома по схеме Горнера. Полином задан в стандартной форме по убыванию степеней аргумента: Y = A(0)*X^N+A(1)*X^(N-1)+...+A(N-1)*X+A(N)
N - степень полинома; A - массив коэффициентов полинома; X - заданное значение аргумента; Y - значение полинома (в точке "Х"); P - значение производной (в точке "Х"). Второй день не могу превратить ее в подпрограмму с "вызывалкой" типа: Sub PGorn (N, A(), X, Y, P). Помогите пл-и-и-и-з-з-з!

Добавлено (23.10.2011, 13:26)
---------------------------------------------
Dim As Integer N, J, K
Dim As Single A(10), X, Y, P, Y1, P1
Dim As String F
Data 1., 0., -6., 1., 4.
N = 4
For J = 0 To N: Read A(J): Next J
For X = 0 To 2.0 Step 0.25
P = 0
Y = A(0)
For K = 1 To N
P = P * X + Y
Y = Y * X + A(K)
Next K
Y1=1.* X^4 - 6.* X^2 + X + 4.
P1=4.* X^3 - 12.* X + 1.
Print X, Y, P, Y1, P1
Next X
Sleep
End
Таблица выводимых данных имеет вид (для прверки):
X YG PG YA PA
0.00 4.00000 1.00000 4.00000 1.00000
0.25 3.87891 -1.93750 3.87891 -1.93750
0.50 3.06250 -4.50000 3.06250 -4.50000
0.75 1.69141 -6.31250 1.69141 -6.31250
1.00 0.00000 -7.00000 0.00000 -7.00000
1.25 -1.68359 -6.18750 -1.68359 -6.18750
1.50 -2.93750 -3.50000 -2.93750 -3.50000
1.75 -3.24609 1.43750 -3.24609 1.43750
2.00 -2.00000 9.00000 -2.00000 9.00000


Это нужно?

Code

Sub PGorn(n As Integer,p As Single)
   Dim As Integer  J, K
   Dim As Single  Y1, P1,X,Y
   Dim As String F
     ReDim A(n) As Single
     Restore
   For J = 0 To N
    Read A(J)
   Next

   For X = 0 To 2.0 Step 0.25
    Y = A(0)
    For K = 1 To N
     P = P * X + Y
     Y = Y * X + A(K)
    Next K
    Y1=1.* X^4 - 6.* X^2 + X + 4.
    P1=4.* X^3 - 12.* X + 1.
    Print X, Y, P, Y1, P1
   Next X
   Sleep
End Sub
PGorn(4,0)
Data 1., 0., -6., 1., 4.


Большая просьба соблюдать правила форума. Вы можете сами создавать темы , а не писать все в одном месте. Это облегчит другим пользователям поиск.

Для создания новой темы нажмите на кнопку и озаглавьте в соответствием вашим обсуждением:



Мне приятно что вы интересуетесь Freebasic , но мне не нравится постоянно переносить посты.
Прикрепления: 4201473.png(35.6 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 24.10.2011, 09:30 | Сообщение # 2
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Большое спасибо - буду пробовать!
Вы правы - переносить посты не есть хорошо!
Но боюсь в названии новой темы обнаружить свою инфобезграмотность!
Спасибо.
 
haavДата: Понедельник, 24.10.2011, 10:33 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Quote
Но боюсь в названии новой темы обнаружить свою инфобезграмотность!


Тут нечего бояться Евгений , вы не на минном поле. Называйте тему так, как вы считаете правильным.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 24.10.2011, 14:52 | Сообщение # 4
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
"Фетяска"! Постарался максимально следовать Вашим рекомендациям:
Sub PGorn(N As Integer, X As Single, Y As Single, P As Single)
Dim As Integer J, K
ReDim A(N) As Single ' это я не слишком понимаю
Restore ' это я не слишком понимаю
P = 0
Y = A(0)
For K = 1 To N
P = P * X + Y
Y = Y * X + A(K)
Next K
End Sub
'
Dim As Integer N, J
Dim As Single A(10)
Dim As Single X, Y, P, Y1, P1
Dim As String F
Data 1., 0., -6., 1., 4.
For J = 0 To N : Read A(J) : Next J
F = " #.## ###.##### ###.##### ###.##### ###.#####"
Print " X YG PG YA PA"
For X = 0 To 2.0 Step 0.25
PGorn(N, X, Y, P) ' вызов подпрограммы
Y1=1.* X^4 - 6.* X^2 + X + 4.
P1=4.* X^3 - 12.* X + 1.
Print Using F; X, Y, P, Y1, P1
Next X
Sleep
End
но ответ получился "неверным"! Передача параметров?
X YG PG YA PA
0.00 0.00000 0.00000 4.00000 1.00000
0.25 0.00000 0.00000 3.87891 -1.93750
0.50 0.00000 0.00000 3.06250 -4.50000
0.75 0.00000 0.00000 1.69141 -6.31250
1.00 0.00000 0.00000 0.00000 -7.00000
1.25 0.00000 0.00000 -1.68359 -6.18750
1.50 0.00000 0.00000 -2.93750 -3.50000
1.75 0.00000 0.00000 -3.24609 1.43750
2.00 0.00000 0.00000 -2.00000 9.00000
 
haavДата: Понедельник, 24.10.2011, 16:58 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Может так попробовать:

Code

'A() - массив со значениями
'Xend - конечный предел значения X
'Xstep - шаг или точность
'N  - степень
Sub PGorn(A() As Single, Xend As single,Xstep As Single, N As Integer)
   Dim As Single  Y1,P,P1,X,Y
   For X = 0 To Xend Step Xstep
    P =0
    Y = A(0)
    For K As Integer= 1 To N
     P = P * X + Y
     Y = Y * X + A(K)
    Next K
    Y1=1.* X^4 - 6.* X^2 + X + 4.
    P1=4.* X^3 - 12.* X + 1.
    Print X, Y, P, Y1, P1
   Next   
   Sleep
End Sub

Dim a(10) As Single= {1,0,-6,1,4}
PGorn(a(),2,0.25,4)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 24.10.2011, 17:17 | Сообщение # 6
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Стас, этот вариант не подходит – подпрограмма должна получать от основной программы степень полинома N, массив значений коэффициентов полинома A(K), значение переменной (аргумента) X и выдавать вычисленные значения полинома Y и его производной P в точке X. Цикл по аргументу X нужен только для целей демонстрационных...
 
haavДата: Понедельник, 24.10.2011, 18:20 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Правильность поставленной задачи очень влияет на результат. Я ведь не знаком с полиномами , а если и был когда то знаком может быть, то все уже хорошенько забыл....

Поэтому:

1) Мне нужна четкая математическая формула без всяких многоточей для вычисления ( например для трех значений):

  • значения полинома Y


  • и его производной P


2) Функция должна что-нибудь возвращать? Или просто печатать результаты в консоли?


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 24.10.2011, 19:22 | Сообщение # 8
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Полином это частный случай многочлена, имеющий вид (сумма степеней X):
Y = A(0)*X^N+A(1)*X^(N-1)+...+A(N-1)*X+A(N)
здесь:
N - степень полинома (целое число большее нуля)
A() - массив (вектор) значений коэффициентов
Y – численное значение полинома в точке X
P – значение производной полинома в точке X
В примере рассматривается полином четвертой степени:
Y=1.* X^4 - 6.* X^2 + X + 4.
Выражение для его производной имеет вид:
P=4.* X^3 - 12.* X + 1.
Здесь (и далее) математические процедуры (подпрограммы и функции) ничего не вводят с клавиатуры (или другого устройства) и ничего не выводят на консоль (или другое устройство). Их задача - вычислять по определенному алгоритму (вот этим и хочу заняться) значения указанных переменных и передавать эти значения вызвавшей (основной) программе для вывода на консоль (или другое устройство) и дальнейшей обработке.

Добавлено (24.10.2011, 19:22)
---------------------------------------------
Так понимаю, что основная проблема заключается в механизме передачи параметров (переменных, в том числе массивов) между основной (вызывающей) программой и вызываемой из нее процедуры (подпрограммы или функции). При пересылке массивов желательно не указывать в тексте процедуры границы массивов (они задаются в основной программе).

 
haavДата: Понедельник, 24.10.2011, 19:48 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Боюсь что если условия задачи не будут уточнены, я не смогу вам помочь.

Я просил формулу для трех значений без мнототочей, от вас я получил следующее:

Y = A(0)*X^N+A(1)*X^(N-1)+...+A(N-1)*X+A(N)

По этой формуле второе и последующие значения степеней равны N-1 . То есть если N=3, то все последующие будут иметь 2

Смотрю пример:

Y=1.* X^4 - 6.* X^2 + X + 4.

Здесь у второго значения степень меньше в два раза, потом почему-то прибавляется X и 4 . Если судя по формуле, то у второго значение степени должэно быть 3

Для производного P я формулы вообще не увидел.

Я не ясновидящий, и учить заного алгебру через более чем 20 лет с момента последнего урока мне тоже не хочется...


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Вторник, 25.10.2011, 10:52 | Сообщение # 10
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Стас, прошу Вас, не огорчайтесь и не обижайтесь!
С алгеброй разберемся, на худой конец, придумаю другой пример.
Но очень хочется постичь механизм передачи данных между модулями.
Отвечу полнее чуть позже...

Добавлено (25.10.2011, 10:52)
---------------------------------------------
Стас, пока появилась минутка времени, спешу внести первые пояснения:
1) Если дана функция Y = F(x) = x^a (словами: x в степени a, где a – целое число), то ее первая производная будет P = F`(x) = a*x^(a-1). Думаю, это отступление нам совсем не нужно :-)
В рассматриваемом примере полином 4-ой степени имеет вид:
Y1=1*X^4 + 0*X^3 - 6*X^2 + 1*X + 4
и его первая производная:
P1=1*4*X^(4-1) + 0*1*X^(3-1) – 6*2*X^(2-1) + 1*X^(1-1)
или выполняя действия:
P1=4*X^3 – 12*X + 1
2) Но самое главное, что результаты первой переданной программы (без выделения подпрограммы) меня (думаю и всех) вполне устраивают:
X YG PG YA PA
0.00 4.00000 1.00000 4.00000 1.00000
0.25 3.87891 -1.93750 3.87891 -1.93750
0.50 3.06250 -4.50000 3.06250 -4.50000
0.75 1.69141 -6.31250 1.69141 -6.31250
1.00 0.00000 -7.00000 0.00000 -7.00000
1.25 -1.68359 -6.18750 -1.68359 -6.18750
1.50 -2.93750 -3.50000 -2.93750 -3.50000
1.75 -3.24609 1.43750 -3.24609 1.43750
2.00 -2.00000 9.00000 -2.00000 9.00000
Аналог программы, написанный на QBasic 4.5, работает (как и многие другие) совершенно правильно...
3) Стас, мы на верном пути, наше дело правое, победа будет за нами!
Мы еще брошюру про FreeBASIC с примерами математических программ напишем :-)
С нетерпением жду Ваших вопросов, предложений...

 
haavДата: Вторник, 25.10.2011, 13:30 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Евгений!

Так какой смысл тогда ворочаться мне с формулами. Если у Вас есть работающий аналог с вызовом процедуры на Qbasic 4.5 , напишите его здесь, я попробую его адаптировать под FreeBasic. Тем более что с формулой производной я все равно ничего не понял. Понимаете, я человек очень логичный и люблю логику, чем-то схож по логике мышления с компьютером (как ему сложно что-то объяснить, так и мне biggrin ) Тем более что вы представляете вещи, либо обрывающиеся в начале , либо в конце. В итоге я выдаю результаты неверные biggrin

Где логика здесь? :

P1=1*4*X^(4-1) + 0*1*X^(3-1) – 6*2*X^(2-1) + 1*X^(1-1)

Как я смогу эту логику подставить процессору, когда число степеней изменится?


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Вторник, 25.10.2011, 15:28 | Сообщение # 12
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Стас, прошу Вас, не ищите логику в алгоритме! Нужно наладить передачу данных при вызове. Ниже исходный (работающий) текст для QBasic 4.5.
SUB PGRN (N%, A(), X, Y, P)
'-------------------------------------------------------------
' Модуль вычисления значения и производной по схеме Горнера
'-------------------------------------------------------------
' Y = A(0)*X^N+A(1)*X^(N-1)+...+A(N-1)*X+A(N)
' N - степень полинома;
' A - массив коэффициентов полинома;
' X - значение аргумента;
' Y - значение полинома (в точке "Х");
' P - значение производной (в точке "Х").
P = 0 ' Значение производной в точке
Y = A(0) ' Значение полинома в точке
FOR K% = 1 TO N%
P = P * X + Y
Y = Y * X + A(K%)
NEXT K%
END SUB
'
' P R O G R A M "TSPGRN"
' 11.09.87
'-------------------------------------------------------------
' Проверка вычисления значения и производной полинома
'-------------------------------------------------------------
DECLARE SUB PGRN (AR%, AR!(), AR!, AR!, AR!)
' Параметры полинома
DATA 1., 0., -6., 1., 4.
N% = 4
DIM A(N%)
FOR J% = 0 TO N%: READ A(J%): NEXT J%
PRINT " X YG PG YA PA"
F$ = " #.## ###.##### ###.##### ###.##### ###.#####"
FOR X = 0 TO 2.0 STEP 0.25
CALL PGRN (N%, A(), X, Y, P)
' Вычисления по аналитическим формулам
Y1=1.* X^4 - 6.* X^2 + X + 4.
P1=4.* X^3 - 12.* X + 1.
PRINT USING F$; X, Y, P, Y1, P1
NEXT X
END

Добавлено (25.10.2011, 15:28)
---------------------------------------------
Стас, давайте рассмотрим простую программу.
Вот текст работающей программы:
' 25.10.2011
'-------------------------------------------------------------
' Простая подпрограмма поиска максимального элемента
'-------------------------------------------------------------
' N - Количество значений в массиве;
' A() – Элементы исходного массива;
' M - Номер максимального элемента;
' MAX – значение максимального элемента;
Data 3.3, 6.6, 4.4, 5.5, 7.7, 1.1, 2.2
Dim As Integer J, N, M
Dim As Single MAX, A(10)
N = 7
For J = 1 To N : Read A(J) : Next J
MAX = A(1) : M =1
For J = 1 To N
If A(J) > MAX Then MAX = A(J) : M = J
Next J
Print " MAX = ", M, MAX
Sleep
End
' программа выводит на экран:
' MAX = 5 7.7
Теперь, хочется преобразовать эту программу в подпрограмму имеющую "вызывалку":
IMAX (N, A(), M, MAX)
пока в тех же обозначениях, что и в программе. На следующем шаге необходимо написать подпрограмму так, что бы она могла работать с массивами, имеющими границы Imin (минимальный индекс) и Imax (максимальный индекс), которые могут быть как положительными, так и отрицательными, например A(-2, 5).
Вот что для меня непреодолимая сегодня трудность!

 
haavДата: Вторник, 25.10.2011, 17:24 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Quote
Стас, прошу Вас, не ищите логику в алгоритме!


А где же ее тогда искать?

Вот ваш же код, работающий на FreeBasic, запишите его в редактор FbEdit и запускайте:

Code

#Lang "QB"
SUB PGRN (N%, A(), X, Y, P)
  '-------------------------------------------------------------
  ' Модуль вычисления значения и производной по схеме Горнера
  '-------------------------------------------------------------
  ' Y = A(0)*X^N+A(1)*X^(N-1)+...+A(N-1)*X+A(N)
  ' N - степень полинома;
  ' A - массив коэффициентов полинома;
  ' X - значение аргумента;
  ' Y - значение полинома (в точке "Х");
  ' P - значение производной (в точке "Х").
  P = 0 ' Значение производной в точке
  Y = A(0) ' Значение полинома в точке
  FOR K% = 1 TO N%
   P = P * X + Y
   Y = Y * X + A(K%)
  NEXT K%
END SUB
'
' P R O G R A M "TSPGRN"
' 11.09.87
'-------------------------------------------------------------
' Проверка вычисления значения и производной полинома
'-------------------------------------------------------------
'DECLARE SUB PGRN (AR%, AR!(), AR!, AR!, AR!)
' Параметры полинома
DATA 1., 0., -6., 1., 4.
N% = 4
DIM A(N%)
FOR J% = 0 TO N%: READ A(J%): NEXT J%
PRINT " X YG PG YA PA"
F$ = " #.## ###.##### ###.##### ###.##### ###.#####"
FOR X = 0 TO 2.0 STEP 0.25
  CALL PGRN (N%, A(), X, Y, P)
  ' Вычисления по аналитическим формулам
  Y1=1.* X^4 - 6.* X^2 + X + 4.
  P1=4.* X^3 - 12.* X + 1.
  PRINT USING F$; X, Y, P, Y1, P1
NEXT X
Sleep


Я в шоке от Qbasic !!!!!!!!! crazy
Как на нем вообще люди писали? В цикле параметр P с потолка берет значения каждый раз разные и отправляет в процедуру. В процедуре если убрать параметр P ( ведь он все равно обнуляется), то результат другой. Я когда-то писал программы на ZX Spectrum , но даже на том компьютере я такого не встречал...

В общем что я могу посоветовать: читайте срочно учебник по FreeBasic и забудьте все что вы знали про Qbasic biggrin Вы задаете тему обсуждения, которая после прочтения учебника отпадет сама собой. FreeBasic-это совсем другой уровень программирования и мышления. Не пытайтесь примерять одежду мухи на слона.

Обсуждать Qbasic алгоритмы и сравнивать их работу с Freebasic у меня желания больше нет. Если у Вас ностальгия по Qbasic , вы можете писать программы как раньше в редакторе FbEdit . Выше код показывает как это делать.

Надеюсь я вас не обидел.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Вторник, 25.10.2011, 18:17 | Сообщение # 14
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
То, что в цикле параметр P берет с потолка значения (при желании это можно избежать) - совсем не страшно, если учесть, что этот параметр каждый раз при обращении вычисляется в самой процедуре (у подпрограммы – только ее вывод). А вот как написать подпрограмму на "чистом" FreeBASIC, т.е. не использовать "примочку" #Lang "QB" осталось загадкой. Вы неправильно меня поняли, я не собирался здесь обсуждать язык QBasic (как и не собирался писать на нем программы, у меня их есть!). Я пришел сюда научиться с Вашей помощью программировать на FreeBASIC! Согласитесь, что человеку, знающему "только русский" читать учебник по FreeBasic, даже если смогу найти, напряженно!
Конечно, не обиделся, спасибо! Так мы продолжим диалог или разбегаемся?
 
haavДата: Вторник, 25.10.2011, 18:40 | Сообщение # 15
Генералиссимус
Группа: Администраторы
Сообщений: 1300
Репутация: 47
Статус: Offline
Цитата
Согласитесь, что человеку, знающему "только русский" читать учебник по FreeBasic, даже если смогу найти, напряженно!


Не понял... Учебник на русском же написан. Там обсуждаются практически все моменты языка.

Что касается вашего кода, то и об этом там сказано. Нужно просто почитать главу про Byval и Byref

Вот ваш код на чистом FreeBasic:

Код
SUB PGRN (N As Integer, A() As Single,byref X As Single,byref Y As single,byref P As Single)
   '-------------------------------------------------------------
   ' Модуль вычисления значения и производной по схеме Горнера
   '-------------------------------------------------------------
   ' Y = A(0)*X^N+A(1)*X^(N-1)+...+A(N-1)*X+A(N)
   ' N - степень полинома;
   ' A - массив коэффициентов полинома;
   ' X - значение аргумента;
   ' Y - значение полинома (в точке "Х");
   ' P - значение производной (в точке "Х").
   P = 0 ' Значение производной в точке
   Y = A(0) ' Значение полинома в точке
   FOR K As Integer = 1 TO N
    P = P * X + Y
    Y = Y * X + A(K)
   NEXT   
END SUB
'
' P R O G R A M "TSPGRN"
' 11.09.87
'-------------------------------------------------------------
' Проверка вычисления значения и производной полинома
'-------------------------------------------------------------
'DECLARE SUB PGRN (AR%, AR!(), AR!, AR!, AR!)
' Параметры полинома
DATA 1., 0., -6., 1., 4.
Dim N As integer = 4
DIM A(N) As single
Dim As single Y1,P1,Y,P
FOR J As integer = 0 TO N: READ A(J): NEXT   
PRINT " X YG PG YA PA"
Dim F As  string = " #.## ###.##### ###.##### ###.##### ###.#####"
FOR X As Single= 0 TO 2.0 STEP 0.25
   PGRN (N, A(), X, Y, P)
   ' Вычисления по аналитическим формулам
   Y1=1.* X^4 - 6.* X^2 + X + 4.
   P1=4.* X^3 - 12.* X + 1.
   PRINT USING F; X, Y, P, Y1, P1
NEXT   
Sleep


Стиль программирования я менять не стал. Если бы вы не поленились и почитали учебник, то без труда сами, еще быстрее меня, переписали пример с Qbasic (Ведь я Qbasic практически не знаю)

Цитата
Конечно, не обиделся, спасибо! Так мы продолжим диалог или разбегаемся?


Это вам решать, я то все равно здесь останусь biggrin


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » Вычисления значения и производной полинома по схеме Горнера (Вычисления значения и производной полинома по схеме Горнера)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: