Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 18:09   #31
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Распишите, с числами, чему равно значение i на всех шагах первых трёх итераций, по шаблону:
Имелось в виду, что Вы напишете текст, аналогичный моему, только длиннее и со значениями i вместо ???.

Также. В этих двух сообщениях есть несколько настоятельных рекомендаций, выделенных жирным шрифтом. Три штуки. Процитируйте их и ответьте, соблюдаются ли они в Вашем коде.
Abstraction вне форума Ответить с цитированием
Старый 01.03.2013, 18:16   #32
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Инициализация. i=81
Проверка условия. i<=130
Тело цикла. true
Действие в конце итерации. i=i++
Проверка условия. i+=2
Тело цикла. i=132
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 18:21   #33
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Что-то Вы запутались вконец. Я спрашиваю про значения i. Вот после проверки условия, чему равно i (подсказка: оно вообще изменится?)? А после выполнения тела цикла?

И НЕТ, после выполнения тела цикла второй раз i не будет равно 132.

Нельзя осмысленно писать программы, если Вы не понимаете, почему они работают. Не на уровне магического мышления "если прибавлять 2, получится 132 - значит, если прибавлять 1, получится 131", а на уровне жёсткой логики, распознавая и безжалостно отсекая ложные логические переходы, даже если они приводят к правильным результатам.
Иначе всё, чего есть шанс добиться - случайно получить программу, которая, кажется, в некоторых случаях работает так как надо.
Abstraction вне форума Ответить с цитированием
Старый 01.03.2013, 18:28   #34
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

в чем же тогда моя проблема не понимания? В чем я запуталась? Я даже запуталась в том, в чем запуталась
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 18:45   #35
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
в чем же тогда моя проблема не понимания? В чем я запуталась? Я даже запуталась в том, в чем запуталась
Базовая проблема, как её вижу я (о чём я уже, помнится, писал) - в том, что Вы не воспринимаете программу как нечто, управляемое логикой, а скорее... ну, как заклинание, которое вот так, как показали, работает, а переставить пару слов - и получится совершенно непонятно что.
Тогда как на самом деле язык программирования - это язык выражения мыслей в строгой, понятной компилятору форме. В нём нет места "волшебным" зависимостям, в нём нет места примерному пониманию - это искусственный язык, специально созданный таким образом, чтобы в нём нельзя было выражаться расплывчато. Слова "мне нужно такое число, которое делится на 17, 53 и кончается на 8 в десятичной записи" могут быть переведены на C++. Слова "мне нужно решить задание, в котором что-то там надо вывести и поделить на тринадцать" не могут быть переведены на C++, и это совершенно намеренный шаг со стороны его авторов. Языки программирования вообще не прощают нечёткости или нелогичности мышления.
Если мне позволено давать советы, возможно, Вам стоит прочитать какую-нибудь книгу по формальной логике. В духе вот таких тестов. К сожалению, хороших книг с низким "порогом вхождения" лично я не знаю.

Но ещё раз и с чуть другой стороны. Три правила из моего сообщения. Процитируйте и скажите, выполняются ли они в Вашем коде.
Abstraction вне форума Ответить с цитированием
Старый 01.03.2013, 18:53   #36
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Инициализация i=81, не выполняется, потому что выводится на экран только i=132
Условие i<=130, выполняется.
Инкремент i++, выполняется...
В теле сперва ничего не происходит, а потом происходит i+=2
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 18:56   #37
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Инициализация i=81, не выполняется, потому что выводится на экран только i=132
Стоп. Остановитесь. "Выводится на экран" значение i в результате выполнения совершенно отдельной инструкции - раз. Она (эта инструкция) выполняется значительно позже - два. И три - я говорил об этом:
Цитата:
В этих двух сообщениях есть несколько настоятельных рекомендаций, выделенных жирным шрифтом. Три штуки. Процитируйте их и ответьте, соблюдаются ли они в Вашем коде.
Это три предложения.
Abstraction вне форума Ответить с цитированием
Старый 01.03.2013, 19:02   #38
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Но. Компилятор определяет, что является телом цикла, посредством чтения кода, а не мыслей программиста. Поэтому, если за for() следует не открывающая скобка операторного блока {, телом цикла считается ровно одна инструкция, до первой ;.( поэтому мой код считал только одну инструкцию до первой
Всегда, если нет очень веских причин для иного, при объявлении переменной присваивайте ей какое-нибудь значение. ( Мы ведь присвоили переменной значение = 81)
Если для иного нет очевидных причин, не меняйте значения переменной цикла в теле этого цикла. ( вот тут не понятно)
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 19:43   #39
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

когда я проделала вот такой вариант кода, на экран вышло - 133
Код:
#include <cstdlib>
#include <iostream>

using namespace std;


int main()
{
   int sum=0;
   int i;
   for (i=81;/*Èíèöèàëèçàöèÿ*/ i<=130;/*óñëîâèå*/ i++/*èíêðåìåíò,äåéñòâèå â êîíöå èòåðàöèè*/ )
   {
       i++;
       }
       {
   i+=2;
  sum+=i;}
   cout<<"summa= "<<sum;
   cin>>sum;
   return 0;
}
а при этом варианте вывелось - 134
Код:
#include <cstdlib>
#include <iostream>

using namespace std;


int main()
{
   int sum=0;
   int i;
   for (i=81;/*Èíèöèàëèçàöèÿ*/ i<=130;/*óñëîâèå*/ i++/*èíêðåìåíò,äåéñòâèå â êîíöå èòåðàöèè*/ )
   {}
       {i++;}
       
       
   {i+=2;
  sum+=i;}
   cout<<"summa= "<<sum;
   cin>>sum;
   return 0;
}
в чем загвоздка?

Последний раз редактировалось Diana528; 01.03.2013 в 19:48.
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 19:56   #40
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,723
По умолчанию

По-хорошему, делается так:
http://ru.wikipedia.org/wiki/Арифметическая_прогрессия
Смотрите сумма первых членов арифметической прогрессии

P.S.Смотрел только посты #1 и #38 (но не читал их).
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти сумму всех нечетных чисел в диапазоне от 42 до 73. mkerimkulov Общие вопросы C/C++ 11 29.09.2012 11:09
список всех четырехзначных нечетных чисел, делящихся без остатка на сумму своих цифр. Kami-sama Общие вопросы C/C++ 2 12.11.2010 17:07
Посчитать сумму всех целых чисел в этом диапазоне LION7777 Фриланс 14 15.06.2010 00:16
программа с использованием подпрограмм, создаёт односвязный список и вычисляет сумму положительных чисел LOVELY Паскаль, Turbo Pascal, PascalABC.NET 5 13.12.2008 01:27