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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 23:06   #1
Matrix6993
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 69
По умолчанию Создание модуля - расчет оценки

Добрый вечер! У меня тут одна проблемка образовался, помогите пожалуйста с решением! Вот форму я создал а как это все запрограммировать я не знаю! Модуль должен расчитывать оценку, критерии оценки вводит сам пользователь, кол-во вопросов и правильных ответов тоже вводит пользователь!
Matrix6993 вне форума Ответить с цитированием
Старый 31.01.2012, 00:51   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Пишите, контакт в подписи.
Помогу чем смогу. Естественно не бесплатно, судя по:
Цитата:
Вот форму я создал а как это все запрограммировать я не знаю!
Человек_Борща вне форума Ответить с цитированием
Старый 31.01.2012, 01:20   #3
Matrix6993
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 69
По умолчанию

У меня есть код программы, но есть в нем какая то ошибка которую я понять не могу.
Код.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var a,b,x,y,z,c,i,n,v:integer;
begin
 a:=StrToInt(Edit1.Text);   //кол-во вопросов
 b:=StrToInt(Edit2.Text);   //кол-во правильных
 x:=StrToInt(Edit3.Text);   //на 5 от
 y:=StrToInt(Edit4.Text);   //на 5 до
 z:=StrToInt(Edit5.Text);   //на 4 от
 c:=StrToInt(Edit6.Text);   //на 4 до
 i:=StrToInt(Edit5.Text);   //на 3 от
 n:=StrToInt(Edit6.Text);   //на 3 до
if (b>a) then exit;         //кол-во вопросов не может быть больше кол-ва правильных ответов
v:=100;
case Round(b/a*v) of
 x..y:label6.caption:=('5');
 z..c:label6.caption:=('4');
 i..n:label6.caption:=('3');
 else label6.caption:=('2');
end;
Button1.Visible:=true;
Button2.Visible:=false;
end;

end.
ТО что я выделил, это места где обнаружены ошибки. Сама ошибка такова: "Constant expression expected".
Помогите пожалуйста разобраться и исправить эти ошибки.
Заранее спасибО!

Последний раз редактировалось Stilet; 31.01.2012 в 22:29.
Matrix6993 вне форума Ответить с цитированием
Старый 31.01.2012, 01:22   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

переведите ошибку и все поймете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.01.2012, 01:27   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
case Round(b/a*v) of //Определите при помощи скобок, что должно произойти первым: умножение а затем деление или деление и умножение. это играет роль.
x..y:label6.caption:=('5');
z..c:label6.caption:=('4');
i..n:label6.caption:=('3');
 end else label6.caption:=('2');
Человек_Борща вне форума Ответить с цитированием
Старый 31.01.2012, 01:46   #6
Matrix6993
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 69
По умолчанию

ошибку то я перевел(Постоянное выражение ожидается), но всеровно не понятно!


Ошибка то не в скобках, там норм все, ошибка в переменныХ!
Matrix6993 вне форума Ответить с цитированием
Старый 31.01.2012, 10:06   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не проверял, но, судя по ошибке case НЕ ПОЗВОЛЯЕТ использовать переменные

пишите "в лоб", через операторы сравнения:
примерно так:
Код:
xxx := Round(b/a*v);
if (xxx>=x) and (xxx<=y) then label6.caption:=('5')
else 
  if (xxx>=z) and (xxx<=c) then label6.caption:=('4')
  else 
    if (xxx>=i) and (xxx<=n) then label6.caption:=('3')
    else label6.caption:=('2');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2012, 10:27   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Serge_Bliznykov, о_О
Код:
var
 ky:Integer;
begin
ky:=Round(a/b*c);
case ky of
,,,,,
end else
  ,,,,
end;
Ес опеРаторами сравнения, то куда in дели?
Код:
If ky in [x..y] then
    .... 
   else
      If ky in [x..c] then
        ....
       else
        If ky in [i..n] then
          ...
         else
           .....
Человек_Борща вне форума Ответить с цитированием
Старый 31.01.2012, 10:57   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
var
 ky:Integer;
begin
ky:=Round(a/b*c);
case ky of
,,,,,
end else
  ,,,,
end;
А проверить?!
Это НЕ РАБОТАЕТ!
Автор темы же сказал - переменные НЕ ДОПУСКАЮТСЯ:
Это некомпилируемый код:
Код:
case ky of
  x..y: label6.caption:='5'
end;
Цитата:
Ес опеРаторами сравнения, то куда in дели?
ну, в данном случае (целые числа) вполне можно использовать (хотя я и не вижу сильного отличия от операции сравнения), но, возможно, так и элегантнее.

НО, дело в том, что если ВДРУГ автор темы решит, что ему нужны вещественные числа для границ интервалов - то вариант с IN перестанет работать, а вариант с if > < - не перестанет. на мой взгляд, это вариант гибче.
А ещё лучше - я бы сформировал массив с граничными значениями отметки
и в цикле проверял по нему. Это намного гибче и защищённей (нельзя ввести пересекающиеся интервалы, оставить какой-то интервал "непокрытым" - тогда бал, из этого интервала принесёт двойку, хотя этот бал может быть больше чем балы на 4-ку, например.. и т.д.

Ну а выбирать автору темы, конечно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2012, 22:15   #10
Matrix6993
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 69
По умолчанию

Спасибо огромное за помощь ребят, вариант Serge_Bliznykov подошел больше, спасибо вам отдельное!
Matrix6993 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Недостаток в "Расчет средней оценки" roxy7 Microsoft Office Excel 3 12.12.2011 13:21
Создание модуля iSkulll Помощь студентам 3 17.03.2011 18:16
Создание модуля Arassir Общие вопросы Delphi 1 13.03.2011 15:28
Создание модуля CodeNOT Общие вопросы C/C++ 7 05.01.2011 00:58
Создание модуля в Си JET_FLASH Общие вопросы C/C++ 16 11.01.2008 17:12