Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Помогите найти ошибку в коде


Автор: floopless 25.9.2009, 13:20
не хочет работать блок case, помогите разобраться в чем дело.. 
вот код:
Код

// Объявление переменных: x,q - для хранения введенных значений; k - результат 
var 
x,q,k: extended; 

begin 

// Очистка окошка ResultMemo 
ResultMemo.Clear; 

// Считывание значений 
x:= StrToFloat (XEdit.Text); 
q:= StrToFloat (QEdit.Text); 

// Вывод начальных значений в окошко ResultMemo 
ResultMemo.Lines.Add('x = '+XEdit.Text); 
ResultMemo.Lines.Add('q = '+QEdit.Text); 

// Выбор функции 
case FunctionGroup.ItemIndex of 

0: 
begin 
// Проверка и выбор выражения 
if abs(x*q) >10 then 
k:= ln(abs(exp(x))+abs(q)) 
else if abs(x*q)<10 then 
k:= exp(exp(x)+q) 
else 
k:= exp(x)+q; 
end; 

1: 
begin 
// Проверка и выбор выражения 
if abs(x*q)>10 then 
k:= ln(abs(Math.Power(x,2))+abs(q)) 
else if abs(x*q)<10 then 
k:= exp(Math.Power(x,2)+q) 
else 
k:= Math.Power(x,2)+q; 
end; 

2: 
begin 
// Проверка и выбор выражения 
if abs(x*q)>10 then 
k:= ln(abs(Math.Sinh(x))+abs(q)) 
else if abs(x*q)< 10 then 
k:= exp(Math.Sinh(x)+q) 
else 
k:= Math.Sinh(x)+q; 
end; 

end; 



вот лог компилятора:
Код

[Hint] Unit1.pas(62): Value assigned to 'k' never used
[Hint] Unit1.pas(64): Value assigned to 'k' never used
[Hint] Unit1.pas(66): Value assigned to 'k' never used
[Hint] Unit1.pas(73): Value assigned to 'k' never used
[Hint] Unit1.pas(75): Value assigned to 'k' never used
[Hint] Unit1.pas(77): Value assigned to 'k' never used
[Hint] Unit1.pas(84): Value assigned to 'k' never used
[Hint] Unit1.pas(86): Value assigned to 'k' never used
[Hint] Unit1.pas(88): Value assigned to 'k' never used

Автор: Frees 25.9.2009, 13:40
а что значит не хочет работать

Автор: Regulum 25.9.2009, 13:42
Предупреждение компилятора можно убрать инициализацией переменной k, например нулем
Код

...
x:= StrToFloat (XEdit.Text); 
q:= StrToFloat (QEdit.Text); 
k:= 0;
...


Но компилятор выдает замечания, а не ошибки.
В чем именно выражается нежелание работать? 

Автор: floopless 25.9.2009, 13:51
В переменную k должен по идее сохраниться результат вычислений, чего не происходит..
Поэтому и компилятор подсказывает что переменная k не-про-инициализирована..
Только вот почему..? smile 

Тут используется RadioGroup, предлагается выбрать функцию (одну из трех: e(x), X^2 или sh(x))
А дальше в зависимости от того чему равен модуль (x*q) должно выполниться действие.. 

Я уже голову сломал.. smile 

Автор: Regulum 25.9.2009, 14:01
А ты в режиме отладки смотрел, у тебя case вообще выполняется?
Может быть, FunctionGroup.ItemIndex=3 например

Автор: CodeMonkey 25.9.2009, 14:05
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1392.

Автор: Frees 25.9.2009, 14:19
Цитата(floopless @  25.9.2009,  16:51 Найти цитируемый пост)
В переменную k должен по идее сохраниться результат вычислений, чего не происходит..Поэтому и компилятор подсказывает что переменная k не-про-инициализирована..

коипилятор предупреждает что ты в k пишеш но потом нигде не читаеш!!(never used) не используется

Автор: floopless 25.9.2009, 16:28
вот, надо было полностью рассказывать.. smile 
я расположил оператор вывода после каждого блока case, дабы вывести результат вычислений..
Код

case FunctionGroup.ItemIndex of

0:
begin
if abs(x*q) >10 then
k:= ln(abs(exp(x))+abs(q))
else if abs(x*q)<10 then
k:= exp(exp(x)+q)
else
k:= exp(x)+q;
ResultMemo.Lines.Add('k ='+FloatToStrF(k,ffFixed,8,4));
end;


Компилятор все молча проглотил, но программа упорно не хотела выводить результат вычислений в Memo.. так я и решил что не выполняется блок case..
Теперь совместными усилиями выяснилось что все выполняется (в k записывается значение)..но вот почему не выводится ничего..?
Попробовал разместить ResultMemo.Lines после end блока case - теперь ошибка - Invalid Floating Point Operation..
??? smile

Добавлено через 11 минут и 21 секунду
Все, решено!!!
УРА!!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)