Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Первокурсница ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.066 c
2-1271956369
Сергей
2010-04-22 21:12
2010.08.27
Нужна помошь (незнаю как описать)


2-1273230896
romario
2010-05-07 15:14
2010.08.27
Не работает функция trim


2-1274271676
@!!ex
2010-05-19 16:21
2010.08.27
Как эмулировать клик мышкой на Flash плеере


11-1201479526
Delphin2008
2008-01-28 03:18
2010.08.27
Как перехватить сообщения когда WebBrowser в фокусе.


2-1274132876
antonn
2010-05-18 01:47
2010.08.27
Дата компилирования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский