Форум программистов, компьютерный форум CyberForum.ru

Подскажите пожалуйста, фантазии уже не хватает. - C++

Восстановить пароль Регистрация
 
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
26.12.2011, 22:13     Подскажите пожалуйста, фантазии уже не хватает. #1
Как осуществить поиск максимального и минемального числа в одномерном массиве с помощью рекурсии, тремя разными способами пробова:
1.По отдельности их написать.
2.Смешать вмести.
3.Две функции ввести.
Все неправильно работают, в форе это пару минут, а вот с рекурсией у меня как то не заладилось((( Уже столько времени сижу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
26.12.2011, 22:37     Подскажите пожалуйста, фантазии уже не хватает. #2
Atamanochka, гугл выдал следующий код:
C++
1
2
3
4
5
6
7
8
//Листинг 7.22. Рекурсивная функция вычисления минимума в массиве
 int min(const int a[], int left, int  right)
{     if (left==right) return a[left];//--можно и a[right]
    int m = (left+right)/2;            //--середина 
    int x = min(a, left, m);    //--обработка левой половины массива
    int y = min(a, m+1, right);    //--обработка правой половины массива
    if (x<y) return x; else return y;
}
Источник
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 13:46  [ТС]     Подскажите пожалуйста, фантазии уже не хватает. #3
Я так максимум находила:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
static double max(double a[], int l, int r) 
  { 
    if (l == r) return a[l]; 
    int m = (l+r)/2; 
    double u = max(a, l, m); 
    double v = max(a, m+1, r); 
    if (u > v) return u;
    else return v; 
  } 
void main()
{double mas[5]={1.0,2.0,3.0,4.0,5.0};
cout<<max(mas,5,5);
system("pause");
}
Но она не правильно работает может быть я ее неправильно вызываю?

Добавлено через 14 часов 43 минуты
Подскажите пожалуйста как ее вызвать в чем ошибка?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2011, 14:35     Подскажите пожалуйста, фантазии уже не хватает. #4
Цитата Сообщение от Atamanochka Посмотреть сообщение
C++
1
cout<<max(mas,5,5);
заменить на
C++
1
cout<<max(mas,0,5);
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 14:50  [ТС]     Подскажите пожалуйста, фантазии уже не хватает. #5
Она все равно работает неправильно выдает -85....0 и т.д. число из 9 где то цыфр.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 15:15     Подскажите пожалуйста, фантазии уже не хватает. #6
Вот 1 из вариантов. Могу еще более простых предложить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <limits.h>
 
int Rec_Max (int *arr, size_t size, int max = INT_MIN )
{
    int t;
    return  size ? (*arr > (t = Rec_Max (arr + 1, size - 1, max)) ? *arr : t) : INT_MIN;
}
 
 
int main()
{
    int arr[] = {1,2,2,1,3,0};
    int size = sizeof (arr) / sizeof (arr[0]);
 
    std::cout << " Max = " << Rec_Max (arr, size) << std::endl;
 
    std::system ("pause");
    return 0;
}
Добавлено через 7 минут
Вот еще один (рекурсия заменяет цикл)
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
#include <iostream>
#include <limits.h>
 
int Rec_Max (int *arr, size_t size, bool f = true )
{
    static int max;
    if ( size ) {
        if ( f )
            max = INT_MIN;
 
        if ( *arr > max )
            max = *arr;
        Rec_Max (arr + 1, size - 1, false);
    }
 
    return  max;
}
 
 
int main ()
{
    int arr[] = {1,2,2,1,3,0};
    int size = sizeof (arr) / sizeof (arr[0]);
 
    std::cout << " Max = " << Rec_Max (arr, size) << std::endl;
 
    std::system ("pause");
    return 0;
}
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 15:21  [ТС]     Подскажите пожалуйста, фантазии уже не хватает. #7
Мне чем проще тем лучше)))
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 15:22     Подскажите пожалуйста, фантазии уже не хватает. #8
Цитата Сообщение от Atamanochka Посмотреть сообщение
Мне чем проще тем лучше)))
Такие задачи просто не решаются. Сама рекурсия очень сложна для понимания
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 15:27  [ТС]     Подскажите пожалуйста, фантазии уже не хватает. #9
Да я пониаю но я только поступила в институт и например вот эту строчку не совсем понимаю:
int Rec_Max (int *arr, size_t size, bool f = true ), а точнее bool f = true и size_t.Хотя алгорит мне сам понятен.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 15:34     Подскажите пожалуйста, фантазии уже не хватает. #10
Цитата Сообщение от Atamanochka Посмотреть сообщение
size_t
Это тип данных.

Цитата Сообщение от Atamanochka Посмотреть сообщение
bool f = true
Объявление Булевой переменной ( и присвоили значение "истина", если в вызове она пропущена).
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.12.2011, 15:41     Подскажите пожалуйста, фантазии уже не хватает. #11
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
#include <stdio.h>
 
#define COUNT(arr) ( sizeof(arr) / sizeof(*arr) )
 
int * max(const int * arr, const size_t count) {
    return ( count < 2 ) ? (int*)arr : ( *arr < *(arr+count-1) ) ? max(arr+1, count-1) : max(arr, count-1);
}
 
int * min(const int * arr, const size_t count) {
    return ( count < 2 ) ? (int*)arr : ( *arr > *(arr+count-1) ) ? min(arr+1, count-1) : min(arr, count-1);
}
 
void dump(const int * arr, size_t count) {
    while ( count-- )
        printf("%d%c", *arr++, ( count ) ? ' ' : '\n');
}
 
int main(void){
    int arr[] = { 3, 1, 2, 5, 9, 8 };
    
    printf("Array: ");
    dump(arr, COUNT(arr));
    printf("Min: %d\n", *min(arr, COUNT(arr)));
    printf("Max: %d\n", *max(arr, COUNT(arr)));
    
    return 0;
}
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 15:46  [ТС]     Подскажите пожалуйста, фантазии уже не хватает. #12
Спасибо большое, правда мы этого еще не проходили, но все равно вы мне очень помогли))) Осталось только вот эту строчку адаптирповать под мой уровень если это возможно)))
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2011, 16:18     Подскажите пожалуйста, фантазии уже не хватает. #13
Цитата Сообщение от Atamanochka Посмотреть сообщение
Она все равно работает неправильно выдает -85....0 и т.д. число из 9 где то цыфр.
странно, а у меня работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
static double max(double a[], int l, int r) 
  { 
    if (l == r) return a[l]; 
    int m = (l+r)/2; 
    double u = max(a, l, m); 
    double v = max(a, m+1, r); 
    if (u > v) return u;
        else return v; 
  } 
void main()
{double mas[5]={1.0,2.0,3.0,4.0,5.0};
cout<<max(mas,0,5);
system("pause");
}
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 16:31  [ТС]     Подскажите пожалуйста, фантазии уже не хватает. #14
Цитата Сообщение от valeriikozlov Посмотреть сообщение
странно, а у меня работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
static double max(double a[], int l, int r) 
  { 
    if (l == r) return a[l]; 
    int m = (l+r)/2; 
    double u = max(a, l, m); 
    double v = max(a, m+1, r); 
    if (u > v) return u;
        else return v; 
  } 
void main()
{double mas[5]={1.0,2.0,3.0,4.0,5.0};
cout<<max(mas,0,5);
system("pause");
}
Я в новом проекте ее создала не чего не изменилось, я вот думаю может быть на конце 4?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2011, 16:45     Подскажите пожалуйста, фантазии уже не хватает.
Еще ссылки по теме:

C++ Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана)
C++ Подскажите пожалуйста
C++ Графы с++, пожалуйста, всю голову уже сломал

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2011, 16:45     Подскажите пожалуйста, фантазии уже не хватает. #15
Цитата Сообщение от Atamanochka Посмотреть сообщение
Я в новом проекте ее создала не чего не изменилось, я вот думаю может быть на конце 4?
Да нет, так нормально.
Yandex
Объявления
27.12.2011, 16:45     Подскажите пожалуйста, фантазии уже не хватает.
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru