Консультация № 108912
11.11.2007, 10:59
0.00 руб.
0 2 2
Уважаемые эксперты помогите решить две постенькие задачки:
1.Найти, какое значение встречается в данном массиве наибольшее число раз.
2.Найти минимум функции X(в квадрате)-e(в степени -x) методом дихотомии.
Заранее большое спасибо!

Обсуждение

Неизвестный
11.11.2007, 11:48
общий
это ответ
Здравствуйте, Pimp!
Вот все задачи! Дихотомию даю аж два варианта решения! первый нашел в инете а второй сам решал когда начинал только изучать с++,так что там понапичкано всего что только можно. А так сами выбирайте какой пример брать))

Приложение:
//Найти, какое значение встречается в данном массиве наибольшее число раз.//******************#include "iostream"using namespace std;void main(void){ int mas[10]={2,3,2,4,5,1,1,2,3,9},k=0,max=0,s,l; s=sizeof(mas)/sizeof(int); for(int x=0;x<s;x++) { l=0; for(int y=0;y<s;y++) if(mas[x]==mas[y])l++; if(max<l) {k=mas[x]; max=l;} } cout<<"Naubolshe popadaetsya: "<<k; cin.get();}//*********//Найти минимум функции X(в квадрате)-e(в степени -x) методом дихотомии.//**********#include <iostream>#include <cmath>using namespace std;const double epsilon = 1e-10;double f(double x){ return (x*x+exp(-x));}int main(){ double a, b, c; a = 0; b = 2; while (b - a > epsilon) { c = (a + b)/2; if(f(b) * f(c) < 0) a = c; else b = c; } cout << (a+b)/2 << endl; return 0;}//*****#include <iostream.h>#include <conio.h>#include <math.h>enum boolean{false,true};double f(double x){return (x*x+exp(-x));}void dih(double x,double y,double h){cout.precision(10);boolean sign=(f(x)<0)?true:false,ksi,yes=false;while(x++<=y){ksi=(f(x)<0)?true:false;if(ksi!=sign){double a=x-1,b=x;sign=ksi;yes=true;start: double c=(a+b)/2;if((f(a)*f(c))<=0)b=c;else a=c;if(fabs(b-a)<h)cout<<"методом дихотомии отрезок ["<<a<<‘,‘<<b<<‘]‘<<endl;else goto start;}}if(yes==false)cout<<"корней нет";}void main(void){clrscr();cout<<"введите отрезок [a,b] и шаг"<<endl;double a,b,h;cin>>a>>b>>h;dih(a,b,h);getch();}
Неизвестный
11.11.2007, 14:26
общий
это ответ
Здравствуйте, Pimp!

Позволю себе предложить свой вариант решения методом дихотомии (т.к за использование оператора goto вас точно никто не похвалит :)

Приложение:
#include <assert.h>#include <math.h>#include <iostream>using namespace std;//---находит корень функции на отрезке a,b с точностью precision//---предполагается, что на отрезке только один кореньdouble Solve(double (* func)(double), double a,double b,double precision = 0.00001){ //f(a) и f(b) должны иметь разные знаки assert((*func)(a) * (*func)(b) < 0); double c; while (b - a > precision) { c = (a + b) / 2; if ((*func)(a) * (*func)(c) > 0) a = c; else b = c; } return c;}double f(double x){ return x*x - exp(-x);}int main(int argc,char** argv){ cout << Solve(f,-10000,10000) << endl; return 0;}
Форма ответа