Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/14: Рейтинг темы: голосов - 14, средняя оценка - 5.00
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
1

Цикл for

23.08.2011, 19:35. Показов 2788. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2011, 19:35
Ответы с готовыми решениями:

Цикл: Посчитать среднее арифметическое всех чисел в заданном диапазоне. Цикл while.
Напишите пожалуйста код для данной задачки с помощью цикла while Вывести числа в пользовательском...

Цикл: Определить, сколько простейших организмов будет через каждый период их деления. Цикл while.
Напишите пожалуйста код к этой задачке, неделю уже ломаю себе голову как ее решить. Одноклеточная...

Почему цикл на при 1 уходит в бесконечный цикл?
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int...

Цикл: Не могу создать цикл для switch
не могу создать цикл для switch

22
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
23.08.2011, 19:43 2
В массиве размером a последний элемент mass[a-1], а элемента mass[a] нет.

Добавлено через 2 минуты
Цитата Сообщение от KeyGen Посмотреть сообщение
C++
1
for (int i=a; i<=a,i!=-1; i--)
Здесь, кстати, условие i <= a мало того, что избыточно, так оно и вовсе игнорируются. Условия нельзя комбинировать запятой, для этого есть логические операторы && и ||
1
Заблокирован
23.08.2011, 19:43 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]; замещается на экране пробелом.
1
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
23.08.2011, 19:45 4
Правильный заголовок цикла мог бы выглядеть так:
C++
1
for (int i = a - 1; i >= 0; i--)
или, менее понятно, так:
C++
1
for (int i = a; --i >= 0; )
1
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
23.08.2011, 19:46 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;
}
1
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
23.08.2011, 19:51  [ТС] 6
Я правильно понял?
C++
1
2
3
4
...    
for (int i=a; i<a,i!=-2; i--)
cout << mass[i];  
...
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
23.08.2011, 19:52 7
Цитата Сообщение от KeyGen Посмотреть сообщение
Я правильно понял?
Нет. Не правильно.
0
Заблокирован
23.08.2011, 19:53 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, так как вы не указали, какому пространству имен ее идентификатор принадлежит.

В-четвертых, вы вообще не ту задачу сделали, которая требуется в исходном задании!
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
23.08.2011, 19:59 9
Сыроежка, в пятых, не тебе меня учить как кодить, если хочешь перед кем-то повыпендриваться, то ошибся адресом.

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

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

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

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

Что касается "выпендриваться", то этот термин как раз применим именно к вам, так как ваш код мало того, что некорректный, так ее не по теме! Никто в этой теме про списки не говорил! А речь идет о цикле for! так что ваш выпендрешь совершенно неуместен!
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
23.08.2011, 20:02 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());
        }
0
Заблокирован
23.08.2011, 20:02 12
Цитата Сообщение от sandye51 Посмотреть сообщение
Сыроежка, в пятых, не тебе меня учить как кодить, если хочешь перед кем-то повыпендриваться, то ошибся адресом.

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

Добавлено через 1 минуту
и насчет второго пункта, для полей класса эти подчеркивания уж точно по барабану
сам много раз видел как в опен сорс либах именно так и называли поля, чтоб отличах их от обычных переменных в методах
По барабану все лишь тем, кто является плохим программистом!
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
23.08.2011, 20:03 13
Сыроежка, ты хоть компилить пробовал? прежде чем рот разивать

про for: не было явно сказано что с помощью него реализовать надо, вполне логично было подумать что в нем ошибка
0
Заблокирован
23.08.2011, 20:10 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, к вашему сведению, является системным кодом реализации С++. Вами бы это следовало знать, прежде чем что-то тут провозглашать!
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
23.08.2011, 20:11 15
Цитата Сообщение от Сыроежка Посмотреть сообщение
где говорится про списки?!
а где про них не говорится?

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

все, заканчиваем разговор.
Это уже не ко мне! С этим вопросом вам надо к психиатру, так как ваше поведение явно не адекватное! Например, здесь не говорилось про сказку про Колобка. Значит ли это, что мы обсуждаем сказку про Колобка?!
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
23.08.2011, 20:15 17
Сыроежка, к психиатру как раз тебе пора. Не думаю, что человек, несущий такую охинею, является адекватом.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
23.08.2011, 20:23 18
C++
1
2
3
size_t a = mass.size() - 1;
for(size_t i = a; i != string::npos; --i)
    cout << mass[i];
0
Заблокирован
23.08.2011, 20:24 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];
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.08.2011, 20:25 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() );
}
1
23.08.2011, 20:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2011, 20:25
Помогаю со студенческими работами здесь

Цикл: цикл for вообще никак не воспринимается транслятором
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая...

Цикл for/Цикл while Помогите срочно пожалуйста...
1.Вычислить и вывести на экран в виде таблицы значения функции F от x1 до x2 с шагом dx. где a, b...

Задание на цикл с параметром и цикл с постусловием
Помогите пожалуйста написать программу с этими циклами. 1. Вычислить и напечатать таблицу...

Цикл с параметром и цикл с условием
1. Составить программу вычисления суммы первых 10 непарных чисел 2. Дано числовой ряд и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru