![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Пол:
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
|
Решить задачу двумя способами – с применением рекурсии и без нее.
9. Найти максимальный элемент в массиве a1...an, используя соотношение (метод деления пополам) max (a1...an)=max (max (a1...an/2), max (an/2+1, an)). Нужен код для рекурсивного способа. |
|
|
|
| Реклама: | казань-астрахань | круизы на валаам кижи из москвы | купить искусственный сапфир в москве | Контроллеры CUA100 | кровать для новорожденных |
|
|
#2
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Думаю, что примерно так:
int maxr(int *a,int n) { if(n==1)return a[0]; If(n==2)return __max(a[0],a[1]); max1= maxr(a,n/2); max2=maxr(a+n/2,n/2); return __max(max1,max2); }
__________________
Сергей Сергеевич |
|
|
|
|
|
#3
|
|
Неактивный пользователь
Пол:
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
|
Вот что выдает прога.
D:\Program Files\Microsoft Visual Studio\MyProjects\dfgk\dfgk.cpp(36) : error C2064: term does not evaluate to a function D:\Program Files\Microsoft Visual Studio\MyProjects\dfgk\dfgk.cpp(37) : error C2661: 'maxr' : no overloaded function takes 2 parameters D:\Program Files\Microsoft Visual Studio\MyProjects\dfgk\dfgk.cpp(38) : error C2661: 'maxr' : no overloaded function takes 2 parameters D:\Program Files\Microsoft Visual Studio\MyProjects\dfgk\dfgk.cpp(39) : error C2064: term does not evaluate to a function А вот чать проги.Что не так? // we.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream.h> #include <iomanip.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <stdio.h> #include <conio.h> double maxr(int*,int,int,double,double,double); int main(void) { double a[3]; int i,n; cout <<"vvedite n"<<endl; cin>>n; for(i=0;i<n;i++) { cout<<"Vvesti a["<<i<<"]"<<endl; cin>>a[i]; } return 0; } double maxr(int *a,int i,int n,double max,double max2,double max1) { if(n==1) return a[0]; if(n==2) return max(a[0],a[1]); max1= maxr(a,n/2); max2=maxr(a+n/2,n/2); return max(max1,max2); } |
|
|
|
|
|
#4
|
|
Постоялец
![]() ![]() Регистрация: 14.11.2007
Сообщений: 265
Репутация: 298
|
С функцией maxr разберитесь.
Она у Вас, имхо, определена как функция шести переменных, а Вы ее пытаетесь использовать как функцию двух переменных. WBR. |
|
|
|
|
|
#5
|
|
Пользователь
Пол:
Регистрация: 04.03.2008
Сообщений: 68
Репутация: 16
|
Может конечно я туплю, но ты функцию maxr объявил, но так и не использовал. нафига она вообще нужна тогда? :-)
|
|
|
|
|
|
#6
|
||||||||||||||||||||||||||||||||||||||||||||||
|
Неактивный пользователь
Пол:
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
|
что такое тут "__max" и что значит выражение в скобках "__max(max1,max2)" Добавлено через 2 минуты
так вот же: double maxr(int *a,int i,int n,double max,double max2,double max1) {if(n==1)return a[0]; if(n==2)return max(a[0],a[1]); max1= maxr(a,n/2); max2=maxr(a+n/2,n/2); return max(max1,max2); } Последний раз редактировалось wormax; 11.03.2008 в 15:03.. Причина: Добавлено сообщение |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#7
|
|
Пользователь
Пол:
Регистрация: 04.03.2008
Сообщений: 68
Репутация: 16
|
Это её объявление, а вызов то где???
Вызов в main должен быть, ну или в одной из функций, которые выхываются из main, но у вас таких нет. |
|
|
|
|
|
#8
|
||||||||||||||||||||||||||||||||||||||
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
в стандартных библиотеках почему-то нет функции max(x,y), в моем примере я предложил __max(x,y) (впереди 2 подчеркивания, такая в библиотеке есть)
Функция maxr() рекурентная, ее вызов должен иметь столько же параметров, сколько содержится в ее описании. Правда мне непонятно, зачем Вы количество параметров увеличили (max1 и max2 - локальные переменные, max - это функция, а i вообще нигде не используется). Ну и, наконец, ее таки надо вызвать внутри main(). Удачи!
__________________
Сергей Сергеевич Последний раз редактировалось zss; 12.03.2008 в 18:12.. Причина: Грамматические ошибки |
||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#9
|
|
Неактивный пользователь
Пол:
Регистрация: 28.01.2008
Сообщений: 26
Репутация: 5
|
В стандартных бибилотеках max есть -- в неймспейсе std, include <algorithm> -- там темплейтная функция (у нее фича -- параметры должны быть одного типа).
В MSVC в качестве насследства еще достались макросы min/max, определение которых надо выключать с помощью define NOMINMAX (где-нить в глобальных дефайнах проекта) |
|
|
|
|
|
#10
|
|
Неактивный пользователь
Пол:
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
|
Не могли бы вы написать измененную прогу с исправленными недочетами а то непонятно ничего.max - это ведь переменная?
|
|
|
|
|
|
#11
|
|||||||||||||||||||
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Вот работающий код:
На будущее советую побольше экспериментировать с кодом. Когда начинает получаться - самому приятно становится. ПО возможности пользуйтесь системой помощи (MSDN) для правильного написания кода.
__________________
Сергей Сергеевич |
|||||||||||||||||||
|
|
|
|
|
#12
|
|
Неактивный пользователь
Пол:
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
|
|
|
|
|
|
|
#13
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
f(n==1)return a[0]; // если передается один элемент массива он и есть макс.
if(n==2)return __max(a[0],a[1]); // найти макс из двух элементов double max1= maxr(a,n/2); // искать макс в первой половине double max2=maxr(a+n/2,n/2); // искать макс во второй половине return __max(max1,max2); // выбрать максимальный из двух предыдущих }
__________________
Сергей Сергеевич |
|
|
|
|
|
#14
|
|
Неактивный пользователь
Пол:
Регистрация: 28.01.2008
Сообщений: 26
Репутация: 5
|
zss, у тебя баг... поробуй поискать максимум в массиве из трех элементов ;-)
|
|
|
|
|
|
#15
|
|||||||||||||||||||||||
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Я это знаю, специально оставил для автора темы. ![]()
__________________
Сергей Сергеевич |
|||||||||||||||||||||||
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Нужна помошь СSS joomla | popin | CSS | 14 | 09.08.2011 15:33 |
| нужна грамотная помошь. | master05 | Скорая помощь | 14 | 31.07.2009 20:19 |
| Срочна нужна помошь! | клубняк | PHP | 7 | 14.12.2008 16:30 |
| Нужна помошь с ноутом НР | Franas | Архив | 9 | 08.12.2008 13:48 |
| Нужна помошь по Windows | Грэй | Архив | 19 | 08.05.2008 09:43 |
|
|