Проверка на не целостность числа и рисование параболы

  • Автор темы Neirol
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Neirol

#1
Здравствуйте.

Разрабатываю программу, решающую квадратные уравнения, которая забирает данные коэффициентов и возвращает результат.
Разрабатываю на C++ Builder.
Появилось две проблемы, которые я не могу решить.

1. Как проверить что введенная информация является не целым числом? Потому что пока моя программа работает с int, но этого не достаточно.
2. Как лучше всего отрисовывать параболу по полученному уравнению? Пробовал TChart - но он рисует только односторонние графики, а с TImage по Canvas - вообще какая-то чушь получилась. Рисовал я циклом for по x, и для координаты Y использовал функцию = полученному уравнению по заданным коэффициентам.

Помогите пожалуйста. Заранее огромное спасибо.
 
E

eReS

#2
1. Как проверить что введенная информация является не целым числом? Потому что пока моя программа работает с int, но этого не достаточно.
Почитай о sizeof :) она возвражает размер переменной: int - 2, char - 1, double - 8, float 4...

по втором не помогу так как графики рисую через SDL, с билдером не работал
 
N

Neirol

#3
Sizeof мне будет возвращать значение для AnsiString, ведь у меня через него идут данные.
 
Z

zeus

#4
2. Как лучше всего отрисовывать параболу по полученному уравнению? Пробовал TChart - но он рисует только односторонние графики, а с TImage по Canvas - вообще какая-то чушь получилась. Рисовал я циклом for по x, и для координаты Y использовал функцию = полученному уравнению по заданным коэффициентам.

можно рисовать с помощью x и y, используя формулу преобразования:

float x,y;

int sx = x * height / (maxX- minX);
int sy = y * width / (maxY-minY);

где maxX,minX,maxY,minY - константы определяющие минимальное и максимальное значения для x и y...
а height и width высота и ширина формы, соответственно...

1. Как проверить что введенная информация является не целым числом? Потому что пока моя программа работает с int, но этого не достаточно.
А зачем вам это проверять? Используйте функцию StrToFloat или навроде этой и работайте с вещественными числам, а при отображении используйте формулу для перевода...
 
N

Neirol

#5
1. А что за sx и sy?
2. Но мне ведь нужно знать, что в конце выводить - double или int.
 
Z

zeus

#6
1. А что за sx и sy?
это экранные (screen) координаты, по-русски говоря - это те координаты которые используются для рисования на форме...
и я немножко ошибся в формулах, вот как верно:

int sx = (x - minX) * width / (maxX- minX);
int sy = (y - maxY) * height / (minY - maxY);

2. Но мне ведь нужно знать, что в конце выводить - double или int.
рисование на форме осуществляется в экранных координатах (тип int) по x от 0 до width и по y от 0 до height...
а координаты параболы x и y вычисляются и используют тип double...
 
N

Neirol

#7
Мне нужно проверять форму на правильность введенных данных.
По идее мне нужно проверять является ли введенное числом, но типа данных ЧИСЛО нет.
И я не знаю как в действительности это сделать.

А насчет координат, я в принципе рассчитывал все эти координаты начала и конца, и в цикле проходился по разным x, но в итоге у меня получалась одна линия.
Можно пример кода рисования любой параболы?
 
Z

zeus

#8
Давай лучше сам, а я скажу, что не так... но если и после этого не поймешь, я даже не знаю как еще объяснить... может стоит сменить профессию :)
 
N

Neirol

#9
Только сейчас вник в смысл твоих первых сообщений.
Я так понял, чтобы проверить правильность нужно перехватывать с помощью try, а в другом случае все пойдет как обычно.
А как быть в конце? Выводить вещественное число с нулями после точки не очень красиво.
 
N

Neirol

#11
Стоп.
Округление здесь не поможет.
Но я догадался сам, можно конечный результат проверять на int, и если true, то переводим в int и выводим.

Добавлено: ЗЫ. После веба для меня такое представление типов данных и конструкций различных действий не очень привычны. А шаманством я заниматься не хочу.
 
N

Neirol

#12
Поменял все на float. Понял что если получается целое float, то выводится без точки.
Текстовый результат теперь в норме.
С перехватом ошибки при введении точки вместо запятой - разобрался.
С графиком я думаю вся проблема в слишком больших числах, так что далее сам также разбирусь.
Спасибо.
 
Статус
Закрыто для дальнейших ответов.