Начинаю осваивать C, появляются вопросы...

Модератор: Модераторы разделов

QWERTYASDF
Сообщения: 985
Статус: Чайник со свистком
ОС: GNU/Linux

Начинаю осваивать C, появляются вопросы...

Сообщение QWERTYASDF »

Доброе время суток!

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

Вопрос второй. Если в Си, и других языках определенного типа, операторы можно сравнить с предложениями естественного языка, и соответственно выделить в них главный член - т.е. глагол в данном случае - то как формально называется в контексте Си (или иного ЯП) такой главный член? Т.е., например:

Код: Выделить всё

printf("Hello!");
можно назвать оператором (хотя я понимаю, что также можно сказать в данном случае, что это функция). Однако для меня здесь есть некая путаница. "Оператором" называют, как само printf, так и всю строку, включая "второстепенные члены предложения". Есть ли в Си специальное название, определяющая сам по себе "глагол" т.е. "printf"?
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

printf - это функция форматного вывода. Причём здесь глаголы?
Вы хотите программировать на си или преподавать си?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

QWERTYASDF
Сообщения: 985
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение QWERTYASDF »

Я хочу для начала разобраться с некоторыми базовыми понятиями.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

Я бы начал с задачи. Какой-то конкретной задачи.
Потом бы обдумал решение данной задачи - т.е. продумал бы алгоритм решения задачи. На обычном языке.
А уж потом бы задумывался об "простых" и "составных" операторах того ЯП, который вам нравится.

Я к тому, что я был знаком с несколькими людьми, у которых желание изучить программирование (т.е. научиться программировать) как раз и угасло на изучении терминологии. Т.е. утонули в терминах и, в результате, плюнули на программирование.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

QWERTYASDF
Сообщения: 985
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение QWERTYASDF »

Думаю, что я это понимаю. Передо мною бездна. Но попытаться разобраться в чем-то, чтоб понимать, где оператор, а где операция, где выражение, а где не выражение - мне необходимо. Я по-другому плохо запоминаю.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

Так начните писать. Для начала, можно разбирать простые примеры реализации чего-либо.
В конце концов, ЯП - просто язык, в котором (к примеру) "if" - это слово "если". Обычный английский язык, причём довольно примитивный. Просто описание алгоритма человеческим языком.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

QWERTYASDF
Сообщения: 985
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение QWERTYASDF »

Ой, какие Вы "все" все-таки...)) Да понимаю я, что надо писать, и что практика рулит. Но не могу я так, мне нужна какая-то зона комфорта, заключающаяся в наличие понятных мне вещей. Чтоб посмотреть какой-нибудь пример и сказать - да, вот и вот операторы, вот выражения внутри них, я это понимаю, это хорошо - и мысленно погладить себя по голове.
На самом деле я уже пишу, время не ждет. В моем учебном заведении решили нас научить C за месяц или около того. Но для меня это еще и мотивация начать то, что уже много лет было в планах. А теперь вот внешние обстоятельства вынуждают.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

Да, мы, наверное, "все" такие. :)
Си за месяц - это очень сильно! Это - даже не реактивно. Это - телепортация :D
Вы задаёте абстрактные вопросы (как в первом посте этой ветки) - вам дают абстрактные ответы.
Задайте конкретный вопрос - получите конкретный ответ.
Начните разбирать конкретный пример - получите прямой ответ на интересующую проблему.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение Bizdelnick »

Какие-то странные Вы вопросы задаёте. То ли Вы сильно профдеформированный лингвист, то ли начали учить язык программирования по очень плохой книжке или у очень плохого преподавателя.
Для программирования совершенно необязательно знать, называют ли высоколобые компутерсиентисты тот или иной оператор простым или составным, и то, на какие члены предложения в естественном языке им показались похожими те или иные грамматические элементы. А если Вас правда интересуют такие вещи, учите лучше Perl: он придумывался как раз по образу и подобию естественных языков, и на нём реально можно разговаривать (правда программировать на нём почему-то не любят).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

QWERTYASDF
Сообщения: 985
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение QWERTYASDF »

Мой преподаватель настолько плох, что можно считать, что я учу язык самостоятельно. Вопреки тому, как меня там пытаются "научить". Но ответы у Вас тоже странноватые. Могли бы просто ответить без рассуждений о том, что у меня деформированно и что лучше мне учить что-то еще.
Упорно не вижу ничего криминального в желании немного разобраться в данных вопросах. Они сформулировались у меня буквально за один день, и тратить на них очень много дней я тоже не собираюсь.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1328

Re: Начинаю осваивать C, появляются вопросы...

Сообщение bormant »

В паскалях составным оператором называют begin end. Может ваш преподаватель паскалист? Сишный {} -- это блок кода, не видел, чтобы его называли составным оператором.

printf("Hello\n"); -- это оператор вызова функции, собственно названным оператором являются скобки () при идентификаторе.

С C и C++ все довольно просто, на них есть стандарты, всегда можно уточнить, есть ли в них тот или иной термин (английский) или это просто чей-то педагогический прием.
Последний раз редактировалось bormant 26.08.2018 21:04, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

QWERTYASDF писала:
26.08.2018 20:03
Мой преподаватель настолько плох, что можно считать, что я учу язык самостоятельно. Вопреки тому, как меня там пытаются "научить". Но ответы у Вас тоже странноватые. Могли бы просто ответить без рассуждений о том, что у меня деформированно и что лучше мне учить что-то еще.
Упорно не вижу ничего криминального в желании немного разобраться в данных вопросах. Они сформулировались у меня буквально за один день, и тратить на них очень много дней я тоже не собираюсь.
Я за криминал ничего и не говорил. :)
Вы просто задаёте не вопросы, а, видимо хотите, чтобы вам пересказали учебник.
Что, конкретно, вы хотите узнать?
Что именно не получается?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Начинаю осваивать C, появляются вопросы...

Сообщение serzh-z »

QWERTYASDF писала:
26.08.2018 20:03
Могли бы просто ответить без рассуждений
Думаю, что на поставленные вопросы без рассуждений ответить не сможет никто.

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

Больше похоже на розыгрыш какого-нибудь теоретика, знакомого с программированием лишь по книгам Кнута.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1328

Re: Начинаю осваивать C, появляются вопросы...

Сообщение bormant »

А поди ж ты, именно блок и называют составным оператором ;-) Всё точно как и в паскалях.

n2176.pdf, ISO/IEC 9899:2017
6.8.2 Compound statement

Syntax
compound-statement:
{ block-item-listopt }

block-item-list:
block-item
block-item-list block-item

block-item:
declaration
statement

Semantics
A compound statement is a block.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Начинаю осваивать C, появляются вопросы...

Сообщение serzh-z »

А, так это не оператор... )
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение Bizdelnick »

QWERTYASDF писала:
26.08.2018 20:03
Могли бы просто ответить
Для этого надо знать ответ, а вряд ли много кто из практиков его знает. Я не знаю, например. А ещё я падежи не помню, что не мешает мне их правильно (я надеюсь) употреблять.
serzh-z писал:
26.08.2018 20:29
Больше похоже на розыгрыш какого-нибудь теоретика, знакомого с программированием лишь по книгам Кнута.
Кнут, вроде бы, такой ерундой не страдает.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

Мало того, есть программисты, которые широко используют

Код: Выделить всё

 int a = b ? c : d;
, но не знают, что эта конструкция называется "тернарной операцией (оператором)".
Что, однако, не мешает им писать хорошие программы.

И есть преподаватели, которые точно знают, как что называется, но, однако, не способные написать сколько ни будь сложную программу. :)
Последний раз редактировалось devilr 29.08.2018 23:05, всего редактировалось 1 раз.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Начинаю осваивать C, появляются вопросы...

Сообщение serzh-z »

Bizdelnick писал:
26.08.2018 22:24
Кнут, вроде бы, такой ерундой не страдает.
Ну он писал с оглядкой на математиков.
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Начинаю осваивать C, появляются вопросы...

Сообщение NickLion »

QWERTYASDF писала:
26.08.2018 16:28
Если к Си применима классификация операторов на "простые" и "составные", то к какому из этих типов относятся операторы условий (if) или циклов (for)? Во многом интуитивно склоняюсь, что - к простым. Так ли это? Смущает то, что, например, внутри оператора for должен быть еще один оператор (который составляет тело цикла).
Начнём с того, что относительно Си понятия простого и составного "оператора" не вполне применимо. Эти понятия сформировались на этапе возникновеня структурированных языков. В Си все сложнее и проще. Составным "оператором" есть блок (что уже говорили), а понятия простого "оператора" в Си не вводят, есть просто различные виды statement'ов и compound statement — один из них.
Для сравнения в Fortran и BASIC можно писать что-то вроде:

Код: Выделить всё

IF condition THEN
    statement1
    statement2
    ...
    statementN
ELSE
   ...
END IF
Таким образом, сам IF-THEN-ELSE-END IF есть составной "оператор", а в Си if/for/while/do-while сами по себе внутри содержит только один "оператор", который может быть составным.

Вторая сложность — оператор запятая, которая, фактически может превратить что угодно в составной "оператор", но при этом, формально, не являясь таковым:

Код: Выделить всё

    int n;
    int p;
    const char *m;
    scanf("%d", &n);
    n > 5 ? (void)(
        printf("n (=%d) > 5, yay!\n", n),
        m = "okily-dokily",
        p = n * 6 - 4
    ) : (void)(
        printf("n (=%d) <= 5, nay :(\n", n),
        p = n - 2,
        m = "d'oh!"
    );
    printf("p = %d\nm = %s\n", p, m);
И ещё коментарий о терминологии, в английской есть instruction, operation, operator, statement, всё из этого в рус. часто могут называть "оператором", иногда operator называя "операцией", иногда добавляя в возможные переводы "выражение", вводя ещё в эту путаницу expression.
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Начинаю осваивать C, появляются вопросы...

Сообщение NickLion »

devilr писал(а):
26.08.2018 22:39
"тернерной операцией (оператором)"
тернарной(ым), fixed ;)
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1328

Re: Начинаю осваивать C, появляются вопросы...

Сообщение bormant »

Традиционно
operator — операция
statement — оператор
operation — действие
instruction— машинная инструкция (всего 2 раза упомянуто это слово в стандарте Си)

Но в переводе какой-то книжки видел
оператор — operator
оператор — statement

С учетом сказанного, запятая— операция (operator), поскольку возвращает значение последнего выражения.
Тернарная операция (operator) возвращает значение первого или второго выражения.
Последний раз редактировалось bormant 27.08.2018 14:52, всего редактировалось 3 раза.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Начинаю осваивать C, появляются вопросы...

Сообщение serzh-z »

bormant писал(а):
27.08.2018 14:33
Но в переводе какой-то книжки видел
К слову о том, как вредно читать переводную литературу по программированию. Особенно для неокрепшей психики. =)
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение Bizdelnick »

bormant писал(а):
27.08.2018 14:33
Традиционно
operator — операция
statement — оператор
Это типа традиционные семейные ценности? Синод утвердил?
Я как-то привык, что оператор — это operator. Например тут. А как кошерно перевести statement — не знаю, не настолько это часто используемый термин.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1328

Re: Начинаю осваивать C, появляются вопросы...

Сообщение bormant »

Почти синод, ГОСТ такой был в бывшей стране...
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Начинаю осваивать C, появляются вопросы...

Сообщение NickLion »

bormant
Ну, instruction встречается 6 раз, а не 2, да и я имел в виду не только стандарт Си, а терминологию.
Традиционно для ссср терминологии, да, обычно в таком виде, но и то встречались исключения. А уж после... чего я только не видел, а про не(до)вычитанные переводы, где перевод одного термина разнится в разных главах...
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1328

Re: Начинаю осваивать C, появляются вопросы...

Сообщение bormant »

Угу, действительно 6 (C17).
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Начинаю осваивать C, появляются вопросы...

Сообщение NickLion »

Bizdelnick писал:
27.08.2018 15:32
Я как-то привык, что оператор — это operator. Например тут. А как кошерно перевести statement — не знаю, не настолько это часто используемый термин.
Довольно неплохо используемый термин, на самом деле, и как раз в этом переводе:
Chapter 2. Types, Operators, and Expressions
2. Типы, операции и выражения

3.1 Statements and Block
3.1. Операторы и блоки
Но при этом:
C provides no operations to deal directly with composite objects such as
character strings, sets, lists, or arrays.

В языке "C" отсутствуют операции, имеющие дело непос-
редственно с составными объектами, такими как строки симво-
лов, множества, списки или с массивами, рассматриваемыми как
целое.

parallel operations
параллельные операции
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Начинаю осваивать C, появляются вопросы...

Сообщение Bizdelnick »

Хм, ну дадно, убедили. Буду пытаться выгнать ложных друзей из мозгов, если получится.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Начинаю осваивать C, появляются вопросы...

Сообщение NickLion »

Bizdelnick
Ну, это в этом переводе. Встречал и operator — оператор, statement — операция. Путаницы хватает. Поэтому давно предпочитаю читать в оригинале.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3138
ОС: Mandriva => Gentoo (~amd64)

Re: Начинаю осваивать C, появляются вопросы...

Сообщение devilr »

Скилл программиста - в умении писать хорошие программы, а не в правильном переводе слова "statement". Зачем у лингвистов и переводчиков хлеб отнимать? :)
Имхо.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали: