![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.04.2009
Сообщений: 7
|
![]()
Помогите пожалуйста с задачкой:
"Найдите наибольшее и наименьшее значения функции f(x)=3x^2+x-4, если на заданном интервале [xmin;xmax] аргумент изменяется с шагом dx" Задачка вроде как простая, на цикл, просто я не силен в Паскале... Прогу написал, но похоже неправильно (криво работает), посмотрите и подправьте пожалуйста: Program LR; Var i,n,x,y,xmax,xmin,dx,ymax,ymin:inte ger; begin write ('xmin='); readln (xmin); write ('xmax='); readln (xmax); write ('dx='); readln (dx); n:=xmax-xmin div dx; ymin:=3*sqr(xmin)+xmin-4; ymax:=3*sqr(xmax)+xmax-4; for i:=1 to n do begin x:=xmin+n*dx; y:=3*sqr(x)+x-4; if y>ymax then ymax:=y; if y<ymin then ymin:=y; end; writeln ('ymin=',ymin); writeln ('ymax=',ymax); readln; end. Не пойму что с шагом сделать, поэтому прога слегка бредовая... |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 16.03.2009
Сообщений: 1,013
|
![]() Код:
Uguu~
Последний раз редактировалось __STDC__; 02.04.2009 в 23:29. |
![]() |
![]() |
![]() |
#3 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 16.03.2009
Сообщений: 1,013
|
![]()
вообще максимальное значение ф-ция примет там, где x по модулю максимален (т.е. в одной из крайних точек отрезка).. так что можно убрать из цикла одну проверку и написать до него
Код:
Для минимального тоже скорее всего можно что-то подобное сделать.. лениво думать.. **** хотя что тут думать... тут все наоборот.. если взят отрезок слева от (-1/6; 0) то это f(xmax), если справа, то f(xmin), если (-1/6; 0) попадает в отрезок, то это f(-1/6), т.е. -25/6 (опять же если я не ошибся в расчетах) Вот так.. анализировать можно без всяких циклов =) Хотя бы для таких простых задач...
Uguu~
Последний раз редактировалось __STDC__; 02.04.2009 в 23:54. |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 16.03.2009
Сообщений: 1,013
|
![]()
я поясню рисунком пожалуй, чтобы стало понятней)) (прошу прощения, рисовать не умею):
231.jpg итак, на рисунке три точки - корни и вершина параболы. Оси проходящие через вершину параболы отмечены пунктиром. Красный отрезок лежит слева от вершины. Очевидно, что в таком случае максимальным значением будет f(xmin), т.е. от левой границы отрезка, а минимальным - от правой. Обратно, в случае желтого отрезка, когда он справа от вершины. А вот когда вершина в отрезке (зеленый случай), действует правило с абсолютным значением (т.е. как крайняя левая так и крайняя правая точки отрезка могут давать максимальное значение ф-ции, т.к. ф-ция квадратичная). Минимальным же значением в любом случае является координата y вершины =) Вот так... все просто) P.S. извиняюсь за такое развитие темы.. просто люблю подумать над алгоритмами =) может кому интересно будет..
Uguu~
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 02.04.2009
Сообщений: 7
|
![]()
Огромное сасибо Sazary и __STDC__ за помощь.
1) __STDC__ с мат.анализом у меня дела обстоят лучше чем с програмированием на Паскале и я естественно все это для себя сразу расписал. Проблема в написании самой проги. Спасибо за идею с abs()-ами. 2) Sazary спасибо что подправил ошибки. Программа работает почти корректно (при x<0 считает ymax немного неверно, с этим, надеюсь, разберусь). Вопрос: как бы сделать так, чтобы не целые числа тоже можно было использовать? Если указать тип переменных real то прога отказывается работать (мне кажется это из-за "div dx".) |
![]() |
![]() |
![]() |
#7 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
Код:
Код:
PS32 А вообще, имхо лучше не считать n и делать через while.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 02.04.2009
Сообщений: 7
|
![]()
Строчку заменил - все равно не работает... Error 26: Type mismatch.
(n:=round((xmax-xmin)/dx); извините, а что такое round?) |
![]() |
![]() |
![]() |
#9 |
Участник клуба
Регистрация: 16.03.2009
Сообщений: 1,013
|
![]()
какой смысл тогда использовать вещественные переменные если округлять? гораздо лучше сделать мой вариант... с while... а еще лучше без циклов вообще.. тогда шаг вообще не важен...
Ошибка связана с несоотвествием типов.. на какой строке? там номер должен быть...
Uguu~
|
![]() |
![]() |
![]() |
#10 | ||
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
Вообще, у меня работает: Код:
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! | VisTBacK | Помощь студентам | 6 | 19.09.2008 13:44 |