Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 39
1

Рекурсия: определение максимума из двух чисел

21.05.2015, 16:31. Показов 1434. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день или вечер!

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

Программа определяет максимум из двух чисел (DOWN <= InDown <= InUp <= UP).

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const
  DOWN = 0; { Array-Untergrenze }
  UP = 10; { Array-Obergrenze }
 
  type
  tIndex = DOWN..UP;
  tFeld = array[tIndex] of integer;
 
Варианты ответов (A - E):
 
A   
 
function FeldMaxA (
          var inFeld : tFeld;
              inDown,
              inUp : tIndex) : integer;
 
  var
  Middle : tIndex;
  MaxL,
  MaxR : integer;
 
begin
  if inDown = inUp then
    FeldMaxA := inFeld[inUnten]
  else
  begin
    Middle := (inDown + inUp) div 2;
    MaxL := FeldMaxA (inFeld,inDown,Middle);
    MaxR := FeldMaxA (inFeld,Middle+1,inUp);
    if MaxL > MaxR then
      FeldMaxA := MaxL
    else
      FeldMaxA := MaxR
  end
end; { FeldMaxA }
 
 
B   
 
function FeldMaxB (
          var inFeld : tFeld;
              inDown,
              inUp : tIndex) : integer;
 
  var
  Middle : tIndex;
  MaxL,
  MaxR : integer;
 
begin
  if inDown = inUp then
    FeldMaxB := inFeld[inDown]
  else
  begin
    Middle := (inDown + inUp) div 2;
    MaxL := FeldMaxB (inFeld,inDown,Middle);
    MaxR := FeldMaxB (inFeld,Middle,inUp);
    if MaxL > MaxR then
      FeldMaxB := MaxL
    else
      FeldMaxB := MaxR
  end
end; { FeldMaxB }
 
C   
 
function FeldMaxC (
          var inFeld : tFeld;
              inDown,
              inUp : tIndex) : integer;
 
  var
  Middle : tIndex;
  MaxL,
  MaxR : integer;
 
begin
  if inDown > inUp then
    FeldMaxC := inFeld[inDown]
  else
  begin
    Middle := (inDown + inUp) div 2;
    MaxL := FeldMaxC (inFeld,inDown,Middle);
    MaxR := FeldMaxC (inFeld,Middle+1,inUp);
    if MaxL > MaxR then
      FeldMaxC := MaxL
    else
      FeldMaxC := MaxR
  end
end; { FeldMaxC }
 
D 
 
function FeldMaxD (
          var inFeld : tFeld;
              inDown,
              inUp : tIndex) : integer;
 
    var
    Middle : tIndex;
    MaxL,
    MaxR : integer;
 
begin
  if inDown > inUp then
    FeldMaxD := inFeld[inDown]
  else
  begin
    Middle := (inDown + inUp) div 2;
    MaxL := FeldMaxD (inFeld,inDown,Middle);
    MaxR := FeldMaxD (inFeld,Middle,inUp);
    if MaxL > MaxR then
      FeldMaxD := MaxL
    else
      FeldMaxD := MaxR
  end
end; { FeldMaxD }
 
E 
 
function FeldMaxE (
          var inFeld : tFeld;
              inDown,
              inUp : tIndex) : integer;
 
  var
  i : tIndex;
  HilfMax : integer; { вспомогательная переменная }
 
begin
  HilfMax := 0;
  for i := inDown to inUp do
    if inFeld[i] > HilfMax then
      HilfMax := inFeld[i];
  FeldMaxE := HilfMax
end; { FeldMaxE }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2015, 16:31
Ответы с готовыми решениями:

Написать программу поиска максимума из трех заданных чисел, используя процедуру поиска максимума из двух чисел
Написать программу поиска максимума из трех заданных чисел, используя процедуру поиска максимума из...

Определение минимума и максимума значений из двух таблиц
Добрый!!! Ломаю голову уже который день, Текст задания: определение минимума и максимума...

Используя функцию нахождения максимума из двух чисел, найти наибольшее из 5 чисел
Используя большее из двух чисел, найти большие из чисел А, В, С, Н, Р. А=1, В=0, С=4, Н=4, Р=3

Сложение двух чисел Рекурсивное определение операции сложения двух чисел и другие
Помогите составить программы целиком (всё с рекурсией). 1. Сложение двух чисел (а+b)....

11
1646 / 1075 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
21.05.2015, 16:45 2
Цитата Сообщение от Ohne Посмотреть сообщение
Программа определяет максимум из двух чисел
Может есть какое-то дополнительное условие? А то ведь как то не рационально.
0
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 39
22.05.2015, 19:41  [ТС] 3
Какие из следующих функций определяют максимум в области с переменными пределами inDown и inUp правильно?
Вы можете считать, что при (первом) вызове функций всегда
DOWN <= InDown <= InUp <= UP применяется.
(Примечание: При A - D речь не идёт о разумном применении рекурсии).

Больше ничего не было.

Добавлено через 16 часов 2 минуты
Я решила, что A, B, C, D, E являются правильными ответами.

Это верно или я где-то допустила ошибку?



Добавлено через 6 часов 53 минуты
Вот ссылка на пример:

(ссылка на форум удалена)
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.05.2015, 23:24 4
Мне кажется:
1. Не Е. Т.к. массив знаковый, а HilfMax := 0; в случае всех отрицательных чисел в массиве даст неверный результат.
2. Не D. Потенциальное зацикливание рекурсии при inDown=inUp (а это произойдет обязательно).
3. Не С. Обращение за пределами массива при inDown>inUp и inUp=10.
4. B - похоже.
5. Не А. Неопределённая переменная или константа inUnten.
1
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 39
22.05.2015, 23:46  [ТС] 5
Прошу прощения, но в варианте ответа А я допустила ошибку, пропустив и не переделав переменную inUnten в inDown.

inUnten - это inDown, т.е. inFeld[inUnten] - это inFeld[inDown]
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.05.2015, 23:59 6
Лучший ответ Сообщение было отмечено Ohne как решение

Решение

Тогда и я прошу прощения.
4. Не В. Зацикливание при inDown=9 и inUp=10
5. A - похоже.
1
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 39
22.05.2015, 23:59  [ТС] 7
В варианте Е мне кажется, что массив не знаковый, так как интервал чисел уже был предопределён условием задачи в константах DOWN = 0; и UP = 10; Если, конечно, я не ошибаюсь.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
23.05.2015, 00:01 8
А вообще - можно "в лоб" - набрать тестовую программу и проверить.

Добавлено через 1 минуту
Цитата Сообщение от Ohne Посмотреть сообщение
В варианте Е мне не кажется, что массив не знаковый,
Pascal
1
2
3
type
  tIndex = DOWN..UP;
  tFeld = array[tIndex] of integer;
integer ? не знаковый?
1
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 39
23.05.2015, 00:07  [ТС] 9
integer - это же, вроде, целочисленный
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
23.05.2015, 00:10 10
а диапазон возможных значений у него какой? Ну, например, для TurboPascal, или для более "родного" тебе диалекта?
1
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 39
23.05.2015, 00:10  [ТС] 11
Огромное спасибо за разъяснение!

Пойду еще потренируюсь над рекурсией.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
23.05.2015, 00:11 12
Удачи!
1
23.05.2015, 00:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2015, 00:11
Помогаю со студенческими работами здесь

Нахождение максимума двух чисел
Что значит нахождение максимума двух чисел, а именно вот такая запись return (a &gt; b) ? a : b;

Изменение максимума из двух чисел
using System; class MainClass { private static ref int Max(ref int x, ref int y) { ...

Нахождение максимума из двух чисел
Даны 4 числа - a,b,c,d. Получить три числа - x=max(a,b) y=max(c,d) z=max(x,y). Нахождение максимума...

Нахождение максимума из двух заданных чисел
Написать программу для нахождения максимума из двух заданных чисел. Тема процедуры и функции.

Функция определения максимума двух чисел
Не понимаю как написать. Для данных вещественных чисел x и y рассчитать, определив в программе...

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


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

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