Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Visual C++ / С/C++

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 01.03.2008, 14:55   #1
Неактивный пользователь
 
Пол:Мужской
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
По умолчанию Нужна помошь в методе деления пополам

Решить задачу двумя способами – с применением рекурсии и без нее.
9. Найти максимальный элемент в массиве a1...an, используя соотношение (метод деления пополам) max (a1...an)=max (max (a1...an/2), max (an/2+1, an)).
Нужен код для рекурсивного способа.
wormax вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: казань-астраханькруизы на валаам кижи из москвыкупить искусственный сапфир в москвеКонтроллеры CUA100кровать для новорожденных


Старый 02.03.2008, 22:33   #2
zss
Постоялец
 
Пол:Мужской
Регистрация: 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);
}
__________________
Сергей Сергеевич
zss вне форума
 
Ответить с цитированием Вверх
Старый 10.03.2008, 16:56   #3
wormax
Неактивный пользователь
 
Пол:Мужской
Регистрация: 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);


}
wormax вне форума
 
Ответить с цитированием Вверх
Старый 10.03.2008, 19:11   #4
user157
Постоялец
 
Регистрация: 14.11.2007
Сообщений: 265
Репутация: 298
По умолчанию Ответ: Нужна помошь в методе деления пополам

С функцией maxr разберитесь.
Она у Вас, имхо, определена как функция шести переменных, а Вы ее пытаетесь использовать как функцию двух переменных.

WBR.
user157 вне форума
 
Ответить с цитированием Вверх
Старый 11.03.2008, 14:48   #5
Shtab
Пользователь
 
Пол:Мужской
Регистрация: 04.03.2008
Сообщений: 68
Репутация: 16
По умолчанию Ответ: Нужна помошь в методе деления пополам

Может конечно я туплю, но ты функцию maxr объявил, но так и не использовал. нафига она вообще нужна тогда? :-)
Shtab вне форума
 
Ответить с цитированием Вверх
Старый 11.03.2008, 15:01   #6
wormax
Неактивный пользователь
 
Пол:Мужской
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
По умолчанию Ответ: Нужна помошь в методе деления пополам

Цитата:
Сообщение от zss Посмотреть сообщение
Думаю, что примерно так:
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);
}

что такое тут "__max" и что значит выражение в скобках "__max(max1,max2)"

Добавлено через 2 минуты
Цитата:
Сообщение от Shtab Посмотреть сообщение
Может конечно я туплю, но ты функцию maxr объявил, но так и не использовал. нафига она вообще нужна тогда? :-)

так вот же:
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.. Причина: Добавлено сообщение
wormax вне форума
 
Ответить с цитированием Вверх
Старый 11.03.2008, 15:05   #7
Shtab
Пользователь
 
Пол:Мужской
Регистрация: 04.03.2008
Сообщений: 68
Репутация: 16
По умолчанию Ответ: Нужна помошь в методе деления пополам

Это её объявление, а вызов то где???

Вызов в main должен быть, ну или в одной из функций, которые выхываются из main, но у вас таких нет.
Shtab вне форума
 
Ответить с цитированием Вверх
Старый 11.03.2008, 22:22   #8
zss
Постоялец
 
Пол:Мужской
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
По умолчанию Ответ: Нужна помошь в методе деления пополам

Цитата:
error C2064: term does not evaluate to a function

в стандартных библиотеках почему-то нет функции max(x,y),
в моем примере я предложил __max(x,y) (впереди 2 подчеркивания, такая в библиотеке есть)
Цитата:
error C2661: 'maxr' : no overloaded function takes 2 parameters

Функция maxr() рекурентная, ее вызов должен иметь столько же параметров, сколько содержится в ее описании. Правда мне непонятно, зачем Вы количество параметров увеличили (max1 и max2 - локальные переменные, max - это функция, а i вообще нигде не используется).
Ну и, наконец, ее таки надо вызвать внутри main().
Удачи!
__________________
Сергей Сергеевич

Последний раз редактировалось zss; 12.03.2008 в 18:12.. Причина: Грамматические ошибки
zss вне форума
 
Ответить с цитированием Вверх
Старый 14.03.2008, 17:55   #9
Baller
Неактивный пользователь
 
Пол:Мужской
Регистрация: 28.01.2008
Сообщений: 26
Репутация: 5
По умолчанию Ответ: Нужна помошь в методе деления пополам

В стандартных бибилотеках max есть -- в неймспейсе std, include <algorithm> -- там темплейтная функция (у нее фича -- параметры должны быть одного типа).
В MSVC в качестве насследства еще достались макросы min/max, определение которых надо выключать с помощью define NOMINMAX (где-нить в глобальных дефайнах проекта)
Baller вне форума
 
Ответить с цитированием Вверх
Старый 14.03.2008, 20:52   #10
wormax
Неактивный пользователь
 
Пол:Мужской
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
По умолчанию Ответ: Нужна помошь в методе деления пополам

Не могли бы вы написать измененную прогу с исправленными недочетами а то непонятно ничего.max - это ведь переменная?
wormax вне форума
 
Ответить с цитированием Вверх
Старый 14.03.2008, 22:41   #11
zss
Постоялец
 
Пол:Мужской
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
По умолчанию Ответ: Нужна помошь в методе деления пополам

Вот работающий код:
Цитата:

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
double maxr(double *a,int n);
void main()
{
double a[4]={2,1,4,5};
double r=maxr(a,4);
printf("maximum=%Lf\n",r);
getch();

}
double maxr(double *a,int n)
{
if(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);
}

На будущее советую побольше экспериментировать с кодом. Когда начинает получаться - самому приятно становится.
ПО возможности пользуйтесь системой помощи (MSDN) для правильного написания кода.
__________________
Сергей Сергеевич
zss вне форума
 
Ответить с цитированием Вверх
Старый 15.03.2008, 17:29   #12
wormax
Неактивный пользователь
 
Пол:Мужской
Регистрация: 06.05.2007
Адрес: Minsk
Сообщений: 9
Репутация: 0
По умолчанию Ответ: Нужна помошь в методе деления пополам

Цитата:
Сообщение от zss Посмотреть сообщение
if(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);
}

Объясните что здесь происходит?
wormax вне форума
 
Ответить с цитированием Вверх
Старый 15.03.2008, 21:46   #13
zss
Постоялец
 
Пол:Мужской
Регистрация: 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); // выбрать максимальный из двух предыдущих
}
__________________
Сергей Сергеевич
zss вне форума
 
Ответить с цитированием Вверх
Старый 16.03.2008, 02:44   #14
Baller
Неактивный пользователь
 
Пол:Мужской
Регистрация: 28.01.2008
Сообщений: 26
Репутация: 5
По умолчанию Ответ: Нужна помошь в методе деления пополам

zss, у тебя баг... поробуй поискать максимум в массиве из трех элементов ;-)
Baller вне форума
 
Ответить с цитированием Вверх
Старый 16.03.2008, 09:46   #15
zss
Постоялец
 
Пол:Мужской
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
По умолчанию Ответ: Нужна помошь в методе деления пополам

Цитата:
Сообщение от Baller Посмотреть сообщение
zss, у тебя баг... поробуй поискать максимум в массиве из трех элементов ;-)

Я это знаю, специально оставил для автора темы.
__________________
Сергей Сергеевич
zss вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помошь С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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:29. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.22576 секунды с 11 запросами