Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление арифметического выражения
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Провинциалка
Здравствуйте! Только начала изучать Си, пока плохо его понимаю. Подскажите, как написать программку для написания арифметическое действия
volvo
А можно присоединить в другом формате (лучше в графическом) для тех, у кого нет возможности открыть docx?
Krjuger
Если вы скопировали, и вырезали откуда то,то сделали весьма неудачно.Так как нигде не видно самого арифметического выражения.
2. Вычислить значения выражений. Объяснить полученные результаты.
№ 12
Задание 1
при a=1000, b=0.0001
Задание 2
1) - -m-++n
2) m*n<n++
3) n- - > m+ +

1. Для ввода и вывода данных использовать операции >> и << и стандартные потоки cin и cout.
Тоже весьма сомнительно для Си,вожможно все таки С++?Или у вас эти для языка обьединены.
В общем,либо напишите суда сами,либо,как, volvo, предложил.

P.S.to volvo,а почему не сохраняются пробелы,или это доступно только при использовании тегов кода?
Провинциалка
Ребята, извините. Я сегодня поздно вышла сайт, сейчас не успеваю всё объяснить, убегаю на лекции. Часа через четыре приду, и сразу за комп...
Провинциалка
Добрый вечер,Уважаемые!
Касательно моей темы: в качестве своего вопроса, позвольте мне тогда выложить файл в котором описана вся моя лабораторная работа. В конце её, в таблице, даны варианты заданий - мой 12-й. Файл в формате doc, как просил Volvo.
Посмотрите пожалуйста, возможно ли вообще для такого примера написать программу на СИ++.
Спасибо
volvo
Цитата
возможно ли вообще для такого примера написать программу на СИ++.
Можно, конечно. Вот, смотри. Если писать напрямую ("в лоб", что называется):
http://liveworkspace.org/code/811f40765cf7...3891702f83505ca

Если сделать чуть-чуть хитрее, и не копировать код, а написать так, чтобы изменить только типы:
http://liveworkspace.org/code/f30fe60c1f0b...8771b75defe4030
(результаты, как видишь, одинаковые)

А вот теперь - самое интересное: объясни полученные результаты. Почему при использовании типа float получается так, а при использовании double - эдак?

Что касается второго задания - тебе надо просто подумать, при заданных значениях m, n чему будет равно каждое из заданных выражений. На самом деле - вопрос о приоритете операций, и на внимательность/знание синтаксиса выражений. Попробуй сделать сама, что не получится - говори...
Провинциалка
1) Спасибо огромное!
2) А значение выражения все-таки чему равно: 6.25e+06 или 1.00117?
3) Мои мои знания в СИ ещё сырыми-то назвать нельзя, поэтому объяснить полученные результаты пока не в состоянии. Мне бы самой хотелось задать вам несколько глупых вопросов по коду. Но как-то неудобно спрашивать.(Кстати, а ведь результаты-то и так и эдак одинаковые? 6.25e+06 (1.00117) Или я не так поняла?)
4) Ну а второе задание...Мне придется, наверное, перечитать для начала много литературы, прежде чем я пойму смысл задания.
Вы уж извините, что я к вам обратилась за помощью, просто наш преподаватель во-первых, часто болеет, во-вторых, объясняет, мягко говоря недоступно, ну и в-третьих - молва о хорошем сайте forum.pascal.net.ru с распространяется так быстро, что вот я тоже оказалась здесь
volvo
Цитата
А значение выражения все-таки чему равно: 6.25e+06 или 1.00117?
Не поверишь. Ни первому, ни второму. Если раскрыть скобки, то получается b2/b2, соответственно, в результате должна получиться 1-ца. Посмотри, может, это наведет тебя на мысль о том, почему такое происходит:
http://liveworkspace.org/code/9f907855c69b...3d26dcb63fbc49b

(подсказка: посмотри, чему равно b2 при использовании типа float, и подумай, а чему это должно быть равно на самом деле? И почему печатается то, что печатается?)
Lapp
М
Оль, пожалуйста, уважай Правила..
Название темы изменено.

TarasBer
> - -m-++n

А в чём смысл подобных вопросов? Научить людей делать вид, что они понимают подобную нечитаемую шнягу, не встречающуюся в реальной жизни у нормальных людей? Или чтобы сразу отпугнуть от такого стиля написания кода?
Провинциалка
Не подскажете, почему компилятор выдаёт ошибку в строчке "float a2 = pow(a, 2);"
volvo
Не выдает компилятор ошибки. Там же приведен результат прогона программы, как он мог получиться, если программа не компилируется?

Наверное, все зависит от того компилятора, которым ты пользуешься? У меня (и на сайте, куда я давал ссылки) используется GCC. Он прекрасно компилирует приведенный код...
Провинциалка
Здравствуйте! Не хотела бы пока закрывать эту тему, очень надо всё узнать до конца.
В процессе изучения кодов, которые вы мне предложили, мне пришла в голову мысль попробовать написать свой вариант решения задачи и получилось вот что:

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

int main()
{

float a, b, rezult;
a = 1000;
b = 0.0001;
rezult = (pow(a + b,2) - (pow(a,2) + (2 * a * b))) / pow(b,2);
printf("%4.4f \n" ,rezult);
system("PAUSE");
}


Код полностью работоспособен, но волнует вопрос: почему в случае с float мой результат = 1, а ваш результат = 6.25e+06 ? (В случае с double решения сходятся)
И
TarasBer
> pow(a + b,2)

А почему не (a+b)*(a+b)?
Я не знаю эту функцию, но мне кажется, она неявно переводит числа в более точный формат.
Провинциалка
Цитата
Я не знаю эту функцию
- на вас не похоже что вы чего-то можете не знать, ну да ладно больше не буду задавать дурацкие вопросы.
volvo
Цитата
волнует вопрос: почему в случае с float мой результат = 1, а ваш результат = 6.25e+06 ?
Во-первых, не 1, а 1.0000008344650269... Если ты попросила показывать только 4 знака после запятой - это не значит, что больше цифр нет. Тебе просто их не показывают. Замени свой printf на такой:
printf("%2.16f \n" ,rezult);
, увидишь более точный результат.

Но твое решение - это игра против правил. Во-первых, ты нарушаешь пункт 1:
Цитата
1. Для ввода и вывода данных использовать операции >> и << и стандартные потоки cin и cout
, и выводишь результат не через потоки вывода.

Во-вторых, сам смысл задания состоит в том, что
Цитата
3. При выполнении задания 1 надо использовать вспомогательные переменные для хранения промежуточных результатов
, то есть, не полагаться на возможную оптимизацию, которую проведет компилятор, а вычислить именно через промежуточные выражения, чтобы показать разницу в обработке разных типов данных. То, что ты сделала - это ненужное вычисление. В принципе, и без компилятора можно мгновенно сказать, чему будет равно значение выражения при любых a, b. Задача в данном случае другая. И, до настоящего момента, ты ее не осознала. Ибо, почему вычисленные результаты настолько отличаются один от другого - ты так и не объяснила. И даже не попыталась, хотя я подсказывал тебе, куда смотреть. Ну, как знаешь...
Провинциалка
Я и вправду проделала лишнюю работу. Видимо так увлеклась, что не увидела требования в конце задания. Извиняюсь.
А почему вычисленные результаты настолько отличаются один от другого, я кажется поняла, но не настолько чтобы успокоиться.
Допустим в случае с float: b^2 = 9.99999905105e-09
во случае c double: b^2 = 1.00000000000000002e-08
Вроде одинаковые значения?
А на каком основании компилятор посчитал значение (a+b)^2 - (a^2 + 2*a*b) = 1.0011717677116394e-08. Пересчет на калькуляторе дает значение 0,01 !
Lapp
Цитата(Провинциалка @ 11.04.2011 19:10) *
Допустим в случае с float: b^2 = 9.99999905105e-09
во случае c double: b^2 = 1.00000000000000002e-08
Вроде одинаковые значения?
Эти два заначения отличаются друг от друга в восьмом знаке (я имею в виду значащие цифры), то есть на 0.00001% (я пометил красным, где начинается различие). Это и есть приблизительно точность float, так что совпадение можно считать полным.

Цитата
А на каком основании компилятор посчитал значение (a+b)^2 - (a^2 + 2*a*b) = 1.0011717677116394e-08. Пересчет на калькуляторе дает значение 0,01 !
Во-первых, компилятор ничего не считает (смотри, не ляпни такое на зачете - кто-то улыбнется, а кто-то может и урыть за непонимание сути). Компилятор делает программу, и программа уже считает. Такое ошибочное мнение у тебя, возможно, оттого, что ты работаешь в программной среде, которая каждый раз компилирует прогу перед запуском, потому что в ней почти всегда есть изменения в процессе отладки. Но после отладки ты можешь запускать только саму программу (скомпилированную, то есть exe-файл) без всякого компилятора, и она будет прекрасно считать, даже если компилятор стереть с диска на фик. Это все равно, что сказать, что кастрюля питательная )). Готовишь ты на плите в кастрюле (среда с компилятором), но ешь ты то, что сама в нее положила (твой программный код). И питательность твоей стряпни зависит всецело от тебя, а не от плиты и кастрюли )).

Во-вторых.. Я не знаю, зачем тут вообще применять калькулятор. volvo уже говорил об этом: тут все считается в уме за доли секунды. Первая скобка - полный квадрат, вторая - два слагаемых из формулы его раскрытия. Результатом вычитания должно явиться третье слагаемое, то есть b2. При b=10-4 значение b2 будет равно 10-8. Так что первое число (1.0011717677116394e-08) с хорошей точностью правильное, а то, что ты насчитала на калькуляторе (0.01) - выброси и сделай вид, что этого никогда не было smile.gif.

Если говорить про результирующее выражение (вар.12), то в нем должна получаться 1 при любых a и b (кроме b=0, ессно), так как в нем b2 и в числителе, и в знаменателе. Отклонение от 1 представит точность вычислений. В твоем случае входных данных происходит сложение/вычитание чисел скщественно разных порядков, при этом результирующая точность вычислений сильно падает. Таких случаев лучше стараться избегать (специальным подбором методов) либо максимально возможно увеличивать точность представления (double и т.д.). Но тут, я думаю, это сделано специально, чтоб продемонстрировать пределы точности машинных вычислений.
Провинциалка
Огромное спасибо за исчерпывающий ответ. Завтра буду защищать лабораторную. Попробую сказать тоже самое что здесь написано.
Хочу уточнить следующее: как лучше ответить преподавателю, если он спросит - почему такое сильное различие в результатах при использовании различные типов данных -
Цитата
максимально возможно увеличивать точность представления
?
Lapp
Цитата(Провинциалка @ 12.04.2011 15:44) *
как лучше ответить преподавателю, если он спросит - почему такое сильное различие в результатах при использовании различные типов данных - ?
Операции сложения и вычитания могут приводить к большой потере точности вычислений, если операнды имеют большую разницу по абсолютной величине. Потеря точности (в знаках) равна разности порядков чисел. Например, если ты складываешь/вычитаешь 100 и 0.01 (полученные в результате других вычислений, то есть уже определенные не совсем точно), потеря точности составит 4 знака. Точность представления типа float в стандартной архитектуре x86 составляет 7-8 знаков (точно не помню, поправьте, если что). При сложении a2 и ab (1000000 и 0.1) происходит практически полная потеря точности, и результаты вычислений на основе float в данном случае полностью теряют значимость (и представляют собой, грубо говоря, случайные числа). Точность double составляет примерно 15 знаков, поэтому результат вычислений с double сохраняет некоторую значимость (хотя точность сильно понижается тоже).
volvo
Цитата
Точность представления типа float в стандартной архитектуре x86 не превышает 8 знаков
Я думаю, не будет лишним знать при сдаче работы, как рассчитывается количество значащих цифр smile.gif

Начинаем с float. Для 24 бит экспоненты мантиссы точность составляет [log10(224)] = 7 знаков. У двойной точности (double) - 53 бита в мантиссе, отсюда получаем 15 значащих цифр (почти 16, но все-таки до 16 чуть-чуть не дотягивает). Можно также использовать расширенную точность, (long double) с мантиссой из 64 бит, там будет уже 19 значащих цифр...
Провинциалка
Сказать всем большое спасибо - значит ничего не сказать! Поражаюсь, как можно столько знать? good.gif
А путаница в моей голове из-за того, что не успел еще Паскаль совсем выветриться. yes2.gif
Lapp
Цитата(Провинциалка @ 12.04.2011 23:25) *
не успел еще Паскаль совсем выветриться. yes2:

??? не допускай этого. НИКАКОЕ знание НЕ ЛИШНЕЕ.
Паскаль и Си могут прекрасно дополнять друг друга.
Провинциалка
Уважаемые! Добрый вечер!
Вот никак не получается доделать программу второго задания. Не могу понять как прописать условия второго и третьего пунктов. Подскажите, пожалуйста.

#include <iostream.h>
#include <math.h>
#include <conio.h>
int main()
{
int m,n,S1,S2;
cout<<"Zadanie pervoe:\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
S1=--m-++n;
cout<<"S1="<<S1<<endl;

cout<<"\n Zadanie vtoroe\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
S2=m*n;
cout<<"S2="<<S2<<endl;
cout<<"n++ ="<<n++<<endl;
???????????????????????????????
cout<<"\n Zadanie tretye\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
cout<<"n-- ="<<n--<<endl;
cout<<"m++ ="<<m++<<endl;
?????????????????????????????????
getch();
}
Lapp
Цитата(Провинциалка @ 23.04.2011 16:39) *
Не могу понять как прописать условия второго и третьего пунктов. Подскажите, пожалуйста.

Я не совсем понимаю, что тебя затрудняет.
Почему нельзя просто скопировать из задания?

Добавлено через 11 мин.
а, ясно, кажется.. туплю )
Вам, похоже, не объяснили, что является результатом сравнения.
В Паскале есть особый логический тип. Если ты попробуешь напечатать что-то типа 1<2, то ты увидишь на экране слово TRUE (или FALSE, если 1>2, например). Попробуй сама это сделать. В Си нет особого логического типа. Там истина выражается числом 1, а ложь - числом 0. Соответственно, если ты будешь печатать 1>2, то выйдет 0, а если -2<2, то 1.
Так что просто копируй из задания (как в первом пуекте делала).
Я правильно понял твой вопрос?
karpinsky
Цитата
Не могу понять как прописать условия второго и третьего пунктов
Третий пункт, так как он записан в doc файле, компилироваться не будет, это нарушает синтаксис С/С++. Уточни, действительно ли там нужны все пробелы, или это опечатка в задании?
Провинциалка
Цитата
Третий пункт, так как он записан в doc файле, компилироваться не будет, это нарушает синтаксис С/С++. Уточни, действительно ли там нужны все пробелы, или это опечатка в задании?

Да, там действительно опечатка.
И вот что я сотворила: wub.gif
#include <iostream.h>
#include <math.h>
#include <conio.h>
int main()
{
int m,n,S;
cout<<"Zadanie pervoe:\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
S=--m-++n;
cout<<"S = "<<S1<<endl;

cout<<"\n Zadanie vtoroe\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
m*n<n++;
cout<<"m*n = "<<m*n<<endl;
cout<<"n++ = "<<n++<<endl;

cout<<"\n Zadanie tretye\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
n-->m++;
cout<<"n-- = "<<n--<<endl;
cout<<"m++ = "<<m++<<endl;

getch();
}


Не знаю, правильно или нет, но работает. Как вы считаете, это так должно выглядеть?
-Lapp-
Цитата(Провинциалка @ 24.04.2011 14:39) *
Не знаю, правильно или нет, но работает. Как вы считаете, я это так должно выглядеть?

Нет, не так.
   cout<<"\n Zadanie vtoroe\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
cout<<"m*n<n++ = " << m*n<n++ <<endl;
-lapp-
Ты все же узнай - может это и не ошибка, а подколка (я про пост karpinsky говорю)
Я не обратил внимания, плдумал - это штучки ворда. Но исключить, что это нарочно, все же нельзя.
karpinsky +1
Провинциалка
Почему-то пишет ошибку здесь
Цитата
cout<<"m*n<n++ = " << m*n<n++ <<endl;

karpinsky
Прав абсолютно: приоритет << выше, чем у операций сравнения - с точки зрения компилятора получается белиберда. Вот так это видит компилятор:
(cout<<("m*n<n++ = " << m*n))<(n++ <<endl);


Использование скобок приводит все в порядок:
cout<<"m*n<n++ = " << (m*n<n++) <<endl;
Провинциалка
Спасибо, господин karpinsky!!!
Выходит, что я и третье задание неправильно написала!
Должно быть так? Ну скажите что я права
cout<<"\n Zadanie tretye\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
n-->m++;
cout<<"n-- > m++ = "<< (n-->m++) <<endl;
cout<<"m++ = "<<m++<<endl;
karpinsky
Цитата
Ну скажите что я права
Не совсем. Ты не хочешь понять одной простой вещи:

    cout<<"Vvedi m\n";
cin>>m; // Ввела значение m
cout<<"Vvedi n\n";
cin>>n; // Ввела значение n

n-->m++;
// Вот тут начинаются проблемы.
// Это - бессмыслица. Ты ничему не присваиваешь результат сравнения.
// Синтаксически все правильно, но с точки зрения логики - нет. Зачем
// что-то делать, и при этом результат не использовать? Но это еще не все, см. ниже почему.

cout<<"n-- > m++ = "<< (n-->m++) <<endl;
cout<<"m++ = "<<m++<<endl;

А не все - потому что у того выражения, результат которого не используется, есть побочный эффект. При вего выполнении изменяется значение двух переменных. Понимаешь, к чему я клоню? Ты что-то сделала, результата не увидела, поэтому, чтоб показать результат, ты строкой ниже проделываешь ту же операцию еще раз, но теперь она производится уже с другими значениями m и n. И получается, что при некоторых данных у тебя результат первоначального сравнения, которое сделано впустую, будет отличаться от второго, которое ты пытаешься вывести на ээкран. Смотри:

допустим, n = 2 и m = 0. Сравниваем: n > m? Да, результат - истина, или ненулевое значение (скорее всего единица). Дальше производятся постфиксные операции, т.е., после того, как произведено сравнение двух чисел между собой, выполняется постфикс. Были бы ++ или -- перед переменной - был бы префиксный оператор, тогда действие производилось бы перед выполнением сравнения. Итак, после окончания выполнения строки n-->m++ значение n уменьшается на 1, значение m увеличивается на ту же единицу. Что имеем в итоге? n = 1 и m = 1. Как думаешь, в следующий раз, когда выполнится то же самое выражение, n > m будет истиной? Мне кажется, что нет. То есть, при втором выполнении результат уже неправильный. А при других исходных данных результат может стать неправильным и при 5-ом и при 10-ом выполнении выражения.

То есть, фрагмент кода должен быть таким:
	cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
cout<<"n-- > m++ = "<< (n-->m++) <<endl;
cout << "n = " << n << " m = " << m << endl;
Все, что тебе нужно уметь объяснять в данном случае - это разницу между префиксным и постфиксным инкрементом/декрементом. То есть, ты должна знать, что сначала производится сравнение, и тольео потом - модификация переменных. И несмотря на то, что следующая строка может напечатать одинаковые значения m и n - результат сравнения может быть ложью.

С инкрементом/декрементом надо всегда "держать нос по ветру" (С), чревато ошибками. smile.gif
Провинциалка
Класс! Спасибо!
Позвольте задать ещё один глупый вопрос. Если мы добавили в третьем задании
cout << "n = " << n << " m = " << m << endl;

значит во втором задании можно добавить строчку
cout << "m*n = " << m*n << "n++ = " << n++ << endl;
? wacko.gif
Ну а первое задание-то хоть правильно решила?
karpinsky
Цитата
значит во втором задании можно добавить строчку
cout << "m*n = " << m*n << "n++ = " << n++ << endl;
Можно. Но реального положения дел она отражать не будет. Это будет не то значение n, которое принимало участи в строке
cout<<"m*n<n++ = " << m*n<n++ <<endl;
. Ты опять забыла о том, что после сравнения значение n увеличивается. И если добавить стоку, которую ты показала, и посмотреть, что напечатается, то можно очень сильно удивиться. Если тебе хочется выводить значение m*n - выводи его перед сравнением:

cout << "m*n = " << m*n << "n = " << n << endl;
cout<<"m*n<n++ = " << (m*n<n++) <<endl;


А первое задание - вроде нормально. Там надо вычислить значение, а не показать результат сравнения. Кстати, в doc опять же есть пробел, которого нет у тебя в программе, между выделенными символами: S=--m-++n; Уточни, нужен ли он. Результаты выполнения программы без этого пробела и с ним будут разными.
Провинциалка
Спасибо большое!
Lapp
Цитата(karpinsky @ 24.04.2011 17:14) *
Прав абсолютно: приоритет << выше, чем у операций сравнения - с точки зрения компилятора получается белиберда. Вот так это видит компилятор:
(cout<<("m*n<n++ = " << m*n))<(n++ <<endl);
Упс.. моя практика на Си sucks.. Рука хотела поставить в скобочки, но, подумав, я почему-то решил, что приоритет сравнения выше.
Извини, Провинциалка, и спасибо, karpinsky )

Интересно, в чем суть такой расстановки приоритетов? Если она есть, конечно.. )
karpinsky
Как говорил один из героев фильма "Хочу в тюрьму":
"- В России победит здравый смысл.
- Россия - она _сильнее_ здравого смысла!"
(С)

Точно так же и расстановка приоритетов операций в С оказалась сильнее здравого смысла. Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение.
Lapp
Цитата(karpinsky @ 25.04.2011 11:52) *
Как говорил один из героев фильма "Хочу в тюрьму":
"- В России победит здравый смысл.
- Россия - она _сильнее_ здравого смысла!"
(С)

Точно так же и расстановка приоритетов операций в С оказалась сильнее здравого смысла. Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение.

wacko.gif
я б никогда не допер..
но хорошо, что хоть какой-то смысл есть (хоть и не здравый))
+1
Провинциалка
Извините что влезла в ваш диалог, просто интересно стало
Цитата
что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение.

Как будто инопланетяне разговаривают rolleyes.gif
Lapp
Цитата(Провинциалка @ 25.04.2011 18:54) *
Извините что влезла в ваш диалог, просто интересно стало

Как будто инопланетяне разговаривают rolleyes.gif

Я положу ссылку на твой пост в тему "Из жизни Форума и форумчан" в Юморе )).

А ты все же хочешь получить перевод с иноплатетянского на русский или нет?
TarasBer
> Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения.

А что, в С и С++ разные приоритеты? Если нет, то причём тут Страуструп, сишку не он разрабатывал сочинял.
karpinsky
Хорошо, спасибо Кернигану (я не Сишник, поэтому создатель Языка для меня - это Страуструп, опечатался), что приоитет сдвигов выше, чем сравнений. Легче тебе стало от этого?
TarasBer
> Хорошо, спасибо Кернигану

Так корректнее. Не надо новичков вводить в заблуждение.

> Легче тебе стало от этого?

Палишься.
Lapp
Цитата(TarasBer @ 26.04.2011 10:44) *
> Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения.
А что, в С и С++ разные приоритеты? Если нет, то причём тут Страуструп, сишку не он разрабатывал сочинял.
Цитата(karpinsky @ 26.04.2011 11:18) *
Хорошо, спасибо Кернигану (я не Сишник, поэтому создатель Языка для меня - это Страуструп, опечатался), что приоитет сдвигов выше, чем сравнений. Легче тебе стало от этого?

Стоп, стоп, господа! оффтопить так оффтопить..
По крайней мере, Керниган был первым. И хотя обозначение для сдвигов идеально удачным назвать нельзя (я затрудняюсь назвать лучше, но допускаю, что могло быть), все же ему не нужно было оглядываться на других. Зачем нужно было Страустрапу (ил кому там? кто автор этого обозначения?) обозначать этими же символами совсем другое?.. blink.gif
Так что спасибо, по-моему, все-таки ему (или кому там).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.