Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Помогите нубу   Найти похожие ветки 

 
Системщик ©   (2006-04-15 13:31) [0]

Что я сделал не так. Задача для первого класса. Больше мне обратиться не к кому кроме вас.. Ошибка при компиляции показывается в строке case a of. Пишут [Error] Unit2.pas(43): Ordinal type required

это сама программа

var p,f1,f2,f3,f4,G,a:real;
begin
p:=StrToFloat(Edit1.text);
if (p>=10.1) and (p<20) then a:=f1;
if (p>=20.3) and (p<30.2) then a:=f2;
if (p>=30.25) and (p<=40) then a:=f3;
if (p>40.5) and (p<=49) then a:=f4;
case a of
f1: G:=SQRT(1-SQR(p)+p);
f2: G:=exp(1/3*ln(SQR(p)-2.2));
f3: G:=ln(ABS(p-3))/ln(10);
f4: G:=0.2;
Edit2.text:=FloatToStr(G);
end;


 
User_OKA   (2006-04-15 13:36) [1]

Case не может работать с переменными типа real.


 
Системщик ©   (2006-04-15 13:39) [2]

ты хочешь сказать что с помощью case эту задачу решить нельзя?


 
User_OKA   (2006-04-15 13:45) [3]

почему нельзя, можно если a сделать Integer
а чем тебя if не устраивает


 
Галинка ©   (2006-04-15 13:45) [4]

А зачем обязательно реальные f1,f2,f3,f4,a, если они в вычислениях не участвуют?

И зачем case a of, если можно сразу функцию писать в then? А то получается, сначала сам присваеваешь. а потом перепроверяешь. Если только в задании не стоит использовать case...


 
nickmas   (2006-04-15 13:49) [5]

Оператор Case должен закрываться End-ом:

Case a of
...
end;


 
Системщик ©   (2006-04-15 13:51) [6]

дело в том, что задали задачу с использованием CASE. я  сижу вот голову ломаю...ниче не получается


 
User_OKA   (2006-04-15 13:54) [7]

именно эту задачу


 
Галинка ©   (2006-04-15 13:55) [8]

Тогда можно так:

var
p,G:real;
a:byte;

begin
p:=StrToFloat(Edit1.text);

if (p>=10.1) and (p<20) then a:=1;
if (p>=20.3) and (p<30.2) then a:=2;
if (p>=30.25) and (p<=40) then a:=3;
if (p>40.5) and (p<=49) then a:=4;

case a of
1: G:=SQRT(1-SQR(p)+p);
2: G:=exp(1/3*ln(SQR(p)-2.2));
3: G:=ln(ABS(p-3))/ln(10);
4: G:=0.2;
end;

Edit2.text:=FloatToStr(G);
end;


 
User_OKA   (2006-04-15 13:58) [9]

согласен


 
Системщик ©   (2006-04-15 14:02) [10]

Галинка, ты супер!


 
Kolan ©   (2006-04-15 14:09) [11]

Системщик ©   (15.04.06 14:02) [10]
Кстати сравнивая числа с плавающей запятой может дать "страннный" результат :)

http://xpoint.ru/know-how/Articles/FloatingPointNumbers


 
Галинка ©   (2006-04-15 14:13) [12]

Системщик, вот тут

1: G:=SQRT(1-SQR(p)+p);

будет ошибка, вычисление квадртного корня з отрицательного числа ((. Т.к. квадрат с минусом всегда больше самого числа с плюсом (в смысле по модулю)...


 
Системщик ©   (2006-04-15 14:15) [13]

to Kolan
это пока меня не касается, т.к. начал программмировать очень недавно


 
Kolan ©   (2006-04-15 14:16) [14]

Галинка ©   (15.04.06 14:13) [12]

всегда больше
p= 1

1: G:=SQRT(1-SQR(p)+p);
G := Sqrt(1-1+1) =Sqrt(1)? :)


 
Системщик ©   (2006-04-15 14:18) [15]

Галинка, точно будет ошибка. Я тогда сделаю 1: G:=SQRT(ABS(1-SQR(p)+p))



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
8-1133789034
Domkrat
2005-12-05 16:23
2006.04.30
Цветовой профиль монитора


2-1144999965
elfebet
2006-04-14 11:32
2006.04.30
Прочитать файл из интернета


15-1144170845
Andy BitOff
2006-04-04 21:14
2006.04.30
Стоит ли продолжать развитие проекта?


4-1139568531
Vlad2
2006-02-10 13:48
2006.04.30
Как определить, нажата ли левая клавиша мыши


2-1144846419
Dyakon_Frost
2006-04-12 16:53
2006.04.30
Проблема с MessageDlg!