Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2009, 12:52   #1
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию Поиск максимума

В какую сторону думать что бы реализовать поиск максимума функции на исследуемом отрезке в этой программе?

Код:
#include <stdio.h> // для функций printf и др.
#include <stdlib.h> // для функций exit и др.
#include <conio.h> // для функций clrscr и др.
#include <math.h> // для математических функций
#include <dos.h> // для функций delay
#define C 60 // начальное значение горизонтальной координаты вывода
#define M 2 // размер шага влево при выводе следующий строки
#define text blue // формат текста

double f(double x) // возращает значение функции
{
	double y; // для хранения результата
	if(x<=-2) y=1-2*(sqrt(1-x));
	else if(x<=4) y=6-exp(x);
	else y=3*sin(2*x);
	return y; // возврат значения

}
		
void main(void)
{
	unsigned N, c, r, step,s1,s2;
	double x1, x2, dx, x, y, s;
	int i,max;
	clrscr(); // очистка экрана
	// приглашения, для входа Enter
	printf ("Dlya prodoljeniya Enter");
	getchar(); // ожидание Enter для продалжения
	clrscr(); // очистка экрана
	// ввод начала отрезка
	printf("Vvedite nachalo otrezka:-----");
	scanf("%lf", &x1);
	// ввод конец отрезка
	printf("Vvedite konec otrezka:-----");
	scanf("%lf", &x2);
	// ввод шага отрезка
	printf("Vvedite shag otrezka:-----");
	scanf("%lf", &dx);
	// ввод N пропорции ввывода
	printf("Enter N N=N*3. Format vivoda: ");
	scanf("%u", &N);

	N=N*3;
	if(dx<=0) // шаг должен быть положительным
	{

			printf("Error Shag doljen>0 dx*=-1;");
			exit(1); // завершение программы с кодом ошибки

	}
		clrscr(); //очистка экрана
		x=x1; // начало отрезка
		c=1;
		r=0;
		s=0;
		do
		{
			step = N;
			while((step > 0 )&&(x<=x2))
			{

				y = f(x);
				s += y * dx;
				gotoxy(c, r + step);
				printf ("f(%5.2lf) = %5.2lf", x, y);
				step--;
				x += dx;
			 }
			 c += 26;
			 if(c > 80-26)

				 {
					r = r + N + 1;
					c = 1;
				 }

				 delay(5000); // 5-ти сек. ожидание
		 }

		while(x <= x2);
		getch();
}
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 16.12.2009, 12:58   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А каким способом вы ищете максимум?
MaTBeu вне форума Ответить с цитированием
Старый 16.12.2009, 15:14   #3
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Вот это меня и интересует, каким образом это можно сделать?! Я предполагаю что необходимо ввести новый аргумент (max), прировнять его вероятно к нулю, и поочередно с ним сравнивать новое значение “у”. Если у>max, то max=y, если у<max, то max=max. За тем величину max еще нужно и вывести на экран.
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.

Последний раз редактировалось sp_Иришка; 16.12.2009 в 15:23.
sp_Иришка вне форума Ответить с цитированием
Старый 16.12.2009, 15:33   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

По-моему, тут что-то более сложное выдумывать и не надо. Разве что max стоит прежде всего приравнять к первому значению y (а вдруг они у вас все отрицательные?), а при y <= max приравнивать max самому себе - и вовсе лишняя работа, достаточно его увеличивать когда надо.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 16.12.2009, 15:49   #5
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Хорошо, а как быть с его выводом, можно организовать вывод величины «max» после того как программа выполнит расчет и выведет величины «у». То есть необходимо очисть экран после видимо вот этого
Код:
do
		{
			step = N;
			while((step > 0 )&&(x<=x2))
			{

				y = f(x);
				s += y * dx;
				gotoxy(c, r + step);
				printf ("f(%5.2lf) = %5.2lf", x, y);
				step--;
				x += dx;
			 }
			 c += 26;
			 if(c > 80-26)

				 {
					r = r + N + 1;
					c = 1;
				 }

				 delay(5000); // 5-ти сек. ожидание
		 }
и вывести “max” Или есть еще варианты?
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 16.12.2009, 16:41   #6
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Еще вопрос а как прировнять «max» к первому значению «у»??? Это должно ведь выполниться однократно! первый раз, как это реализовать программно?
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 16.12.2009, 16:43   #7
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

=) А каким образом Вы присваиваете значения?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 16.12.2009, 18:34   #8
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

В место того что бы помочь мне ответами на мои вопросы, задаете свои, повторюсь я не знаю как реализовать поиск максимума и хотела услышать возможные варианты!
nazavrik не какие значения еще пока не куда не присваиваются, жду от Вас конкретных предложений!
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 17.12.2009, 15:00   #9
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Нашла решение сама, всем спасибо!
Поступила следующим образом, ввела две новые переменных max и q. Переменная max будет сравниваться с у и принимать её значение, в случае если max больше у. Переменная q не обходима для однократного присвоения max=y.


Код:
do
	{
			step = N;
			while((step > 0 )&&(x<=x2))
			{
					y = f(x);
					if (q==1)
					{
						max =y, q++;
					}
						if (y>=max)
					{
						max=y;
					}
					s += y * dx;
					gotoxy(c, r + step);
					printf ("f(%5.2lf) = %5.2lf", x, y);
						step--;
						x += dx;
				 }
			 c += 26;
			 if(c > 80-26)

			 {
						r = r + N + 1;
						c = 1;
			 }

			 delay(5000); // 5-ти сек. ожидание
	 }

	while(x <= x2);
	delay(5000); // 5-ти сек. ожидание
	clrscr(); //очистка экрана
	printf ("f(%5.2lf)", max);
	getch();
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 17.12.2009, 15:18   #10
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Ириша, хорошо что Вы нашли решение. Но обижаться незачем. Ведь определять экстремумы функций можно разными методами. Вы воспользовались методом последовательных приближений но существуют и другие.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27
поиск второго максимума Arcueid1691 Общие вопросы C/C++ 7 15.10.2009 22:43
Поиск Максимума в двумерном массиве NSvirus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.09.2009 18:04
поиск максимума.(16 бит,uns – число без знака) JNN Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 04.06.2009 23:24
3 максимума из N чисел Artem1987 Помощь студентам 2 23.12.2007 09:08