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

Рекурсия: найти отношение максимального и минимального из последовательности введенных ненулевых чисел

09.10.2010, 22:08. Показов 1777. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста составить программу, с помощью рекурсии:

Определить значение отношения максимального и минимального из последовательности введенных ненулевых чисел (условие завершения ввода чисел выбрать самостоятельно).

(Буду очень признателен, заранее спасибо.)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2010, 22:08
Ответы с готовыми решениями:

Найти сумму максимального и минимального чисел последовательности
Дана последовательность натуральных чисел {Aj} произвольной длины. Найти сумму максимального и...

Массивы---Найти сумму максимального и минимального чисел последовательности ПОМОГИТЕ ПЛЗ
Дана последовательность целых чисел {Aj} произвольной длины. Найти произведение положительных...

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

Поиск суммы минимального и максимального из трех введенных чисел
Составить программу поиска суммы минимального и максимального из трех введенных чисел.

5
11 / 11 / 2
Регистрация: 09.10.2010
Сообщений: 23
10.10.2010, 00:58 2
C++
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
#include <iostream>
#include <vector>
 
using namespace std;
 
template< typename Type, 
          template <typename, typename> class Container >
Type find_max( typename Container<Type, allocator<Type> >::iterator beg, 
               typename Container<Type, allocator<Type> >::iterator end )
{
  Type i1 = *beg++;
  if (beg == end) return i1;
  Type i2 = find_max< Type, Container >(beg, end);
  return i1 > i2 ? i1 : i2;
}
 
 
template< typename Type, 
          template <typename, typename> class Container >
Type find_min( typename Container<Type, allocator<Type> >::iterator beg, 
               typename Container<Type, allocator<Type> >::iterator end )
{
  Type i1 = *beg++;
  if (beg == end) return i1;
  Type i2 = find_min< Type, Container >(beg, end);
  return i1 < i2 ? i1 : i2;
}
 
 
int main()
{
  vector<double> a;
  double i;
  while (cin >> i && i!=0) a.push_back(i);
  cout << find_max< double, vector >(a.begin(), a.end()) /
          find_min< double, vector >(a.begin(), a.end()) 
       << endl;
 
  return 0;
}
Хотя, искать min/max рекурсией - это, конечно, извращение
1
0 / 0 / 0
Регистрация: 21.03.2010
Сообщений: 8
10.10.2010, 01:35  [ТС] 3
Знаю)) Просто препод потребовал сделать так лабораторку))) Пасиб тебе =)
0
11 / 11 / 2
Регистрация: 09.10.2010
Сообщений: 23
10.10.2010, 01:44 4
C++
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
#include <iostream>
#include <vector>
 
using namespace std;
 
template< typename Type >
Type min(Type i1, Type i2)
{
  return i1 < i2 ? i1 : i2;
}
 
template< typename Type >
Type max(Type i1, Type i2)
{
  return i1 > i2 ? i1 : i2;
}
 
template< typename Type, 
          template <typename, typename> class Container >
Type find_minmax( typename Container<Type, allocator<Type> >::iterator beg, 
                  typename Container<Type, allocator<Type> >::iterator end,
                  Type (*f)(Type, Type) )
{
  Type i1 = *beg++;
  if (beg == end) return i1;
  Type i2 = find_minmax< Type, Container >(beg, end, f );
  return f(i1,i2);
}
 
int main()
{
  vector<double> a;
  double i;
  while (cin >> i && i!=0) a.push_back(i);
 
  cout << find_minmax< double, vector >(a.begin(), a.end(), max<double>)/
          find_minmax< double, vector >(a.begin(), a.end(), min<double>)
       << endl;
 
  return 0;
}
Так еще круче
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11896 / 7268 / 1721
Регистрация: 25.07.2009
Сообщений: 13,311
10.10.2010, 17:12 5
не факт, что точно по заданию, но сделал рекурсивным почти всё...
C
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void fill_array(int * arr, size_t size, int limit){
    if ( ! size )
        return;
    *arr = rand() % limit + 1;
    fill_array(++arr, --size, limit);
}
 
int * max_element(int * arr, size_t size){
    return ( ! size ) ? NULL : ( size == 1 ) ? arr : ( *arr > *(arr + size - 1) ) ? max_element(arr, --size) :
        max_element(++arr, --size);
}
 
int * min_element(int * arr, size_t size){
    return ( ! size ) ? NULL : ( size == 1 ) ? arr : ( *arr < *(arr + size - 1) ) ? min_element(arr, --size) :
        min_element(++arr, --size);
}
 
double max_min_relation(int * arr, size_t size){
    return (double)*max_element(arr, size) / (double)*min_element(arr, size);
}
 
void print_array(const int * arr, size_t size){
    if ( ! size )
        return;
    printf("%d%c", *arr, ( size > 1 ) ? ' ' : '\n');
    print_array(++arr, --size);
}
 
#define SIZE 5
 
int main(void){
    int arr[SIZE];
 
    srand(time(NULL));
 
    fill_array(arr, SIZE, 10);
    printf("Array:\n");
    print_array(arr, SIZE);
    printf("Relation between max and min elements: %.1f\n", max_min_relation(arr, SIZE));
 
    exit(0);
}
1
Эксперт С++
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
11.10.2010, 13:43 6
Как-то все сложно у вас получилось. И зачем использовать векторы/массивы, если у нас есть рекурсия?
C++
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
#include <iostream>
#include <limits>
 
double ratio(double min, double max)
{
    double number;
    std::cout << "> ";
    if(std::cin >> number)
    {
        if(number == 0)
        {
            std::cout << "Нуль проигнорирован" << std::endl;
            return ratio(min, max);
        }
        if(min > number)
            min = number;
        if(max < number)
            max = number;
        return ratio(min, max);
    }
    std::cout << std::endl;
    return max / min;
}
 
int main()
{
    std::cout << "Введите последоваетельность чисел (Ctrl+D или Ctrl+Z для"
        << " завершения ввода): " << std::endl;
    double result = ratio(std::numeric_limits<double>::max(),
                        std::numeric_limits<double>::min());
    std::cout << "Отношение максимального и минимального числа равно " << result
        << std::endl;
        
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2010, 13:43
Помогаю со студенческими работами здесь

Найти среднее арифметическое минимального и максимального элементов из 10 введенных
1. Даны величины углов треугольника. Определить является ли это треугольник: а) остроугольным б)...

Найти среднее арифметическое минимального и максимального элементов из 10 введенных
1. Найти среднее арифметическое минимального и максимального элементов из 10 введенных. Нужно...

Найти номер максимального и номер минимального из чисел последовательности
Даны натуральное число n и целые числа а1, a2, ..., аn. Найти номер максимального и номер...

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


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

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

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