![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
![]()
Подскажите, в чем ошибка. Нужно ввести 2 числа и подсчитать сумма всех промежуточных членов. Собственно сперва сумма их считается как нужно, а вот в конечном ответе почему-то не она ... в чем ошибка допереть что-то не могу ...
Код:
![]() |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
0) Условие (i > a, i <= b) - это оригинально. Оператор , вычисляет одно, другое, а в качестве ответа возвращает один из двух результатов. Для объединения логических условий его использовать не надо, но в данном случае я вообще не понимаю, зачем условие i>a.
В принципе, нежелательно объединять через запятую инструкции, порядок выполнения которых существенен (i++, j += i). 1) for(X; Y; Z) A; Сначала выполняется X, затем проверяется Y, затем выполняется A, затем Z, и только затем снова проверяется Y. Соответственно, в данном случае на последней итерации i=9, j=44 - вывели 44. Потом i++, j+=i, проверка условия (i<=b неверно) и мы выходим из цикла, но j уже 54. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.10.2011
Сообщений: 35
|
![]()
Вот исправленный код. Ошибка в том, что после вывода последнего данного j увеличивается еще на i, в итоге сумма получается не та, что нужна.
Вот работающий код Код:
Последний раз редактировалось kypck; 26.10.2011 в 14:52. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
![]() Код:
Код:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
![]()
Abstraction, "i > a" - это условие еще с первой "ревизии", когда просто пытался диапазон нужный выделить, как итог добавил еще одно условия, при этом забыв убрать первое.
По пункту 1.) по моему, ты чутка напутал, выход из цикла происходит при достижения "i" заданного числа "b", в данном случае при достижения числа "9", при этом после проходения "j += i", и "j" равно "44", после чего выводится "j". Но вот почему 54 вместо 44 - не понимаю. Syuf, "for (i = j = a; i <= b; j += ++i)" - результат тот же, 54 вместо 44 (если без других изменений в коде). kypck, спасибо, теперь работает как нужно. Только вот почему по завершения цикла "j" увеличивается еще раз на "i" ? Последний раз редактировалось L6go1as; 26.10.2011 в 15:04. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
Выход из цикла происходит при условии, что выражение i<=b возвращает "ложь". Вопрос: при каком минимальном i условие i<=9 ложно? Второй вопрос: в описании for выше, выполняется ли A после того, как Y было вычислено и получилась "ложь"? |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
![]()
Abstraction, теперь вроде бы разобрался, неправильно указал условие, если бы было просто i < b, + запутался как for испольняется. Поэтому смутился когда cout выдал значение 35 - что эквивалент 8, а не 9. Из-за этого добавил "=" - теперь cout выдает 44 - что эквивалент 9, но вот при финале еще идет последняя операция которая выдает уже 54 - что эквивалент уже 10 ...
Вообщем разобрался, спасибо. Ибо считал, что сперва испольняется все то, что в скобках, а потом уже блок ниже ... |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
![]() Цитата:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
![]()
Syuf, За это кстати отдельное спасибо, просто такий записи я еще не видел, но оно работает. Другое дело, что через запятую пока воспринимается как "ок", а ваша запись из будущего ))
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В чем ошибка!? | Файзулка | Помощь студентам | 5 | 17.01.2011 10:27 |
В чем ошибка? | Angelic_fiend | Помощь студентам | 12 | 02.06.2010 15:52 |
В чем ошибка? | AleNa666 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 28.04.2009 14:28 |
в чем ошибка | Arassir | Помощь студентам | 3 | 01.04.2009 21:51 |