Консультация № 110816
24.11.2007, 19:20
0.00 руб.
0 1 1
Здравствуйте, решаю задачу:
на форме метка с пояснительными текстом: введите количество баллов, поле для ввода баллов, кнопка ок для вычислений, и метка для вывода результатов
Требуется определить, какую оценку получил тестируемый, если дана следующая шкала оценок:
от 90 до 100 баллов - оценка 5
от 70 до 89 баллов - оценка 4
от 51 до 69 баллов - оценка 3
менее 51 балла - оценка 2

Вот написал код(приложение), работает только первое условие почему-то, и то не совсем: когда ввожу в окошко двузначное число, меньшее чем 51, то условие выполняется, а если однозначное, то свойство метки не меняется.
Почему? Помогите решить пожалуйста

Приложение:
procedure TForm1.Button1Click(Sender: TObject);var a,b,c,d,i:byte;e:array[51..69] of byte;f:array[70..89] of byte;g:array[90..100] of byte;begina:=51; //оценка 2b:=e[i]; //оценка 3c:=f[i]; //оценка 4d:=g[i]; //оценка 5if edit1.text < inttostr(a) then label2.Caption:=‘2‘;if edit1.Text=inttostr(b) then label2.caption:=‘3‘;if edit1.text=inttostr(c) then label2.Caption:=‘4‘;if edit1.text=inttostr(d) then label2.caption:=‘5‘;end;

Обсуждение

Неизвестный
24.11.2007, 20:54
общий
это ответ
Здравствуйте, Исаак Моисеевич!

1) Сразу бросилось в глаза, зачем нужны все эти массивы?
2) зачем нужны все эти переменные?
3) Вы не правильно производите сравнение чисел.
Когда Вы пишите edit1.text < inttostr(a), то сравниваются строкоые представления чисел, а не сами числа. Нужно сравнивать числа, т.е. inttostr(edit1.text) < a.
4) Ктому же запись label2.Caption:=\‘2\‘; синтаксически не верна.
Что то Вы намудрили.

Предлагаю два варианта, через if‘ы и через case. Второй варинт попроще и удобнее.

Приложение:
procedure TForm1.Button1Click(Sender: TObject);var c: integer;begin c:=strtoint(Edit1.Text); if c<51 then label2.Caption:=‘\2\‘; if (51<=c) and (c<=69) then label2.caption:=‘\3\‘; if (70<=c) and (c<=89) then label2.Caption:=‘\4\‘; if (90<=c) and (c<=100) then label2.caption:=‘\5\‘;end;procedure TForm1.Button1Click(Sender: TObject);begin case strtoint(Edit1.Text) of 0..50: label2.Caption:=‘\2\‘; 51..69: label2.caption:=‘\3\‘; 70..89: label2.Caption:=‘\4\‘; 90..100: label2.caption:=‘\5\‘; end;end;
Форма ответа