Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.07.2021
Сообщений: 2

Найти член последовательности с заданным номером

10.07.2021, 13:14. Показов 893. Ответов 1

Студворк — интернет-сервис помощи студентам
Кoля выписывает числa на доску по следующему правилу: первое число b1=3, второе число b2=9, а каждое следующее выражается формулой:
bk=bk-2-bk-1, где k ≥ 2.
Найдите b2021.

Необходимо привести код прoграммы, который решает данную задачу.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2021, 13:14
Ответы с готовыми решениями:

Задача на Pascal
Решить задачу на паскале: Рекуррентная последовательность опеределена следующим образом

Задача по файлам на Pascal
Допустим дан файл с 35 рандомными числами.Нужно вывести только те строчки которые начинаются на 8

Pascal, задача на развилки
Кто может, решите и составьте блок схему.

1
Модератор
10451 / 5745 / 3409
Регистрация: 17.08.2012
Сообщений: 17,475
11.07.2021, 00:04
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  a, b, c, k: integer;
begin
  a := 3;
  b := 9;
  for k := 3 to 2021 do
    begin
      c := a - b;
      a := b;
      b := c
    end;
  write(c)
end.
Добавлено через 3 часа 46 минут
Программа, приведённая выше, выдаёт неверный результат. Я не сразу понял, что результат получается настолько большим, что никак не помещается в диапазон типа integer [-2147483648..2147483647].

Для Pascal ABC.NET (не для простого Pascal ABC, без суффикса .NET):
Pascal
1
2
3
4
5
##
  var a: BigInteger := 3;
  var b: BigInteger := 9;
  for var k := 3 to 2021 do if k.IsOdd then a -= b else b -= a;
  a.Print
Тестовый вариант программы (не для сдачи):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##
  var a: BigInteger := 3;
  var b: BigInteger := 9;
  var s: string := '';
  for var k := 3 to 2021 do 
    begin
      if s = '' then
        begin
          if odd(k) then $'{k-2} {a} {b}'.Print
          else $'{k-2} {b} {a}'.Print;
          read(s);
          readln
        end;
      if k.IsOdd then a -= b else b -= a;
    end;
  a.PrintLn.ToString.Length.Print
На основании результатов тестового варианта программы, можно заключить, что все нечётные члены последовательности, начиная с k=2, отрицательные, а чётные - положительные, и, начиная с к=4 по модулю равны bk=|bk-2|+|bk-1|. Можно искать числа этой новой последовательности, и вывести 2021 член со знаком "-", так как число 2021 нечётное. Понадобится только процедура сложения длинных чисел, да ещё нужно будет вычислить модуль третьего члена простым вычитанием. Если делать "в лоб" с длинным вычитанием, понадобится подпрограмма вычитания чисел со знаком, что будет гораздо сложнее, да и не нужно.

Для любого диалекта паскаля:
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
37
const
  m = 423; {максимально необходимое количество десятичных разрядов результата}
type
  Big = array[1..m] of byte; {тип для чисел}
  
{процедура сложения длинных чисел x := x + y}
{d - длина результата}
procedure add(var x: Big; const y: Big; var d: integer);
var
  i: integer;
begin
  for i := 1 to d do {цикл по разрядам чисел}
    begin
      x[i] := x[i] + y[i]; {складываем разряды}
      if x[i] > 9 then {если есть перенос, то}
        begin
          dec(x[i], 10); {корректируем разряд}
          inc(x[i+1]) {распространяем перенос}
        end
    end;
  if (d < m) and (x[d+1] > 0) then inc(d) {корректируем количество разрядов результата}
end;
 
var
  a, b: Big; {массивы разрядов длинных чисел для нечётных и чётных членов последовательности}
  d, k: integer; {количество разрядов результата, счётчик,}
begin
  d := 1; {начальная длина результата}
  a[1] := 3; {первый член}
  b[1] := 9; {второй член}
  a[1] := b[1] - a[1]; {модуль третьего члена}
  for k := 4 to 2021 do {цикл вычисления модулей остальных членов}
    if odd(k) then add(a, b, d) else add(b, a, d);
  write('-');
  for k := m downto 1 do write(a[k]);
  readln
end.
На всякий случай, с вводом номера члена последовательности (без проверки корректности вводимых значений):
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
const
  m = 10000; {максимально возможное количество десятичных разрядов результата}
type
  Big = array[1..m] of byte; {тип для чисел}
 
{процедура сложения длинных чисел x := x + y}
{d - длина результата}
procedure add(var x: Big; const y: Big; var d: integer);
var
  i: integer;
begin
  for i := 1 to d do {цикл по разрядам чисел}
    begin
      x[i] := x[i] + y[i]; {складываем разряды}
      if x[i] > 9 then {если есть перенос, то}
        begin
          dec(x[i], 10); {корректируем разряд}
          inc(x[i+1]) {распространяем перенос}
        end
    end;
  if (d < m) and (x[d+1] > 0) then inc(d) {корректируем количество разрядов результата}
end;
 
var
  a, b: Big; {массивы разрядов длинных чисел для нечётных и чётных членов последовательности}
  d, k, n: integer; {количество разрядов результата, счётчик, номер члена последовательности}
begin
  write('n = ');
  readln(n);
  d := 1; {начальная длина результата}
  a[1] := 3; {первый член}
  b[1] := 9; {второй член}
  a[1] := b[1] - a[1]; {модуль третьего члена}
  for k := 4 to n do {цикл вычисления модулей остальных членов}
    if odd(k) then add(a, b, d) else add(b, a, d);
  if n > 3 then {если номер члена больше 3, то}
    if odd(n) then {если номер члена нечётный, то}
      begin
        write('-'); {печатаем знак}
        for k := d downto 1 do write(a[k]) {печатаем разряды нечётного числа}
      end
    else {иначе (если номер члена чётный)}
      for k := d downto 1 do write(b[k]) {печатаем разряды чётного числа}
  else {иначе (если номер члена не больше 3)}
    if n = 1 then writeln(3) {если номер члена 1, то печатаем первый член}
    else {иначе}
      if n = 2 then write(9) {если номер члена 2, то печатаем второй член}
      else write(-6); {иначе печатаем третий член}
  readln
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.07.2021, 00:04
Помогаю со студенческими работами здесь

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

Математическая задача в Pascal!
y=(x-1)/(x+1) + (1/3)*(x-1)/(x+1)^3 + (1/5)*(x-1)/(x+1)^5 + (1/7)*(x-1)/(x+1)^7 + (1/9)*(x-1)/(x+1)^9 + (1/11)*(x-1)/(x+1)^11 Надо...

Задача по формам Pascal ABC
Помогите пожалуйста сделать задачку с формами. Вводится в форму число в 10 системе счисления на выводе получается 2,8,16 система счисления....

Задача на Pascal линейное представление НОД
Нахождение НОД и его линейного представления для двух натуральных чисел. Пользователь вводит два натуральных числа a и b. В окне вывода...

Задача про отправленного жука на Pascal ABC
Отправленный жук начинает движение из выбранной точки на квадрате 10×10 см, подвешенного над баком с кипчщим маслом. За каждую секунду жук...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru