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

Вниз

Контроль превышения размера числа   Найти похожие ветки 

 
Первокурсница ©   (2010-03-13 15:14) [0]

Как сделать так чтобы если мы вводим в Edit любое число превышающее диапазон Integer (-2147483648..2147483647) программа не вылетала бы а показывала бы сообщение "Превышен размер числа"?
Пишу вот так:

procedure TForm1.Edit2Change(Sender: TObject);
begin

    If (StrToInt(Edit2.Text)>2147483646) OR (StrToInt(Edit2.Text)<-2147483647)
then begin ShowMessage("Выход за границы массива!");
    Edit1.Text:="20";
    end;
end;


Но если набираю допустим 9999999999 или 6768435794357 то прога вылетает :( Может это вообще невозможно сделать?


 
oldman ©   (2010-03-13 15:17) [1]


> if StrToInt(Edit2.Text)>2147483646


класс!!!
вот тебе и вылет по превышению.


 
Palladin ©   (2010-03-13 15:17) [2]

program Project9;

{$APPTYPE CONSOLE}

var
  c, n: integer;
  s: String;
begin
  s := "9999999999";
  val(s, n, c);
  Writeln(n);
  if c <> 0 then
    Writeln("ах тыж ё..п, мт, а :%№?:!? "?4"4765, С равно "", c, """);
  readln;
end.


 
Первокурсница ©   (2010-03-13 15:18) [3]

Если я напишу 2147483645 то ничего не изменится


 
oldman ©   (2010-03-13 15:20) [4]


> Первокурсница ©   (13.03.10 15:18) [3]


превышение не в 2147483645, а в StrToInt
:)


 
Anatoly Podgoretsky ©   (2010-03-13 15:24) [5]

> Первокурсница  (13.03.2010 15:14:00)  [0]

StrToInt64


 
Первокурсница ©   (2010-03-13 15:27) [6]

StrToInt64 - теперь она не вылетает если ввожу большое число, но и сообщение не показывает.


 
Anatoly Podgoretsky ©   (2010-03-13 15:30) [7]

Теперь попробуй с приведением Int64(2147483646)


 
Первокурсница ©   (2010-03-13 15:34) [8]

Требует переменную типа BOOLEAN


 
oldman ©   (2010-03-13 15:42) [9]

а в справке чего написано?


 
Игорь Шевченко ©   (2010-03-13 15:43) [10]

Чему-то вас не тому на первом курсе учат в заборолитейном ПТУ


 
oldman ©   (2010-03-13 15:44) [11]

Login: Первокурсница
Дата рождения: 20.03.1992
Образование: высшее

"Врать не надо по телефону..." (Булгаков ©)


 
Первокурсница ©   (2010-03-13 15:49) [12]

Легче всего сказать "Ах какие же студенты пошли глупые ". А может преподаватели пошли ленивые? В Ваши 60-е годы и требования были другие, и преподаватели были другие, и информатика была другая (если она у Вас вообще была). Да, так нас учат. Да, всё так плохо. Кто в этом виноват? Наверно я! У нас в институте анекдот бородатый ходит: разговаривают 2 препода в туалете, один другому говорит: ах, как же у нас всё замечательно, высшие технологии, умные люди кругом, зарплата достойная, вот если бы не студенты - жизнь была бы прекрасна!


 
oldman ©   (2010-03-13 15:50) [13]

"Хамить не надо по телефону..." (Булгаков ©)


 
Первокурсница ©   (2010-03-13 15:51) [14]

Если Вам влом помочь нормальным советом а не вздохами "О времена, о нравы!" - так и проходите мимо этой темы! А дохлую лирику разводить не нужно.

Спасибо за внимание.


 
oldman ©   (2010-03-13 15:51) [15]


> Первокурсница ©   (13.03.10 15:34) [8]
> Требует переменную типа BOOLEAN
>
> oldman ©   (13.03.10 15:42) [9]
> а в справке чего написано?


не имеет никокого отношения ни к уму студентов, ни преподавателей.


 
И. Павел ©   (2010-03-13 16:33) [16]


> Первокурсница ©

Есть хорошая вещь - try - помогает при обработки разных ошибок, не только при выходе за границы диапазона. Почитайте про это в справке. Есть и другие способы.

Офтопик:
Синтаксис языка можно выучить и по книжке. Даже самый одаренный преподаватель из куска дерева сможет сделать только буратино... (это я не о ком-то конкретно, а вообще о нерадивых студентах).


 
{RASkov} ©   (2010-03-13 16:50) [17]

> [0] Первокурсница ©   (13.03.10 15:14)

TryStrToInt


 
Демо ©   (2010-03-13 16:56) [18]


const
 lInt="-2147483649";
 hInt="2147483648";
var
 Len: Integer;
begin
 Len := Length(Edit2.Text);
 if Len<Length(hInt) then Exit;
 if (Len=Length(hInt)) and (Edit2.Text<hInt) then Exit;
 if (Len=Length(lInt)) and (Edit2.Text[1]="-") and (Edit2.Text<lInt) then Exit;
 ShowMessage("Выход за границы массива!");
end;



 
Игорь Шевченко ©   (2010-03-13 17:08) [19]


> Легче всего сказать "Ах какие же студенты пошли глупые ".


Студенты пошли не сколько глупые, сколько наглые


 
Anatoly Podgoretsky ©   (2010-03-13 17:27) [20]

> {RASkov}  (13.03.2010 16:50:17)  [17]

Не поможет, в указаном случае результат будет true


 
Плохиш ©   (2010-03-13 17:28) [21]


> Первокурсница ©   (13.03.10 15:49) [12]
>
> Легче всего сказать "Ах какие же студенты пошли глупые ".
>

Kinder, K&#252;che, Kirche


 
Fenik ©   (2010-03-13 18:35) [22]

procedure TForm1.Button1Click(Sender: TObject);
var
 Value, Code: Integer;
begin
 Val(Edit1.Text, Value, Code);
 if Code <> 0 then
   ShowMessage("range out!")
 else
   ShowMessage("Everything is OK");
end;


 
Демо ©   (2010-03-13 18:42) [23]


> Fenik ©   (13.03.10 18:35) [22]


В условии задачи не было проверки на прочую корректность ввода числа кроме превышения границ Integer-)


 
Ega23 ©   (2010-03-13 18:59) [24]


> Kinder, K&#252;che, Kirche


+1


 
Fenik ©   (2010-03-13 19:28) [25]

> Демо ©   (13.03.10 18:42) [23]

procedure TForm1.Button1Click(Sender: TObject);
var
  ValueInt64: Int64;
  ValueInt32: Integer;
  Code: Integer;
begin
  Val(Edit1.Text, ValueInt64, Code);
  if Code = 0 then
  begin
     Val(Edit1.Text, ValueInt32, Code);
     if Code <> 0 then
        ShowMessage("Range out!")
     else
        ShowMessage("Everything is OK.");
  end
  else
     ShowMessage("Invalid value!");
end;


 
Ega23 ©   (2010-03-13 19:56) [26]


> Fenik ©   (13.03.10 19:28) [25]


procedure TForm1.Button1Click(Sender: TObject);
var
 c : Cardinal;
 Code : Integer;
begin
 Val("$FFFFFFFF", c, Code);
 if Code <> 0 then
   ShowMessage("Out of range")
 else
   ShowMessage(IntToStr(c));
end;


 
Ega23 ©   (2010-03-13 19:58) [27]

почувствуй разницу между c : Cardinal; и c : Integer;


 
Fenik ©   (2010-03-13 20:23) [28]

> Ega23 ©

Ты это к чему? В [0] вопрос про Integer.


 
Ega23 ©   (2010-03-13 20:40) [29]


> Ты это к чему? В [0] вопрос про Integer.


Это к тому, что очень аккуратно надо.


 
MonoLife ©   (2010-03-14 05:55) [30]


> Как сделать так чтобы если мы вводим в Edit любое число
> превышающее диапазон Integer...

задать maxlength в Edit, чтоб не было возможности вводить "превышающее диапазон"


 
Демо ©   (2010-03-14 13:19) [31]


> MonoLife ©   (14.03.10 05:55) [30]
> > Как сделать так чтобы если мы вводим в Edit любое число
> > превышающее диапазон Integer...задать maxlength в Edit,
>  чтоб не было возможности вводить "превышающее диапазон"

Т.е. "2147483800" отличается длиной от "2147483100"?


 
Ega23 ©   (2010-03-14 13:23) [32]


> Т.е. "2147483800" отличается длиной от "2147483100"?


С точки зрения TEdit.MaxLength - нет. Более того, оно спокойно и "$FFFFFFFFF" сожрёт.

Хотя фиг его знает, что MonoLife © имел ввиду...


 
MonoLife ©   (2010-03-14 14:03) [33]


> Т.е. "2147483800"

зачем 10, хватит и 8 символов)
хм.. опять же, зависит от задачи.. чет, я не подумал..


 
Ega23 ©   (2010-03-14 14:07) [34]


> зачем 10, хватит и 8 символов)


8 в любом случае не хватит. Минимум 9, если в hex-формате


 
MonoLife ©   (2010-03-14 14:12) [35]

Тогда, как вариант, может подойти SpinEdit с настройками max и min value


 
Anatoly Podgoretsky ©   (2010-03-14 14:23) [36]

> Ega23  (14.03.2010 14:07:34)  [34]

Да длина вообще не применима.


 
Anatoly Podgoretsky ©   (2010-03-14 14:24) [37]

> MonoLife  (14.03.2010 14:12:35)  [35]

И заставить пользователя прокрутить от нуля до максимума, он тебя навек запомнит


 
Fenik ©   (2010-03-14 14:25) [38]

maxlength := 11; + код из [25].
И всё корректно.


 
MonoLife ©   (2010-03-14 15:56) [39]


> И заставить пользователя прокрутить от нуля до максимума,
>  он тебя навек запомнит

и от максимума до минимума))


 
KSergey ©   (2010-03-14 19:41) [40]

> Плохиш ©   (13.03.10 17:28) [21]

плохой ты человек
смотри, как далеко послал девушку - до сих пор не вернулась.



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

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

Наверх




Память: 0.56 MB
Время: 0.05 c
2-1269823057
Вася
2010-03-29 04:37
2010.08.27
Свой обработчик для динамически созданного компонента


15-1266528605
Юрий
2010-02-19 00:30
2010.08.27
С днем рождения ! 19 февраля 2010 пятница


15-1272339322
Девелопер
2010-04-27 07:35
2010.08.27
Свойства бинарника и директивы компилятора


2-1268906366
dorik
2010-03-18 12:59
2010.08.27
Нужно сохранить RichEdit в Stream, произвести изменения и save


2-1275731880
REX
2010-06-05 13:58
2010.08.27
Дата/Время