2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
|
||||||
1 | ||||||
Зачем нужные поразрядные операции. Книга Павловская, Щупак19.08.2009, 21:02. Показов 7243. Ответов 35
Метки нет (Все метки)
Решаю задачу из учебника Павловская, Щупак. С++. Программироание на языке высокого уровня. Структурное программирование. Практикум. Часть 1. Семинар 2. Задача 1. стр. 44. Задачу см. в привязанном файле.
Кажется, я решила задачу, программа работает. Но мне не понятно, зачем авторы пишут про поразрядные операции И и ИЛИ. Мне удалось обойтись без них. Может кто-нибудь объяснить, почему речь идет о поразрядных операциях? Вот мой код. Вроде, работает.
0
|
19.08.2009, 21:02 | |
Ответы с готовыми решениями:
35
Правильно ли я написал программу? Из книжки Павловская Щупак Книга Юрий Щупак Win32 API. Разработка приложений для Windows Поразрядные операции Поразрядные операции |
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
|
|
20.08.2009, 21:50 [ТС] | 21 |
Спасибо большое.
Но остается главный вопрос: правильно я поняла задачу или нет? А понимаю я ее так: Требуется 1) вычислить функцию F, 2) вывести ее результаты на экран в зависимости от условия (Ац ИЛИ Вц) И (Ац ИЛИ Сц), которое содержательно никак не связано с самой функцией (дается просто для тренировки). Что я и сделала. Правда, в моем решении почему-то это выражение всегда не равно нулю. Может такое быть или нет?
0
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
|
||||||
20.08.2009, 22:29 | 22 | |||||
1) срочно забыть про
2) При сравнении вещественных чисел с нулём, лучше вычислять модуль и сравнивать с некоторой константой, которая очень мала, но заведомо больше всяких арифметических ошибок
0
|
20.08.2009, 22:43 | 23 |
Biblio, хочу дать вам дельный совет: не заморачивайтесь с данной задачей: условие у нее дурацкое, высосанное из пальца. в том виде как вы ее решили, вы уже достойны оценки "отлично". мне нравится как вы думаете и соображаете. из вас получится отличный программер, если вы не передумаете и не найдете себе более интересное и полезное применение.
0
|
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
|
21.08.2009, 00:30 | 24 |
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
21.08.2009, 04:17 | 25 | |||||
Сообщение от M128K145
Сообщение от Biblio
1 & 2 равно 0 2 & 3 равно 2 -1 & -1 равно -1 а суммой называют |, потому что она по свойствам похожа на сумму и даёт еденицу при любом раскладе 1 1, 1 0, 0 1 3 | 2 равно 3 1 | 2 равно 3 -1 | -1 равно -1 единственное, в чем можешь быть уверена, они коммутативны (то есть, от перемены мест слагаемых результат не меняется)
0
|
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
|
|
21.08.2009, 11:13 [ТС] | 26 |
Мне кажется, как раз не путаю. В булевой алгебре для конъюнкции используется &, и в С++ & есть поразрядная конъюнкция (та что оперирует с битами, т.е. 0 и 1). Но ведь и в булевой алгебре при вычислении выражений используется 0 и 1. В этом смысле я имела ввиду, что выражение типа (А&С)|(А&В) есть фактически переход к решению булевых выражений. Начинаю подозревать, что именно поэтому в С++, который работает на разных уровнях (и с битами, и с человекопонятными объектами) понадобилось сохранить знак & (для работы с битами, читай булевыми выражениями), и еще ввести &&, чтобы устанавливать логические отношения между объектами более высокого уровня, т.е. числами и т.п. Это так, оффтоп.
Думаю, что на этом можно задачу закрыть. Видимо, только сам автор задачи знает, зачем было введено дополнительное условие с поразрядными операциями. В любом случае - я потренировалась и кое-что для себя узнала Для novi4ok Во-первых спасибо за добрые слова. Они, как известно, и кошке приятны . Во-вторых, условие задачи смутное, верно. Но достоинство учебника в том, что там сразу дается много однотипных задач. А это важно, чтобы "руку набить". Многие учебники содержат по одной задачке на каждую тему, поэтому потом все выветривается моментально. К тому же можно решать только первую часть, т.е. вычисление функций с определенными условиями, а вторую оставить в покое. Спасибо, как раз в книжке той же Павловской нашла похожий совет. Относительно разбивки cout << "f (x < 0 && b !=0): " << f << endl; Думаю, это чисто стилистические вещи. Сути дела не меняют. Просто для кого-то так удобнее писать, нагляднее. Всем еще раз большое спасибо.
0
|
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
|
|
21.08.2009, 13:51 [ТС] | 27 |
Ошибка с при переходе через ноль все равно остается. См. скриншот.
0
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
|
|
21.08.2009, 13:57 | 28 |
Biblio, таки последнюю версиию программы в студию!
0
|
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
|
||||||
21.08.2009, 14:05 [ТС] | 29 | |||||
Простите, упустила.
При значениях -3 5 0.2 - есть ошибка
0
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
||||||
21.08.2009, 14:09 | 30 | |||||
Тут легче переписать, чем разбиратся правильно ли написано
Сравнивай
0
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
|
|
21.08.2009, 14:14 | 31 |
В задании - x сравнивается с нулём операцией <, а у вас
(fabs(x) < 1e-6 && b != 0) т.е. x проверяется на равенство нулю. Вероятно, надо заменить на (x < -1e-6 && b != 0) и аналогично дальше.
0
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
||||||
21.08.2009, 23:35 | 32 | |||||
Нужно сравнивать как написано - без всяких fabs(XXX)<1e-6
if ( x<0 && b!=0 ) if ( x>0 && b==0 ) Добавлено через 23 секунды В данном конкретном случае разумеется. Добавлено через 5 минут 17 секунд И вообще Alexandoros в посте #30 все уже написал. Добавлено через 22 минуты 20 секунд Цикл нужно перебирать немного не так - до конечного значения не всегда удается дойти. А так как значение X очень важно для формулы, то предлагаю делать вот так. Заодно это хороший пример как реально представляются значения. И лучше использовать double, а не float. Сравнение 0.0==0 компьютер сделает правильно. Как и сравнения x<0, x>0.
0
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
|
||||||
22.08.2009, 03:13 | 33 | |||||
Сравнение компьютер делает правильно, вот только получить при вычислениях вещественный ноль тяжело.
Скомпилируйте и запустите
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
23.08.2009, 06:31 | 34 | |||||
там всё таки не одно и то же
&1 и !=0 потому что с чётной a будет получаться ложь
и то, что они так выглядят, идентично - это просто совпадение
0
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
23.08.2009, 23:05 | 36 |
2skvor: ты код сначала посмотри, я специально подравниваю значение x при близких к 0 значениях.
0
|
23.08.2009, 23:05 | |
23.08.2009, 23:05 | |
Помогаю со студенческими работами здесь
36
Поразрядные операции Поразрядные операции Поразрядные операции Поразрядные операции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |