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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2011, 18:45   #1
Elabrion
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 17
По умолчанию неправильный подсчет мин. значения в цикле

Привет всем, не могу понять, почему программа высчитывает не правильное минимальное значение функции? Исходные данные: 2,7 0,8 2,4 0,2
Код:
Код:
program lab2;
var
   Q,E:text;
   a,x,xk,xn,dx,w,S,P,max,min:real;
   kol_p,kol_o:integer;
begin
assign(Q,'lab2.dat');
assign(E,'lab2.res');
reset(Q);
rewrite(E);
read(Q,a,xn,xk,dx);
x:=xn;
S:=0;
P:=1;
kol_p:=0;
kol_o:=0;
max:=-99999999;
min:=99999999;
while x<=xk do
begin
if x<=1 then
begin
w:=(a*(ln(x)/ln(10))+exp(1/5*ln(abs(sin(x)*sin(x)*sin(x)/cos(x)*cos(x)*cos(x)-cos(x)))));
writeln(E,'x=',x:5:2,' w=',w:5:2)
end
else
if x>=2 then
begin
w:=ln(a+x)/ln(x)-sin(exp(x))*sin(exp(x))*sin(exp(x));
writeln(E,'x=',x:5:2,' w=',w:5:2)
end
else
begin
w:=(exp((x-1)*ln(a))+exp(1/3*ln(a*x))+(Pi*x*x*x));
writeln(E,'x=',x:5:2,' w=',w:5:2)
end;
if w>0 then kol_p:=kol_p+1
else
kol_o:=kol_o+1;
S:=S+w;
P:=P*w;
x:=x+dx;
if w>max then max:=w
else
if min>w then min:=w;
end;
writeln;
writeln(E,'Сумма = ',S:5:2,' Произведение = ',P:5:2);
writeln;
writeln(E,'Количество положительных значений = ',kol_p:2,' Количество отрицательных значений = ',kol_o:2);
writeln;
writeln(E,'Максимальное значение = ',max:4:2,' минимальное значение = ',min:4:2);
close(Q);
close(E);
end.
Elabrion вне форума Ответить с цитированием
Старый 04.07.2011, 18:53   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

первое значение может быть (и будет) одновременно и максимальным и минимальным (среди уже вычисленных). В твоем коде такое не предполагается.
Код:
 if w>max then max:=w
  else
  if min>w then min:=w;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 04.07.2011 в 18:55.
evg_m вне форума Ответить с цитированием
Старый 04.07.2011, 18:59   #3
Elabrion
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 17
По умолчанию

что-то я ничего не понял. минимальным - да, оно будет, а вот максимальным нет.
как ты предлагаешь исправить код?
Elabrion вне форума Ответить с цитированием
Старый 04.07.2011, 19:20   #4
l1pton17
Пользователь
 
Аватар для l1pton17
 
Регистрация: 01.11.2010
Сообщений: 75
По умолчанию

Может так?)

Код:
program lab2;
var
   Q,E:text;
   a,x,xk,xn,dx,w,S,P,max,min:real;
   kol_p,kol_o:integer;
   first:boolean;
begin
assign(Q,'lab2.dat');
assign(E,'lab2.res');
reset(Q);
rewrite(E);
read(Q,a,xn,xk,dx);
first:=true;
x:=xn;
S:=0;
P:=1;
kol_p:=0;
kol_o:=0;
{max:=-99999999;}
{min:=99999999;}
while x<=xk do
begin
if x<=1 then
begin
w:=(a*(ln(x)/ln(10))+exp(1/5*ln(abs(sin(x)*sin(x)*sin(x)/cos(x)*cos(x)*cos(x)-cos(x)))));
writeln(E,'x=',x:5:2,' w=',w:5:2)
end
else
if x>=2 then
begin
w:=ln(a+x)/ln(x)-sin(exp(x))*sin(exp(x))*sin(exp(x));
writeln(E,'x=',x:5:2,' w=',w:5:2)
end
else
begin
w:=(exp((x-1)*ln(a))+exp(1/3*ln(a*x))+(Pi*x*x*x));
writeln(E,'x=',x:5:2,' w=',w:5:2)
end;
if w>0 then kol_p:=kol_p+1
else kol_o:=kol_o+1;
S:=S+w;
P:=P*w;
x:=x+dx;
if (first=true) then
begin
 max:=w;
 min:=w;
 first=false;
end;
if w>max then max:=w
else
if min>w then min:=w;
end;
writeln;
writeln(E,'Сумма = ',S:5:2,' Произведение = ',P:5:2);
writeln;
writeln(E,'Количество положительных значений = ',kol_p:2,' Количество отрицательных значений = ',kol_o:2);
writeln;
writeln(E,'Максимальное значение = ',max:4:2,' минимальное значение = ',min:4:2);
close(Q);
close(E);
end.
l1pton17 вне форума Ответить с цитированием
Старый 04.07.2011, 21:28   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

max:=-99999999;
min:=99999999;

v:=10;

чему должно быть равно НОВЫЕ значениЯ max и min?
при таких (смотри выше) исходных данных.

и чему онИ БУДУТ равны в соответсвии с кодом?
Код:
if w>max then max:=w
else
if min>w then min:=w;
end;
а теперь пспробуй посчитать такое

max:=-99999999;
min:=99999999;

v:=10; //первое вычисленное значение
min,max ?
v:=14; // аторое вычисленное значение
min,max ?

что должно быть и что посчитает программа.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 04.07.2011 в 21:33.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение в массиве макс. и мин. значения. Паскаль Akainu Помощь студентам 1 11.06.2011 12:13
Как использовать функцию МИН для поиска мин значения в массиве? clever77 Microsoft Office Excel 2 15.04.2011 11:04
Поиск Мин/Макс значения а файле. leshij Паскаль, Turbo Pascal, PascalABC.NET 2 14.02.2011 22:29
Как найти мин и макс значения в табуляции функции? idmessage Паскаль, Turbo Pascal, PascalABC.NET 0 10.01.2011 17:45
(C++) Подсчитать в цикле значения функции Mister_Originalnos Общие вопросы C/C++ 6 05.12.2010 22:51