Добро пожаловать! Войти Зарегистрироваться

Расширенный

!!!Вопрос по 9 лабе!!!

Написал Firefaced 
!!!Вопрос по 9 лабе!!!
27 October 2006 04:04
Уважаемый Валентин Евгеньевич,

Это будет моя первая программа на С, поэтому я не знаю всех нюансов, и завтра (в пятницу 27.10.2006), к сожалению придти не смогу. Поэтому решил задать некоторые вопросы здесь, заранее благодарен за помощь и заранее прошу прощения за беспокойство.

Я сегодня попытался сдать эту программу, на кануне вычитал в интернете базовые функции, операторы и т.п. и написал и отладил её, к сожалению в задании была опечатка и пришлось все переделывать на лабе, после выяснилось, что там были недочеты с тем, что я использовал замену #define для описания max и min и процедуру int sign(x){...}, но сейчас я с этим разобрался 8)

У меня задание с Эллипсом с центром в точке (20;0)
и проходящий через точки (10;0) (30;0), (20;5), (20;-5)
Вариант задания №27

Первый вопрос:
На второй итерации программа выдает L2 = -5 а MathCAD L2 = -4,333 если сокращать, то получиться -4, а не -5,
!?Какой из этих результатов считать правильным? Доводить программу, что бы она выдавала значение -4 или оставить как есть? И как сделать деление int`ов более точным?

Второй вопрос: по поводу проверки попадания в область Эллипса

Идея №1 (много масштабных if)
Так как у нас целочисленные координаты точки, я расписал диапазоны попадания в Эллипс, проверив их в MathCAD`е
(i=10 или 30) и j=0
(i=11 или 29) и j=[-2;2]
(i=[12;13] или [27;28]) и j=[-3;3]
(i=[14;19] или [21;26]) и j=[-4;4]
i=20 и j=[-5;5]
!?Примите ли Вы такое решение задачи?

Идея№2 (наиболее удачная, но возникают проблемы)
Формула заданного Эллипса имеет вид

(i-20)^2`` j^2
-------- + --- = 1
``a^2````` b^2

Для проверки надо подставить в уравнение полученные координаты
Если его значение будет <=1, то точка попадает в Эллипс.
Но возникает проблема – при расчете в int это значение сокращается и в итоге проверка не верная – он первую же полученную точку считает входящей в Эллипс, её координаты (8;-4)
Если же я задаю переменные для проверки в float, то программа выдаёт
либо 0 либо 1 либо «-1073741824» или что-то подобное при делении.
?!Как сделать результатом деления не целое и верное число?

Спасибо

P.S. Вы сегодня (в четверг 26.10.2006) забыли открыть доступ на написанную Вами программу /var/ftp/incoming/2006 (по крайней мере, я не смог туда зайти: permission denied), появиться ли там аналог программы на С?

С Уважением, Алексей

lis
Re: !!!Вопрос по 9 лабе!!!
27 October 2006 12:12
извините, что не по делу... а где такое /var/ftp/incoming/2006 т.е возможно ли скачать лабу через интернет.. какая система нужна, или только через unix можно подконектиться?
Re: !!!Вопрос по 9 лабе!!!
27 October 2006 14:02
Это непосредственно на одном из серверов лаборатории, туда нельзя попасть извне,только с терминала или компа лаборатории, насколько я понял, доступ из интернета с некоторых пор закрыт.
zzz
Re: !!!Вопрос по 9 лабе!!!
27 October 2006 16:04
Firefaced писал(а):

> Это будет моя первая программа на С, поэтому я не знаю всех
> нюансов, и завтра (в пятницу 27.10.2006), к сожалению придти не
> смогу. Поэтому решил задать некоторые вопросы здесь, заранее
> благодарен за помощь и заранее прошу прощения за беспокойство.
>
> Я сегодня попытался сдать эту программу, на кануне вычитал в
> интернете базовые функции, операторы и т.п. и написал и отладил
> её, к сожалению в задании была опечатка и пришлось все
> переделывать на лабе, после выяснилось, что там были недочеты
> с тем, что я использовал замену #define для описания max и min
> и процедуру int sign(x){...}, но сейчас я с этим разобрался 8)
>

Использование параметризованных макросов связано с буквальной подстановкой строк в текст программы до синтаксического анализа и может привести к появлению труднообнаруживаемых ошибок. См. книгу Г. Саттера и А. Александреску "Стандарты программирования на С++. 101 правило и рекомендация". --М: Вильямс, 2005. Есть в формате pdf.

Ввиду того, что уравнения движения не удаётся написать на Си и на Паскале похожими на математические формулы, возможно употребление функций, которые мы ещё не проходили.

> У меня задание с Эллипсом с центром в точке (20;0)
> и проходящий через точки (10;0) (30;0), (20;5), (20;-5)
> Вариант задания №27
>
> Первый вопрос:
> На второй итерации программа выдает L2 = -5 а MathCAD L2 =
> -4,333 если сокращать, то получиться -4, а не -5,
> !?Какой из этих результатов считать правильным? Доводить
> программу, что бы она выдавала значение -4 или оставить как
> есть? И как сделать деление int`ов более точным?

Надо тщательно проверить реализацию уравнений движения на Си, соблюдение причинно-следственных и пространственно-временных зависимостей.

> Второй вопрос: по поводу проверки попадания в область Эллипса
>
> Идея №1 (много масштабных if)
> Так как у нас целочисленные координаты точки, я расписал
> диапазоны попадания в Эллипс, проверив их в MathCAD`е
> (i=10 или 30) и j=0
> (i=11 или 29) и j=[-2;2]
> (i=[12;13] или [27;28]) и j=[-3;3]
> (i=[14;19] или [21;26]) и j=[-4;4]
> i=20 и j=[-5;5]
> !?Примите ли Вы такое решение задачи?
>
> Идея№2 (наиболее удачная, но возникают проблемы)
> Формула заданного Эллипса имеет вид
>
> (i-20)^2`` j^2
> -------- + --- = 1
> ``a^2````` b^2
>
> Для проверки надо подставить в уравнение полученные координаты
> Если его значение будет <=1, то точка попадает в Эллипс.
> Но возникает проблема – при расчете в int это значение
> сокращается и в итоге проверка не верная – он первую же
> полученную точку считает входящей в Эллипс, её координаты
> (8;-4)
> Если же я задаю переменные для проверки в float, то программа
> выдаёт
> либо 0 либо 1 либо «-1073741824» или что-то подобное при
> делении.
> ?!Как сделать результатом деления не целое и верное число?

Домножив на a^2*b^2, получим точное целочисленное соотношение, которое для малых значений параметров позволит уйти от использования float. Так мы действовали, решая на занятии вариант №1!
>
> P.S. Вы сегодня (в четверг 26.10.2006) забыли открыть доступ на
> написанную Вами программу /var/ftp/incoming/2006 (по крайней
> мере, я не смог туда зайти: permission denied), появитЬся ли
> там аналог программы на С?
>
> С Уважением, Алексей

Это обычно забывает Алексей. Лебедев.
К сожалению, только зарегистрированные пользователи могут писать в этом форуме.

Авторизоваться на форуме