Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.11.2010, 08:31
doctordradd doctordradd вне форума
Прохожий
 
Регистрация: 20.10.2010
Сообщения: 18
Репутация: 10
По умолчанию Среднее арифметическое

День добрый.
Подскажите, пожалуйста, где ошибка в вычислении среднего арифметического, и как округлить результат до 2-х знаков после запятой.
Компилится но выдает ошибку при введении числа:Exception class EConvertError with message ''''' is not a valid integer value'.
Спасибо
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
   i,sum,kol: integer;
   sr:real;
begin
    sum:=Strtoint(Edit1.Text)+Strtoint(Edit2.Text);
    kol:=2;
    sr:=sum/kol;
    Label1.Caption:=Floattostr(sr);
end;
Ответить с цитированием
  #2  
Старый 09.11.2010, 10:11
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Ругается т.к. в Edit попадает значение которе нельзя преобразовать, использкуй TryStrToInt. Округлить можно умножением на 10^n и отбрасыванием остального, либо подключить модуль Math и использлвать RoundTo.
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
  i,j: integer;
begin
  if TryStrToInt(Edit1.Text, i) and TryStrToInt(Edit2.Text, j)
  then Label1.Caption:=Floattostr(trunc((i+j)/2*100)/100)
  else Label1.Caption:='error';
end;
хотя при делении на 2 достаточно одного знака после запятой...
Ответить с цитированием
  #3  
Старый 09.11.2010, 15:27
doctordradd doctordradd вне форума
Прохожий
 
Регистрация: 20.10.2010
Сообщения: 18
Репутация: 10
По умолчанию

Сделал так:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
  i,j: integer;
begin
  if TryStrToInt(Edit1.Text, i) and TryStrToInt(Edit2.Text, j)
  then Label1.Caption:=Floattostr(trunc((i+j)/2*100)/100)
  else Label1.Caption:=Floattostr(trunc((i+j)/1*100)/100);
end;

procedure TForm1.Edit2Change(Sender: TObject);
var
  i,j: integer;
begin
  if TryStrToInt(Edit1.Text, i) and TryStrToInt(Edit2.Text, j)
  then Label1.Caption:=Floattostr(trunc((i+j)/2*100)/100)
  else Label1.Caption:=Floattostr(trunc((i+j)/1*100)/100);
end;

Теперь при вводе в Edit1 и пустом Edit2 показывает правильный результат, но при вводе в Edit2 выдает ошибку результата, непонятное число...
Есть вычисления с 4-5 полями(для этого и округление до сотых), при этом, если поле или поля пустые, не должны участвовать...
Подкажите, пожалуйста, как реализовать это.
Спасибо
Ответить с цитированием
  #4  
Старый 09.11.2010, 15:55
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Очисти переменные...
Код:
  i:=0;
  j:=0;
Причем в обоих едитах.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 09.11.2010, 18:04
doctordradd doctordradd вне форума
Прохожий
 
Регистрация: 20.10.2010
Сообщения: 18
Репутация: 10
По умолчанию

Исправил, во втором onchange поменял местами Edit1 и Edit2, теперь работает.

Еще вопрос:
Как ограничить написание значения в Edit, скажем до 30?

Подскажите, пожалуйста, как при значении, скажем Edit1 от 1 до 10 выдать Label2.Caption один, при вводе другого промежутка значения, соответственно другой результат?
При попытке записать так:
Код:
for i := 0 to 10 do
  Label2.Caption:=  '1';
for i := 11 to 20 do
Label2.Caption:=  '2';
Выдает последнее значение всегда, т.е. 2, неважно, что вводится...
Спасибо

Последний раз редактировалось doctordradd, 09.11.2010 в 18:49.
Ответить с цитированием
  #6  
Старый 10.11.2010, 10:28
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

1) Проверяй в OnChange значение
Код:
  TryStrToInt(Edit1.Text, i);
  if i>30 then Edit1.Text:='30';
2) Условия или case, циклы тут точно не нужны...
Код:
  case i of
    0..10: Label2.Caption:='1';
    11..20: Label2.Caption:='2';
    else Label2.Caption:='3';
  end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:06.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025