Для тех ,кто решил зарегистрироваться на форуме «Беседка» !
Категорически запрещена регистрация  с одноразового и временного e-mail !Такие пользователи будут отправляться в бан без объяснения причин.
После регистрации необходимо активировать свою учетную запись .Если Вы в почте не обнаружили письмо с активацией рекомендуется проверить папку «Спам».
С уважением
 Администрация форума

Автор Тема: Язык Pascal в среде Delphi  (Прочитано 42032 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Olga

  • *
  • Сообщений: 236
  • Пол: Женский
  • Имя : Ольга

Re: Язык Pascal в среде Delphi 7
« Ответ #30 : 05 Января 2013, 19:17 »
Да,я когда пыталась ввести число и дробную часть вводила через точку,а не через запятую,то тоже выдавало ошибку.

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #31 : 07 Января 2013, 01:32 »
По поводу смены иконы я уж говорил, что делается это через редактирование свойств формы. Но для большей ясности записал ролик.

гости не могут видеть изображения , пожалуйста зарегистрируйтесь или авторизуйтесь



Теперь касаемо фильтрации ввода. Покопавшись в интернете нашел наиболее с моей точки зрения простое и эффективное решение. Что бы ограничить диапазон символов, которые мы сможем вводить  в поле Edit нам нужно найти для этого поля событие OnKeyPress и вписать туда такой обработчик.  Данное действие необходимо сделать для обоих полей Edit.

if not (Key in ['0'..'9', ',' , #8])then Key:=#0; 

гости не могут видеть изображения , пожалуйста зарегистрируйтесь или авторизуйтесь



Читается эта команда примерно так
гости не могут видеть изображения , пожалуйста зарегистрируйтесь или авторизуйтесь



Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #32 : 07 Января 2013, 02:34 »
Думаете мы решили проблему? Как бы не так!!!

Допустим пользователь легко может ввести вот такое число - 12,34,56
От обилия запятых программа приходит в ужас и вываливается с ошибкой.
Нужно как-то и этот момент обработать.

Можно конечно мониторить ввод одной запятой и не давать вводить последующие, но я решил, что в этом случае будет достаточно просто прикрикнуть на бестолкового пользователя...

В коде программы у нас есть места, где мы получаем данные из полей ввода конвертируя эти данные в число с плавающей точкой через функцию StrToFloat
Если данные с конвертировать не удастся - программа вывалится с ошибкой.
Что бы подобной неприятности избежать нам нужно сначала проверить возможна ли конвертация в принципе. И как оказалось такой способ есть - это функция TryStrToFloat



Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #33 : 07 Января 2013, 03:29 »
И как оказалось такой способ есть - это функция TryStrToFloat
Да, теперь бы ещё заставить её работать. *SCRATCH*

С аналогичной функцией, но для целых чисел TryStrToInt проблем нет, а эта не пашет и всё. 00))

Оффлайн lexus

  • *
  • Сообщений: 1527
  • Пол: Мужской
  • Статус : ути-пути

Re: Язык Pascal в среде Delphi 7
« Ответ #34 : 07 Января 2013, 11:52 »
нам нужно сначала проверить возможна ли конвертация в принципе. И как оказалось такой способ есть - это функция TryStrToFloat
технарь, на каждую исключительную ситуацию функцию не придумаешь  :n: , поэтому ИМХО лучше пользоваться стандартной для делфей обработкой исключительных ситуаций. Имею в виду конструкцию
try
......
except
..........
else
....
end;
Тем более, что она обладает достаточной гибкостью и позволяет выполнять дополнительный код в зависимости от встретившегося или нет исключения. Можно даже проанализировать исключения по их типу, но для данного примера это пожалуй и не потребуется.

Оффлайн lexus

  • *
  • Сообщений: 1527
  • Пол: Мужской
  • Статус : ути-пути

Re: Язык Pascal в среде Delphi 7
« Ответ #35 : 07 Января 2013, 14:05 »
я когда пыталась ввести число и дробную часть вводила через точку,а не через запятую,то тоже выдавало ошибку
Olga, можно написать калькулятор так, чтобы пользователь нажимал точку, а на "табло" отображалась запятая или наоборот. То же самое при вводе числа в переменную, тем более, что всё равно потребуется конвертация из строкового типа в числовой. Например, как уже заметил технарь, написать собственный обработчик события OnKeyPress.


Можно конечно мониторить ввод одной запятой и не давать вводить последующие, но я решил, что в этом случае будет достаточно просто прикрикнуть на бестолкового пользователя...
Если калькулятор пишется ради интереса и чисто для себя, то нетрудно догадаться, кто именно окажется бестолковым пользователем.  :D А вот если калькулятор - приложение для массового использования, то скорее постоянные вылезающие окна пользователю надоедят очень быстро. Бестолковый он или промахивается по клавишам, вопрос уже второй, но с высокой вероятностью он такой калькулятор перенесёт в ресайкл бин. Поэтому, если калькулятор предназначен не для сугубо демонстративных целей, то неверный ввод лучше просто игнорировать, а бестолковый пользователь пущай пеняет на себя.

По поводу смены иконы я уж говорил, что делается это через редактирование свойств формы.
Если форма в проекте главная, то иконку можно сменить в меню свойств проекта из делфей.

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #36 : 07 Января 2013, 16:46 »
ИМХО лучше пользоваться стандартной для делфей обработкой исключительных ситуаций
Не знал, что такое есть, спасибо за подсказку.
Поискал в интернете,
Извините, Вам не разрешено просматривать этот текст. Пожалуйста, войдите или зарегистрируйтесь.
- буду изучать.

По поводу функции, об которую я вчера споткнулся. Вот уж воистину утро вечера мудренее. Как оказалось у функции TryStrToFloat в качестве аргумента выступает не переменная типа Float (как можно было бы ожидать) а переменная типа  Double. Таким образом в объявлении переменных меняем Float на Double

X1,X2,Y:Double;

А каждый подобный вызов X1:=StrToFloat(Edit1.Text); заменяем конструкциями

if not TryStrToFloat(Edit1.Text, X1) then exit;

Говоря человеческим языком программа пробует выполнить конвертацию и если это неудачно - осуществляется выход из процедуры.

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #37 : 07 Января 2013, 17:39 »
Сделал и получил вот это  :D

гости не могут видеть изображения , пожалуйста зарегистрируйтесь или авторизуйтесь



Нихрена не работает. (((

Оффлайн Olga

  • *
  • Сообщений: 236
  • Пол: Женский
  • Имя : Ольга

Re: Язык Pascal в среде Delphi 7
« Ответ #38 : 07 Января 2013, 18:36 »
Мне еще изучать и изучать,пока я до этого не дошла.А вот что касается второй лабы,мне хочется сделать ее самостоятельно.

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #39 : 07 Января 2013, 18:43 »
Мне еще изучать и изучать
Т.е. то, что я пишу вы в основной массе не понимаете? (((
Так спрашивайте, не стесняйтесь. Даже если кажется, что вопрос выглядит глупо.

Оффлайн Olga

  • *
  • Сообщений: 236
  • Пол: Женский
  • Имя : Ольга

Re: Язык Pascal в среде Delphi 7
« Ответ #40 : 07 Января 2013, 19:06 »
Все что касалось калькулятора мне понятно,а вот что касается Extendet или Duble мне пока не понятно.А как вписывать Const перед var или после?

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #41 : 07 Января 2013, 19:20 »
а вот что касается Extendet или Duble
Это просто типы переменных большей размерности. Другими словами эти переменные создаются для чисел бОльшего размера.


А как вписывать Const перед var или после?
Я константы объявляю до переменных, но можно и наоборот - главное, что бы они были объявлены до момента использования.

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #42 : 07 Января 2013, 19:21 »
Ошибку в программе нашел - функции не причем совершенно, банальная не внимательность. (((

Оффлайн lexus

  • *
  • Сообщений: 1527
  • Пол: Мужской
  • Статус : ути-пути

Re: Язык Pascal в среде Delphi 7
« Ответ #43 : 07 Января 2013, 21:16 »
Добавлю к тому, что было сказано об обработке исключений. Коли уж пишется калькулятор, то неизбежно придётся столкнуться с таким явлением, как переполнение. Перемножаете вы два больших числа, а произведение раз, и вышло за границы. Границы могут быть как установленными программером, так и максимально допустимые компилятором. Потом будет операция деления, где как известно на ноль делить нельзя. Но на ноль - это в точной науке, а в программировании несколько иначе. Казалось бы, перед выполнением операции можно тупо проверить делитель на равенство нулю, но как уже сказал,  то в математике.
Цитата
То бензин, а то - дети! (Джентельмены удачи).
Так вот, допустим, делитель число слишком малое по модулю, но всё же ненулевое, т.е к примеру десять в степени минус дохрена, но позволенное компилятором. Одно дело, когда делим на него единицу, а что будет если делимое - вдобавок большое число? Правильно - результат выйдет за границы допустимых норм, либо пределов компилятора, либо отображения, либо ещё чего-то, например, заложенной программером логики.  Так что сравнивать делитель с нулём будет однозначно не лучшим решением, лучше сразу написать обработку, предусмотрев исключения.

А как вписывать Const перед var или после?
Olga, это совсем разные категории. Каждая из этих секций (var или const) на одном и том уровне программы может быть использована не один раз, более того, их можно хоть чередовать между собой, главное, как сказал технарь, все объекты должны быть декларированы до их первого использования.

Оффлайн технарь

  • *
  • Сообщений: 12704
  • Пол: Мужской
  • Имя : Владимир

Re: Язык Pascal в среде Delphi 7
« Ответ #44 : 07 Января 2013, 21:25 »
А вот что касается второй лабы,мне хочется сделать ее самостоятельно.
Поддерживаю. Попробуйте, думаю должно всё получиться.