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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2019, 12:44   #1
Elvis777
 
Регистрация: 02.10.2019
Сообщений: 8
По умолчанию Присвоение значения int в разных местах

Ув. форумчане объясните пожалуйста в чем разница
Есть две програмки (учу по учебнику С++):

Код:
#include <iostream>
using namespace std;
void total(int x);
int main()
{
 cout << "Вычисление суммы чисел от 1 до 5.\n";
 total(5);
 cout << "\n Вычисление суммы чисел от 1 до 6.\n";
 total(6);
 return 0;
}
void total(int x)
{
 int sum=0; 
 int i, count;
 for(i=1; i<=x; i++) {
  sum = sum + i;
 for(count=0; count<10; count++) cout << '.';
  cout << "Промежуточная сумма равна " << sum << '\n';
 }
}

Тренировался и набирал ее по памяти и набрал немного по-другому
Код:
#include <iostream>
using namespace std;
void total(int x);
int main()
{
 cout << "Вычисление суммы чисел от 1 до 5.\n";
 total(5);
 cout << "\n Вычисление суммы чисел от 1 до 6.\n";
 total(6);
 return 0;
}
void total(int x)
{
 int sum=0; 
 int i, count=0;
 for(i=1; i<=x; i++) {
  sum = sum + i;
  for(count; count<10; count++) cout << '.';
  cout << "Промежуточная сумма равна " << sum << '\n';
 }
}
Вопрос: почему присваивание интовой count значение =0 в строке объявления и в For приводит к разным результатам?
Заранее благодарен Вам за помощь начинающему в нелегком изучении С++.

______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Serge_Bliznykov; 02.10.2019 в 13:16.
Elvis777 вне форума Ответить с цитированием
Старый 02.10.2019, 12:48   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Тут не проблема С++, а просто алгоритмика.

1. На каждом шаге цикла count обнуляется и внутренний цикл выполняется.
2. После первого шага цикла count = 10 и внутренний цикл больше никогда не выполняется.
p51x вне форума Ответить с цитированием
Старый 02.10.2019, 13:07   #3
Elvis777
 
Регистрация: 02.10.2019
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Тут не проблема С++, а просто алгоритмика.

1. На каждом шаге цикла count обнуляется и внутренний цикл выполняется.
2. После первого шага цикла count = 10 и внутренний цикл больше никогда не выполняется.
Благодарю за ответ.
По первому пункту понял.
по второму пункту: почему после первого шага count будет равно 10 ведь там count++?

Еще одно: Почему нет еще одних скобок во втором for? или программа уже понимает что он уже находится в цикле и вторых скобок не надо?

и еще одно. немного непонятна, как вы выразились, алгоритмика в строке:
for(count; count<10; count++) cout << '.';
Как программа понимает что ей надо вывести 10 точек.?
в предыдущем for все понятно. Есть начальное значение i, есть условие, есть действие... потом это дает изменение sum.
PS Заранее благодарен за понимание
Elvis777 вне форума Ответить с цитированием
Старый 02.10.2019, 13:18   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от Elvis777 Посмотреть сообщение
по второму пункту: почему после первого шага count будет равно 10 ведь там count++?
После первого шага основного цикла, а не внутреннего.

Цитата:
Сообщение от Elvis777 Посмотреть сообщение
Еще одно: Почему нет еще одних скобок во втором for? или программа уже понимает что он уже находится в цикле и вторых скобок не надо?
Вы пор {}? Ну так они служат для выделения блоков, а один оператор вполне может и без них быть.

Цитата:
Сообщение от Elvis777 Посмотреть сообщение
и еще одно. немного непонятна, как вы выразились, алгоритмика в строке:
for(count; count<10; count++) cout << '.';
Как программа понимает что ей надо вывести 10 точек.?
в предыдущем for все понятно. Есть начальное значение i, есть условие, есть действие... потом это дает изменение sum.
Все абслютно также. У фор есть инициализация, условие остановки и шаг.
p51x вне форума Ответить с цитированием
Старый 02.10.2019, 13:41   #5
Elvis777
 
Регистрация: 02.10.2019
Сообщений: 8
По умолчанию

Да я именно про эти скобки. Просто меня смущало то что после них есть еще cout который нужно подвязать именно к этому for. А есть ли ситуации при которых мне нужно будет их ставить? при более сложном действии а не просто cout? По началу я еще наверное буду по привычке ставить в скобки.

то что абсолютно так же я понял. попробую объяснить свою логику.
первый фор запустится и запустит блок появится первое промежуточное значение и тк он будет его выполнять доконца а потом возвращаться значит он увидит первое значение count 1. ну и точек должна быть одна.

Благодаря Вам я понял что при любой итерации первого фор он будет выполнять при каждой итерации блок ну и думал что так же будет со вторым. но по сути он будет выполнять второй фор в каждой итерации доконца те до значения 10 ведь он находится внутри блока и пока он не выполнится первый for не дойдет до cout.

А разница в том где присваивать count 0 есть большая ибо программа увеличивает его на 1 только когда пройдет весь блок. а задача была чтобы он выполнился полностью перед каждым cout. А это(я так понял возможно только при присваивании значения внутри блока.

Надеюсь я правильно понял. Пойду дальше грызть гранит науки.
Как новичок могу сказать что тяжело не выучить синтаксис, операторов и т.д. Тяжелее понять "алгоритмику".
Спасибо за помощь))
Elvis777 вне форума Ответить с цитированием
Старый 02.10.2019, 13:47   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от Elvis777 Посмотреть сообщение
Просто меня смущало то что после них есть еще cout который нужно подвязать именно к этому for.
https://en.cppreference.com/w/cpp/language/for
Код:
attr(optional) for ( init-statement ; condition(optional) ; iteration_expression(optional) ) statement
Видите statement? Это называется тело цикла и оно "подвязывается" само.

Цитата:
Сообщение от Elvis777 Посмотреть сообщение
А есть ли ситуации при которых мне нужно будет их ставить?
Когда нужен будет блок. Например, попробуйте со скобками и без:
Код:
for(size_t i = 0; i < 10; ++i)
  std::cout << i;
  std::cout << "ЭЭЭЭЭ";
Цитата:
Сообщение от Elvis777 Посмотреть сообщение
Как новичок могу сказать что тяжело не выучить синтаксис, операторов и т.д. Тяжелее понять "алгоритмику".
Ну дык это есть в основном программирование ,а синтаксис после пары языков уже мало имеет значение - его можно "выучить" быстро.
p51x вне форума Ответить с цитированием
Старый 02.10.2019, 15:47   #7
Elvis777
 
Регистрация: 02.10.2019
Сообщений: 8
По умолчанию

Нашел:

Если в теле цикла for должен выполнится один оператор, тогда фигурные скобки можно опустить

http://cppstudio.com/post/348/
Elvis777 вне форума Ответить с цитированием
Старый 02.10.2019, 15:57   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Elvis777 Посмотреть сообщение
Нашел:

Если в теле цикла for должен выполнится один оператор, тогда фигурные скобки можно опустить
не полно.

в любом месте, где есть один только один оператор, скобки можно опустить.
скобки нужны там, где в синтаксисе команды есть
Код:
что-то ...
    statement
но у Вас этот statement не один оператор, а несколько.
скобки называются "операторными" потому что позволяют несколько операций объединить в один блок, который, с точки зрения синтаксиса, будет ОДНИМ оператором.

например,
условный оператор
Код:
if(i>2){
   std::cout << "More then 2";
}
можно
Код:
if(i>2)
   std::cout << "More then 2";
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение кода в разных местах на разных разрешениях S_A_N_T_A HTML и CSS 1 29.10.2018 13:35
Выделить несколько клеток в разных местах Stringgrid fredwriter Общие вопросы Delphi 5 15.11.2010 14:43
Создает 2 одинаковых файла в 2ух разных местах.. Человек_Борща Общие вопросы Delphi 1 27.07.2010 22:22
присвоение значения Stjernen Microsoft Office Excel 5 04.01.2010 14:44