Форум программистов, компьютерный форум CyberForum.ru

Цикл for - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
23.08.2011, 19:35     Цикл for #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
     
//////////////////////////////////////////////////////// 
    // ÎòîáðГ*æåГ*ГЁГҐ ñëîâГ* Г*Г* îáîðîò. ГЌГҐ ìîãó Г°Г*çîáðГ*ГІГјГ±Гї îêóäГ*
    // áåðåòüñÿ ïðîáåë, ïîäñêГ*æèòå, ïîæГ*éëóñòГ*.  
    
    string mass;
    getline(cin,mass);
    
    int a = mass.size();
    
    for (int i=a; i<=a,i!=-1; i--)
    cout << mass[i];   
    
    cout << endl;
    system("PAUSE");
    return 0;
 
}
Выполнение:
Миниатюры
Цикл for  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2011, 19:35     Цикл for
Посмотрите здесь:

C++ Цикл y=1+x+x^2+x^3+...+x^n;
Цикл for C++
Цикл с параметром и цикл с условием C++
Цикл while (на С) C++
C++ Цикл do while.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.08.2011, 19:43     Цикл for #2
В массиве размером a последний элемент mass[a-1], а элемента mass[a] нет.

Добавлено через 2 минуты
Цитата Сообщение от KeyGen Посмотреть сообщение
C++
1
for (int i=a; i<=a,i!=-1; i--)
Здесь, кстати, условие i <= a мало того, что избыточно, так оно и вовсе игнорируются. Условия нельзя комбинировать запятой, для этого есть логические операторы && и ||
Сыроежка
Заблокирован
23.08.2011, 19:43     Цикл for #3
Цитата Сообщение от KeyGen Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
     
//////////////////////////////////////////////////////// 
    // ÎòîáðГ*æåГ*ГЁГҐ ñëîâГ* Г*Г* îáîðîò. ГЌГҐ ìîãó Г°Г*çîáðГ*ГІГјГ±Гї îêóäГ*
    // áåðåòüñÿ ïðîáåë, ïîäñêГ*æèòå, ïîæГ*éëóñòГ*.  
    
    string mass;
    getline(cin,mass);
    
    int a = mass.size();
    
    for (int i=a; i<=a,i!=-1; i--)
    cout << mass[i];   
    
    cout << endl;
    system("PAUSE");
    return 0;
 
}
Выполнение:
Дело в том, что вы выводите на печать больше символов, чем есть в вашей строке. То есть цикл ц вас должен меняться в отрезке от [ a - 1, 0 ], а у вас меняется в отрезке [ a, 0 ] Обычно в буфер, где хранится ваша строка, помещается также завершающий нулевой символ, то есть '\0'. Вот именно он при выводе cout << mass[a]; замещается на экране пробелом.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.08.2011, 19:45     Цикл for #4
Правильный заголовок цикла мог бы выглядеть так:
C++
1
for (int i = a - 1; i >= 0; i--)
или, менее понятно, так:
C++
1
for (int i = a; --i >= 0; )
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.08.2011, 19:46     Цикл for #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <iterator>
#include <conio.h>
 
template <typename valueType>
struct reverser : 
    public std::unary_function<std::string, void>
{
    void operator()(std::string& _value) const
    {
        reverse(_value.begin(), _value.end());
    }
};
 
int main()
{
    std::list<std::string> text;
    copy(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), back_inserter(text));
    for_each(text.begin(), text.end(), reverser<std::string>());
    copy(text.begin(), text.end(), std::ostream_iterator<std::string>(std::cout, " "));
    _getch();
    return EXIT_SUCCESS;
}
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
23.08.2011, 19:51  [ТС]     Цикл for #6
Я правильно понял?
C++
1
2
3
4
...    
for (int i=a; i<a,i!=-2; i--)
cout << mass[i];  
...
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.08.2011, 19:52     Цикл for #7
Цитата Сообщение от KeyGen Посмотреть сообщение
Я правильно понял?
Нет. Не правильно.
Сыроежка
Заблокирован
23.08.2011, 19:53     Цикл for #8
Цитата Сообщение от sandye51 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <iterator>
#include <conio.h>
 
template <typename valueType>
struct reverser : 
    public std::unary_function<std::string, void>
{
    void operator()(std::string& _value) const
    {
        reverse(_value.begin(), _value.end());
    }
};
 
int main()
{
    std::list<std::string> text;
    copy(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), back_inserter(text));
    for_each(text.begin(), text.end(), reverser<std::string>());
    copy(text.begin(), text.end(), std::ostream_iterator<std::string>(std::cout, " "));
    _getch();
    return EXIT_SUCCESS;
}
У вас тут несколько ошибок.

Во-первых, совершенно непонятно, зачем функциональный объект определен как шаблонный, когда параметр шаблона нигде в нем не используется?

Во-вторых, использовать иденьтификаторы, которые начинаются с символа подчеркивания, - это плохой стиль программирования, так как такие идентификаторы зарезервированы системой.

В-третьиъ, у вас выйдет ошибка компиляции, так как компилятор не найдет объявление функции reverse, так как вы не указали, какому пространству имен ее идентификатор принадлежит.

В-четвертых, вы вообще не ту задачу сделали, которая требуется в исходном задании!
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.08.2011, 19:59     Цикл for #9
Сыроежка, в пятых, не тебе меня учить как кодить, если хочешь перед кем-то повыпендриваться, то ошибся адресом.

3 пункт еще раз прочитай че написал. Неужели сложно структуру отличить от функции?

Добавлено через 1 минуту
и насчет второго пункта, для полей класса эти подчеркивания уж точно по барабану
сам много раз видел как в опен сорс либах именно так и называли поля, чтоб отличах их от обычных переменных в методах
Сыроежка
Заблокирован
23.08.2011, 20:01     Цикл for #10
Цитата Сообщение от sandye51 Посмотреть сообщение
Сыроежка, в пятых, не тебе меня учить как кодить, если хочешь перед кем-то повыпендриваться, то ошибся адресом.

3 пункт еще раз прочитай че написал. Неужели сложно структуру отличить от функции?

Добавлено через 1 минуту
и насчет второго пункта, в классе эти подчеркивания уж точно ни на что не влияют
У вас неправильная программа, которая к тому же не должна компилироваться. Кому еще вас учить, если кроме меня никто не указал на ваши ошибки?!

Что касается "выпендриваться", то этот термин как раз применим именно к вам, так как ваш код мало того, что некорректный, так ее не по теме! Никто в этой теме про списки не говорил! А речь идет о цикле for! так что ваш выпендрешь совершенно неуместен!
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.08.2011, 20:02     Цикл for #11
вот тебе даже отрывок из реализации stl
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
_Myt& operator++()
        {   // preincrement
        ++current;
        return (*this);
        }
 
    _Myt operator++(int)
        {   // postincrement
        _Myt _Tmp = *this;
        ++current;
        return (_Tmp);
        }
 
    _Myt& operator--()
        {   // predecrement
        --current;
        return (*this);
        }
 
    _Myt operator--(int)
        {   // postdecrement
        _Myt _Tmp = *this;
        --current;
        return (_Tmp);
        }
 
    template<class _RanIt2>
        bool _Equal(const move_iterator<_RanIt2>& _Right) const
        {   // test for iterator equality
        return (current == _Right.base());
        }
Сыроежка
Заблокирован
23.08.2011, 20:02     Цикл for #12
Цитата Сообщение от sandye51 Посмотреть сообщение
Сыроежка, в пятых, не тебе меня учить как кодить, если хочешь перед кем-то повыпендриваться, то ошибся адресом.

3 пункт еще раз прочитай че написал. Неужели сложно структуру отличить от функции?

Добавлено через 1 минуту
и насчет второго пункта, для полей класса эти подчеркивания уж точно по барабану
сам много раз видел как в опен сорс либах именно так и называли поля, чтоб отличах их от обычных переменных в методах
По барабану все лишь тем, кто является плохим программистом!
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.08.2011, 20:03     Цикл for #13
Сыроежка, ты хоть компилить пробовал? прежде чем рот разивать

про for: не было явно сказано что с помощью него реализовать надо, вполне логично было подумать что в нем ошибка
Сыроежка
Заблокирован
23.08.2011, 20:10     Цикл for #14
Цитата Сообщение от sandye51 Посмотреть сообщение
Сыроежка, ты хоть компилить пробовал? прежде чем рот разивать

про for: не было явно сказано что с помощью него реализовать надо, вполне логично было подумать что в нем ошибка
Название темы "Цикл for" - для вас не является явным указанием на цикл for?! И ткните пальцем, пожалуйста, в то место темы, где говорится про списки?!

Добавлено через 52 секунды
Цитата Сообщение от sandye51 Посмотреть сообщение
вот тебе даже отрывок из реализации stl
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
_Myt& operator++()
        {   // preincrement
        ++current;
        return (*this);
        }
 
    _Myt operator++(int)
        {   // postincrement
        _Myt _Tmp = *this;
        ++current;
        return (_Tmp);
        }
 
    _Myt& operator--()
        {   // predecrement
        --current;
        return (*this);
        }
 
    _Myt operator--(int)
        {   // postdecrement
        _Myt _Tmp = *this;
        --current;
        return (_Tmp);
        }
 
    template<class _RanIt2>
        bool _Equal(const move_iterator<_RanIt2>& _Right) const
        {   // test for iterator equality
        return (current == _Right.base());
        }
Реализация STL, к вашему сведению, является системным кодом реализации С++. Вами бы это следовало знать, прежде чем что-то тут провозглашать!
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.08.2011, 20:11     Цикл for #15
Цитата Сообщение от Сыроежка Посмотреть сообщение
где говорится про списки?!
а где про них не говорится?

все, заканчиваем разговор.
Сыроежка
Заблокирован
23.08.2011, 20:13     Цикл for #16
Цитата Сообщение от sandye51 Посмотреть сообщение
а где про них не говорится?

все, заканчиваем разговор.
Это уже не ко мне! С этим вопросом вам надо к психиатру, так как ваше поведение явно не адекватное! Например, здесь не говорилось про сказку про Колобка. Значит ли это, что мы обсуждаем сказку про Колобка?!
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
23.08.2011, 20:15     Цикл for #17
Сыроежка, к психиатру как раз тебе пора. Не думаю, что человек, несущий такую охинею, является адекватом.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
23.08.2011, 20:23     Цикл for #18
C++
1
2
3
size_t a = mass.size() - 1;
for(size_t i = a; i != string::npos; --i)
    cout << mass[i];
Сыроежка
Заблокирован
23.08.2011, 20:24     Цикл for #19
Цитата Сообщение от KeyGen Посмотреть сообщение
Я правильно понял?
C++
1
2
3
4
...    
for (int i=a; i<a,i!=-2; i--)
cout << mass[i];  
...
Как уже было сказано, ваш код некорректный. Я тут отвлекся на одного невменяемого, но, возвращаясь к вашему исходному вопросу, замечу, что, как тут уже было отмечано, второй параметр цикла у вас записан неправильно. Нет необходимости в нем использовать оператор "запятая".

Вы можете записать свой цикл несколькими вариантами. Например,

C++
1
2
for ( int i = a - 1 ; i >= 0; i-- )
   cout << mass[i];
или

C++
1
2
for ( int i = 0; i < a; i++ )
   cout << mass[a -i - 1];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2011, 20:25     Цикл for
Еще ссылки по теме:

C++ Цикл
C++ Цикл while
C++ Изменить цикл for на цикл do-while

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.08.2011, 20:25     Цикл for #20
Можно проще...
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <sstream>
int main()
{
    std::string str;
    std::getline( std::cin, str );
    std::cout << std::string( str.rbegin(), str.rend() );
}
Yandex
Объявления
23.08.2011, 20:25     Цикл for
Ответ Создать тему
Опции темы

Текущее время: 02:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru