Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
#1

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

26.12.2011, 22:13. Просмотров 737. Ответов 14
Метки нет (Все метки)

Как осуществить поиск максимального и минемального числа в одномерном массиве с помощью рекурсии, тремя разными способами пробова:
1.По отдельности их написать.
2.Смешать вмести.
3.Две функции ввести.
Все неправильно работают, в форе это пару минут, а вот с рекурсией у меня как то не заладилось((( Уже столько времени сижу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите пожалуйста, фантазии уже не хватает. (C++):

Графы с++, пожалуйста, всю голову уже сломал - C++
У меня два массива (вектора), в первом создается длина ребер графов. Во втором массиве связаны ли они с "землей", если да - 1, нет - 0. И к...

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

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

Подскажите как правильно подключать библиотеки и решения. (функции уже определены в *.obj) - C++
Вот тут взял самомопальный aes. Там есть 3 исходных кода. 3 - сама программа. 1 и 2 - библиотека и решение.

подскажите пожалуйста - C++
вот код программы... ________________ #include <iostream.h> #include <math.h> int A,B,n,N; double...

Подскажите пожалуйста - C++
Здравствуйте, я нашел длину каждого слова в строке, а как теперь вывести максимальную длину (т.е. то слово в строке, которое имеет...

14
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;
}
Источник
0
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 минуты
Подскажите пожалуйста как ее вызвать в чем ошибка?
0
valeriikozlov
Эксперт С++
4676 / 2502 / 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);
0
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 14:50  [ТС] #5
Она все равно работает неправильно выдает -85....0 и т.д. число из 9 где то цыфр.
0
go
Эксперт С++
3586 / 1366 / 129
Регистрация: 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;
}
1
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 15:21  [ТС] #7
Мне чем проще тем лучше)))
0
go
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 15:22 #8
Цитата Сообщение от Atamanochka Посмотреть сообщение
Мне чем проще тем лучше)))
Такие задачи просто не решаются. Сама рекурсия очень сложна для понимания
0
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.Хотя алгорит мне сам понятен.
0
go
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 15:34 #10
Цитата Сообщение от Atamanochka Посмотреть сообщение
size_t
Это тип данных.

Цитата Сообщение от Atamanochka Посмотреть сообщение
bool f = true
Объявление Булевой переменной ( и присвоили значение "истина", если в вызове она пропущена).
1
easybudda
Модератор
Эксперт CЭксперт С++
9722 / 5673 / 972
Регистрация: 25.07.2009
Сообщений: 10,919
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;
}
1
Atamanochka
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 13
27.12.2011, 15:46  [ТС] #12
Спасибо большое, правда мы этого еще не проходили, но все равно вы мне очень помогли))) Осталось только вот эту строчку адаптирповать под мой уровень если это возможно)))
0
valeriikozlov
Эксперт С++
4676 / 2502 / 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");
}
0
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?
0
valeriikozlov
Эксперт С++
4676 / 2502 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2011, 16:45 #15
Цитата Сообщение от Atamanochka Посмотреть сообщение
Я в новом проекте ее создала не чего не изменилось, я вот думаю может быть на конце 4?
Да нет, так нормально.
0
27.12.2011, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2011, 16:45
Привет! Вот еще темы с ответами:

Подскажите пожалуйста - C++
У меня проблема такая, когда пробую создать консольное приложение(с++) в visual studio, то выскакивает пустое окошко с кнопками готово, и...

Подскажите, пожалуйста - C++
Вот начал я изучать С++ и сразу же встретился с проблемой. Написал код простой. И тут мне Visual Studio 2010 Заявил &quot;идентификатор cout не...

Подскажите, пожалуйста. - C++
Существует - ли способ давать переменным типа char русские буквы так, чтобы они корректно потом выводились на экран/в файл?

Подскажите пожалуйста! - C++
Какая задача у этого кода? // &lt;DFM&gt; TFORM2 = class(TForm); object Form2: TForm2 Left = 0 Top = 0 ClientHeight = 2 ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.