powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Использование приоритетности операторов или скобки
25 сообщений из 107, страница 3 из 5
Использование приоритетности операторов или скобки
    #38824528
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JeStonesoftwarerВы правы. Офигенная прелесть Паскаля (точнее, дельфы, как его современного представителя) в исключительной информативности кода, ...
Это все субъективно. Для меня, например, ...
Вы не совсем правы. Здесь есть три составляющих. Во-первых, согласен, субъективная - уровня "мне больше/меньше нравятся фигурные скобки чем begin/end". Во-вторых, привычка; наработанная практика восприятия кода на определённом языке, его типовых приёмов итп. И в-третьих таки объективная, порождённая (не)соответствием подходов и средств языка задаче.

Чтобы увидеть, что объективная составляющая точно существует.. ну давайте возьмём, например, какой-нибудь сложный, но воспринимаемый SQL-запрос, и представим себе, как будет выглядеть делающий то же самое код на plain C.

Так вот, я говорю именно об объективной составляющей. При этом, поскольку мне нравится и Си как таковой, и Паскаль как таковой, полагаю, что не вношу в оценку большой субъективности. В каждом из них есть то, что мне нравится, и то, что не нравится.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824536
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПервая часть вашего примера, на языке Си, будет выглядеть следующим образом
Саш, я привёл пример функции без параметров. Не надо переделывать постановку, это недостойно.

SashaMercuryНе вижу какой-то красоты в том что вы привели, код Си красивее.
Я привёл пример мест, в которых Си требует кучу мешающих восприятию круглых скобок. Судя по тому, что Вы начинаете менять постановку задачи и говорить о чём-то другом, свой тезис про скобки я обосновал достаточно убедительно.

SashaMercuryМне кажется, что символов будет больше,
Наверное. А мы экономим символы? Тогда лучше всего использовать однобуквенные идентификаторы, да и вообще перейти работать на APL.

SashaMercuryПриведите пожалуйста аналог следующего кода Си на Паскале
Без проблем.

Код: pascal
1.
while not Eof(Input) do Write(Output, ReadChar(Input));


Кстати, и здесь скобок меньше, чем в Вашем варианте (что неудивительно).
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824546
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКстати, как вы думаете, что лучше, := для присваивания, и = для сравнения, либо = для присваивания, и == для сравнения ?
Безразлично. Я спокойно работаю и с тем, и с другим, и вперемешку.

SashaMercuryУ нас два фактора, частота появления оператора, и читабельность.
Неверно. Основной фактор, куда более важный, чем оба названных - вероятность ошибиться, использовав одно вместо другого. С этой точки зрения :=, пожалуй, лучше. Лично я никогда так не ошибался и не очень понимаю, как ошибаются другие. Но судя по тому, что в компиляторы пихают варнинги на присваивания в условиях, проблема довольно актуальна.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824557
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Саш, я привёл пример функции без параметров. Не надо переделывать постановку, это недостойно.
не понял задумки, тут вы правы

softwarer
Код: pascal
1.
while not Eof(Input) do Write(Output, ReadChar(Input));



а вот тут уже вы переделываете постановку, оригинал был с присваиванием в условии :)

Код: plaintext
1.
2.
while ((int c = getc(in)) != EOF)
	putc(c, out);
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824572
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonВот достаточно частый пример который я объясняю своим девелоперам.

Код: plaintext
1.
2.
3.
4.
5.
int progress = getProgress();

int percent = 100 * progress/MAX_CNT; // Incorrect.

int percent = (100 * progress)/MAX_CNT; // Correct.


А если так:
Код: plaintext
1.
2.
progress =  40000000
MAX_CNT = 2000000000


Тогда оба твоих варианта дают 0
Так правильно работает
Код: plaintext
1.
int percent =  progress / (MAX_CNT / 100); 


Верно. Этот пример требует пояснений. Я выношу его на собеседование. Задача рисования ProgressBar
часто актуальна. При этом надо помнить о переполнениях разрядной сетки.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824583
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть и обратный случай. Максимальное число заявок к примеру MAX_CNT может быть меньше
100 штук. В этом случае целочисленное деление даст сильно "грубый" результат. Опять константа.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824639
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсть и обратный случай. Максимальное число заявок к примеру MAX_CNT может быть меньше
100 штук. В этом случае целочисленное деление даст сильно "грубый" результат. Опять константа.
Универсального решения нет. Надо проверять значение MAX_CNT и считать тем или иным способом.

Хотя можно перевести в double и тогда все три способа подойдут.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824653
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так универсально:
Код: sql
1.
int percent = 100. * progress/MAX_CNT;



Кстати почему ты считаешь некорректно
Код: plaintext
1.
int percent = 100 * progress/MAX_CNT; // Incorrect.


умножение и деление имеют одинаковый приоритет, т.е. будет выполнено так
Код: plaintext
1.
int percent = (100 * progress)/MAX_CNT; // Correct.


по крайней мере для MSVC это одно и тоже
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	int p1 = 100 * progress/MAX_CNT; // Incorrect.
00413046  mov         eax,dword ptr [ebp-0Ch] 
00413049  imul        eax,eax,64h 
0041304C  cdq              
0041304D  idiv        eax,dword ptr [ebp-18h] 
00413050  mov         dword ptr [ebp-24h],eax 

	int p2 = (100 * progress)/MAX_CNT; // Correct.
00413053  mov         eax,dword ptr [ebp-0Ch] 
00413056  imul        eax,eax,64h 
00413059  cdq              
0041305A  idiv        eax,dword ptr [ebp-18h] 
0041305D  mov         dword ptr [ebp-30h],eax 

...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824704
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TУниверсального решения нет. Надо проверять значение MAX_CNT и считать тем или иным способом
Либо приводить к какому-нибудь заведомо достаточному типу. Либо нормировать (типа if (max_cnt > max_int/100) { max_cnt /= 100; progress /= 100;}
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824712
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа вот тут уже вы переделываете постановку, оригинал был с присваиванием в условии :)
Вы ещё скажите, что постановка требует использовать функцию getc :)

Сишные операции - присваивание, запятая, тернарная - безусловно, относятся к достоинствам языка. Но как видите, в Вашем примере она используется как ненужная заплата на недостаток дизайна стандартной библиотеки :)
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824729
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, хм... гдеж я этот приоритет-то взял. Из каких языков.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824741
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima T, хм... гдеж я этот приоритет-то взял. Из каких языков.
хз, везде вроде слева направо вычисляется

могу только предположить что изначально было
Код: sql
1.
progress / MAX_CNT * 100
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824789
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю да.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824794
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerSashaMercuryа вот тут уже вы переделываете постановку, оригинал был с присваиванием в условии :)
Вы ещё скажите, что постановка требует использовать функцию getc :)

Сишные операции - присваивание, запятая, тернарная - безусловно, относятся к достоинствам языка. Но как видите, в Вашем примере она используется как ненужная заплата на недостаток дизайна стандартной библиотеки :)

softwarer
Код: pascal
1.
while not Eof(Input) do Write(Output, ReadChar(Input));



Функция Eof(stream) равносильна getc()+ungetc() верно ? Т.е. берём символ из потока, проверяем его, и кладём его обратно(в том смысле, что указатель в потоке перемещается обратно или как-то иначе, но по смыслу аналогично ). Возвращает результат проверки. Или ошибаюсь ?
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824798
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

расcтроил Марка :D не стыдно ;)
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824801
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryФункция Eof(stream) равносильна getc()+ungetc() верно ? Т.е. берём символ из потока, проверяем его, и кладём его обратно(в том смысле, что указатель в потоке перемещается обратно или как-то иначе, но по смыслу аналогично ). Возвращает результат проверки. Или ошибаюсь ?
Это квантовый эффект бро! Чтобы "взглянуть" на EOF файла нужно "поток изменить".
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824802
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
есть такой язык, в котором приоритет * и / различаются, но не помню какой..где-то читал, что-ли. Даже не знаю откуда у меня эта информация в голове, не помню
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824805
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryDima T,

расcтроил Марка :D не стыдно ;)
Да ничего не стыдно. Всё норм. Нельзя быть докой во всём. Голова лопнет.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824806
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryФункция Eof(stream) равносильна getc()+ungetc() верно ?
По результату - да, по реализации - нет.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824808
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSashaMercuryФункция Eof(stream) равносильна getc()+ungetc() верно ? Т.е. берём символ из потока, проверяем его, и кладём его обратно(в том смысле, что указатель в потоке перемещается обратно или как-то иначе, но по смыслу аналогично ). Возвращает результат проверки. Или ошибаюсь ?
Это квантовый эффект бро! Чтобы "взглянуть" на EOF файла нужно "поток изменить".

кто-то перечитал Ткань космоса, или посмотрел Интерстеллар на днях Так я правильно рассуждал, или нет ?
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824811
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
а как по реализации ? Расскажите пожалуйста
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824813
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа ничего не стыдно. Всё норм. Нельзя быть докой во всём. Голова лопнет.
Нельзя, конечно. Но я в какой-то момент обзавёлся привычкой проверять то, что я выношу на люди, и в частности задачи для собеседований. Времени тратится немного, а вот пользы прилично. Особенно когда открываешь для себя что-то новое :)
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824814
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSashaMercuryDima T,

расcтроил Марка :D не стыдно ;)
Да ничего не стыдно. Всё норм. Нельзя быть докой во всём. Голова лопнет.

"расстроил" в том плане, что теперь кому-то придется вспоминать язык, к которому пример выше будет актуален Раз уж привел пример, то нужно довести его до конца ;)
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824821
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymaytonпропущено...

Это квантовый эффект бро! Чтобы "взглянуть" на EOF файла нужно "поток изменить".

кто-то перечитал Ткань космоса, или посмотрел Интерстеллар на днях Так я правильно рассуждал, или нет ?
Ни то не другое не смотрел и не читал. По поводу функций читаючих "текстовые строки" или "символы".

Ну... они скорее всего являются фасадом для fopen/fread/fclose/fseek, или open/read/close.

В любом случае надо сначала что-то вычитать. Удариться об "ограничитель" и потом принять решение о выходе
из цикла. А делать это через while(.) или do{..} while уже кому как удобнее.
...
Рейтинг: 0 / 0
Использование приоритетности операторов или скобки
    #38824824
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа как по реализации ? Расскажите пожалуйста
Язык сам по себе этого не специфицирует. В борландовых реализациях операции опираются на buffered reader, то есть логику можно примерно описать так:

if buffer_empty then read_next_buffer;
result := buffer_empty or text_file and current_char^ = ^Z;
...
Рейтинг: 0 / 0
25 сообщений из 107, страница 3 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Использование приоритетности операторов или скобки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]