С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
nadoelo_1986
2 / 2 / 1
Регистрация: 04.09.2011
Сообщений: 55
1

Вычисление выражения

12.01.2015, 19:43. Просмотров 783. Ответов 18
Метки нет (Все метки)

Доброго времени суток.Заранее спасибо. Есть тест :
314. Чему равен результат b=--k + --k если k = 10 в языке С?
A) b=16 , k=8
B)b=10 , k=10
C)b=18 , k=10
D)b=18 , k=8
E)b=20 , k=10

Как решить её?

Вот берём первый --k. k = k-1 то есть 10-1 = 9
Второй --k, тоже равен 9 , тогда 9+9 =18 и k = 9. Но ответа такого нет. Так как правильно?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2015, 19:43
Ответы с готовыми решениями:

Вычисление выражения
Пожалуйста, помогите с задачей Составить программу для вычисления:...

Вычисление выражения в C++
Дано натуральное число n. Посчитать...

Вычисление выражения
Помогите плс, решить... очень нужно... плс Составьте программу вычисления...

Вычисление выражения: x=(y-z+u)/v+w
Составить программу для вычисления выражения: x=(y-z+u)/v+w. Протестировать...

Вычисление значения выражения
a=2*cos(x-pi/6); b=0.5+pow(sin)(y); c=1+(z*z)/3-(z*z)/5; rez=a/b*c; ...

18
-=ЮрА=-
Заблокирован
Автор FAQ
12.01.2015, 20:06 2
Лучший ответ Сообщение было отмечено nadoelo_1986 как решение

Решение

http://codepad.org/Jqa8eE5q
b = 16, k = 8
Сначала последовательно сработают декременты, потом произойдёт подстановка значения k : получится 8 + 8
1
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.01.2015, 21:13 3
Результат может различаться в зависимости от компилятора и его параметров оптимизации.
В современном стандарте языка C++ существует понятие "точки следования", которое говорит о том, что в данном случае порядок вычисления выражения не определён.
Установленный у меня MinGW, версии 4.9.2, при компиляции выдаёт предупреждение "warning: operation on 'k' may be undefined [-Wsequence-point]"
0
-=ЮрА=-
12.01.2015, 21:46
  #4

Не по теме:

castaway,

Цитата Сообщение от nadoelo_1986 Посмотреть сообщение
в языке С?

0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.01.2015, 22:00 5
-=ЮрА=-, и в языке C тоже.
Программа:
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main()
{
    int k = 10;
    int b = --k + --k;
    printf( "%d, %d\n", b, k );
    return 0;
}
Сборка:
Bash
1
gcc main.c -o main.exe -std=c99 -pedantic -Wall -Wextra
Вывод компилятора:
Bash
1
2
3
4
main.c: In function 'main':
main.c:6:16: warning: operation on 'k' may be undefined [-Wsequence-point]
  int b = --k + --k;
                ^
0
-=ЮрА=-
12.01.2015, 22:15
  #6

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
-std=c99 -pedantic -Wall -Wextra
- и что?Вопрос как оно должно быть на самом деле, ксати по твоим настройкам ты по-моему -cplusplus не сделал и в результате линкуешь как С++ код
http://codepad.org/lib6mtO3
cc1plus: warnings being treated as errors
In function 'int main()':
Line 5: warning: operation on 'k' may be undefined

0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.01.2015, 22:34 7
-=ЮрА=-, что "и что?"? Я явно указал стандарт (-std=c99), я использовал gcc заместо g++, я использовал расширение файла .c - это всё явно говорит о том, что код воспринимался компилятором как язык Си. В чём проблема?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты по-моему -cplusplus не сделал
Не сделал. Нет такого флага в GCC.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и в результате линкуешь как С++ код
Не "опускайся" в чужих глазах, процесс линковки к языку никак не относится.
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.01.2015, 22:40 8
Цитата Сообщение от castaway Посмотреть сообщение
Не "опускайся" в чужих глазах, процесс линковки к языку никак не относится.
- компилятор это всего лишь интерпритатор выскокоуровневого кода в низкоуровневый + проверка ошибок, если ты линкуешь в дерьме (я с ним не линкую), то это дерьмо и будет неверно интерприторовать,
{DELETED}
 Комментарий модератора 
П. 5.2. Правил!
0
castaway
12.01.2015, 23:13
  #9

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если ты линкуешь в дерьме
Это "дерьмо" явно делали люди не глупее тебя..

0
nadoelo_1986
2 / 2 / 1
Регистрация: 04.09.2011
Сообщений: 55
12.01.2015, 23:36  [ТС] 10
А как быть с этим тестом
312. Чему равен результат b= --k + k-- если k=10 в языке С?
A) b=20,k = 8
B) b=18,k = 10
C) b=18,k = 8
D) b=18,k = 9
E) b=20,k = 10

Решаю: --k -> 10-1 = 9 , k-- 9-1 = 8 , 8+8 =16 - не получается опять
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.01.2015, 23:44 11

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
Это "дерьмо" явно делали люди не глупее тебя..
- т.е для тебя лишь один эталон, фишный (== дерьмовый, абсолютно всё фришное имеет баги и написано через зад, абсолютно). И вот по этому дерьму ты ориентируешся, хорошо я тебя услышал. Кстати для потомков будь добр какой же ответ у выражения, раз уж я такой глупый парень, то правильный ответ...[вписать]



Добавлено через 4 минуты
Цитата Сообщение от nadoelo_1986 Посмотреть сообщение
А как быть с этим тестом
312. Чему равен результат b= --k + k-- если k=10 в языке С?
A) b=20,k = 8
B) b=18,k = 10
C) b=18,k = 8
D) b=18,k = 9
E) b=20,k = 10
Решаю: --k -> 10-1 = 9 , k-- 9-1 = 8 , 8+8 =16 - не получается опять
Цитата Сообщение от nadoelo_1986 Посмотреть сообщение
А как быть с этим тестом
312. Чему равен результат b= --k + k-- если k=10 в языке С?
A) b=20,k = 8
B) b=18,k = 10
C) b=18,k = 8
D) b=18,k = 9
E) b=20,k = 10
Решаю: --k -> 10-1 = 9 , k-- 9-1 = 8 , 8+8 =16 - не получается опять
второй оператор == 10 (там где постфикс) первый оператор 8 там где префикс(т.к два декремента) ответ 18 8
0
классный парень
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 3
13.01.2015, 00:37 12
nadoelo_1986, оба теста не имеют правильного решения. порядок вычисления операндов не определен.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
фишный (== дерьмовый, абсолютно всё фришное имеет баги и написано через зад, абсолютно)
как и платное, например, винда. что ты хотел этим сказать?

Добавлено через 20 минут
получается, что если всё фришное дерьмо (твои слова) + известно, что среди платного ПО тоже есть некачественное + ты пишешь программы, то из твоих слов следует вывод: есть вероятность, что ты пишешь дерьмовые программы. получается публичная самокритика.
0
easybudda
13.01.2015, 02:04
  #13
 Комментарий модератора 
-=ЮрА=-, офтоп прекращайте! И с выражениями поаккуратнее...
0
классный парень
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 3
13.01.2015, 09:37 14
-=ЮрА=-, по теме: что в первом что во втором тестах поведение компилятора нельзя предугадать и на выходе может получиться разный ответ. в этих стандартах C11 – ISO/IEC 9899:2011 и C99 – ISO 9899:1999 прямым текстом об этом говорится (6.5 Expressions). Вы же не будете спорить со стандартами языка?
0
-=ЮрА=-
Заблокирован
Автор FAQ
13.01.2015, 22:24 15
Цитата Сообщение от классный парень Посмотреть сообщение
-=ЮрА=-, по теме: что в первом что во втором тестах поведение компилятора нельзя предугадать и на выходе может получиться разный ответ. в этих стандартах C11 – ISO/IEC 9899:2011 и C99 – ISO 9899:1999 прямым текстом об этом говорится (6.5 Expressions). Вы же не будете спорить со стандартами языка?
- так castaway, я уже тебе написал что твой фейковый новый парень с датой регистрации вчера вечером, насатолько бросается в глаза что я ели удержал себя чтобы не послать тебя на три весёлых, теперь набиваем гвозди,
1-е речь идёт о языке Си (повторяю СИ а не С++, я что со стенами разговариваю или с умалишёнными?На кой здесь упомниная С++ вообще)
2-е существует порядок следования операндов, без скобок он идёт слева направо, так что не надо тут разводить палемику неопредела точка следования и прочая лабуда, я надеюсь что твоё делитанство всё же уступит место объективной реальности
3-е открываем тот документ который ты кинул по ссылке
ISO/IEC 9899:TC3 Committee Draft — Septermber 7, 2007 WG14/N1256
- тебе дословно перевести что ты кинул черновик или ты сам сумеешь это сделать?Где там рефернст стандарта Си99, м?
Далее показывай конкретно где сказано, что два префиксных декремента без скобок нарушают порядок следования(я уже не говорю о компиляторах борланд Си 4.0 VS 6 - 2012 онлайн ресурсах codepad.org ideone.com. конечно же все они не в стандарте ибо подтвержают мои слова....(фэйспалм)
0
easybudda
Модератор
Эксперт CЭксперт С++
10156 / 6060 / 1525
Регистрация: 25.07.2009
Сообщений: 11,487
14.01.2015, 04:09 16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
я надеюсь что твоё делитанство всё же уступит место объективной реальности
А реальность сегодня такая:
Код
~/cpp/other $ cat minus_k.c 
#include <stdio.h>
int main(void) {
    int b, k = 10;

    b = --k + --k;
    printf("%d\n", b);
    return 0;
}
~/cpp/other $ gcc -Wall -o minus_k minus_k.c 
minus_k.c: In function 'main':
minus_k.c:5: warning: operation on 'k' may be undefined
~/cpp/other $ gcc -dumpversion
4.0.1
~/cpp/other $
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
тебе дословно перевести что ты кинул черновик или ты сам сумеешь это сделать?
На всякий случай, вдруг не в курсе: релиз стандарта можно купить за деньги, или получить по (опять же платной) подписке. Но черновики, которые выкладывают, от него настолько не отличаются. Где-то ошибки находят и исправляют, где-то дописывают, что забыли, но такого, чтобы в черновике написали одно, а в релизе было совсем другое, насколько знаю, не случалось. Есть примеры - приведите.
 Комментарий модератора 
И в последний раз предупреждаю - будьте вежливие!
0
-=ЮрА=-
Заблокирован
Автор FAQ
14.01.2015, 09:49 17

Не по теме:

easybudda, ну как бы я уже всё сказал выше, так же никто так и не удосужился привести

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
показывай конкретно где сказано, что два префиксных декремента без скобок нарушают порядок следования
, так что черновик рефернса не черновик мне плевать, даже в черновике такого нет а в Сишном Борланд Си я ещё писал когда дискетки были и никаких граблий что в С89 что в С95 не было, ideone и codepad тоже как бы не со студийным движком. Так что аргументы выше в посте 16 просто пыль в глаза(выше я говорил свое отношение к gcc). Писать более не хочу, причины почему указаны в нескольких моих постах.



Добавлено через 3 минуты
ЗЫ (заиствовано из Вики)
Некоторые новые особенности C99:

подставляемые функции (inline);
объявление локальных переменных в любом операторе программного текста (как в C++);
новые типы данных, такие как long long int (для облегчения перехода от 32- к 64-битным числам), явный булевый тип данных _Bool и тип complex для представления комплексных чисел;
массивы переменной длины;
поддержка ограниченных указателей (restrict);
именованная инициализация структур: struct { int x, y, z; } point = { .y=10, .z=20, .x=30 };
поддержка однострочных комментариев, начинающихся на //, заимствованных из C++ (многие компиляторы Си поддерживали их и ранее в качестве дополнения);
несколько новых библиотечных функций, таких как snprintf;
несколько новых заголовочных файлов, таких как stdint.h.
Нигде нетдаже упоминания об измениях в регулирных выражениях, синтаксисе операторов и порядке следования операндов, не смешите мои кости!
И да не надо тут начинать если см стандарт и т.д, я покурил и реализовал такие рефернсы что многим тут и не снились, в кошамрном алгоритмическом сне, а меня тут бить по лбу стандартом языка пытаются, пфф

Добавлено через 14 минут
ЗЫЗЫ даeasybudda, я всё таки пойду на вы и спрошу как специалиста по Си и компиляторам, вы когда нибудь писали под ДОС с БорланСи?Я вот писал(даже поработал с бабинным стримером в качестве носителя), так вот я в данный момент не хочу сылашть фраз мол этот компилятор вне стандарта, он в стандарте С89(я бы назвал его strict Си99 ибо нет wchar_t long long и прочих вкусняшек), так вот если вм довелсоь поработать, удосужтесь, слинкуйте неленкуемій код поста 16(будете удивлены). Так что давайте отбросим менторский тон и просто слинкуем код.
0
классный парень
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 3
14.01.2015, 12:25 18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
1-е речь идёт о языке Си (повторяю СИ а не С++, я что со стенами разговариваю или с умалишёнными?На кой здесь упомниная С++ вообще)
по ссылкам черновики стандартов по C, не С++, а именно С. Еще раз: именно С, до тебя доходит, что С и С++ разные языки? и умалишенным здесь выглядишь только ты.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
2-е существует порядок следования операндов, без скобок он идёт слева направо, так что не надо тут разводить палемику неопредела точка следования и прочая лабуда, я надеюсь что твоё делитанство всё же уступит место объективной реальности
ржу нимагу! при чем здесь порядок следования? вопрос то про порядок подстановки результатов вычисления операндов
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сначала последовательно сработают декременты, потом произойдёт подстановка значения k : получится 8 + 8
что мешает компилятору после вычисления первого слагаемого подставить результат сразу, а не ждать пока оценится второй операнд? почему не 9+8?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
3-е открываем тот документ который ты кинул по ссылке
ну про это тебе выше сказали
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Далее показывай конкретно где сказано, что два префиксных декремента без скобок нарушают порядок следования
прямо на первой странице указанного параграфа. ты что читать не умеешь? и не важно 2 или 10 префиксных декрементов. важно что переменная меняется несколько раз в одном выражении.

PS Сколько оскорблений то, сколько оскорблений, и только в одном сообщении. ты что так самоутверждаешься что-ли? судя по твоему профилю, да, типа "я лучше 99.9% пользователей на форуме" (и написано аж красным цветом, да еще и жирным выделено)
0
easybudda
Модератор
Эксперт CЭксперт С++
10156 / 6060 / 1525
Регистрация: 25.07.2009
Сообщений: 11,487
14.01.2015, 13:45 19
 Комментарий модератора 
В последний раз обращаюсь ко всем спорящим - держите себя в руках! Ещё одно нелицеприятное высказывание в чью либо сторону - закрою тему и жалуйтесь, кому хотите!


Добавлено через 49 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
даже в черновике такого нет
Всё там есть. 6.5.2 внимательнее перечитайте, в конце 5.1.2.3 пример есть несколько другой, но суть проблемы объясняющий
Цитата Сообщение от классный парень Посмотреть сообщение
что мешает компилятору после вычисления первого слагаемого подставить результат сразу, а не ждать пока оценится второй операнд? почему не 9+8?
речь именно об этом.

Добавлено через 9 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
слинкуйте неленкуемій код поста 16(будете удивлены)
Почему он "нелинкуемый"? Программа собирается, выдаёт 16 на выходе, всё замечательно, но компилятор честно предупреждает, что в принципе "есть варианты", а это плохо.
0
14.01.2015, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2015, 13:45

Вычисление значения выражения
Как записать вычисление этой суммы? Спасибо.

Вычисление значения выражения
вычислить y y=\sum_{p=1}^{m} \frac{1}{sin({e}^{p}-1)}

Вычисление алгебраического выражения
I. Написать программу, которая вычисляет значение выражения. Замечания 1) Для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru