0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
1

Образовать по рекуррентным формулам последовательности A и B

28.10.2019, 15:09. Показов 1162. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно образовать по рекуррентным формулам a[i]=F(a[i-1];b[i-1]) и b[i]=G(a[i-1];b[i-1]); две последовательности чисел A и B(в простом цикле);
исходные данные F:=(1-a/1-b*b)*sin(a*a+a*b+2);
G:=0,8+2*sin(b)-5,5*(sqr(sin(a)));
Заранее спасибо за помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2019, 15:09
Ответы с готовыми решениями:

Составить программу по рекуррентным формулам
Добрый день. У меня есть задание: составить программу вычисления по рекуррентным формулам БЕЗ...

Составить программу-функцию вычисления по рекуррентным формулам
Помогите пожалуйста с решением задач! Пытаюсь разобраться, но не понимаю как это делается!((( ...

Составить программу вычисления по рекуррентным формулам без использования массивов
В бейсике составить программу вычисления по рекуррентным формулам без использования массивов. Я в...

Вывести элементы последовательности заданной рекуррентным соотношением
Дано целое число N (> 0). Последовательность вещественных чисел Ak определяется следующим образом:...

13
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
29.10.2019, 04:02 2
Если следовать правилам чтения математических формул, то

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
F:=(1-\frac{a}{1}-b\cdot b)\cdot \sin(a\cdot a+a\cdot b+2);<br />

На 1 делить бессмысленно, значит, Вы неверно написали формулу.

Уточните задание.
0
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
29.10.2019, 10:20  [ТС] 3
Хм, в моём задании так и написано. Наверное, так F:=((1-a)/(1-b*b))*sin(a*a+a*b+2);
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
29.10.2019, 13:30 4
https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
F:=\frac{1-a}{1-b^2}\cdot \sin(a^2+ab+2)<br />

Буду считать, что первые члены последовательности задаются пользователем.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  a, b, f, g: real;
  i, n: integer;
 
begin
  write('a[1] = ');
  readln(a);
  write('b[1] = ');
  readln(b);
  write('Сколько членов последовательностей вывести? ');
  readln(n);
  writeln('A':8, 'B':17);
  for i := 1 to n do
    begin
      writeln(a:16, ' ', b:16);
      f := (1 - a) / (1 - b * b) * sin(a * (a + b) + 2);
      g := 0.8 + 2 * sin(b) - 5.5 * sqr(sin(a));
      a := f;
      b := g
    end;
  readln
end.
0
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
29.10.2019, 17:46  [ТС] 5
Кажется, Вы не учли, что каждый член последовательности зависит от предыдущего. И хотелось бы реализацию именно через функцию.
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
29.10.2019, 18:27 6
Цитата Сообщение от Luiza27 Посмотреть сообщение
Вы не учли, что каждый член последовательности зависит от предыдущего
Почему Вы так решили? Учёл, естественно.

Через функции запросто... Правда, незачем, но раз надо, значит, надо... Единственное, так как функций получается две, придётся запоминать предпоследний член одной из последовательностей, чтобы его можно было использовать во второй функции.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function f(a, b: real): real;
begin
  f := (1 - a) / (1 - b * b) * sin(a * (a + b) + 2)
end;
 
function g(a, b: real): real;
begin
  g := 0.8 + 2 * sin(b) - 5.5 * sqr(sin(a))
end;
 
var
  ai, bi, t: real;
  i, n: integer;
 
begin
  write('a[1] = ');
  readln(ai);
  write('b[1] = ');
  readln(bi);
  write('Сколько членов последовательностей вывести? ');
  readln(n);
  writeln('A':8, 'B':17);
  for i := 1 to n do
    begin
      writeln(ai:16, ' ', bi:16);
      t := ai;
      ai := f(ai, bi);
      bi := g(t, bi)
    end;
  readln
end.
1
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
29.10.2019, 21:15  [ТС] 7
Спасибо! Это только часть моего задания, и я не знала, как ее правильно реализовать, поэтому вам кажется, что бессмысленно

Добавлено через 1 час 48 минут

И еще кое-что, можете объяснить цикл в вашем коде? Точнее, вот эту строку writeln(ai:16, ' ', bi:16);
И почему индексы написаны так "bi", а не так b[i]. Разве не нужно ввести массив?

Добавлено через 23 минуты
То есть, пользуясь вашим способом, я могу эти последовательности потом сравнить? находить аi, для которых ai+bk<0 , например.
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
29.10.2019, 22:12 8
ai и bi - это просто имена переменных. Назвал я их так, чтобы они отличались от имён формальных параметров функций
function fg(a, b: real): real;
Можете переименовать их во что угодно. Например, в number_a и number_b, или просто в a и b, так тоже пойдёт.

Никаких индексов в программе и в помине нет, поскольку массивы не используется. Сами же написали: "Нужно образовать <...> две последовательности чисел...". Для формирования последовательностей массивы, как правило, не требуются. Если нужно хранить последовательности, тогда массивы требуются. Но в задании ни слова о хранении последовательности, поэтому массивы нужны как зайцу стоп-сигнал. Но, если Вы желаете иметь в запасе какое-то количество членов последовательности, массивы придётся ввести. Хотя, и не обязательно: можно вычислять нужный член последовательности каждый раз заново. Это дольше по времени, но всё же имеет право на жизнь.

Нажмите, чтобы узнать, что такое :16
Запись вида ai :16 - это форматированный вывод. В сколько позиций выводить предшествующую этому суффиксу переменную ai, в данном случае, в 16 позиций.

Суффиксы вида :m могут применяться для выводимых данных любого типа. Например, в строке 22 такой суффикс применяется для вывода символа.

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

Если указать m меньше, чем необходимо, то всё равно переменная выводится полностью, в минимально возможное (но большее m) количество позиций.


Вот Вам программа с массивами:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function f(a, b: real): real;
begin
  f := (1 - a) / (1 - b * b) * sin(a * (a + b) + 2)
end;
 
function g(a, b: real): real;
begin
  g := 0.8 + 2 * sin(b) - 5.5 * sqr(sin(a))
end;
 
const
  m = 100;
 
var
  a, b: array[1..m] of real;
  i, n: integer;
 
begin
  write('a[1] = ');
  readln(a[1]);
  write('b[1] = ');
  readln(b[1]);
  repeat
    write('Сколько членов последовательностей сформировать (от 1 до ', m, ')? ');
    readln(n)
  until (n >= 1) and (n <= m);
  writeln('A':8, 'B':17);
  writeln(a[1]:16, ' ', b[1]:16);
  for i := 2 to n do
    begin
      a[i] := f(a[i - 1], b[i - 1]);
      b[i] := g(a[i - 1], b[i - 1]);
      writeln(a[i]:16, ' ', b[i]:16);
    end;
  readln
end.
Переменная t больше не требуется, поскольку все предыдущие члены последовательностей хранятся в массивах a и b. Теперь, по крайней мере к членам последовательностей с номерами до n включительно, можно обращаться по индексу, например, типа a[25 + i - k], b[j] и тому подобное, и делать с ними что угодно: изменять, сравнивать с чем-либо или друг с другом, копировать куда-либо, образовывать из этих последовательностей новые последовательности.
Недостаток: размеры последовательностей ограничены размером статических массивов, применяемых для их хранения.

Так, на всякий случай: укажите, на котором диалекте паскаля Вы собираетесь писать Вашу работу? Может быть, для хранения последовательностей будет возможно применить динамические массивы? Или типизированные файлы... Или связные списки...

Учтите, что Pascal ABC и Pascal ABC.NET - это совершено разные диалекты паскаля. Первый - учебный, второй - мощная среда разработки на основе технологии .NET, помесь усовершенствованного Pascal ABC и C#. В нём есть, кстати, средства работы с последовательностями, лямбда-выражения и много ещё всякого... Не сказал бы, что лёгкого.
0
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
29.10.2019, 23:57  [ТС] 9
Работу я пишу на pascalABC.net , но могу выбрать и другой диалект. Это моя первая семестровая работа в вузе, поэтому многих нюансов я ещё не знаю.
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
30.10.2019, 20:20 10
Luiza27, у Вас непростой выбор: писать программу в стиле классического паскаля, или же так, как Вам больше нравится. Рубль за сто даю, что учили Вас классическому паскалю, а в качестве компилятора порекомендовали Pascal ABC.NET. Если желаете классический паскаль, то установите Lazarus (Delphi-подобная среда программирования на основе Free Pascal Compiler (FPC), бесплатная, с открытыми исходниками (лицензия GNU GPL). Очень удобная и мощная среда, позволяет писать программы на паскале практически для чего угодно. Можете писать в стиле классического паскаля в среде Pascal ABC.NET, почему бы и нет. Но! Тогда грех не воспользоваться нехилыми возможностями PABC.NET, тем более, что он просто создан для работы с последовательностями! Однако, для работы с последовательностями, несмотря на свою любовь к паскалю, я бы всё же порекомендовал C#, поскольку лучше использовать первоначальную и порядком развитую идею, чем перевод этой идеи на паскаль, пусть и весьма неплохой. Но, если паскаль ближе - то чего бы и не PABC.NET. Почитайте отзывы, описания, справки. При желании - изучите выбранный диалект (FPC, PABC.NET, Delphi). Это я вот к чему: Вы используете PABC.NET, но возможностей его не знаете даже на 1%, просто потому, что Вас этому не учили. Выбор за Вами. Могу дать рекомендации, но чуда не произойдёт: программировать Вам всё равно на том, что Вам ближе.
0
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
30.10.2019, 20:58  [ТС] 11
Спасибо большое, но сейчас я изучаю именно программирование, а не паскаль и его возможности. То есть программы мне писать нужно так, чтобы они не зависели от языка программирования. Надеюсь, я правильно выразилась.
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
30.10.2019, 21:29 12
Luiza27, это как раз очень и очень правильно. Одобряю. Главное - это понять, как написать программу, а на каком языке это дело будете реализовывать - это уже детали. Вообще, считаю, что холивары о преимуществах того или иного языка - это всего лишь от незнания. После изучения синтаксиса третьего, ну, может быть, четвёртого, языка, всякие холивары начинают выглядеть, как минимум, смешно, а, если точнее, нелепо. Каждый язык имеет свои преимущества, поэтому пишешь на том, на чём удобнее. Если нужны новые возможности - просто учишь новый язык.
0
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 14
30.10.2019, 21:31  [ТС] 13
Могу я отправить вам в лс свой код? Очень бы хотелось, чтобы знающий человек его проверил... есть кое-какие проблемы.
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,619
30.10.2019, 22:34 14
Luiza27, не надо. В тематических разделах обсуждение вопроса темы где-либо, кроме самой темы, запрещено. Смотрите правила форума, пункт 4.6. Пишите прямо сюда. И не такой уж я суперзнающий. Здесь есть и поумнее меня специалисты.
0
30.10.2019, 22:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2019, 22:34
Помогаю со студенческими работами здесь

Найти элемент последовательности, заданной рекуррентным выражением
Информатика и прикладная математика Добавлено через 7 минут Помогите сделать обработку...

Дано число и две последовательности. Образовать последовательность, состоящую из элементов 1-й последовательности, которых нет во 2-й
Здравствуйте! Дано число M и две последовательности А1,...,АM и В1,...,ВM. Образовать...

Дано число и две последовательности. Образовать последовательность, состоящую из элементов 1-й последовательности, которых нет во 2-й
Дано число M и две последовательности А1,...,АM и B1,...,BM. Образовать последовательность чисел С,...

Вычисление n-го члена числовой последовательности, заданной рекуррентным соотношением
Здравствуйте, помогите, пожалуйста, написать программу. Для вычисления n-го члена числовой...

Задачка по рекуррентным соотношениям: вычислить первые n элементов последовательности
Доброго вам. Помогите, пожалуйста, с задачкой. Нужно вычислить первые n элементов вот такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru