![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Провинциалка |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Здравствуйте! Только начала изучать Си, пока плохо его понимаю. Подскажите, как написать программку для написания арифметическое действия
Сообщение отредактировано: Провинциалка - 4.04.2011 20:23 Прикрепленные файлы ![]() |
![]() ![]() |
karpinsky |
![]()
Сообщение
#2
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Ну скажите что я права Не совсем. Ты не хочешь понять одной простой вещи:cout<<"Vvedi m\n"; А не все - потому что у того выражения, результат которого не используется, есть побочный эффект. При вего выполнении изменяется значение двух переменных. Понимаешь, к чему я клоню? Ты что-то сделала, результата не увидела, поэтому, чтоб показать результат, ты строкой ниже проделываешь ту же операцию еще раз, но теперь она производится уже с другими значениями 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";Все, что тебе нужно уметь объяснять в данном случае - это разницу между префиксным и постфиксным инкрементом/декрементом. То есть, ты должна знать, что сначала производится сравнение, и тольео потом - модификация переменных. И несмотря на то, что следующая строка может напечатать одинаковые значения m и n - результат сравнения может быть ложью. С инкрементом/декрементом надо всегда "держать нос по ветру" (С), чревато ошибками. ![]() |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 11:53 |