Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 17.10.2019
Сообщений: 77
1

Задание с рекурсией

22.12.2019, 14:07. Показов 1053. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание нужно сделать через рекурсию. Спасибо!

Инвертировать часть массива с первого элемента до элемента с заданным номером, после чего определить номер и значение самого последнего минимального элемента.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2019, 14:07
Ответы с готовыми решениями:

Не получается решить задание на рекурсией!
Не получается решить задачу((( Помогите решить на С

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

Задание исходного значения параметра эксперимента (задание интенсивности прибытия заявок)
Доброго времени! Вопрос в следующем: можно ли сделать так, чтобы в блоке source число генерируемых...

Проверьте верно ли сделано задание (задание для ослабленных детей)
Схема дана на фото, нужно найти скорости точек А и В изображенных на схеме, проверьте мое решение...

12
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
22.12.2019, 14:58 2
Последний минимальный элемент в рекурсии

Добавлено через 27 минут
Если минимальный тоже нужно рекурсией, то так.

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
51
52
53
54
55
56
57
const k=100;
type arr=array[1..k] of integer;
procedure gen(i:integer; const k: integer; var x: arr);
begin
  if i <= k
  then begin
    x[i] := random(100);
    write(x[i]:3);
    gen(i + 1, k, x)
  end
  else writeln
end;
 
procedure rprn(k:integer;n:integer;var x:arr);
//k-индекс элемента, n-до куда делать реверс, x-массив
var c:integer;
begin
if k=1 then
 begin
  c:=x[1];
  x[1]:=x[n];
  x[n]:=c;
 end;
if k<=n div 2 then rprn(k+1,n,x);
end;
function Min(n:integer;x:arr):integer;
//n-размер массива  x-массив
var w:integer;
begin
if n>1 then
 begin
  w:=Min(n-1,x);
  if x[n]>x[w] then Min:=w
  else  Min:=n;
 end
else Min:=1;
end;
var a: arr;
    n,b,r: integer;
begin
repeat
write('Введите кол-во элементов от 10 до 100 n=');
readln(n);
until n in [10..100];
repeat
write('Введите число элементов для реверса от 2 до ',n-1,' b=');
readln(b);
until b in [2..n-1];
randomize;
gen(1,n,a);
rprn(1,b,a);
writeln('Реверс элементов c первого по номер ',b);
for b:=1 to n do
write(a[b]:3);
writeln;
write('Последний минимальный элемент=',a[Min(n,a)],' его индекс=',Min(n,a))
end.
0
1 / 1 / 0
Регистрация: 17.10.2019
Сообщений: 77
30.01.2020, 17:34  [ТС] 3
Нужно инвертировать часть массива, а не 1-ый элемент поменять местами с выбранным
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
31.01.2020, 13:13 4
Lifelover22, инверсия части массива:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure swap(var a, b : Integer);
var t : integer;
begin t := a; a := b; b := t; end;
 
procedure invrec(var a : ta; start, finish : integer);
begin
  if start < finish then
  begin
    swap(a[start], a[finish]);
    invrec(a, start + 1, finish - 1);
  end;
end;
Дальше сам разберешься?
0
1 / 1 / 0
Регистрация: 17.10.2019
Сообщений: 77
31.01.2020, 15:01  [ТС] 5
Вот бы собрать это еще в единый код, а то у меня возникли с этим трудности
0
3017 / 1642 / 649
Регистрация: 19.03.2019
Сообщений: 5,313
31.01.2020, 15:24 6
Цитата Сообщение от Lifelover22 Посмотреть сообщение
Вот бы собрать это еще в единый код
так устроит?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const n = 20;
 
procedure invrec(var a : array of integer; start, finish : integer);
begin
  if start < finish then
  begin
    swap(a[start], a[finish]);
    invrec(a, start + 1, finish - 1);
  end;
end;
 
begin
  var mas := ArrRandomInteger(n);
  mas.PrintLn;
  
  var k := ReadInteger('Введите до какого элемента инвертировать: ');
  
  invrec(mas, 0, k-1);
  
  WriteLn('Массив после инвертирования:');
  mas.Println;
  
end.
1
1 / 1 / 0
Регистрация: 17.10.2019
Сообщений: 77
31.01.2020, 16:01  [ТС] 7
Извините, но не могли бы ли вы переделать свой код без Println, а с обычным writeln, и с обычным объявлением вара? А так же организовать рандом не через функцию, так же как и ввод k. Спасибо!
0
1 / 1 / 0
Регистрация: 17.10.2019
Сообщений: 77
31.01.2020, 16:11  [ТС] 8
Я пытался переделать под нормальный синтаксис паскаля, но у меня не работает программа:

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
Program Lifelover;
 
Const n = 20;
 
Procedure invrec (var a: array of integer; start, finish: integer);
 
  begin
    if start < finish then
      begin
        swap(a[start], a[finish]);
        invrec(a, start + 1, finish - 1);
      end;
  end;
 
Var
  mas: array [1..20] of integer;
  i, k: integer;
 
begin
  for i := 1 to 20 do
    begin
      mas[i] := random (1, 99);
      write (mas[i]:3)
    end;
  
  write ('Введите до какого элемента инвертировать: ');
  read(k);
  
  invrec (mas, 0, k-1);
  
  WriteLn('Массив после инвертирования:');
  
  for i := 1 to 20 do
    begin
      write (a[i]:3)
    end;
end.
Миниатюры
Задание с рекурсией  
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
31.01.2020, 17:15 9
Описание типа массива в начало программы и использовать его для переменной и параметра процедуры.
0
3017 / 1642 / 649
Регистрация: 19.03.2019
Сообщений: 5,313
31.01.2020, 17:18 10
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
Program Lifelover;
 
Const n = 20;
 
type tmas = array [1..n] of integer;
 
Procedure invrec (var a: tmas; start, finish: integer);
 
  begin
    if start < finish then
      begin
        swap(a[start], a[finish]);
        invrec(a, start + 1, finish - 1);
      end;
  end;
 
Var
  mas : tmas;
  i, k: integer;
 
begin
  for i := 1 to n do
    begin
      mas[i] := random (1, 99);
      write (mas[i]:3)
    end;
  Writeln;  
  
  write ('Введите до какого элемента инвертировать: ');
  read(k);
  
  invrec (mas, 1, k);
  
  WriteLn('Массив после инвертирования:');
  
  for i := 1 to n do
      write (mas[i]:3);
  WriteLn;
  
end.
Цитата Сообщение от Lifelover22 Посмотреть сообщение
Извините, но не могли бы ли вы переделать свой код без Println, а с обычным writeln, и с обычным объявлением вара? А так же организовать рандом не через функцию, так же как и ввод k. Спасибо!
Это не мой код, а volvo, я просто дописал код вызова.
а вообще непонятно, почему ты на PascalABC.NET пишешь код в духе "классического" Паскаля. Для "классики" есть гораздо более подходящие компиляторы и IDE
1
1 / 1 / 0
Регистрация: 17.10.2019
Сообщений: 77
31.01.2020, 18:40  [ТС] 11
А свап можно в ручную переделать? Просто у нас даже брейк не принимают, что уж там о свапе который мы не проходили...
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
01.02.2020, 01:15 12
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
более подходящие компиляторы и IDE
Free Pascal тот же с его Lazarus, кроме того в этой IDE возможностей гораздо больше, чем в PascalABC.NET, ибо она не затачивалась как среда конкретно на обучение. А PascalABC.NET, как говорится, не рыба, ни мясо - ни C#, ни Паскаль...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.02.2020, 01:19 13
Цитата Сообщение от Lifelover22 Посмотреть сообщение
А свап можно в ручную переделать?
У тебя какой-то дефект зрения, что-ли? Или ты принципиально воспринимаешь только те коды, которые последние? Я тебе выложил код, в котором swap реализован вручную. Ты ж его, выходит, не смотрел даже, я уж не говорю о том, чтобы попытаться применить то, что тебе показали. Просто тупо ждешь готового кода, чтобы взять и впарить преподу? Жди дальше...
0
01.02.2020, 01:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2020, 01:19
Помогаю со студенческими работами здесь

программа с рекурсией
#include &lt;iostream.h&gt; #include &lt;math.h&gt; double rekyrsia(int ,int ,int ); int x=2; int...

Проблемы с рекурсией
Здравствуйте. Пытаюсь сделать нечто на подобии 3д движка на visual studio 2008 en (c++ &amp; directx9)....

Задача с рекурсией,
{a^n b^n n,m=&gt;0} вводи длину слова L Вывод должен быть таким, например L=2 aa ab bb L=3

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru